# Nova Poshta Integration Platform

Welcome to your team’s developer platform

#### Integrate Nova Poshta into your business systems

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td><strong>Getting API Keys</strong></td><td>Quick Start with the Nova Poshta API</td><td><a href="/files/XYYn0pGahMd3pfbuTsPZ">/files/XYYn0pGahMd3pfbuTsPZ</a></td></tr><tr><td> <strong>Methods</strong></td><td>Learn more about the methods and how to use them</td><td><a href="/files/jRvCJsZxvv2mHGjdJ0O6">/files/jRvCJsZxvv2mHGjdJ0O6</a></td></tr><tr><td><strong>Available integrations</strong></td><td>Shopify and BaseLinker to quickly launch shipping</td><td><a href="/files/4muH2LOm0ukTjZGPvXy4">/files/4muH2LOm0ukTjZGPvXy4</a></td></tr></tbody></table>

***

{% columns %}
{% column %}

#### From signup to your first request - in minutes

Your first API request should be the easiest part of getting started. With clear endpoints, copy-and-paste examples, and fast authentication, you'll be up and running in just a few minutes - no long setup, no technical barriers.

No confusion. No unnecessary complexity.\
Just a quick start and your first successful request.

<a href="/spaces/f1DWWiZ1zhxgn1IO9vhO" class="button primary" data-icon="rocket-launch">Quick Start</a> <a href="/spaces/4kHbNqhgtrlGjZyxZiDa" class="button secondary" data-icon="gitbook">The methods</a>
{% endcolumn %}

{% column %}
{% code title="index.js" overflow="wrap" %}

```javascript
// Add a new key
const api = new DeliveryAPI({ apiKey: "YOUR_API_KEY" });

// Create a Nova Poshta shipment in a single request
const shipment = await api.novaPoshta.createShipment({
  recipient: "John Dow",
  city: "Wrocław",
  warehouse: "5",
  weight: 2
});

console.log("Shipment create:", shipment.trackingNumber);

```

{% endcode %}
{% endcolumn %}
{% endcolumns %}

***

{% columns %}
{% column %}

<figure><img src="/files/EMeD17vv05mvAMphvaIb" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column %}

#### Business capabilities offered by the Nova Poshta API

* Process and ship orders faster
* Provide direct access to Nova Poshta features and shipment info where it’s convenient for your customers
* Consolidate all customer shipment data within your own systems

<p align="right"><a href="/spaces/CMEQdnNg2RX8p6cFQGMP" class="button secondary" data-icon="envelope">Contact us</a></p>
{% endcolumn %}
{% endcolumns %}


# Page 1


# Integration guide

The Nova Post API provides access to international delivery services and enables you to integrate shipment creation, management, and tracking into your systems.

The API is designed to automate logistics processes and ensure secure data exchange between client systems and the Nova Post platform.

### Getting Started

1. Generate an API key and obtain a JWT token to access the API.
2. Go to the section to review the available methods, operations, and parameters.
3. Use the Dictionaries to provide valid system values in your API requests.
4. Check the Changelog regularly to ensure you don’t miss any API changes.
5. For assistance, visit the Help Center (FAQ, guidance, and support).


# Integration Guide

{% stepper %}
{% step %}

#### Sign a Contract with Nova Post

To start the integration process, your company must have a valid non-cash cooperation agreement with Nova Post.<br>
{% endstep %}

{% step %}

#### Select an individual who will act as the authorized company representative and provide their contact details: full name, phone number, and email address.

These details can be specified directly in the contract.\
If you need to provide or update the authorized representative’s contact details after signing the agreement, please contact your account manager.
{% endstep %}

{% step %}

#### Create a Profile in the Personal Account

Create a profile at **my.novapost.com** using the phone number and full name of the authorized representative specified in the contract.

If an account with these details has already been created, there is no need to create a new one.
{% endstep %}

{% step %}

#### Generate an API Key

In your personal account at **my.novapost.com**, navigate to: **Integrations → API Keys**

Generate an API key to allow your developer to configure and execute API requests.
{% endstep %}
{% endstepper %}

> Nova Post API keys are issued to an individual (natural person).
>
> Therefore, the authorized company representative should be the person responsible for generating the API key and providing it to the developer.
>
> This may be the company director, head of sales or marketing, or the developer directly.


# API Key Generation

> API keys are issued exclusively to individuals (natural persons).
>
> To use the API for business purposes, you must designate an authorized company representative and generate API keys in their name, or assign as the authorized representative a person who already has an existing API key.
>
> The authorized representative’s details must be specified in the contract with Nova Post.

### How to create a key for a European client

1. **Create an account** [in the My Nova Post cabinet](https://my.novapost.com/)

Register at my.novapost.com. [Step-by-step registration instructions](https://novapost.com/en-pl/my-nova-post-instructions#registration)[ ](https://api-portal-stage.novapost.com/en/my-nova-post-instructions#registration)

2. **Affiliate an individual to the organization**

   1. Write an email to the NovaPost sales manager.
   2. In the letter, provide the tax code and the name of the organization, details of the individual: full name, phone number, email.

   The details of the individual must match those for which the account in the My Nova Post cabinet was or will be registered.

{% hint style="warning" %}
When registering, use the phone number and email address of the authorized representative specified in the contract.\
If an account has already been created, re-registration is not required.
{% endhint %}

3. Create an API key in your My Nova Post account. Go to the “Integrations → API Keys” section at my.novapost.com and create a key for the production environment.

When creating a key, the system will automatically display all organizations assigned to your account. You can:

* select one or more organizations to which access is granted through this key;
* or create separate keys for each organization if you need to divide access between teams or projects.

<figure><img src="/files/a9UU3Au9hOtAsh8c5NYG" alt=""><figcaption></figcaption></figure>

#### The key immediately appears in the list of information about:

* creation date
* name
* status (active/deactivated)
* organization
* validity period

#### How to Create a Test API Key - method 1

On the test key generation page in the Nova Post portal:

* Enter the phone number registered in your My Nova Post account (**my.novapost.com**) and submit a request to generate the key.
* After a successful request, a test API key for the sandbox (Stage environment) will be generated.\
  The key will be linked to an individual (natural person) and will not be associated with any organization. [Generate a test key](https://api-portal-stage.novapost.com/en/test-api-keys)

Method 2

## Create or renew a test API key (Sandbox only)

> Public endpoint available only in non-production environments (Sandbox) \
> to create or renew a test API key for a client identified by phone.\
> \
> Requirements:\
> \- The phone number must be registered in the Client Portal (EBC): <https://my.novapost.com/\\>
> \- UA key generation is currently not supported\
> \
> Behavior:\
> \- If a key already exists and is Active, a repeated call within the same day \
> &#x20; will return the same key\
> \- If expired, the key will be reactivated with a new expiration date\
> \- If deleted by cleanup, a new key will be created\
> \- Only one active key is allowed per phone, limited to one request per day\
> \
> Next step:\
> After receiving the apiKey, you must generate a temporary JWT by calling \
> \[GET /clients/authorization]\(<https://api-portal.novapost.com/novaposhta-docs/integration-guide/how-to-generate-a-jwt-token>). The JWT is required for all authorized requests. \
> Paste the jwt into the \*\*\[Authorize]\(<https://api.novapost.com/developers/index.html#auth)\\*\\>\* dialog under the \`JWT\` scheme \
> in this documentation to enable Try-it-out.\</br>\
> \
> 🔹\*\*Description of control elements:\*\*\
> \
> \*\*SCHEMA\*\*\</br>\
> Displays the full technical structure of the request or response, including field names, data types, required fields, allowed values, and validation rules.\
> \- \*\*Single line description\*\*\</br>\
> &#x20; A description that fits into a single line; any text that does not fit remains hidden.\
> \- \*\*Multiline description\*\*\</br>\
> &#x20; An expanded description that displays more than one line of text.\
> \
> \*\*EXAMPLE\*\*\</br>\
> Shows a ready-made sample JSON with correctly formatted values to demonstrate how a valid request or response should look.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Authorization"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.pl/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[],"paths":{"/test-api-keys":{"post":{"tags":["Authorization"],"summary":"Create or renew a test API key (Sandbox only)","description":"Public endpoint available only in non-production environments (Sandbox) \nto create or renew a test API key for a client identified by phone.\n\nRequirements:\n- The phone number must be registered in the Client Portal (EBC): https://my.novapost.com/\n- UA key generation is currently not supported\n\nBehavior:\n- If a key already exists and is Active, a repeated call within the same day \n  will return the same key\n- If expired, the key will be reactivated with a new expiration date\n- If deleted by cleanup, a new key will be created\n- Only one active key is allowed per phone, limited to one request per day\n\nNext step:\nAfter receiving the apiKey, you must generate a temporary JWT by calling \n[GET /clients/authorization](https://api-portal.novapost.com/novaposhta-docs/integration-guide/how-to-generate-a-jwt-token). The JWT is required for all authorized requests. \nPaste the jwt into the **[Authorize](https://api.novapost.com/developers/index.html#auth)** dialog under the `JWT` scheme \nin this documentation to enable Try-it-out.</br>\n\n🔹**Description of control elements:**\n\n**SCHEMA**</br>\nDisplays the full technical structure of the request or response, including field names, data types, required fields, allowed values, and validation rules.\n- **Single line description**</br>\n  A description that fits into a single line; any text that does not fit remains hidden.\n- **Multiline description**</br>\n  An expanded description that displays more than one line of text.\n\n**EXAMPLE**</br>\nShows a ready-made sample JSON with correctly formatted values to demonstrate how a valid request or response should look.\n","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["phone"],"properties":{"phone":{"type":"string","description":"Phone number registered in EBC. Format like 49XXXXXXXXX (no '+'). UA keys generation is currently not supported."}}}}}},"responses":{"200":{"description":"Test API key created or returned","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestApiKeyResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Client not found in EBC","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Multiple matching clients found in EBC","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Daily limit exceeded for this user (one request per day)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"$ref":"#/components/responses/Time-out"}}}}},"components":{"schemas":{"TestApiKeyResponse":{"type":"object","additionalProperties":false,"required":["apiKey","createdAt","expDate","status"],"properties":{"apiKey":{"type":"string","description":"Test API key for Stage usage only."},"createdAt":{"type":"string","format":"date-time"},"expDate":{"type":"string","format":"date-time"},"status":{"type":"string","enum":["Active","Expired"]}}},"ErrorResponse":{"type":"object","additionalProperties":false,"required":["success","errors"],"properties":{"success":{"type":"boolean"},"errors":{"type":"array","items":{"type":"string"}}}},"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}},"responses":{"Time-out":{"description":"Connection time-out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}
```

#### How to create a key for a client from Ukraine

Generate keys in the Business account in Ukraine under the "Settings - Security" section. [Direct link to the section](https://new.novaposhta.ua/dashboard/settings/developers).&#x20;

1. Log in to the business cabinet at new\.novaposhta.ua as a legal entity.

<figure><img src="/files/WnMwXYcy4NCF82vHY2eM" alt=""><figcaption></figcaption></figure>

2. Go to the "Settings" section.

<figure><img src="/files/6bBbxOE0AdmaUCtWIN1m" alt=""><figcaption></figcaption></figure>

3. Select the "Security" section.

<figure><img src="/files/BUS4aBNP2v1jVBVhs2tM" alt=""><figcaption></figcaption></figure>

4. Click "Create key"

<figure><img src="/files/G54eV52WTZP9axeDvFJn" alt=""><figcaption></figcaption></figure>

5\. **The key has been created.** Copy the code for using the Nova Post API.

<figure><img src="/files/KqJx8YeU33Ad71nSyNxA" alt=""><figcaption></figcaption></figure>

#### Additional Recommendations

**Security:** Store your API keys securely and do not share them with third parties.

**Testing:** Use the sandbox environment to validate your integration before moving to production.

**Access Control:** Regularly review the list of users who have access to your account and API keys.Additional Recommendations


# How to generate a JWT token

To send request to the Nova Post API, you must generate a JWT token. The token ensures proper authentication and authorization when executing API requests.

## Generate a temporary JWT-token

> Issues a temporary JWT-token for making authorized API requests. \
> A valid apiKey must be provided as a query parameter.\
> \
> How to obtain an apiKey:\
> \- In Sandbox, use POST \`/test-api-keys\` with a registered phone number \
> &#x20; from the Client Portal (EBC): <https://my.novapost.com/\\>
> \- In PROD, use your personal apiKey provided by your manager\
> \
> Usage:\
> \- Call GET \`/clients/authorization?apiKey={apiKey}\`\
> \- On success, copy the jwt from the response\
> \- Open the \*\*\[Authorize]\(<https://api.novapost.com/developers/index.html#auth)\\*\\>\* dialog in this documentation, select the \`JWT\` scheme, \
> &#x20; and paste the jwt\
> \- All Try-it-out requests will then automatically include \
> &#x20; \`Authorization: {jwt}\`\
> \
> Notes:\
> \- The jwt is valid for \~1 hour; request a new one after expiry\
> \- Do not store jwt beyond its TTL\
> \- The \`/test-api-keys\` route is not available in PROD\</br>\
> \
> 🔹\*\*Description of control elements:\*\*\
> \
> \*\*SCHEMA\*\*\</br>\
> Displays the full technical structure of the request or response, including field names, data types, required fields, allowed values, and validation rules.\
> \- \*\*Single line description\*\*\</br>\
> &#x20; A description that fits into a single line; any text that does not fit remains hidden.\
> \- \*\*Multiline description\*\*\</br>\
> &#x20; An expanded description that displays more than one line of text.\
> \
> \*\*EXAMPLE\*\*\</br>\
> Shows a ready-made sample JSON with correctly formatted values to demonstrate how a valid request or response should look.<br>

```json
{"openapi":"3.0.0","info":{"version":"1.0.0"},"tags":[],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.pl/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"paths":{"/clients/authorization":{"get":{"tags":["Authorization"],"summary":"Generate a temporary JWT-token","description":"Issues a temporary JWT-token for making authorized API requests. \nA valid apiKey must be provided as a query parameter.\n\nHow to obtain an apiKey:\n- In Sandbox, use POST `/test-api-keys` with a registered phone number \n  from the Client Portal (EBC): https://my.novapost.com/\n- In PROD, use your personal apiKey provided by your manager\n\nUsage:\n- Call GET `/clients/authorization?apiKey={apiKey}`\n- On success, copy the jwt from the response\n- Open the **[Authorize](https://api.novapost.com/developers/index.html#auth)** dialog in this documentation, select the `JWT` scheme, \n  and paste the jwt\n- All Try-it-out requests will then automatically include \n  `Authorization: {jwt}`\n\nNotes:\n- The jwt is valid for ~1 hour; request a new one after expiry\n- Do not store jwt beyond its TTL\n- The `/test-api-keys` route is not available in PROD</br>\n\n🔹**Description of control elements:**\n\n**SCHEMA**</br>\nDisplays the full technical structure of the request or response, including field names, data types, required fields, allowed values, and validation rules.\n- **Single line description**</br>\n  A description that fits into a single line; any text that does not fit remains hidden.\n- **Multiline description**</br>\n  An expanded description that displays more than one line of text.\n\n**EXAMPLE**</br>\nShows a ready-made sample JSON with correctly formatted values to demonstrate how a valid request or response should look.\n","parameters":[{"in":"query","required":true,"name":"apiKey","schema":{"type":"string"},"description":"To utilize this method, a personal API key is required."}],"responses":{"200":{"description":"JWT-token","content":{"application/json":{"schema":{"type":"object","properties":{"jwt":{"type":"string","description":"Personal JWT-token, expires after one hour to prevent any fraud, requiring a new request to generate a fresh token.","format":"json"}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"422":{"$ref":"#/components/responses/Validation"},"503":{"$ref":"#/components/responses/Time-out"}}}}},"components":{"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Validation":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Time-out":{"description":"Connection time-out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}}}}
```

> The token is valid for 1 hour.\
> Once the token expires, you must send a new request to obtain a fresh token using the same API key.


# How to choose the appropriate endpoint

Nova Post provides several API endpoints for processing requests related to shipment creation, tracking, and other operations.

Endpoint for all destinations – <mark style="color:$success;"><https://api.novapost.com/v.1.0></mark> is used for processing shipments across all delivery destinations without restrictions, including both international shipments and domestic deliveries within Ukraine.

Endpoint for shipments within Ukraine – [https://api.novaposhta.ua/v.1.0](https://developers.novaposhta.ua/) is used only for domestic shipments within Ukraine or international shipments from Ukraine to other countries worldwide.


# Using Tokens

The JWT token is a key component of secure interaction with the Nova Post API.

### Purpose of the Token

* **Request Authorization**\
  Every API request must include a valid token in the header to confirm access rights.
* **Client Verification**\
  The token verifies that the request originates from an authorized party.
* **Data Protection**\
  The token helps prevent unauthorized access to sensitive information.

#### Token Characteristics

Format:

* The token is implemented in the JWT (JSON Web Token) format and consists of three parts: header, payload, signature.
* A JWT has a standard structure that looks like the following: `eyJhbGciOiJIU5cCI6IkpXVCJ9.eyJpc3MiOiJDkyfQ.SflKxwRJSMeKKF`

Security:

* The token must be kept secure and must not be shared with third parties, as it grants access to the API.
* HTTPS is used to ensure secure transmission of tokens.

#### Request Entry Points

Tokens are required for the following Nova Post API endpoints:

* [https://api.novaposhta.ua/v.1.0/  ](<https://api.novaposhta.ua/v.1.0/&#xD;&#xA;https://api.novapost.com/v.1.0/>)
* [https://api.novapost.com/v.1.0/](<https://api.novaposhta.ua/v.1.0/&#xD;&#xA;https://api.novapost.com/v.1.0/>)

<p align="right"><a href="/pages/X7eRRijuTnvULuKAFQKl">More information about Nova Post API endpoints</a></p>

#### Token Limitations

* Each token is valid only for the specific API key used to generate it.
* The token is valid for one hour. After expiration, a new token must be obtained to continue interacting with the API.
* The maximum number of active sessions (tokens) per account may be limited by the system for security purposes.

> ### Usage Recommendations
>
> **Refresh tokens regularly.**\
> Monitor the token expiration time and always obtain a new token before sending requests if the previous one has expired.
>
> **Protect your API key and token.**\
> Do not share your API key or token. Always use HTTPS for all requests to prevent data interception.
>
> **Monitor token usage.**\
> Track token usage to prevent system overload and mitigate potential security threats.


# API Collections in Postman

This is a collection of predefined requests for testing API methods, designed to simplify integration and eliminate the need to create requests manually.

<p align="right"><a href="https://documenter.getpostman.com/view/37226773/2sAYQWLZdh" class="button primary">Download</a></p>


# Testing

Test the API in the sandbox environment before going live. The collection allows safe testing without impacting production.

* Test environment URL: [api-stage.novapost.pl](https://api-stage.novapost.pl/)
* Separate API keys <a href="/spaces/4kHbNqhgtrlGjZyxZiDa/pages/cBXu7SZudeo0zEg7lHTN#post-test-api-keys" class="button primary" data-icon="arrow-down"></a>


# Мethods

The Methods section contains Nova Post API tools for integrating core logistics processes into external systems and automating interaction with delivery services.

Methods are grouped by key integration areas:

* **Authorization** — obtaining API keys and JWT tokens for authorized requests;
* **Dictionaries** — access to reference data required for building valid API requests;
* **Services** — additional methods for specific service scenarios;
* **Shipments** — creating, updating, calculating, and managing deliveries;
* **Courier delivery** — creating and managing courier pickup requests;
* **Webhooks** — receiving events and status updates automatically via subscriptions;
* **Fulfillment** — managing goods, stock balances, orders, and inbound operations.

Each section includes endpoint descriptions, request parameters, response examples, and usage rules required for integration.

### API Collections in Postman

This is a collection of predefined requests for testing API methods, designed to simplify integration and eliminate the need to create requests manually.

<p align="right"><a href="https://documenter.getpostman.com/view/37226773/2sAYQWLZdh" class="button primary">Download</a></p>

### SDK for PHP Applications

The NovaPost API SDK is an official PHP library that simplifies integration with the Nova Post API. It provides ready-to-use methods for working with shipments, tracking, calculations, and other Nova Post services while supporting modern PHP standards and flexible customization.

<p align="right"><a href="https://api-portal.novapost.com/changelog-1/documentation/sdk-for-php" class="button secondary">Start Using SDK</a></p>

### API Versioning <a href="#api-versioning" id="api-versioning"></a>

#### Overview <a href="#overview" id="overview"></a>

Nova Post uses API versioning to introduce significant changes while keeping existing client integrations stable.

Each major API version is published separately in the API documentation. When a new major version becomes available, the previous version continues to operate during a transition period, allowing clients to plan and complete their migration without interrupting their services.

#### Versioning Strategy <a href="#versioning-strategy" id="versioning-strategy"></a>

We use **URL-based versioning**. The version number is included in the API endpoint path:

* `https://api.novapost.com/v1.0/shipments` - current version
* `https://api.novapost.com/v2.0/shipments` - future version

When we release a new major version, the previous version enters a support period. Your existing integration continues to work unchanged until you are ready to migrate and to the .


# SDK for PHP

## NovaPost API SDK

> \<p>The Novapost API SDK is the official PHP SDK (Software Development Kit) for integration with the Nova Post API. With this package, you can quickly and conveniently connect such Nova Post features to your PHP application as shipment creation, parcel tracking, and other services.\</p>\
> \<strong>Features/Advantages:\</strong>\</br> \<ul>\
> &#x20; \<li>\<strong>Official Nova Post support\</strong> — guaranteed relevance, stability, and developer assistance.\</li>\
> &#x20; \<li>\<strong>Compliance with modern PHP standards\</strong> — compatibility with modern frameworks and libraries.\</li>\
> &#x20; \<li>\<strong>Flexibility and extensibility\</strong> — replace logger, HTTP client, token storage.\</li>\
> &#x20; \<li>\<strong>Easy integration\</strong> — installation via Composer, example usage included.\</li>\
> \</ul>\
> \<strong>Useful Links:\</strong>\</br> \<ul>\
> &#x20; \<li>\<a href="<https://packagist.org/packages/novadigital/novapost-api-sdk>" target="\_new">Packagist — Official Package\</a>\</li>\
> &#x20; \<li>\<a href="<https://github.com/NovaDigitalHub/novapost-api-sdk>" target="\_new">GitHub Repository\</a>\</li>\
> &#x20; \<li>\<a href="<https://github.com/NovaDigitalHub/novapost-api-sdk/issues>" target="\_new">Issue Tracker (Support & Feedback)\</a>\</li>\
> \</ul>\
> \<h2>Requirements\</h2>\
> \<ul>\
> &#x20; \<li>\
> &#x20;   \<strong>Requires\</strong> — Runtime dependencies (required for production use):\
> &#x20;   \<ul>\
> &#x20;     \<li>\<code>php \&gt;= 8.0\</code> — the package requires PHP 8.0+.\</li>\
> &#x20;     \<li>\<code>guzzlehttp/guzzle ^7.0\</code> — HTTP client for making requests.\</li>\
> &#x20;     \<li>\<code>psr/container ^2.0\</code> — compatibility with PSR dependency containers.\</li>\
> &#x20;     \<li>\<code>psr/log ^3.0\</code> — PSR-compliant logging interfaces.\</li>\
> &#x20;   \</ul>\
> &#x20; \</li>\
> \
> &#x20; \<li>\
> &#x20;   \<strong>Requires (Dev)\</strong> — Dev dependencies (needed only for development/CI):\
> &#x20;   \<ul>\
> &#x20;     \<li>\<code>phpstan/phpstan ^2.1\</code> — static analysis.\</li>\
> &#x20;     \<li>\<code>phpunit/phpunit ^9.6\</code> — unit tests.\</li>\
> &#x20;     \<li>\<code>squizlabs/php\_codesniffer ^3.13\</code> — code style/linting.\</li>\
> &#x20;     \<li>\<code>vlucas/phpdotenv ^5.6\</code> — loading environment variables from \<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>Installation\</h2>\
> To get started, install the SDK via \<a href="<https://getcomposer.org/>" target="\_new">Composer\</a> by running the following command:\
> \<pre>\<code>composer require novadigital/novapost-api-sdk\</code>\</pre>\
> \<h2>Working with the SDK\</h2>\
> \<h3>Client Initialization\</h3>\
> After installing the SDK, initialize the client using \<code>NovaPostApiFactory\</code>.\</br> This allows you to quickly create a client for interacting with the Nova Post API.\</br> Add the following example to your code:\
> \<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 Method Example\</h3>\
> SDK methods have the same names and parameters as the corresponding client API methods.\</br> To calculate shipment cost, use this example:\
> \<pre>\<code> try {\
> &#x20; $shipmentData = \[\
> &#x20;   // shipment calculation data\
> ]; $calculationResult = $novaPostApi->shipments()->calculate($shipmentData); } catch (ApiException $e) {\
> &#x20; echo "API Error: " . $e->getMessage();\
> } \</code>\</pre>\
> \<h2>Advanced Features\</h2>\
> \<p>\
> &#x20; The SDK allows you to replace standard services (logger, HTTP client, \
> &#x20; token storage, etc.) with your own implementations using the \
> &#x20; \<code>ContainerBuilder\</code> dependency container.\
> \</p>\
> \<p>This is useful if you need to:\</p>\
> \<ul>\
> &#x20; \<li>Integrate the SDK with your framework’s logging system.\</li>\
> &#x20; \<li>Configure an HTTP client with custom parameters or middleware.\</li>\
> &#x20; \<li>Use your own storage mechanism for JWT tokens.\</li>\
> \</ul>\
> \<p>\
> &#x20; To do this, pass your custom services to the client factory through \
> &#x20; \<strong>ContainerBuilder\</strong>.\
> \</p>\
> \<h3>Using ContainerBuilder\</h3>\
> \<p>For more flexible configuration, you can use \<code>NovaDigital\NovaPost\DI\ContainerBuilder\</code> to customize different aspects of the client.\</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>Available Service Overrides\</h3>\
> With \<strong>ContainerBuilder\</strong>, you can override the following services:\
> \<table>\
> &#x20; \<thead>\
> &#x20;   \<tr>\<th>Service\</th>\<th>Purpose\</th>\</tr>\
> &#x20; \</thead>\
> &#x20; \<tbody>\
> &#x20;   \<tr>\<td>Psr\Log\LoggerInterface\</td>\<td>Custom logging\</td>\</tr>\
> &#x20;   \<tr>\<td>Psr\Http\Client\ClientInterface\</td>\<td>Custom HTTP client configuration\</td>\</tr>\
> &#x20;   \<tr>\<td>NovaDigital\NovaPost\Storage\JwtTokenStorageInterface\</td>\<td>Custom JWT token storage\</td>\</tr>\
> &#x20;   \<tr>\<td>NovaDigital\NovaPost\Http\ResponseHandlerInterface\</td>\<td>Custom response processing\</td>\</tr>\
> &#x20;   \<tr>\<td>NovaDigital\NovaPost\Http\RetryHandlerInterface\</td>\<td>Custom retry logic\</td>\</tr>\
> &#x20; \</tbody>\
> \</table>\
> \<h3>PSR Compliance\</h3>\
> The \<strong>NovaPost API SDK\</strong> complies with the following PSR standards, ensuring compatibility, modern design, and high code quality:\
> \<table>\
> &#x20; \<thead>\
> &#x20;   \<tr>\
> &#x20;     \<th>Standard\</th>\
> &#x20;     \<th>Purpose\</th>\
> &#x20;   \</tr>\
> &#x20; \</thead>\
> &#x20; \<tbody>\
> &#x20;   \<tr>\
> &#x20;     \<td>\<strong>PSR-4: Autoloader\</strong>\</td>\
> &#x20;     \<td>For class autoloading\</td>\
> &#x20;   \</tr>\
> &#x20;   \<tr>\
> &#x20;     \<td>\<strong>PSR-11: Container Interface\</strong>\</td>\
> &#x20;     \<td>For a flexible dependency container\</td>\
> &#x20;   \</tr>\
> &#x20;   \<tr>\
> &#x20;     \<td>\<strong>PSR-3: Logger Interface\</strong>\</td>\
> &#x20;     \<td>Allows using any compatible logger\</td>\
> &#x20;   \</tr>\
> &#x20;   \<tr>\
> &#x20;     \<td>\<strong>PSR-7: HTTP Message Interface\</strong>\</td>\
> &#x20;     \<td>Used for all API requests and responses\</td>\
> &#x20;   \</tr>\
> &#x20;   \<tr>\
> &#x20;     \<td>\<strong>PSR-18: HTTP Client\</strong>\</td>\
> &#x20;     \<td>For sending HTTP requests\</td>\
> &#x20;   \</tr>\
> &#x20;   \<tr>\
> &#x20;     \<td>\<strong>PSR-17: HTTP Factories\</strong>\</td>\
> &#x20;     \<td>For creating PSR-7 messages\</td>\
> &#x20;   \</tr>\
> &#x20;   \<tr>\
> &#x20;     \<td>\<strong>PSR-12: Extended Coding Standard\</strong>\</td>\
> &#x20;     \<td>For coding style\</td>\
> &#x20;   \</tr>\
> &#x20; \</tbody>\
> \</table>\
> Following these standards makes the SDK reliable, predictable, and easy to integrate into any modern PHP application.

```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>The Novapost API SDK is the official PHP SDK (Software Development Kit) for integration with the Nova Post API. With this package, you can quickly and conveniently connect such Nova Post features to your PHP application as shipment creation, parcel tracking, and other services.</p>\n<strong>Features/Advantages:</strong></br> <ul>\n  <li><strong>Official Nova Post support</strong> — guaranteed relevance, stability, and developer assistance.</li>\n  <li><strong>Compliance with modern PHP standards</strong> — compatibility with modern frameworks and libraries.</li>\n  <li><strong>Flexibility and extensibility</strong> — replace logger, HTTP client, token storage.</li>\n  <li><strong>Easy integration</strong> — installation via Composer, example usage included.</li>\n</ul>\n<strong>Useful Links:</strong></br> <ul>\n  <li><a href=\"https://packagist.org/packages/novadigital/novapost-api-sdk\" target=\"_new\">Packagist — Official Package</a></li>\n  <li><a href=\"https://github.com/NovaDigitalHub/novapost-api-sdk\" target=\"_new\">GitHub Repository</a></li>\n  <li><a href=\"https://github.com/NovaDigitalHub/novapost-api-sdk/issues\" target=\"_new\">Issue Tracker (Support & Feedback)</a></li>\n</ul>\n<h2>Requirements</h2>\n<ul>\n  <li>\n    <strong>Requires</strong> — Runtime dependencies (required for production use):\n    <ul>\n      <li><code>php &gt;= 8.0</code> — the package requires PHP 8.0+.</li>\n      <li><code>guzzlehttp/guzzle ^7.0</code> — HTTP client for making requests.</li>\n      <li><code>psr/container ^2.0</code> — compatibility with PSR dependency containers.</li>\n      <li><code>psr/log ^3.0</code> — PSR-compliant logging interfaces.</li>\n    </ul>\n  </li>\n\n  <li>\n    <strong>Requires (Dev)</strong> — Dev dependencies (needed only for development/CI):\n    <ul>\n      <li><code>phpstan/phpstan ^2.1</code> — static analysis.</li>\n      <li><code>phpunit/phpunit ^9.6</code> — unit tests.</li>\n      <li><code>squizlabs/php_codesniffer ^3.13</code> — code style/linting.</li>\n      <li><code>vlucas/phpdotenv ^5.6</code> — loading environment variables from <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<h2>Installation</h2>\nTo get started, install the SDK via <a href=\"https://getcomposer.org/\" target=\"_new\">Composer</a> by running the following command:\n<pre><code>composer require novadigital/novapost-api-sdk</code></pre>\n<h2>Working with the SDK</h2>\n<h3>Client Initialization</h3>\nAfter installing the SDK, initialize the client using <code>NovaPostApiFactory</code>.</br> This allows you to quickly create a client for interacting with the Nova Post API.</br> Add the following example to your code:\n<pre><code> use NovaDigital\\NovaPost\\NovaPostApiFactory; use NovaDigital\\NovaPost\\Exception\\ApiException; use NovaDigital\\NovaPost\\Resources\\Division;\n$apiKey = 'YOUR_API_KEY';\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<h3>SDK Method Example</h3>\nSDK methods have the same names and parameters as the corresponding client API methods.</br> To calculate shipment cost, use this example:\n<pre><code> try {\n  $shipmentData = [\n    // shipment calculation data\n]; $calculationResult = $novaPostApi->shipments()->calculate($shipmentData); } catch (ApiException $e) {\n  echo \"API Error: \" . $e->getMessage();\n} </code></pre>\n<h2>Advanced Features</h2>\n<p>\n  The SDK allows you to replace standard services (logger, HTTP client, \n  token storage, etc.) with your own implementations using the \n  <code>ContainerBuilder</code> dependency container.\n</p>\n<p>This is useful if you need to:</p>\n<ul>\n  <li>Integrate the SDK with your framework’s logging system.</li>\n  <li>Configure an HTTP client with custom parameters or middleware.</li>\n  <li>Use your own storage mechanism for JWT tokens.</li>\n</ul>\n<p>\n  To do this, pass your custom services to the client factory through \n  <strong>ContainerBuilder</strong>.\n</p>\n<h3>Using ContainerBuilder</h3>\n<p>For more flexible configuration, you can use <code>NovaDigital\\NovaPost\\DI\\ContainerBuilder</code> to customize different aspects of the client.</p>\n<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;\n$apiKey = 'YOUR_API_KEY';\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<h3>Available Service Overrides</h3>\nWith <strong>ContainerBuilder</strong>, you can override the following services:\n<table>\n  <thead>\n    <tr><th>Service</th><th>Purpose</th></tr>\n  </thead>\n  <tbody>\n    <tr><td>Psr\\Log\\LoggerInterface</td><td>Custom logging</td></tr>\n    <tr><td>Psr\\Http\\Client\\ClientInterface</td><td>Custom HTTP client configuration</td></tr>\n    <tr><td>NovaDigital\\NovaPost\\Storage\\JwtTokenStorageInterface</td><td>Custom JWT token storage</td></tr>\n    <tr><td>NovaDigital\\NovaPost\\Http\\ResponseHandlerInterface</td><td>Custom response processing</td></tr>\n    <tr><td>NovaDigital\\NovaPost\\Http\\RetryHandlerInterface</td><td>Custom retry logic</td></tr>\n  </tbody>\n</table>\n<h3>PSR Compliance</h3>\nThe <strong>NovaPost API SDK</strong> complies with the following PSR standards, ensuring compatibility, modern design, and high code quality:\n<table>\n  <thead>\n    <tr>\n      <th>Standard</th>\n      <th>Purpose</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <td><strong>PSR-4: Autoloader</strong></td>\n      <td>For class autoloading</td>\n    </tr>\n    <tr>\n      <td><strong>PSR-11: Container Interface</strong></td>\n      <td>For a flexible dependency container</td>\n    </tr>\n    <tr>\n      <td><strong>PSR-3: Logger Interface</strong></td>\n      <td>Allows using any compatible logger</td>\n    </tr>\n    <tr>\n      <td><strong>PSR-7: HTTP Message Interface</strong></td>\n      <td>Used for all API requests and responses</td>\n    </tr>\n    <tr>\n      <td><strong>PSR-18: HTTP Client</strong></td>\n      <td>For sending HTTP requests</td>\n    </tr>\n    <tr>\n      <td><strong>PSR-17: HTTP Factories</strong></td>\n      <td>For creating PSR-7 messages</td>\n    </tr>\n    <tr>\n      <td><strong>PSR-12: Extended Coding Standard</strong></td>\n      <td>For coding style</td>\n    </tr>\n  </tbody>\n</table>\nFollowing these standards makes the SDK reliable, predictable, and easy to integrate into any modern PHP application.","responses":{"200":{"description":"OK"}}}}}}
```


# Authorization

## Generate a temporary JWT-token

> Issues a temporary JWT-token for making authorized API requests. \
> A valid apiKey must be provided as a query parameter.\
> \
> How to obtain an apiKey:\
> \- In Sandbox, use POST \`/test-api-keys\` with a registered phone number from the Client Portal (EBC): <https://my.novapost.com/\\>
> \- In PROD, use your personal apiKey provided by your manager\
> \
> Usage:\
> \- Call GET \`/clients/authorization?apiKey={apiKey}\`\
> \- On success, copy the jwt from the response\
> \- Open the \*\*\[Authorize]\(<https://api.novapost.com/developers/index.html#auth)\\*\\>\* dialog in this documentation, select the \`JWT\` scheme, and paste the jwt\
> \- All Try-it-out requests will then automatically include \`Authorization: {jwt}\`\
> &#x20;\
> Notes:\
> \- The jwt is valid for \~1 hour; request a new one after expiry\
> \- Do not store jwt beyond its TTL\
> \- The \`/test-api-keys\` route is not available in PROD<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Authorization"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"paths":{"/clients/authorization":{"get":{"tags":["Authorization"],"summary":"Generate a temporary JWT-token","description":"Issues a temporary JWT-token for making authorized API requests. \nA valid apiKey must be provided as a query parameter.\n\nHow to obtain an apiKey:\n- In Sandbox, use POST `/test-api-keys` with a registered phone number from the Client Portal (EBC): https://my.novapost.com/\n- In PROD, use your personal apiKey provided by your manager\n\nUsage:\n- Call GET `/clients/authorization?apiKey={apiKey}`\n- On success, copy the jwt from the response\n- Open the **[Authorize](https://api.novapost.com/developers/index.html#auth)** dialog in this documentation, select the `JWT` scheme, and paste the jwt\n- All Try-it-out requests will then automatically include `Authorization: {jwt}`\n \nNotes:\n- The jwt is valid for ~1 hour; request a new one after expiry\n- Do not store jwt beyond its TTL\n- The `/test-api-keys` route is not available in PROD\n","parameters":[{"in":"query","required":true,"name":"apiKey","schema":{"type":"string"},"description":"To utilize this method, a personal API key is required."}],"responses":{"200":{"description":"JWT-token","content":{"application/json":{"schema":{"type":"object","properties":{"jwt":{"type":"string","description":"Personal JWT-token, expires after one hour to prevent any fraud, requiring a new request to generate a fresh token.","format":"json"}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"422":{"$ref":"#/components/responses/Validation"},"503":{"$ref":"#/components/responses/Time-out"}}}}},"components":{"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Validation":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Time-out":{"description":"Connection time-out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}}}}
```


# Dictionaries

## Find measurements

> This API method allows you to retrieve a list of measurement units like pieces or meters or kilos, that you can use to specify your items by metric system. The response will include details of each measurement unit, such as the unit code, name, and any other relevant information. This data can be useful to generate a transportation document (shipment).<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Dictionaries"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}},"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Validation":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Time-out":{"description":"Connection time-out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}}},"paths":{"/dictionary/measurements":{"get":{"tags":["Dictionaries"],"description":"This API method allows you to retrieve a list of measurement units like pieces or meters or kilos, that you can use to specify your items by metric system. The response will include details of each measurement unit, such as the unit code, name, and any other relevant information. This data can be useful to generate a transportation document (shipment).\n","parameters":[{"in":"query","name":"limit","description":"Max number of records to return on page.","schema":{"type":"integer","format":"int32","default":15}},{"in":"query","name":"page","description":"Number of page to return","schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"measurements","content":{"application/json":{"schema":{"type":"object","properties":{"current_page":{"type":"integer","description":"Current page.","minimum":1},"last_page":{"type":"integer","description":"Total pages found.","minimum":1},"per_page":{"type":"integer","description":"Current objects` limit for a single page.","minimum":1},"total":{"type":"integer","description":"Total objects found.","minimum":0},"from":{"type":"integer","nullable":true},"to":{"type":"integer","nullable":true},"items":{"type":"array","description":"List of measurement`s units that you can use to specify your items by metric system.","items":{"type":"object","properties":{"code":{"type":"string","description":"Code of measurement`s unit."},"name":{"type":"string","description":"Name of measurement`s unit.","minLength":2,"maxLength":100},"shortname":{"type":"string","description":"Abbreviation of measurement`s unit.","minLength":1,"maxLength":20},"createdAt":{"type":"string","description":"Datetime when the item was added to the list."},"updatedAt":{"type":"string","description":"Datetime of the item`s update."},"deletedAt":{"type":"string","description":"Datetime if removed, otherwise is null.","nullable":true}}}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/Validation"},"503":{"$ref":"#/components/responses/Time-out"}},"summary":"Find measurements"}}}}
```

## Find divisions

> This API method enables you to obtain a list of own and partner\`s cargo warehouses (divisions) and  parcel lockers available within countries. By providing the country code as a parameter, you can retrieve a comprehensive list of cargo warehouses and related details. The response typically includes information such as warehouse name, number, address, ID, country and city details, warehouse type, work schedule, lunch breaks (for European divisions where applicable), and other relevant attributes. This data can be useful to generate a transportation document (shipment).<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Dictionaries"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}},"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Validation":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Time-out":{"description":"Connection time-out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}}},"paths":{"/divisions":{"get":{"tags":["Dictionaries"],"description":"This API method enables you to obtain a list of own and partner`s cargo warehouses (divisions) and  parcel lockers available within countries. By providing the country code as a parameter, you can retrieve a comprehensive list of cargo warehouses and related details. The response typically includes information such as warehouse name, number, address, ID, country and city details, warehouse type, work schedule, lunch breaks (for European divisions where applicable), and other relevant attributes. This data can be useful to generate a transportation document (shipment).\n","parameters":[{"in":"header","name":"Accept-language","description":"To receive warehouse description in a certain language please put required language code (ISO 639-1 standard) in a header parameter with a name - accept-language. If there is no translation for the selected language, then English will be displayed","schema":{"type":"string","enum":["cz","de","en","es","fr","et","hu","it","lt","lv","nl","pl","ro","sk","uk"]}},{"in":"query","name":"countryCodes[]","description":"To receive a list of cargo warehouses and  parcel lockers in a certain country please choose required country code from the list. Use code, according to the ISO 3166-1 Alpha-2 standard.","schema":{"type":"array","enum":["CZ","DE","EE","ES","FR","GB","HU","IT","LT","LV","MD","NL","PL","RO","SK","UA"]}},{"in":"query","name":"limit","description":"Max number of items to return.","schema":{"type":"integer","format":"int32","default":15}},{"in":"query","name":"page","description":"Page number to return.","schema":{"type":"integer","format":"int32"}},{"in":"query","name":"settlementIds[]","description":"List of settlement identifiers used to filter divisions or terminals by their location. Each ID corresponds to a unique settlement in the system.","schema":{"type":"array","items":{"type":"integer"}}},{"in":"query","name":"divisionCategories[]","description":"Defines the operational category of a division to specify its type and function within the logistics network. Use one or multiple categories from the list.","schema":{"type":"array","enum":["Postomat","PostBranch","CargoBranch","PUDO"]}},{"in":"query","name":"statuses[]","description":"Filters divisions by their operational status. Indicates whether the branch is active, temporarily closed, or in preparation for opening.\n\nBy default, only divisions with the `Working` status are returned.\n","schema":{"type":"array","enum":["Working","NotWorking","NotWorkingTemporary","InProcessOpening"]}},{"in":"query","name":"prohibitedSending","description":"Indicates whether sending parcels from this division is available. If `true` – sending from this division is not possible.","schema":{"type":"boolean","enum":[true,false]}},{"in":"query","name":"prohibitedIssuance","description":"Indicates whether parcel delivery to this division is available. If `true` – receiving parcels at this division is not possible.","schema":{"type":"boolean","enum":[true,false]}},{"in":"query","name":"latitude","description":"Geographical latitude of the division, used for positioning on maps and calculating distances. Example value: 49.8005164984.","schema":{"type":"number","format":"float"}},{"in":"query","name":"longitude","description":"Geographical longitude of the division, used for positioning on maps and calculating distances. Example value: 22.9404162762.","schema":{"type":"number","format":"float"}}],"responses":{"200":{"description":"Divisions","content":{"application/json":{"schema":{"type":"object","properties":{"current_page":{"type":"integer","description":"Current page.","minimum":1},"last_page":{"type":"integer","description":"Total pages found.","minimum":1},"per_page":{"type":"integer","description":"Current objects` limit for a single page.","minimum":1},"total":{"type":"integer","description":"Total objects found.","minimum":0},"from":{"type":"integer","nullable":true},"to":{"type":"integer","nullable":true},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","description":"Warehouse`s id code.","minimum":1},"name":{"type":"string","description":"Description of warehouse.","minLength":1},"shortName":{"type":"string","description":"Short description of warehouse.","minLength":1},"externalId":{"type":"string","description":"Internal data, not for use."},"source":{"type":"string","description":"Source of information about a division (for instance, NPUA, NPAX, InPost, NPDepartment, NPMD1C, GLS_CZ, DPD, Venipak, SPS, ExpressOne. The list grows as additional partners are incorporated).","nullable":true},"countryCode":{"type":"string","description":"Country code where warehouse is located according to the ISO 3166-1 Alpha-2 standard.","pattern":"^[A-Z]{2}$"},"settlement":{"type":"object","description":"Detailed information about the location where the warehouse is located.","properties":{"id":{"type":"integer","description":"City`s id code.","minimum":1},"name":{"type":"string","description":"City or town name.","minLength":2},"region":{"type":"object","description":"District of city`s location.","properties":{"id":{"type":"integer","description":"District`s id code.","minimum":1},"name":{"type":"string","description":"District name.","minLength":2},"parent":{"type":"object","description":"Region of city`s location.","properties":{"id":{"type":"integer","description":"Region`s id code.","minimum":1},"name":{"type":"string","description":"Region name.","minLength":2}},"required":["id","name"]}},"required":["id","name","parent"]}},"required":["id","name","region"]},"address":{"type":"string","description":"Warehouse`s address.","maxLength":255},"number":{"type":"string","description":"Warehouse number.","maxLength":255},"status":{"type":"string","description":"Indicates the current operational state of the division. Possible values states are Working, NotWorking, NotWorkingTemporary, InProcessOpening."},"customerServiceAvailable":{"type":"boolean","description":"Availability of customer service in the division. Internal data, not for use."},"divisionCategory":{"type":"string","description":"Warehouse type."},"publicPhones":{"type":"array","items":{"type":"string"},"description":"Public phone of the division. Internal data, not for use."},"internalPhones":{"type":"array","description":"Internal phone of the division. Internal data, not for use."},"responsiblePerson":{"type":"integer","description":"Responsible person for the division. Internal data, not for use.","nullable":true},"partner":{"type":"integer","description":"Internal data, not for use.","nullable":true},"ownerDivision":{"type":"integer","description":"Internal data, not for use.","nullable":true},"latitude":{"type":"number","description":"Latitude coordinate.","nullable":true},"longitude":{"type":"number","description":"Longitude coordinate.","nullable":true},"distance":{"type":"integer","nullable":true},"maxWeightPlaceSender":{"type":"integer","description":"Maximum weight of a single parcel that can be dispatched from this division, measured in grams."},"maxLengthPlaceSender":{"type":"integer","description":"Maximum length of a single parcel that can be dispatched from this division, measured in millimeters."},"maxWidthPlaceSender":{"type":"integer","description":"Maximum width of a single parcel that can be dispatched from this division, measured in millimeters."},"maxHeightPlaceSender":{"type":"integer","description":"Maximum height of a single parcel that can be dispatched from this division, measured in millimeters."},"maxWeightPlaceRecipient":{"type":"integer","description":"Maximum weight of a single parcel that can be received to this division, measured in grams."},"maxLengthPlaceRecipient":{"type":"integer","description":"Maximum length of a single parcel that can be received to this division, measured in millimeters."},"maxWidthPlaceRecipient":{"type":"integer","description":"Maximum width of a single parcel that can be received to this division, measured in millimeters."},"maxHeightPlaceRecipient":{"type":"integer","description":"Maximum height of a single parcel that can be received to this division, measured in millimeters."},"maxCostPlace":{"type":"number","description":"Max cost for one shipment.","minimum":0.01},"maxDeclaredCostPlace":{"type":"number","description":"Max declared cost for one shipment.","minimum":0.01},"workSchedule":{"type":"array","description":"Working schedule of warehouse. Returns an array with working days and times.","items":{"type":"object","properties":{"day":{"type":"string","description":"Working day of the week."},"from":{"type":"string","description":"Time when the warehouse begins its operations is returns in a 24-hour format."},"to":{"type":"string","description":"Time when the warehouse closes, returned in a 24-hour format."},"breakFrom":{"type":"string","description":"The start time of the lunch break, returned in 24-hour format.\n\n🔹This value is provided only for European divisions that have a configured lunch break. Otherwise, `null` is returned.\n","nullable":true},"breakTo":{"type":"string","description":"The end time of the lunch break, returned in 24-hour format.\n\n🔹This value is provided only for European divisions that have a configured lunch break. Otherwise, `null` is returned.\n","nullable":true}}}},"settings":{"type":"array"},"logisticsCode":{"type":"string","description":"A logistics district code used exclusively for the country of **Moldova** to determine the regional processing zone and routing direction of the shipment.</br>\n\n🔸**It is a key parameter required for correct allocation across logistics routes.**\n"},"attributes":{"type":"object","description":"Used to display additional parameters.","properties":{"printFormDeliveryRegion":{"type":"string","description":"A delivery branch code used exclusively for the country of **Moldova**.  It represents a sub-category of the destination city and is applied to determine the primary logistics hub to which the shipment is initially directed before further distribution to the specific city or locality."}}},"createdAt":{"type":"string","description":"Datetime when the item was added to the list."},"updatedAt":{"type":"string","description":"Datetime of the item`s update."},"deletedAt":{"type":"string","description":"Datetime if removed, otherwise is null.","nullable":true},"fullAddress":{"type":"object","description":"Warehouse`s address split in parts.","properties":{"country":{"type":"string","description":"Country of warehouse.","maxLength":100},"settlement":{"type":"string","description":"City name of warehouse.","maxLength":100},"street":{"type":"string","description":"Street name of warehouse.","maxLength":100},"building":{"type":"string","description":"Building of warehouse.","maxLength":100},"note":{"type":"string","description":"Additional information about address.","maxLength":100},"zipcode":{"type":"string","description":"Post code.","maxLength":10}}}}}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/Validation"},"503":{"$ref":"#/components/responses/Time-out"}},"summary":"Find divisions"}}}}
```

## Find currencies

> This API method allows you to retrieve a list of currencies that are available for creating transportation documents. By making a request with this method, you can obtain a list of currencies supported by the system. The response will include details of each currency, such as the currency code, name, and any other relevant information. This data can be useful to generate a transportation document (shipment).<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Dictionaries"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}},"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Validation":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Time-out":{"description":"Connection time-out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}}},"paths":{"/dictionary/currencies":{"get":{"tags":["Dictionaries"],"description":"This API method allows you to retrieve a list of currencies that are available for creating transportation documents. By making a request with this method, you can obtain a list of currencies supported by the system. The response will include details of each currency, such as the currency code, name, and any other relevant information. This data can be useful to generate a transportation document (shipment).\n","parameters":[{"in":"query","name":"limit","description":"Max number of items to return on page.","schema":{"type":"integer","format":"int32","default":15}},{"in":"query","name":"page","description":"Number of page to return.","schema":{"type":"integer","format":"int32"}},{"in":"query","name":"codes[]","description":"Currencies codes.","schema":{"type":"string","format":"int32"}}],"responses":{"200":{"description":"currencies","content":{"application/json":{"schema":{"type":"object","properties":{"current_page":{"type":"integer","description":"Current page.","minimum":1},"last_page":{"type":"integer","description":"Total pages found.","minimum":1},"per_page":{"type":"integer","description":"Current objects` limit for a single page.","minimum":1},"total":{"type":"integer","description":"Total objects found.","minimum":0},"from":{"type":"integer","nullable":true},"to":{"type":"integer","nullable":true},"items":{"type":"array","description":"List of currencies that are available for creating transportation documents.","items":{"type":"object","properties":{"code":{"type":"string","description":"Currency code according to the iso-4217 standard.","pattern":"^[A-Z]{3}$"},"numCode":{"type":"integer","description":"Numerical currency code according to the iso-4217 standard."},"name":{"type":"string","description":"Full currency name.","minLength":2,"maxLength":100},"shortName":{"type":"string","description":"Short currency name.","minLength":1,"maxLength":20},"symbol":{"type":"integer","description":"Sign, symbol, short designation of the name of a monetary unit."},"createdAt":{"type":"string","description":"Datetime when the item was added to the list."},"updatedAt":{"type":"string","description":"Datetime of the item`s update."},"deletedAt":{"type":"string","description":"Datetime if removed, otherwise is null.","nullable":true}}}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/Validation"},"503":{"$ref":"#/components/responses/Time-out"}},"summary":"Find currencies"}}}}
```

## Find cargo classifiers (UKT ZED)

> This API method allows you to retrieve a list of cargo classifiers (UKT ZED). Cargo classifiers are predefined categories or classifications used to categorize different types of cargo. By making a request to this method, you can obtain a list of cargo classifiers supported by the system. The response will include details of each classifier, such as the classifier ID, name, description, category, examples and any other relevant information. This data can be useful to generate a transportation document (shipment).\
> \
> \*\*How it works:\*\*\
> \- The method returns classifiers for the recipient country specified in the \`country-code\` parameter.\
> \
> \- The format of UKT ZED codes depends on the selected country, example:\
> &#x20; \- For destination countries \*\*Canada (CA)\*\* and \*\*Moldova (MD)\*\*, UKT ZED codes are strictly validated to be exactly \*\*10 digits\*\*.\
> &#x20; \- Any non-numeric characters included in the \`HsCode\` will be automatically removed before validation.\
> \- The \`keyword\` parameter enables searching for a specific product classifier.\
> \
> \- If \`fuzzy=true\`, the search will include similar results based on approximate matching.\
> \
> \*\*Limitations:\*\*\
> \
> \- Some countries may not support UKT ZED retrieval via API.\
> \- Results depend on the latest classifier database updates.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Dictionaries"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}},"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Validation":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Time-out":{"description":"Connection time-out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}}},"paths":{"/dictionary/classifier":{"get":{"tags":["Dictionaries"],"description":"This API method allows you to retrieve a list of cargo classifiers (UKT ZED). Cargo classifiers are predefined categories or classifications used to categorize different types of cargo. By making a request to this method, you can obtain a list of cargo classifiers supported by the system. The response will include details of each classifier, such as the classifier ID, name, description, category, examples and any other relevant information. This data can be useful to generate a transportation document (shipment).\n\n**How it works:**\n- The method returns classifiers for the recipient country specified in the `country-code` parameter.\n\n- The format of UKT ZED codes depends on the selected country, example:\n  - For destination countries **Canada (CA)** and **Moldova (MD)**, UKT ZED codes are strictly validated to be exactly **10 digits**.\n  - Any non-numeric characters included in the `HsCode` will be automatically removed before validation.\n- The `keyword` parameter enables searching for a specific product classifier.\n\n- If `fuzzy=true`, the search will include similar results based on approximate matching.\n\n**Limitations:**\n\n- Some countries may not support UKT ZED retrieval via API.\n- Results depend on the latest classifier database updates.\n","parameters":[{"in":"query","name":"country-code","description":"The ISO 3166-1 Alpha-2 code of the country for which the UKT ZED classifier is needed.\n\nThis parameter refers to the **recipient country**, not the sender.\n\nThe format of UKT ZED codes varies by country, example:\n\n- `UA` – Returns 8-digit codes.\n- `CA` or `MD` – Returns 10-digit codes.            \n\n**Example:** If you need UKT ZED codes for Canada, use `country-code=CA`.\n","schema":{"type":"string"}},{"in":"query","name":"fuzzy","description":"Search mechanism enables to include results that closely resemble the query terms or have some degree of similarity, expanding the search scope to include variations or similar entries.","schema":{"type":"boolean","enum":[true,false]}},{"in":"query","name":"keyword","description":"Search keyword for the classifier.","schema":{"type":"string"}},{"in":"query","name":"locale","description":"Language code according to ISO 639-1 standard.","schema":{"type":"string"}},{"in":"query","name":"size","description":"Number of matching classifiers to return.","schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"List of cargo classifiers (UKT ZED)","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"boolean"},"source":{"type":"string"},"error":{"type":"string"},"items":{"type":"array","description":"List of classifiers that correspond to the requested keyword. Returns null if there is no match.","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string","description":"Classifier ID."},"hsCode":{"type":"string","description":"Code of Сargo classifiers (UKT ZED) dictionary."},"category":{"type":"object","description":"Classifier`s category.","properties":{"en":{"type":"string","description":"Name of the category in English."},"currentLocal":{"type":"string","description":"Name of the category in the language according to the parameter - locale."}},"required":["en","currentLocal"]},"subCategory":{"type":"object","description":"Classifier`s subcategory.","properties":{"en":{"type":"string","description":"Name of the subcategory in English."},"currentLocal":{"type":"string","description":"Name of the subcategory in the language according to the parameter - locale."}},"required":["en","currentLocal"]},"keywords":{"type":"object","description":"Keywords for the subcategory.","properties":{"en":{"type":"string","description":"Keywords in English."},"currentLocal":{"type":"string","description":"Keywords in the language according to the parameter - locale."}},"required":["en","currentLocal"]},"product":{"type":"object","description":"Name of the product of the classifier.","properties":{"en":{"type":"string","description":"Name in English."},"currentLocal":{"type":"string","description":"Name in the language according to the parameter - locale."}},"required":["en","currentLocal"]},"description":{"type":"object","description":"Description of the products which corresponding the classifier.","properties":{"en":{"type":"string","description":"Description in English."},"currentLocal":{"type":"string","description":"Description in the language according to the parameter - locale."}},"required":["en","currentLocal"]},"exportFromUA":{"type":"boolean"},"importToUA":{"type":"boolean"}}}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/Validation"},"503":{"$ref":"#/components/responses/Time-out"}},"summary":"Find cargo classifiers (UKT ZED)"}}}}
```

## Find customs-fees settings

> This method returns recipient country settings used to determine whether customs duties can be paid by the sender, as well as the minimum and maximum declared parcel value thresholds within which this option is available.\
> \
> If the \`customsFeesActive\` value is \`false\`, the sender cannot act as the customs-duty payer for the selected country.\
> \
> The \`minDeclaredCost\` and \`maxDeclaredCost\` fields define the declared parcel value range (in the recipient country's currency) within which the option for customs-duty payment by the sender is available.\
> \
> If the declared parcel value is lower than \`minDeclaredCost\`, customs duties are not applied to the parcel.\
> \
> If the declared parcel value exceeds \`maxDeclaredCost\`, the sender cannot act as the customs-duty payer. In this case, the \`payerFeesCustoms\` parameter must be set to \`Recipient\`.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Dictionaries"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}},"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Time-out":{"description":"Connection time-out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}}},"paths":{"/dictionary/customs-fees/{code}":{"get":{"tags":["Dictionaries"],"summary":"Find customs-fees settings","description":"This method returns recipient country settings used to determine whether customs duties can be paid by the sender, as well as the minimum and maximum declared parcel value thresholds within which this option is available.\n\nIf the `customsFeesActive` value is `false`, the sender cannot act as the customs-duty payer for the selected country.\n\nThe `minDeclaredCost` and `maxDeclaredCost` fields define the declared parcel value range (in the recipient country's currency) within which the option for customs-duty payment by the sender is available.\n\nIf the declared parcel value is lower than `minDeclaredCost`, customs duties are not applied to the parcel.\n\nIf the declared parcel value exceeds `maxDeclaredCost`, the sender cannot act as the customs-duty payer. In this case, the `payerFeesCustoms` parameter must be set to `Recipient`.\n","parameters":[{"in":"path","name":"code","required":true,"description":"Alpha-code of the destination country according to the ISO 3166-1 Alpha-2","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response with customs-fee configuration","content":{"application/json":{"schema":{"type":"object","properties":{"customsFeesActive":{"type":"boolean","description":"Indication of the possibility of paying customs duties by the sender.\n\nPossible values:\n  - `true` — payment is possible\n  - `false` — payment is not possible\n"},"minDeclaredCost":{"type":"number","description":"Minimum declared parcel value in the recipient country's currency.\n"},"maxDeclaredCost":{"type":"number","description":"Maximum declared parcel value in the recipient country's currency.\n"}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"422":{"description":"Unprocessable entity – invalid country code","content":{"application/json":{"schema":{"type":"object","properties":{"ErrorMessage":{"type":"string"}}}}}},"503":{"$ref":"#/components/responses/Time-out"}}}}}}
```

## Settlement Prohibited Issuance Dictionary

> This API method returns a manifest with links to offline dictionary files listing Ukrainian settlements where shipment issuance (pickup) is prohibited. The dictionary covers all settlement types and is intended for address validation, delivery availability checks, and logistics restrictions.\
> \
> The response contains URLs to the latest localized dictionary files prepared for offline usage. Each file includes settlement data such as administrative hierarchy, coordinates, postal codes, alternative names, and prohibition flags.\
> \
> The dictionary files are distributed as localized compressed JSON archives.\
> \
> 🔹\*\*Key features:\*\*\
> \
> \- Returns a JSON manifest with URLs to dictionary files.\
> \- Files are provided in \`.json.gz\` format.\
> \- Localization supported (\`locale="uk"\`, \`locale="en"\`).\
> \- Includes only settlements with \`prohibitedIssuance = true\`.\
> \- Designed for offline usage and periodic synchronization.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Dictionaries"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}},"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}}},"paths":{"/dictionary/settlements/prohibited-issuance":{"get":{"tags":["Dictionaries"],"summary":"Settlement Prohibited Issuance Dictionary","description":"This API method returns a manifest with links to offline dictionary files listing Ukrainian settlements where shipment issuance (pickup) is prohibited. The dictionary covers all settlement types and is intended for address validation, delivery availability checks, and logistics restrictions.\n\nThe response contains URLs to the latest localized dictionary files prepared for offline usage. Each file includes settlement data such as administrative hierarchy, coordinates, postal codes, alternative names, and prohibition flags.\n\nThe dictionary files are distributed as localized compressed JSON archives.\n\n🔹**Key features:**\n\n- Returns a JSON manifest with URLs to dictionary files.\n- Files are provided in `.json.gz` format.\n- Localization supported (`locale=\"uk\"`, `locale=\"en\"`).\n- Includes only settlements with `prohibitedIssuance = true`.\n- Designed for offline usage and periodic synchronization.\n","parameters":[],"responses":{"200":{"description":"Settlement prohibited issuance dictionary manifest","content":{"application/json":{"schema":{"type":"object","required":["unix_time","urls"],"properties":{"unix_time":{"type":"integer","description":"Unix timestamp indicating the dictionary generation time."},"urls":{"type":"array","description":"List of URLs to localized offline dictionary files.","items":{"type":"string","format":"uri"}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"description":"Action not available","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}}}}}}
```

## Settlements Offline Dictionary

> This API method returns a manifest with links to offline dictionary files containing settlements. The dictionaries are generated based on the settlements dataset and provided separately per country.\
> \
> The response contains URLs to the latest localized dictionary files prepared for offline usage. Each file includes settlement data such as administrative hierarchy, coordinates, postal codes, alternative names, and other relevant attributes.\
> \
> Each request returns dictionary files for a specific country.\
> \
> The dictionary files are distributed as localized compressed JSON archives.\
> \
> 🔹\*\*Key features:\*\* \
> \- Returns a JSON manifest with URLs to dictionary files. \
> \- Files are provided in \`.json.gz\` format. \
> \- Localization supported via \`Accept-language\` header (default: \`en\`). \
> \- Separate files per country (\`UA\`, \`MD\`). \
> \- Based on settlements dictionary data. \
> \- Updated once per day. \
> \- Designed for offline usage and periodic synchronization.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Dictionaries"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}},"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Time-out":{"description":"Connection time-out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}}},"paths":{"/dictionary/settlements/versions":{"get":{"tags":["Dictionaries"],"summary":"Settlements Offline Dictionary","description":"This API method returns a manifest with links to offline dictionary files containing settlements. The dictionaries are generated based on the settlements dataset and provided separately per country.\n\nThe response contains URLs to the latest localized dictionary files prepared for offline usage. Each file includes settlement data such as administrative hierarchy, coordinates, postal codes, alternative names, and other relevant attributes.\n\nEach request returns dictionary files for a specific country.\n\nThe dictionary files are distributed as localized compressed JSON archives.\n\n🔹**Key features:** \n- Returns a JSON manifest with URLs to dictionary files. \n- Files are provided in `.json.gz` format. \n- Localization supported via `Accept-language` header (default: `en`). \n- Separate files per country (`UA`, `MD`). \n- Based on settlements dictionary data. \n- Updated once per day. \n- Designed for offline usage and periodic synchronization.\n","parameters":[{"in":"header","name":"Accept-language","description":"To receive dictionary content in a certain language please put required language code (ISO 639-1 standard) in a header parameter with a name - accept-language. If there is no translation for the selected language, then English will be displayed","schema":{"type":"string","enum":["en","ro","uk"]}},{"in":"query","name":"countryCode","description":"Country code for which the settlements dictionary should be returned (ISO 3166-1 Alpha-2).","required":true,"schema":{"type":"string","enum":["UA","MD"]}}],"responses":{"200":{"description":"Settlements offline dictionary manifest","content":{"application/json":{"schema":{"type":"object","required":["unix_time","base_version","urls","real_urls"],"properties":{"unix_time":{"type":"integer","description":"Unix timestamp indicating the dictionary generation time."},"base_version":{"type":"object","description":"Base version metadata of the dictionary.","required":["unix_time"],"properties":{"unix_time":{"type":"integer","description":"Unix timestamp of the base dictionary version."}}},"urls":{"type":"array","description":"List of public URLs to localized offline dictionary files.","items":{"type":"string","format":"uri"}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"description":"Action not available","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"503":{"$ref":"#/components/responses/Time-out"}}}}}}
```

## Find settlements

> This API method enables you to get a list of settlements available in different countries. By providing  the country code as a parameter, you can retrieve a complete list of settlements and their associated information. The method supports searching by street name. The response usually contains information such as the settlement name, identifier, country data, and other relevant attributes. This data can be useful for creating a transport document (shipment).

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Dictionaries"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}},"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Validation":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Time-out":{"description":"Connection time-out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}}},"paths":{"/settlements":{"get":{"tags":["Dictionaries"],"summary":"Find settlements","description":"This API method enables you to get a list of settlements available in different countries. By providing  the country code as a parameter, you can retrieve a complete list of settlements and their associated information. The method supports searching by street name. The response usually contains information such as the settlement name, identifier, country data, and other relevant attributes. This data can be useful for creating a transport document (shipment).","parameters":[{"in":"query","name":"countryCodes[]","description":"To receive a list of settlements in a certain country please choose required country code from the list. Use code, according to the ISO 3166-1 Alpha-2 standard.","schema":{"type":"array","enum":["cz","de","en","es","fr","et","hu","it","lt","lv","nl","pl","ro","sk","uk"]}},{"in":"query","name":"limit","description":"Max number of items to return.","schema":{"type":"integer","format":"int32","default":15}},{"in":"query","name":"page","description":"Page number to return.","schema":{"type":"integer","format":"int32"}},{"in":"query","name":"textSearch","description":"Search by any text.","schema":{"type":"string"}}],"responses":{"200":{"description":"settlements","content":{"application/json":{"schema":{"type":"object","required":["current_page","last_page","per_page","total","items"],"properties":{"current_page":{"type":"integer","description":"Current page.","minimum":1},"last_page":{"type":"integer","description":"Total pages found.","minimum":1},"per_page":{"type":"integer","description":"Current objects` limit for a single page.","minimum":1},"total":{"type":"integer","description":"Total objects found.","minimum":0},"from":{"type":"integer","nullable":true},"to":{"type":"integer","nullable":true},"items":{"type":"array","description":"List of settlements.","items":{"type":"object","required":["id","name","country","region","parent","latitude","longitude","postCode1","postCode2","alternativeNames","externalId","boost","prohibitedIssuance","prohibitedSending","createdAt","updatedAt","deletedAt"],"properties":{"id":{"type":"integer","description":"Settlement identifier.","minimum":1},"name":{"type":"string","description":"City or town name."},"country":{"type":"object","nullable":true,"properties":{"name":{"type":"string","description":"Country name.","minLength":2},"code":{"type":"string","minLength":2}}},"region":{"type":"object","nullable":true,"properties":{"id":{"type":"integer","description":"District`s id code.","minimum":1},"name":{"type":"string","description":"District of city`s location.","minLength":2},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"integer","description":"Region`s id code.","minimum":1},"name":{"type":"string","description":"Region of city`s location.","minLength":2}}}}},"latitude":{"type":"number","description":"Latitude coordinate.","nullable":true,"minimum":-90,"maximum":90},"longitude":{"type":"number","description":"Longitude coordinate.","nullable":true,"minimum":-180,"maximum":180},"postCode1":{"type":"string","description":"Post code \"from\" value.","nullable":true,"minLength":0,"maxLength":16},"postCode2":{"type":"string","description":"Post code \"to\" value.","nullable":true,"minLength":0,"maxLength":16},"alternativeNames":{"type":"array","description":"List of alternative settlement names","items":{"type":"string"}},"externalId":{"type":"string","description":"External settlement identifier.","nullable":true,"maxLength":50},"boost":{"type":"integer","description":"Sorting priority indicator."},"prohibitedIssuance":{"type":"boolean","description":"Indicates whether parcel delivery to this settlement is available. If true – receiving parcels at this settlement is not possible.","nullable":true},"prohibitedSending":{"type":"boolean","description":"Indicates whether sending parcels from this settlement is available. If true – sending from this settlement is not possible.","nullable":true},"createdAt":{"type":"string","pattern":"^20[0-9]{2}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{6}Z$"},"updatedAt":{"type":"string","pattern":"^20[0-9]{2}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{6}Z$"},"deletedAt":{"type":"string","nullable":true,"pattern":"^20[0-9]{2}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{6}Z$"}}}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/Validation"},"503":{"$ref":"#/components/responses/Time-out"}}}}}}
```

## Find streets

> This API method enables you to get a list of streets available in different settlements. By providing  the country code as a parameter or settlementId as parameter, you can retrieve a complete list of streets and their associated information. The method also supports searching by street name. The response usually contains information such as the street name, settlement name, identifier and other relevant attributes. This data can be useful for creating a transport document (shipment).

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Dictionaries"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}},"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Validation":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Time-out":{"description":"Connection time-out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}}},"paths":{"/streets":{"get":{"tags":["Dictionaries"],"summary":"Find streets","description":"This API method enables you to get a list of streets available in different settlements. By providing  the country code as a parameter or settlementId as parameter, you can retrieve a complete list of streets and their associated information. The method also supports searching by street name. The response usually contains information such as the street name, settlement name, identifier and other relevant attributes. This data can be useful for creating a transport document (shipment).","parameters":[{"in":"query","name":"countryCodes[]","description":"List of country codes (ISO 3166-1 Alpha-2) to filter streets.","schema":{"type":"array","items":{"type":"string"}}},{"in":"query","name":"name","description":"Street name filter.","schema":{"type":"string"}},{"in":"query","name":"limit","description":"Max number of items to return.","schema":{"type":"integer","format":"int32","default":15,"minimum":1,"maximum":100}},{"in":"query","name":"page","description":"Page number to return.","schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"streets","content":{"application/json":{"schema":{"type":"object","required":["current_page","last_page","per_page","total","items"],"properties":{"current_page":{"type":"integer","description":"Current page.","minimum":1},"last_page":{"type":"integer","description":"Total pages found.","minimum":1},"per_page":{"type":"integer","description":"Current objects` limit for a single page.","minimum":1},"total":{"type":"integer","description":"Total objects found.","minimum":0},"from":{"type":"integer","nullable":true},"to":{"type":"integer","nullable":true},"items":{"type":"array","description":"List of streets.","items":{"type":"object","required":["id","name","settlement","countryCode","latitude","longitude","externalId","alternativeNames","createdAt","updatedAt","deletedAt"],"properties":{"id":{"type":"integer","description":"Street identifier.","minimum":1},"name":{"type":"string","description":"Street name."},"settlement":{"type":"object","description":"Settlement where the street is located.","properties":{"id":{"type":"integer","minimum":1},"name":{"type":"string","minLength":2}}},"countryCode":{"type":"string","description":"Country code according to ISO 3166-1 Alpha-2.","pattern":"^[A-Z]{2}$"},"latitude":{"type":"number","description":"Latitude coordinate.","nullable":true,"minimum":-90,"maximum":90},"longitude":{"type":"number","description":"Longitude coordinate.","nullable":true,"minimum":-180,"maximum":180},"alternativeNames":{"type":"array","description":"Array of alternative street names.","items":{"type":"string"}},"externalId":{"type":"string","description":"External street identifier.","nullable":true,"maxLength":50},"createdAt":{"type":"string","pattern":"^20[0-9]{2}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{6}Z$"},"updatedAt":{"type":"string","pattern":"^20[0-9]{2}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{6}Z$"},"deletedAt":{"type":"string","nullable":true,"pattern":"^20[0-9]{2}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{6}Z$"}}}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/Validation"},"503":{"$ref":"#/components/responses/Time-out"}}}}}}
```


# Services

## Exchange rates

> This API method allows you to retrieve the exchange rates for different currencies based on a specific amount and your own currency. By providing the amount and the currency code, you can access the current exchange rates against various other currencies. The response will include the exchange rates for the specified amount in comparison to each currency, allowing you to see currency conversions.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Services"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}},"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Validation":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Time-out":{"description":"Connection time-out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}}},"paths":{"/exchange-rates/conversion":{"post":{"tags":["Services"],"description":"This API method allows you to retrieve the exchange rates for different currencies based on a specific amount and your own currency. By providing the amount and the currency code, you can access the current exchange rates against various other currencies. The response will include the exchange rates for the specified amount in comparison to each currency, allowing you to see currency conversions.\n","requestBody":{"description":"Optional description in *Markdown*","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"amount":{"type":"number","format":"float","description":"Amount of money to get sum in exchange rate for specified currency. Must include 2 decimal places."},"countryCode":{"type":"string","description":"Sender`s country code, according to the ISO 3166-1 Alpha-2 standard.","pattern":"^[A-Z]{2}$"},"currencyCode":{"type":"string","description":"Currency code to get exchange rate, according to the iso-4217 standard.","pattern":"^[A-Z]{3}$"},"date":{"type":"string","format":"date-time","description":"Operation date for exchange rate in ISO 8601 format."}}}}}},"responses":{"200":{"description":"shipments","content":{"application/json":{"schema":{"type":"object","properties":{"requestCurrency":{"type":"object","description":"Initial amount of money and currency for exchange.","properties":{"currencyCode":{"type":"string","description":"Currency code being exchanged, compliant with the ISO-4217 standard.","pattern":"^[A-Z]{3}$"},"amount":{"type":"number","format":"float","description":"Amount of money being exchanged. Must include 2 decimal places."}}},"mainCurrency":{"type":"object","description":"Calculation of the exchange amount in the currency of the country which countryCode was specified.","properties":{"currencyCode":{"type":"string","description":"Currency of the country which countryCode was specified, according to the iso-4217 standard.","pattern":"^[A-Z]{3}$"},"amount":{"type":"number","format":"float","description":"Amount of money in exchange rate of currency for specified country. Must include 2 decimal places."}}},"convertedCurrencies":{"type":"array","description":"List of the calculations for available current exchange rates against various other currencies based on a specified amount of money in request.","items":{"type":"object","properties":{"currencyCode":{"type":"string","description":"Currency code, according to the iso-4217 standard.","pattern":"^[A-Z]{3}$"},"amount":{"type":"number","format":"float","description":"Amount of money counted in currency`s exchange rate. Must include 2 decimal places."}}}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/Validation"},"503":{"$ref":"#/components/responses/Time-out"}},"summary":"Exchange rates"}}}}
```


# Shipments

<details>

<summary>List of Shipment Methods</summary>

<table data-search="false"><thead><tr><th width="239">Method name</th><th>Description</th></tr></thead><tbody><tr><td><a href="https://api-portal.novapost.com/metodi-1/methods/shipments/create-shipments"><strong>Create Shipment</strong></a></td><td><p>Create a Shipment Document. This API method is engineered to streamline the process of generating a shipping document for logistics operations through Nova Post. By submitting key data, such as the originating and destination addresses for the shipment, users can effortlessly create a document detailing the transportation of goods. This method includes optional fields for customs authorities, accommodating shipments that cross borders. The API response will provide the unique identifier of the generated document along with other relevant information.</p><p><strong>Settlement validation rules</strong>: For shipments <strong>to or from Moldova and Ukraine</strong>, the settlement (city) must be successfully resolved. If the provided city value cannot be matched to a settlement, the request will fail with the error: <code>validation.condition.recipient_settlement_not_defined</code>.</p><p>Additional requirement: For shipments that require customs clearance (imports), the client invoice must be uploaded as a file through the <a href="https://api.novapost.com/developers/index.html#post-/shipments/uploads/-id-">POST /shipments/uploads/{id}</a> method (after shipment creation).</p></td></tr><tr><td><a href="https://api-portal.novapost.com/metodi-1/methods/shipments#get-shipments"><strong>Find Shipments List</strong></a></td><td>This API method enables you to retrieve a list of transportation documents (shipments) that you have created. By making a request with this method, you can access the transportation documents that belongs to you or your account. The response will include details of each shipment, such as the shipment ID, number, recipient, cargo detail, and other relevant information.</td></tr><tr><td><a href="https://api-portal.novapost.com/metodi-1/methods/shipments#put-shipments-id"><strong>Update Shipment Document</strong></a></td><td><p></p><p>This API method enables you to update an existing transportation document by providing the document ID and the complete set of updated data. By specifying the document ID and including all the necessary information, you can replace the old document with the new data provided in the request. The response will typically indicate the success of the update operation and may include details of the modified document.</p><p>Update restrictions:</p><ul><li>Shipment data can be updated <strong>only while the shipment is in the <code>ReadyToShip</code> status</strong>.</li><li>Updates are allowed <strong>only if the shipment label has not been printed</strong>.</li><li>If the shipment is not in the <code>ReadyToShip</code> status or the shipment label has already been printed, the update request will be rejected with a validation error.</li></ul></td></tr><tr><td><a href="https://api-portal.novapost.com/metodi-1/methods/shipments#delete-shipments-id"><strong>Delete Shipment Document</strong></a></td><td><p>This method allows you to delete a shipment document based on its unique identifier (ID). To successfully remove the document from the system, the request must include its ID. The response will indicate the success of the operation.</p><p><strong>Implementation Details for Different Regions:</strong></p><p><strong>1. Europe:</strong></p><ul><li>The method primarily expects a unique ID (Ref ID) of the document.</li><li>Additionally, deletion using the shipment number (e.g., <code>SHPL0123456789</code>) is also supported.</li></ul><p><strong>2. Ukraine:</strong></p><ul><li>Deletion is supported only by Ref ID (unique identifier of the document).</li><li>Deletion using the shipment number (e.g., waybill number) is not supported.</li></ul></td></tr><tr><td><a href="https://api-portal.novapost.com/metodi-1/methods/shipments/return#post-shipments-light-return"><strong>Create Light Return Shipment</strong></a></td><td><p>Creates a return shipment after the original order has been delivered. This method allows customers to create a return shipment after delivery — regardless of who handled the last mile (Nova Post or a partner).</p><p>ℹ️ <strong>Information:</strong> The return can be created only if the parent shipment has the <strong>Delivered</strong> status and includes the <strong>AllowedLightReturn</strong> service. The current status of a shipment can be found in the <code>"items" → "statusCode"</code> field of the <a href="https://api.novapost.com/developers/index.html#get-/shipments">Find documents</a> method. <strong>AllowedLightReturn</strong> defines the number of days within which the recipient can initiate a return after the delivery. Internally, the system verifies several conditions before allowing a Light Return shipment to be created:</p><ul><li>The parent shipment status must be one of: <code>Issued (9, 10, 11, 106)</code>.</li><li>The system calculates the allowed return period using the following logic: <code>finalDate = toTZ(parentShipment.RecipientDateTime) + returnDays + 1 day</code> where returnDays is taken from the AllowedLightReturn service, and toTZ applies the relevant system time zone (e.g., EU region).</li><li>The return can be created only if the current time (nowTZ) is earlier than finalDate.</li><li>The system also checks that no Light Return has already been created for the same parent shipment.</li></ul><p>If all these conditions are met, the return creation request is accepted; otherwise, the system responds with a validation error indicating why the return is not permitted.</p><p><strong>How the Light Return Shipment works</strong></p><ul><li>The request must include one <strong>required parameter</strong> — <code>number</code> (the parent shipment number). <strong>All other parameters are optional</strong>.</li><li>The customer may specify a valid branch or address directly for the return.</li><li>If <strong>optional parameters</strong> are not specified, their values are automatically inherited from the parent shipment.</li><li><p>The method behavior depends on the shipment direction:</p><ul><li>For <strong>UA-UA</strong> direction: the method works for parent deliveries to <strong>Postomat, PUDO, or address</strong>.</li><li>For <strong>EU-EU</strong> direction: the method works for parent deliveries to <strong>PUDO or address</strong>. It is not supported if the parent shipment was delivered to a <strong>Postomat</strong>.</li></ul></li><li>If parent delivery was to an address, a pickup is created automatically. A pickup request is created only if the return wasn’t sent from a branch.</li></ul><p>When the return is created, the system automatically generates a return waybill. For more information on creating a parent shipment, see <a href="https://api.novapost.com/developers/index.html#post-/shipments">Create documents</a></p></td></tr><tr><td><a href="https://api-portal.novapost.com/metodi-1/methods/shipments/delivery-cost#post-shipments-calculations"><strong>Calculate delivery cost</strong></a></td><td>This API method allows you to calculate the estimated delivery cost and delivery time for your cargo. The delivery cost and delivery time are calculated based on factors such as weight, dimensions, destination, and shipping method. By providing the necessary details of your cargo and shipment, you can obtain an estimated cost for delivering the goods. The response will typically include the calculated cost and the scheduled delivery date based on the provided information.</td></tr><tr><td><a href="https://api-portal.novapost.com/metodi-1/methods/shipments/verification-status-of-ua-world#get-shipments-international-status"><strong>Get Verification status of UA→World shipments</strong></a></td><td>Returns verification statuses for international shipments for the UA→World direction (“international shipment from Ukraine to World”). Responses and errors from the core system are proxied unchanged.</td></tr><tr><td><a href="https://api-portal.novapost.com/metodi-1/methods/shipments/uploads-file#post-shipments-uploads-id"><strong>Shipments uploads file</strong></a></td><td><p>Uploads supporting documents to a specific shipment by its ID. This method is used for attaching invoices, product specifications, customs declarations, or other shipment-related documents required for processing and clearance. Files are stored and linked to the shipment, ensuring better traceability and compliance.</p><p>⚠️ Region restriction: This method is available only for European shipments (EU/EU and EU/UA directions). It is not available for shipments originating from Ukraine.</p><p>File naming: • If the "fileName" parameter is provided, the uploaded file will be stored with that name. • If "fileName" is not provided, the default file name will be set to "invoice".</p><p>Use cases:</p><ol><li>"I want to upload a client invoice in PDF to shipment 980911" - send the base64-encoded content in "file", set <code>"fileName": "invoice.pdf"</code>.</li><li>"I want to attach a product photo in JPEG" - encode the photo in base64, set <code>"fileName": "product-photo.jpeg"</code>.</li></ol></td></tr><tr><td><a href="https://api-portal.novapost.com/metodi-1/methods/shipments/print-documents#get-shipments-print"><strong>Print Shipment Documents</strong></a></td><td>This API method allows you to retrieve a transportation document marking in PDF format by providing the document number. The document marking is a printable document that clients can attach or affix to their cargo when sending it. By specifying the document number in the request, you can generate a PDF file containing the document marking for easy printing.</td></tr><tr><td><a href="https://api-portal.novapost.com/metodi-1/methods/shipments/tracking-shipment#get-shipments-tracking-history"><strong>BasicTracking</strong></a></td><td><p>This API method enables you to retrieve the status of a shipment by providing the transportation document number. By specifying the document number in the request, you can obtain information about the current location or status of the shipment, providing clients with real-time updates on the progress of their cargo.</p><p>🔸This method works <strong>only with the transportation document number (shipment number)</strong> and does <strong>not support searching by client order numbers or any external identifiers</strong>.</p><p>🔸<strong>BasicTracking</strong> provides a simplified tracking response focused on the shipment’s status history and, optionally, its related shipment numbers. Unlike <strong>FullTracking</strong>, it does not return detailed routing information, parcel-level data, undelivery reasons, return/redirect records, or extended metadata. This method is intended for quick, lightweight status checks.</p></td></tr><tr><td><a href="https://api-portal.novapost.com/metodi-1/methods/shipments/tracking-shipment#get-shipments-tracking"><strong>FullTracking</strong></a></td><td><p>This API method enables you to retrieve the status of a shipment by providing the transportation document number. By specifying the document number in the request, you can obtain information about the current location or status of the shipment, providing clients with real-time updates on the progress of their cargo.</p><p>By default, the response contains the following data blocks:</p><ul><li>Current status of the shipment;</li><li>Tracking history;</li><li>Actual tracking history;</li><li>Description of the shipment;</li><li>Extended information about related shipments.</li></ul><p>If necessary, additional blocks can be included in the response by passing the appropriate parameters:</p><ul><li>withUndeliveryReason = true - adds an array of objects with information about the reasons for non-delivery of shipments.</li><li>withCreatedOnTheBasis = true - adds an array of objects with information about returns or forwarding associated with the shipment.</li></ul><p>🔸<strong>FullTracking</strong> provides a comprehensive tracking response containing detailed shipment status data, full movement history, parcel descriptions, undelivery reasons, and information about related or derivative shipments. Unlike <strong>BasicTracking</strong>, it offers extended operational details and is designed for cases requiring full visibility into the shipment’s logistics lifecycle.</p></td></tr><tr><td><a href="https://api-portal.novapost.com/metodi-1/methods/shipments/proof-of-delivery#get-shipments-shipmentnumber-attachments"><strong>List attachments</strong></a></td><td>Returns a list of available shipment-related attachment files (photos and/or signature) for the specified shipment <strong>only if the shipment belongs to the authenticated client</strong>.</td></tr><tr><td><a href="https://api-portal.novapost.com/metodi-1/methods/shipments/proof-of-delivery#get-shipments-shipmentnumber-attachments-fileid"><strong>Download attachment</strong></a></td><td>Returns the <strong>stream of the file</strong> specified by fileId, if the shipment belongs to the authenticated client.</td></tr><tr><td><a href="https://api-portal.novapost.com/metodi-1/methods/shipments/repeat-delivery#post-shipments-modification-repeat-delivery"><strong>Create Repeat Delivery</strong></a></td><td><p>This method creates a Repeat Delivery request for a shipment that is currently stored at a long-term storage warehouse (LTS).</p><p>Key rules:</p><ul><li>Available only for shipments currently at long-term storage (LTS).</li><li>A maximum of 4 completed Repeat Delivery services is allowed per shipment.</li><li>A Repeat Delivery service cannot be ordered if the shipment already has a Redirecting, Return, or Repeat Delivery request in the <code>NeedProcessing</code> or <code>InProgress</code> status.</li></ul></td></tr><tr><td><a href="https://api-portal.novapost.com/metodi-1/methods/shipments/repeat-delivery#delete-shipments-modification-repeat-delivery-delete-shipmentid"><strong>Cancel Repeat Delivery</strong></a></td><td><p>The method cancels the current active Repeat Delivery request associated with the specified shipment.</p><p>Use this method when you need to cancel a repeat delivery request that has not yet been processed. Cancellation is available only while the repeat delivery order is still being processed.</p><p><strong>Key rules:</strong></p><ul><li>Cancellation is available only while the repeat delivery order is still being processed.</li><li>Once a repeat delivery has been completed, it cannot be cancelled.</li></ul></td></tr></tbody></table>

</details>

<details>

<summary>Shipment API Interaction Flow</summary>

```mermaid
flowchart LR

A((Start)) -->|POST shipments| B([Shipment created])

B -->|PUT shipments by id| C([Edit shipment])
B -->|GET shipment by id| D([Shipment info])
B -->|GET shipment label| E([Label print])
E --> F((End))

B -->|GET shipment status| G([Shipment status])

G -->|POST redirect shipment| H([Redirect])
G -->|POST add parcel info| I([Add parcel info])
G -->|POST cancel shipment| J([Cancellation])
J --> K((End))

G -->|GET print document| L([Label print])
L --> M((End))

style A fill:#ffffff,color:#E30613,stroke:#E30613,stroke-width:2px
style B fill:#E30613,color:#ffffff,stroke:#E30613,stroke-width:2px

style C fill:#ffffff,color:#222222,stroke:#E30613,stroke-width:2px
style D fill:#ffffff,color:#222222,stroke:#E30613,stroke-width:2px
style E fill:#ffffff,color:#222222,stroke:#E30613,stroke-width:2px
style G fill:#ffffff,color:#222222,stroke:#E30613,stroke-width:2px
style H fill:#ffffff,color:#222222,stroke:#E30613,stroke-width:2px
style I fill:#ffffff,color:#222222,stroke:#E30613,stroke-width:2px
style J fill:#ffffff,color:#222222,stroke:#E30613,stroke-width:2px
style L fill:#ffffff,color:#222222,stroke:#E30613,stroke-width:2px

style F fill:#E30613,color:#000000,stroke:#E30613,stroke-width:2px
style K fill:#E30613,color:#000000,stroke:#E30613,stroke-width:2px
style M fill:#E30613,color:#000000,stroke:#E30613,stroke-width:2px
```

</details>

## Find Shipments List

> This API method enables you to retrieve a list of transportation documents (shipments) that you have created. By making a request with this method, you can access the transportation documents that belongs to you or your account. The response will include details of each shipment, such as the shipment ID, number, recipient, cargo detail, and other relevant information.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Shipments"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}},"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Validation":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Time-out":{"description":"Connection time-out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}}},"paths":{"/shipments":{"get":{"tags":["Shipments"],"description":"This API method enables you to retrieve a list of transportation documents (shipments) that you have created. By making a request with this method, you can access the transportation documents that belongs to you or your account. The response will include details of each shipment, such as the shipment ID, number, recipient, cargo detail, and other relevant information.\n","parameters":[{"in":"query","name":"numbers[]","description":"Search shipments by transportation document number. Can accept either a single search number or an array of numbers for conducting the search.","schema":{"type":"string"}},{"in":"query","name":"ids[]","description":"Search shipments by transportation document ids.","schema":{"type":"integer","format":"int32"}},{"in":"query","name":"limit","description":"Max number of items to return on page.","schema":{"type":"integer","format":"int32","default":15}},{"in":"query","name":"page","description":"Number of page to return.","schema":{"type":"integer","format":"int32"}},{"in":"query","name":"inRegistry","description":"Flag showing whether the shipment is included in the registry. Only for European parcels.","schema":{"type":"boolean"}},{"in":"query","name":"registerNumber","description":"Number of the register that lists all shipments in the registry. Only for European parcels.","schema":{"type":"string"}},{"in":"query","name":"senderDivisionId","description":"DivisionId of the shipment sender.","schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"shipments","content":{"application/json":{"schema":{"type":"object","properties":{"current_page":{"type":"integer","description":"Current page.","minimum":1},"last_page":{"type":"integer","description":"Total pages found.","minimum":1},"per_page":{"type":"integer","description":"Current objects` limit for a single page.","minimum":1},"total":{"type":"integer","description":"Total objects found.","minimum":0},"from":{"type":"integer","nullable":true},"to":{"type":"integer","nullable":true},"items":{"type":"array","description":"Items` information in the invoice.","items":{"type":"object","properties":{"id":{"type":"string","description":"A unique identifier assigned to each shipment, facilitating internal operations such as modifications, system searches, and deletion of shipments. The 'id' serves as a key reference for administrative and logistical processes within the delivery system, allowing precise access and management of shipment records.","minimum":1},"version":{"type":"integer","description":"Version of the document, each change of the document is +1."},"number":{"type":"string","description":"Transportation document number.","pattern":"^[A-Z]{4}\\d{10}$"},"dateTime":{"type":"string","description":"Document creation datetime."},"scheduledDeliveryDate":{"type":"string","description":"Scheduled delivery date.","nullable":true},"closingDate":{"type":"string","description":"Document closing date. Displayed after successful delivery.","nullable":true},"createdAt":{"type":"string","description":"Datetime of creation."},"updatedAt":{"type":"string","description":"Datetime of update."},"deletedAt":{"type":"string","description":"Datetime if removed, otherwise is null.","nullable":true},"userCreate":{"type":"string","description":"Internal data, not for use."},"status":{"type":"string","description":"The actual status of the document (e.g. `ReadyToShip`, `Accepted`, `Issued`, `Draft`, `Deleted`)."},"gtid":{"type":"string","description":"Internal data, not for use."},"paymentStatus":{"type":"string","description":"Status of payment for delivery services (e.g. `Paid`, `NeedPay`, `ContractAfterPayment`)."},"currencyCode":{"type":"string","description":"Currency code according to the conditions of the payer contract, according to iso-4217 standard."},"parcelsAmount":{"type":"integer","description":"Amount of objects in parcels.","minimum":1},"clientOrder":{"type":"string","description":"Represents all potential order identifiers associated with the shipment. These identifiers are set by the customer for internal tracking purposes and are crucial for tracking the shipment throughout its journey. All entered values can be tracked in the shipment's tracking system.","maxLength":50},"note":{"type":"string","description":"Any additional information or special instructions that pertain to the order can be included here. This could encompass delivery instructions, special handling requests, or other pertinent details that facilitate the handling and processing of the shipment.","maxLength":255},"payerType":{"type":"string","description":"Information about who pays for delivery (e.g. `Sender`, `Recipient`, `ThirdPerson`)."},"payerContractId":{"type":"integer","description":"ID number of a person or organization that pays for delivery.","nullable":true},"payerContractNumber":{"type":"string","description":"Contains the contract number if `payerType` is set to `ThirdPerson`. Also this field can can contain the contract number of a sender as the payer when non-cash transactions are used.","nullable":true},"postomatCellReservation":{"type":"string","description":"Internal data, not for use."},"postomatOrderRef":{"type":"string","description":"Internal data, not for use."},"firstDayStorage":{"type":"string","description":"Start date of shipment storage.","nullable":true},"cargoAutoReturnDate":{"type":"string","description":"Date of automatic return of the shipment, if the service is ordered.","nullable":true},"marketplacePartner":{"type":"string","description":"Internal data, not for use."},"registerNumber":{"type":"string","description":"Internal data, not for use."},"customerNote":{"type":"string","description":"Internal data, not for use."},"creationDateNote":{"type":"string","description":"Internal data, not for use."},"sender":{"type":"object","description":"Information about the sender. Parameter contains a few variables to describe person or organization who sending cargo (cargo owner).","properties":{"companyId":{"type":"integer","description":"Internal data, not for use.","nullable":true},"companyTin":{"type":"string","description":"The tax identification number (TIN) of a legal entity. \n\n🔹**Empty parameter if sender not a company.**\n","maxLength":20},"companyName":{"type":"string","description":"Company name, in case the sender is a legal entity.","maxLength":255},"phone":{"type":"string","description":"The contact phone number of the sender or the sender’s company representative.\n\nIt is required for shipment-related communication, including pickup coordination and issue resolution.\n\n**Format:** The phone number must be provided in **international format** according to the **E.164** standard.\n\nExample: 380XXXXXXXXX, 491234567890, 371XXXXXXXX\n\n**Restrictions:**\n- The sender's phone number must be valid and reachable in case of delivery issues.\n- If the number is submitted in a local (non-international) format, the system will attempt to **normalize** it, but such logic is limited and may not support all variations across countries.\n\nWe strongly recommend implementing **front-end validation** to ensure numbers are entered in the correct international format.\n","minimum":8,"maximum":15},"email":{"type":"string","description":"Sender`s E-mail."},"name":{"type":"string","description":"Contact person.","maxLength":100},"countryCode":{"type":"string","description":"Sender's country code, according to the ISO 3166-1 Alpha-2 standard. For example, PL.","pattern":"^[A-Z]{2}$"},"settlementId":{"type":"string","description":"Settlement id code."},"cityId":{"type":"integer","description":"City id code.","nullable":true},"address":{"type":"string","description":"Home address or warehouse description."},"addressParts":{"type":"object","description":"Sender's address in case of sending from the address. Parameter contains a few variables to describe sender`s pick up address or other place beside warehouses.","properties":{"postCode":{"type":"string","description":"Postal code. Symbols that specifies address for a proper sort of cargo, only for address delivery.","maxLength":10},"region":{"type":"string","description":"City region name, only for address delivery. Proper name can be used from settlement request.","maxLength":100},"city":{"type":"string","description":"City or town name, only for address delivery. Proper name can be used from settlement request.","maxLength":100},"street":{"type":"string","description":"Street name, only for address delivery.","maxLength":100},"building":{"type":"string","description":"Building number, only for address delivery.","maxLength":100},"block":{"type":"string","description":"Block.","maxLength":100},"flat":{"type":"string","description":"Apartment number, only for address delivery.","maxLength":10},"note":{"type":"string","description":"Additional information about sender`s address.","maxLength":100}}},"divisionId":{"type":"string","description":"Warehouse`s id code. If sending with warehouse, than this parameter must contain information."},"divisionCategory":{"type":"string","description":"Warehouse type."},"archive":{"type":"boolean","description":"Internal data, not for use."}}},"recipient":{"type":"object","description":"Information about the recipient. Parameter contains a few variables to describe person or organization who must receive cargo.","properties":{"companyId":{"type":"integer","description":"Internal data, not for use.","nullable":true},"companyTin":{"type":"string","description":"The tax identification number (TIN) of a legal entity.\n\n🔹**Empty parameter if recipient not a company.**\n","maxLength":20},"companyName":{"type":"string","description":"Company name, in case the sender is a legal entity.","maxLength":255},"phone":{"type":"string","description":"The contact phone number of the recipient or the recipient’s company representative. Used for delivery notifications and communication with the customer during shipment processing.\n\n**Format:** The phone number must be provided in **international format** according to the **E.164** standard.\n\nExample: 380XXXXXXXXX, 491234567890, 371XXXXXXXX\n\n**Restrictions:**\n- For deliveries to Nova Post branches in Europe, Ukrainian mobile numbers are acceptable.\n- For deliveries to **partner locations** (such as InPost, GLS, Venipak, Cargus, etc.) and **cross-border address deliveries**, the phone number must belong to a mobile operator in the recipient's country. If the phone number is submitted in a local (non-international) format, the system will attempt to **normalize** it to the international format, but the internal algorithm does not cover all possible cases. If your system does not support front-end validation of phone numbers, we recommend informing us about failed phone number cases so we can assess potential improvements to the normalization logic.\n","minimum":8,"maximum":15},"email":{"type":"string","description":"Recipient`s E-mail."},"name":{"type":"string","description":"Surname and first name of the recipient or representative of the company, if it is a legal entity.","maxLength":100},"countryCode":{"type":"string","description":"Recipient's country code, according to the ISO 3166-1 Alpha-2 standard. For example, UA.","pattern":"^[A-Z]{2}$"},"settlementId":{"type":"string","description":"Settlement id code."},"cityId":{"type":"integer","description":"City id code.","nullable":true},"address":{"type":"string","description":"Home address or warehouse description."},"addressParts":{"type":"object","description":"Recipient's address in case of sending to the address. Parameter contains a few variables to describe recipient`s delivery address or other place beside warehouses.","properties":{"postCode":{"type":"string","description":"Postal code.","maxLength":10},"region":{"type":"string","description":"City region name, only for address delivery.","maxLength":100},"city":{"type":"string","description":"City or town name, only for address delivery.","maxLength":100},"street":{"type":"string","description":"Street name, only for address delivery.","maxLength":100},"building":{"type":"string","description":"Building number, only for address delivery.","maxLength":100},"block":{"type":"string","description":"Block.","maxLength":100},"flat":{"type":"string","description":"Apartment number, only for address delivery.","maxLength":100},"note":{"type":"string","description":"Additional information about sender`s address.","maxLength":100}}},"divisionId":{"type":"string","description":"Warehouse`s id code. If receiving with warehouse, than this parameter must contain information."},"divisionCategory":{"type":"string","description":"Warehouse type."},"archive":{"type":"boolean","description":"Internal data, not for use."}}},"parcels":{"type":"array","description":"Parcels` description block. Array contains objects, each object responsible for information about parcel.","items":{"type":"object","properties":{"number":{"type":"string","description":"Transportation document number.","pattern":"^[A-Z]{4}\\d{10}$"},"row_number":{"type":"integer","description":"Parcel number.","minimum":1},"untied":{"type":"boolean","description":"Internal data, not for use."},"cargo_category_id":{"type":"string","description":"Internal data, not for use."},"cargo_category_group":{"type":"string","description":"Parcel type."},"parcel_description":{"type":"string","description":"A brief description of the contents of the package.","maxLength":255},"insurance_cost":{"type":"number","description":"The amount of the declared value.","minimum":0,"exclusiveMinimum":true},"length":{"type":"integer","description":"The actual length of the parcel in mm.","minimum":1},"width":{"type":"integer","description":"The actual width of the parcel in mm.","minimum":1},"height":{"type":"integer","description":"The actual height of the parcel in mm.","minimum":1},"actual_weight":{"type":"integer","description":"The actual weight of the parcel in grams.","minimum":0,"maximum":2147483647},"volumetric_weight":{"type":"integer","description":"The volumetric weight of the parcel.","minimum":0,"maximum":2147483647},"length_check":{"type":"integer","nullable":true},"width_check":{"type":"integer","nullable":true},"height_check":{"type":"integer","nullable":true},"actual_weight_check":{"type":"integer","nullable":true},"volumetric_weight_check":{"type":"integer","nullable":true}}}},"services":{"type":"array","description":"Information about international shipping.","items":{"type":"object","properties":{"id":{"type":"integer","description":"Unique identifier. Internal data, not for use."},"service_id":{"type":"string","description":"Service`s identifier. Internal data, not for use."},"service_type":{"type":"string","description":"Type of service (e.g. `InternationalServices`, `MainService`, `AdditionalServices`)."},"service_name":{"type":"string","description":"Name of the service that is part of the shipment cost.\n\nExample: `Parcel international delivery (medium)`, `Parcel from home`.\n\nThis field represents one of the individual services that together form the total delivery cost. The response may include several such services depending on the selected delivery options and shipment configuration.\n\nTo obtain the full list of possible services and understand which combinations may apply, please contact your account manager.\n"},"parcel_number":{"type":"string","description":"Position number in the transportation document."},"payer_type":{"type":"string","description":"Information about who pays for delivery (e.g. `Sender`, `Recipient`, `ThirdPerson`)."},"amount":{"type":"number","description":"Number of objects in the position.","minimum":0},"price":{"type":"number","minimum":0},"discount":{"type":"number","minimum":0},"cost":{"type":"number","minimum":0},"cost_before_check":{"type":"number","nullable":true},"payment_status":{"type":"string","description":"Status of payment for delivery services (e.g. `Paid`, `NeedPay`, `ContractAfterPayment`, `FreeOfCharge`, `Holded`)."},"additional_parameters":{"type":"object","properties":{"cod":{"type":"integer","nullable":true,"description":"Money`s transfer information."},"date":{"type":"integer","nullable":true},"from":{"type":"integer","nullable":true},"to":{"type":"integer","nullable":true},"string":{"type":"integer","nullable":true},"fullName":{"type":"integer","nullable":true},"phone":{"type":"integer","nullable":true}}}}}},"onlineTracking":{"type":"object","description":"General statuses of the package movement (created/on the way/arrived/received). Types of statuses are displayed, into which detailed statuses are grouped.","properties":{"tracking_status_code":{"type":"integer","description":"Tracking status code."},"tracking_update_date":{"type":"string","description":"Tracking update date."},"short_description":{"type":"string","description":"Tracking short status description."},"long_description":{"type":"string","description":"Tracking full status description."},"info":{"type":"string"},"label":{"type":"string"}}},"tracking":{"type":"array","description":"Array of statuses representing all stages of the parcel's journey from the sender to the recipient with detailed information.","items":{}},"totalWeight":{"type":"integer","description":"Document total weight."},"totalInsuranceCost":{"type":"number","description":"Document total declared cost. The value must greater than zero.","minimum":1,"exclusiveMinimum":true},"totalCost":{"type":"number","description":"Cost for delivery services. The value must greater than zero.","minimum":1,"exclusiveMinimum":true},"invoice":{"type":"object","description":"Invoice data used for customs processing, including declared value, currency, and goods information.\n\nThe structure of the invoice object in the response depends on the data provided during shipment creation.\n\n🔹If some fields were not provided in the request, they may be absent in the response.\n","properties":{"customerNumber":{"type":"string","description":"Unique identifier/number of the invoice accompanying the goods in the shipment, generated by the client. Used for customs processing to link shipment goods with accompanying documentation.","maxLength":50,"nullable":true},"customerCreatedAt":{"type":"string","format":"date-time","description":"Date specified in the invoice accompanying the shipment."},"type":{"type":"string","description":"Type of client invoice accompanying the shipment and used for customs declaration."},"incoterm":{"type":"string","description":"Specifies the trade terms for the shipping agreement between the buyer and seller, based on selected standards from the Incoterms® rules."},"exportReason":{"type":"string","description":"Specifies the general reason for exporting items."},"cost":{"type":"number","description":"Total declared invoice value in the original currency."},"currency":{"type":"string","description":"ISO 4217 currency code of the invoice."},"payerFeesCustoms":{"type":"string","description":"Specifies who is responsible for paying for customs services."},"items":{"type":"array","description":"A detailed list of goods being shipped.\n\n🔹Objects may include only the fields provided during shipment creation. Optional fields may be absent in the response.\n","items":{"type":"object","properties":{"customerId":{"type":"string","description":"Client item identifier."},"hsCode":{"type":"string","description":"The Harmonized System code for each item."},"name":{"type":"string","description":"Item name in the original language used for customs identification."},"nameEng":{"type":"string","description":"Item name in English for international processing and documentation."},"material":{"type":"string","description":"Primary material of the item."},"materialEng":{"type":"string","description":"Material description in English."},"madeInCountryCode":{"type":"string","description":"Country of origin code (ISO 3166-1 alpha-2).","nullable":true},"producerAndModel":{"type":"string","description":"Manufacturer and model of the item."},"actualWeight":{"type":"integer","description":"Total weight of all units of the item in grams."},"measurementCode":{"type":"string","description":"Unit of measurement (e.g. pieces, kg)."},"amount":{"type":"number","description":"Quantity of the item in the specified unit."},"cost":{"type":"number","description":"Value per unit of the item in the sender’s currency."}}}}}}}}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/Validation"},"503":{"$ref":"#/components/responses/Time-out"}},"summary":"Find Shipments List"}}}}
```

## Update Shipment Document

> This API method enables you to update an existing transportation document by providing the document ID and the complete set of updated data. By specifying the document ID and including all the necessary information, you can replace the old document with the new data provided in the request. The response will typically indicate the success of the update operation and may include details of the modified document.\
> \
> Update restrictions:\
> \- Shipment data can be updated \*\*only while the shipment is in the \`ReadyToShip\` status\*\*.\
> \- Updates are allowed \*\*only if the shipment label has not been printed\*\*.\
> \- If the shipment is not in the \`ReadyToShip\` status or the shipment label has already been printed, the update request will be rejected with a validation error.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Shipments"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}},"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Validation":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Time-out":{"description":"Connection time-out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}}},"paths":{"/shipments/{id}":{"put":{"tags":["Shipments"],"description":"This API method enables you to update an existing transportation document by providing the document ID and the complete set of updated data. By specifying the document ID and including all the necessary information, you can replace the old document with the new data provided in the request. The response will typically indicate the success of the update operation and may include details of the modified document.\n\nUpdate restrictions:\n- Shipment data can be updated **only while the shipment is in the `ReadyToShip` status**.\n- Updates are allowed **only if the shipment label has not been printed**.\n- If the shipment is not in the `ReadyToShip` status or the shipment label has already been printed, the update request will be rejected with a validation error.\n","parameters":[{"name":"id","in":"path","description":"Transportation document id.","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":{"description":"Optional description in *Markdown*","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","description":"Signifies the current status of the transportation document, tracking its progress through the shipping lifecycle. Statuses detail each critical phase:\n- `Draft`: The document is in its preliminary stage, not yet finalized.\n- `Accepted`: Reviewed and accepted, the document is ready for the next steps.\n- `Issued`: The document has been completed and is ready for shipping.\n- `ReadyToShip`: Indicates that the shipment is prepared for transport following the creation of the express waybill. Only this value can be specified when creating a shipment.\n- `Deleted`: The document has been deleted from the system.\n- `Returned`: The shipment has been returned to its sender.\n- `Utilized`: Indicates that the physical goods associated with the transportation document have been disposed of or destroyed and the document is closed.\n","enum":["ReadyToShip"]},"clientOrder":{"type":"string","description":"Represents all potential order identifiers associated with the shipment. These identifiers are set by the customer for internal tracking purposes and are crucial for tracking the shipment throughout its journey. All entered values can be tracked in the shipment's tracking system.","maxLength":50},"note":{"type":"string","description":"Any additional information or special instructions that pertain to the order can be included here. This could encompass delivery instructions, special handling requests, or other pertinent details that facilitate the handling and processing of the shipment.","maxLength":255},"deliveryType":{"type":"string","description":"Defines the tariff type to be applied to the shipment during creation or update.\n- `standard`: Standard international delivery tariff.\n- `economy`: Economy international delivery tariff.\n- `express`: Express international delivery tariff.\n\nIf the field is not provided, the tariff type is determined automatically according to current business rules, and the existing shipment update behaviour remains unchanged.\n\n**🔹This field is optional.**\n"},"payerType":{"type":"string","description":"Identifies who is responsible for the payment of delivery services. The payer type determines which party bears the cost:\n- `Sender`: The party sending the goods pays for the delivery.\n- `Recipient`: The party receiving the goods is responsible for the delivery cost.\n- `ThirdPerson`: A third party, not the sender or recipient, pays for the delivery services. When selecting 'ThirdPerson', the field 'payerContractNumber' must be populated with the contract number of the paying party. For more detailed information, refer to the article on [Payment for Delivery Services via Nova Post API](https://api-portal.novapost.com/en/api-methods/payment/).\n","enum":["Sender","Recipient","ThirdPerson"]},"payerContractNumber":{"type":"string","description":"This field is required when the 'payerType' is set to 'ThirdPerson'. It should contain the contract number. For clients from Ukraine, it is also acceptable to provide the tax identification number (EDRPOU) instead of the contract number. Additionally, this field must be completed for the sender as the payer when non-cash transactions are used. Failure to provide this information will default the payment method to cash. Ensure the information is accurate, as it is essential for processing the payment. For more detailed information, refer to the article on [Payment for Delivery Services via Nova Post API](https://api-portal.novapost.com/en/api-methods/payment/).","minLength":2,"maxLength":20,"nullable":true},"invoice":{"type":"object","description":"This object encapsulates the invoice details crucial for international shipments undergoing customs clearance. It presents the necessary data for customs authorities to process the consignment efficiently, including the assessment of duties and taxes, and to confirm adherence to import/export regulations. The structured format of the invoice ensures that all pertinent information is easily accessible and clear, facilitating a smoother transit across borders.","properties":{"customerNumber":{"type":"string","description":"Unique identifier/number of the invoice accompanying the goods in the shipment, generated directly by the client. It is used for customs processing (export and import clearance) because it ensures a clear link between the goods in the shipment and their accompanying documentation, including value, origin, and other necessary information for customs clearance.\n\nIf a client invoice exists in the shipment but its information is missing—specifically, its number—the shipment processing in the information system will be halted, the customs clearance period will be extended, and in the worst case, customs authorities may refuse clearance and initiate a return to the country of export.\n","maxLength":50,"nullable":true},"customerCreatedAt":{"type":"string","format":"date-time","description":"You must provide the date specified in the invoice accompanying the shipment.\nIf the date is not present in the client document, the shipment creation date may be used.\n\n**🔹This field is required if the** `invoice.customerNumber` **field is filled in.**\n","pattern":"^20[0-9]{2}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{6}Z$"},"type":{"type":"string","description":"Type of client invoice accompanying the shipment and used for customs declaration.\nThis field must reflect the actual type of document enclosed in the parcel.\nAvailable values:\n- `Invoice` — commercial invoice for shipments of a commercial nature\n- `ProformaInvoice` — proforma invoice for shipments of a non-commercial nature\n\n**🔹This field is required if the** `invoice.customerNumber` **field is filled in.**\n","enum":["Invoice","ProformaInvoice"]},"incoterm":{"type":"string","description":"Specifies the trade terms for the shipping agreement between the buyer and seller, based on selected standards from the Incoterms® rules. These terms define the allocation of shipping costs, insurance, customs duties, and the distribution of risk. Only a limited subset of Incoterms® is available for use:\n- `DAP`: Delivered at Place\n","enum":["DAP"]},"exportReason":{"type":"string","description":"Specifies the general reason for exporting items, which is required for customs and other regulatory bodies. This classification helps in understanding the type of shipment without getting into specifics. It's used to categorize shipments at a high level for smoother processing through customs. The available options are:\n- `ForPersonalPurposes`: Items are for personal use or gifts.\n- `Selling`: Items are meant for sale.\n- `Repair`: Items being sent for repair.\n- `Return`: Items are being returned to the sender or manufacturer.\n- `Other`: Any reason not covered by the other options.\n","enum":["ForPersonalPurposes","Selling","Repair","Return","Other"]},"cost":{"type":"number","description":"Total declared invoice value in the original currency. Used for customs and shipment declarations.\n\n**🔸Values are validated for decimal precision, and digits beyond two decimal places are ignored.**\n\n**🔹This field is required for shipments crossing the EU border or going outside the EU.**\n","minimum":0,"maximum":9999999.99},"currency":{"type":"string","description":"ISO 4217 currency code of the invoice. All items in the invoice must use the same currency.\n\n**🔹This field is required for shipments crossing the EU border or going outside the EU.**\n","pattern":"^[A-Z]{3}$"},"payerFeesCustoms":{"type":"string","description":"Specifies who is responsible for paying for customs services. The parameter determines which party bears the costs:\n- `Sender`: The party sending the goods pays for the customs duties.\n- `Recipient`: The party receiving the goods is responsible for the customs duties costs.\n- `ThirdPerson`: A third party can only pay for customs services if this is permitted and the payer for delivery services is also a third party.\n\nThe default value is `Recipient`.</br>\nThis value will also be applied automatically if the parcel exceeds the maximum allowed value (in the recipient country’s currency) for which the sender is permitted to pay customs duties.\n\n**🔹This parameter is required and valid only for the UA-EU direction.**\n","enum":["Sender","Recipient","ThirdPerson"]},"items":{"type":"array","description":"A detailed list of goods being shipped, including descriptions and values, essential for customs declarations and assessing duties.","items":{"type":"object","properties":{"customerId":{"type":"string","description":"Client item identifier."},"hsCode":{"type":"string","description":"The Harmonized System code for each item, a standardized numerical method of classifying traded products.\n  This field is required for international shipments that pass through customs clearance. You can obtain the valid `hsCode` from the Cargo Classifiers (UKT ZED) dictionary.\n  Validation rules:\n  - **If the sender or recipient country is Moldova (MD) or Canada (CA):**\n    - The `hsCode` must consist of exactly 10 numeric characters.\n    - If the input is longer than 10 digits, it will be **truncated** on the right.\n    - If it contains fewer than 10 digits - validation error.\n  - **For all other countries:**\n    - The `hsCode` must contain **between 8 and 10 numeric characters** (inclusive).\n    - If fewer than 8 digits – validation error.\n  - **All non-digit characters will be stripped automatically before validation.**\n  - **If the value of the `hsCode` field is** `210690` **or** `630900`**, the following conditions must be met:**\n    - The `measurementCode` must be set to `kg`.\n    - Each item with this `hsCode` must be unique — the invoice must not contain more than one item with code `210690` or `630900`.\n    - The amount value must not exceed 10.\n    \n**🔹This field is required for shipments crossing the EU border or going outside the EU.**\n","maxLength":255,"nullable":true},"name":{"type":"string","description":"Represents the item's name in the local language, offering an accurate description for customs and logistical planning. The name should correspond with terminologies found in the Cargo Classifiers (UKT ZED) dictionary, ensuring compliance with standard classification codes. This detailed description aids in precise item identification during the customs clearance process.\nThis field supports Unicode encoding, permitting the inclusion of special characters and symbols using the \\uXXXX format. This capability allows for precise representation of item names in languages that incorporate non-Latin characters, enhancing clarity and understanding across diverse regulatory environments.\n","maxLength":512},"nameEng":{"type":"string","description":"Specifies the item's name in English, critical for ensuring that the product is identifiable and understandable across international trade and logistics channels. The English name simplifies communication and documentation processes when dealing with international partners and authorities, aiding in the seamless facilitation of global shipments.\nSimilar to the 'name' field, this parameter also supports Unicode encoding. Using the \\uXXXX format, it accommodates the accurate rendering of any special characters necessary for the correct representation of the item's name in English.\n","maxLength":512},"materialEng":{"type":"string","description":"The description of the item's material in English, aiding in the universal understanding of the product's composition.","maxLength":255},"madeInCountryCode":{"type":"string","description":"The ISO 3166-1 alpha-2 code indicating the country of manufacture, essential for determining import duties and compliance with trade agreements.","pattern":"^[A-Z]{2}$","nullable":true},"producerAndModel":{"type":"string","description":"The parameter represents the manufacturer and model of the device when creating a shipment. Both values are included in a single parameter. This parameter is mandatory for the following categories:\n- Electrical appliances\n- Laptops\n- Phones\n- Large and small household appliances\n- Other similar items\n","maxLength":255,"nullable":true},"actualWeight":{"type":"integer","description":"Actual total weight of all units of the item in grams (g), crucial for calculating shipping costs and ensuring the shipment complies with carrier limitations.\n\nExpected unit: grams (g)\n\nOnly precision up to 10 grams (0.01 kg) is supported. Values not divisible by 10 g will be rounded down to the nearest lower multiple of 10 g.\n\n⚠️IMPORTANT: Please round weight values to the nearest 10 g before sending, to avoid unexpected adjustments.\n","minimum":1,"maximum":2147483647,"nullable":true},"measurementCode":{"type":"string","description":"The unit of measurement for the item quantity, such as pieces, kilograms, meters, etc., standardizing the way quantities are reported.","maxLength":255},"amount":{"type":"number","description":"The quantity of the item being shipped, necessary for inventory and customs documentation. Value in the units of measurement corresponding to the field `measurementCode`.","minimum":0,"maximum":9999999.99},"cost":{"type":"number","description":"The value per single unit of the item in the sender's currency, important for insurance and customs valuation.\n\n**🔸Values are validated for decimal precision, and digits beyond two decimal places are ignored.**\n","minimum":0,"maximum":9999999.99}}}}}},"services":{"type":"array","description":"Contains information about additional services for the shipment.","properties":{"shipmentParcelRowNumber":{"type":"integer","nullable":true,"description":"Specifies the row number of the parcel to which the service is applied.\nThe value must correspond to the `rowNumber` of an existing parcel in the `parcels` array.\n\nFor services applied to the **entire shipment** (for example, `ExpBackwardGoods`), this field must be set to `null`.\n"},"serviceCode":{"type":"string","description":"The code indicating the service.\n\n**A list of available codes and descriptions of their meanings:**\n- `ExpBackwardGoods` — enables return delivery option for parent shipment\n- `BackwardDelGoods` — confirms return delivery in child shipment\n\n- `ExpBackwardCreditDoc` — Enables return delivery of signed documents for domestic document shipments within Moldova. The service is available only for legal entities and only for shipments with the “Documents” type. The return shipment is created as a separate document delivery (by courier or operator), and the payer is always the Recipient under a non-cash contract. Not available for Parcel Locker and PUDO service channels. In the first iteration, the service is enabled only for selected legal entities.\n\n🔹**This field is required for the `services` group.**\n"},"amount":{"type":"number","description":"The total amount the recipient must pay under the COD service.\n\n🔹**This field is required for the `services` group.**\n"},"contractNumber":{"type":"string","nullable":true,"description":"Contract number of the payer responsible for the selected service.\nThis parameter is used to identify the contractual agreement under which the service is paid.\n\nThe field is required when the service payer is a **third party** or when non-cash payment terms are applied. If not provided, the payment may be processed according to default billing rules.\n"},"payerType":{"type":"string","description":"Determines who is responsible for paying for the service. The payer type determines which party bears the costs:\n\n- `Recipient` — The only allowed value for the COD service.\n- `Sender`, `Recipient` — Allowed payer values for the ExpBackwardGoods service.\n- `Sender`, `Recipient`, `ThirdPerson` — Allowed payer values for the BackwardDelGoods service.\n\n🔹**This field is required for the `services` group.**\n"},"additionalParameters":{"type":"string","description":"Additional parameters for the service.","properties":{"backwardDelivery":{"type":"array","description":"Additional parameters for configuring return delivery.\n\n🔹**These parameters are mandatory and required only for the ExpBackwardGoods service**\n","items":{"type":"object","properties":{"description":{"type":"string","description":"Description of the goods to be returned.\nThis value is used for informational and operational purposes during the return delivery process.\n"}}}}}}}},"parcels":{"type":"array","description":"Parcels` description block. Array contains objects, each object responsible for information about parcel.","items":{"type":"object","properties":{"cargoCategory":{"type":"string","description":"Specifies the type of the shipment, helping to categorize the goods for logistics and customs processing. The category impacts how the shipment is handled, its shipping cost, and the required documentation. Available categories are:\n- `parcel`: Small to medium-sized packages, typically for consumer goods and retail items.\n- `documents`: Postal shipments containing documents such as letters, contracts, and official papers. This category is specifically for items that weigh no more than 1 kg and have dimensions not exceeding 35 cm in length, 25 cm in width, and 2 cm in height.\n- `cargo`: Larger and bulk items, including pallets or containers, meant for commercial shipping and large-scale transport.\n- `pallet`: Type of cargo formed as a pallet shipment with fixed dimensions and weight limits, available in the Business Cabinet of Europe for legal entities:\n  - Up to 250 kg, area ~0.48 m², dimensions 80 × 60 × 170 cm\n  - Up to 500 kg, area ~0.96 m², dimensions 120 × 80 × 170 cm\n  - Up to 750 kg, area ~1.2 m², dimensions 120 × 100 × 170 cm\n  - Up to 1000 kg, area ~1.2 m², dimensions 120 × 100 × 170 cm\n","enum":["parcel","documents","cargo","pallet"]},"parcelDescription":{"type":"string","description":"This field requires a concise description of the contents within the shipment, providing essential information on the nature of the items enclosed. This description aids in the logistics process, offering a clear understanding of the package contents for transportation planning and customs clearance. The summary should include details like the type of items, their purpose, and any other relevant information that describes the contents. It’s crucial for ensuring that the shipment complies with shipping regulations and facilitates smooth customs processing.\nAdditionally, this field supports data in Unicode encoding, allowing for the inclusion of special characters and symbols using the \\uXXXX format. This feature is particularly useful for languages that use non-Latin characters, ensuring accurate representation of item descriptions across diverse linguistic contexts.\n","maxLength":255},"insuranceCost*":{"type":"number","format":"float","description":"Represents the declared value of the shipment for insurance coverage. This value indicates the maximum compensation amount in the event of damage or loss during transit. It is important to accurately declare this value to match the actual worth of the shipment contents, as underdeclaring can result in insufficient compensation.\n\n**Currency handling:**\n- If `insuranceCurrencyCode` is **not provided**, the value must be specified in the **currency of the sender's country**.\n- If `insuranceCurrencyCode` **is provided**, the value can be specified in any supported currency (ISO 4217). The system will automatically convert it to the sender's country currency before further processing.\n\n🔸**When** `insuranceCurrencyCode` **is used, all parcels must specify the same currency code. Mixed or partially filled currency values will result in a validation error.**\n\n**The value must always be greater than 0, regardless of the shipment direction.**\"\n","minimum":1,"exclusiveMinimum":true},"insuranceCurrencyCode":{"type":"string","description":"ISO 4217 currency code for the declared insurance value (`insuranceCost`). \n\n- When provided, the system converts `insuranceCost` to the sender's country currency automatically. \n- If used, all parcels must have the same `insuranceCurrencyCode`.\n\n🔹**This field is optional.**\"\n","pattern":"^[A-Z]{3}$"},"rowNumber":{"type":"integer","description":"Sequential identifier for each parcel within a shipment, used to organize and track individual packages, especially when multiple items are involved. If the shipment contains only one package, the value should be 1.","minimum":1},"untied":{"type":"boolean","description":"Allows cancellation of individual parcels within a multiparcel shipment before the shipment reaches the **Accepted** status. To cancel one parcel, the merchant must include the full array of all parcels in the update request and set the parameter `untied: true` for the parcel to be cancelled.\n\n⚠️IMPORTANT:\n- The first parcel (`rowNumber: 1`) cannot be detached. If it contains an error, the entire shipment must be cancelled and recreated.\n- When `untied` is used for **one parcel**, it must be included for **all parcels** in the request.\n- If a non-existent `rowNumber` is marked as `untied: true`, the system will return the error: `Impossible to delete a non-existent parcel`.\n- If not all parcels are provided in the request, the system will return: `Required parcel [rowNumber] is missing.`\n"},"width":{"type":"integer","description":"The parcel's width measured in millimeters, used alongside length and height to compute the total volume for logistical planning.","minimum":1},"length":{"type":"integer","description":"The parcel's length measured in millimeters, used alongside height and width to compute the total volume for logistical planning.","minimum":1},"height":{"type":"integer","description":"The parcel's height measured in millimeters, used alongside length and width to compute the total volume for logistical planning.","minimum":1},"actualWeight":{"type":"integer","description":"Actual total weight of all units of the item in grams (g), critical for shipping cost calculations and compliance with carrier weight limits.\n\nExpected unit: grams (g)\n\nOnly precision up to 10 grams (0.01 kg) is supported. Values not divisible by 10 g will be rounded down to the nearest lower multiple of 10 g.\n\n⚠️IMPORTANT: Please round weight values to the nearest 10 g before sending, to avoid unexpected adjustments.\n","minimum":1,"maximum":2147483647}}}},"sender":{"type":"object","description":"Information about the party sending the shipment, including details about an individual or organization responsible for the dispatch.","properties":{"companyTin":{"type":"string","description":"The tax identification number or equivalent identifier (EDRPOU, TIN, NIP, IČO) of a legal entity. \n\n🔹**Required for legal and customs documentation when the sender is a legal entity.**\n","maxLength":20,"nullable":true},"companyName":{"type":"string","description":"The official name of the sender's company. This field is used when the sender is a business entity, helping to identify the sending organization in documentation and records.","maxLength":100,"nullable":true},"eoriCode":{"type":"string","description":"The EORI code (Economic Operators Registration and Identification number) is used by the European Union to identify economic operators engaged in international trade. The sender's EORI code should be included in the invoice to ensure correct customs clearance and taxation when shipping goods to EU countries. The code is not mandatory but strongly recommended for international shipments to the EU, as it facilitates customs processing and helps avoid delays.","minLength":3,"maxLength":17,"nullable":true},"phone":{"type":"string","description":"The contact phone number of the sender or the sender’s company representative.\n\nIt is required for shipment-related communication, including pickup coordination and issue resolution.\n\n**Format:** The phone number must be provided in **international format** according to the **E.164** standard.\n\nExample: 380XXXXXXXXX, 491234567890, 371XXXXXXXX\n\n**Restrictions:**\n- The sender's phone number must be valid and reachable in case of delivery issues.\n- If the number is submitted in a local (non-international) format, the system will attempt to **normalize** it, but such logic is limited and may not support all variations across countries.\n\nWe strongly recommend implementing **front-end validation** to ensure numbers are entered in the correct international format.\n"},"email":{"type":"string","description":"Email address of the sender, providing an electronic means of contact for updates, inquiries, and important notifications about the shipment."},"name":{"type":"string","description":"The full name of the individual sender or the primary contact person for a company sender. This name is used in all correspondences and documents related to the shipment.","maxLength":100},"ioss":{"type":"string","description":"The IOSS (Import One-Stop Shop) number is an optional input used to facilitate the VAT declaration process for shipments from non-EU countries with a declared value of up to EUR 150. It is utilized by shippers using the IOSS process to simplify customs procedures for deliveries to private customers in the EU. This field is available for shipments where the sender's country is outside the EU and the destination is within the EU.","maxLength":12,"pattern":"/^[a-zA-Z0-9]*$/u"},"countryCode":{"type":"string","description":"A two-letter code representing the sender's country, following the ISO 3166-1 Alpha-2 standard, indicating the country of origin for the shipment.","pattern":"^[A-Z]{2}$"},"divisionNumber":{"type":"string","description":"This field is mandatory for parcels that are dispatched from a post office division or parcel locker, requiring the unique identifier of the dispatch location to be specified.","nullable":true},"addressParts":{"type":"object","description":"This array of fields is required when shipping directly from an address, detailing the specific components of the location from which the parcel is dispatched. It includes detailed address information, ensuring the accurate identification of the pickup location.","properties":{"city":{"type":"string","description":"The name of the city from which the shipment is dispatched. It helps pinpoint the exact urban location for pickup or shipping.","maxLength":100},"region":{"type":"string","description":"Specifies the broader administrative area, like a state or province, encompassing the city, providing additional context for the shipment's origin.","maxLength":100},"street":{"type":"string","description":"Identifies the specific street address for the sender's location, crucial for accurate pickup or delivery operations.","maxLength":100},"postCode":{"type":"string","description":"The postal or ZIP code corresponding to the sender's address. It's essential for sorting and routing the shipment efficiently.","maxLength":10},"building":{"type":"string","description":"The building number or name at the specified street address, pinpointing the precise location for shipment collection.","maxLength":100},"flat":{"type":"string","description":"If applicable, the apartment or suite number within a building from which the shipment originates, ensuring pickup personnel can locate the sender's exact unit.","maxLength":10},"block":{"type":"string","description":"Indicates a specific block or section within a larger residential area or complex, if relevant, aiding in locating the sender's precise starting point for the shipment.","maxLength":100,"nullable":true},"note":{"type":"string","description":"Allows for the inclusion of additional details or instructions about the sender's address that might facilitate the pickup process, such as gate codes, specific entry points, or preferred contact times.","maxLength":100}}}}},"recipient":{"type":"object","description":"Information about the party receiving the shipment, detailing either an individual or an organization responsible for receiving the dispatched goods.","properties":{"companyTin":{"type":"string","description":"The tax identification number or equivalent identifier (EDRPOU, TIN, NIP, IČO) of a legal entity.\n\n🔹**Required for legal and customs documentation when the recipient is a legal entity.**\n","maxLength":20,"nullable":true},"companyName":{"type":"string","description":"The formal name of the recipient's company. Utilize this field when the recipient is a business entity, aiding in the identification of the receiving organization in documents and records.","maxLength":100,"nullable":true},"eoriCode":{"type":"string","description":"The recipient's EORI code is important for customs clearance when shipping goods to European Union countries, especially when sending to legal entities. The code is not mandatory but recommended, as it helps ensure smooth customs clearance and minimizes the risk of delays. The requirement for the recipient eoriCode depends on the type of goods being shipped:\n1. Non-excise goods: The EORI code is not mandatory if non-excise goods are being shipped from Ukraine to a legal entity in Europe. If the recipient does not have an EORI code, one will be automatically assigned.\n2. Excise goods: The EORI code is required for shipments of excise goods. The recipient must obtain an EORI code before the goods can be shipped.\n","minLength":3,"maxLength":17,"nullable":true},"phone":{"type":"string","description":"The contact phone number of the recipient or the recipient’s company representative. Used for delivery notifications and communication with the customer during shipment processing.\n\n**Format:** The phone number must be provided in **international format** according to the **E.164** standard.\n\nExample: 380XXXXXXXXX, 491234567890, 371XXXXXXXX\n\n**Restrictions:**\n- For deliveries to Nova Post branches in Europe, Ukrainian mobile numbers are acceptable.\n- For deliveries to **partner locations** (such as InPost, GLS, Venipak, Cargus, etc.) and **cross-border address deliveries**, the phone number must belong to a mobile operator in the recipient's country. If the phone number is submitted in a local (non-international) format, the system will attempt to **normalize** it to the international format, but the internal algorithm does not cover all possible cases. If your system does not support front-end validation of phone numbers, we recommend informing us about failed phone number cases so we can assess potential improvements to the normalization logic.\n"},"email":{"type":"string","description":"The email address of the recipient, serving as a digital contact point for shipment updates, inquiries, and essential notifications."},"name":{"type":"string","description":"The complete name of the individual recipient or the primary contact for a company recipient. This is the name used for all shipping-related correspondence and documentation.","maxLength":100},"countryCode":{"type":"string","description":"A two-letter code that identifies the recipient's country, adhering to the ISO 3166-1 Alpha-2 standard, which specifies the shipment's destination country.","pattern":"^[A-Z]{2}$"},"divisionNumber":{"type":"string","description":"This field is mandatory for parcels intended to be collected from a post office division or parcel locker, requiring the insertion of the unique identifier for the designated location.","nullable":true},"addressParts":{"type":"object","description":"This array of fields is necessary when the shipment is directed to a specific address, outlining the precise location details to which the parcel is to be delivered. It encompasses comprehensive address information to ensure the exact identification of the delivery location.","properties":{"city":{"type":"string","description":"The city to which the shipment is being delivered. This detail ensures the parcel is directed to the correct urban area for the recipient.","maxLength":100},"region":{"type":"string","description":"Specifies the recipient's state or province within the destination country, crucial for accurate shipment routing and delivery. When sending to the USA, it's essential to include a two-letter state code, such as `WA` for Washington or `DC` for the District of Columbia, according to the ISO 3166-2:US standard.","maxLength":100},"street":{"type":"string","description":"The street name of the recipient's address, vital for pinpointing the exact delivery spot.","maxLength":100},"postCode":{"type":"string","description":"The postal or ZIP code for the recipient's address, critical for the precise sorting and routing of the parcel to its final destination.","maxLength":10},"building":{"type":"string","description":"Specifies the building number or name at the recipient's address, guiding the delivery to the exact building within a given street.","maxLength":100},"flat":{"type":"string","description":"The apartment or suite number, if the delivery is to a multi-unit building, ensuring the parcel reaches the specific unit of the recipient.","maxLength":10},"block":{"type":"string","description":"Identifies a block or section within a larger complex or residential area for the recipient, useful in large housing developments to further narrow down the delivery point.","maxLength":100,"nullable":true},"note":{"type":"string","description":"The space for any additional recipient-related address instructions or details that might assist in the delivery process, such as security instructions, specific doors for delivery, or preferred delivery times.","maxLength":100}}},"registrationAddressRecipient":{"type":"object","description":"The registrationAddressRecipient object provides a detailed breakdown of the recipient's registered address and is required when shipping to countries with specific customs requirements, such as Germany, Slovakia, Hungary, and France. This ensures compliance with local regulations and facilitates smooth customs processing. \nThe object allows for a precise and complete representation of the recipient's address, which is especially important for international shipments to countries with strict customs regulations.\n","properties":{"city":{"type":"string","description":"The name of the city where the recipient is registered. It must match the local naming conventions for accurate identification.\n\n**🔹This field is required for shipments to countries with specific customs requirements, including Germany, Slovakia, Hungary, and France.**\n","maxLength":100},"street":{"type":"string","description":"The name of the street in the recipient's address. It must match the local naming conventions for accurate identification.\n\n**🔹This field is required for shipments to countries with specific customs requirements, including Germany, Slovakia, Hungary, and France.**\n","maxLength":100},"zipCode":{"type":"string","description":"The postal code of the recipient's registered address.\n\n**🔹This field is required for shipments to countries with specific customs requirements, including Germany, Slovakia, Hungary, and France.**\n","maxLength":10},"building":{"type":"string","description":"The building number or name where the recipient is registered.\n\n**🔹This field is required for shipments to countries with specific customs requirements, including Germany, Slovakia, Hungary, and France.**\n","maxLength":100},"apartment":{"type":"string","description":"The flat or apartment number within the building.","maxLength":10},"state":{"type":"string","description":"The state or region where the recipient is registered. Required in some countries for detailed geographical identification.","maxLength":100}}}}}}}}}},"responses":{"202":{"description":"The shipment has been successfully updated. This response indicates that the specified transportation document's details have been modified according to the provided input parameters.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","description":"A unique identifier assigned to each shipment, facilitating internal operations such as modifications, system searches, and deletion of shipments. The 'id' serves as a key reference for administrative and logistical processes within the delivery system, allowing precise access and management of shipment records.","minimum":1},"number":{"type":"string","description":"The transportation document number provided to clients for tracking purposes and accessing printed forms. It also facilitates shipment searches within the system, offering a customer-friendly way to monitor shipment progress. While 'number' is used externally for tracking and documentation, it can also serve internal needs similar to 'id' for identifying shipments in certain system operations.","pattern":"^[A-Z]{4}\\d{10}$"},"scheduledDeliveryDate":{"type":"string","description":"Estimated delivery date based on routing and service level, subject to change based on logistics and external factors.","nullable":true},"status":{"type":"string","description":"Current status of the shipment. Initially set to `ReadyToShip` upon creation, indicating it's prepared for dispatch."},"cost":{"type":"number","format":"float","description":"Total cost calculated for the delivery services provided, based on shipment size, weight, destination, and service options selected."},"parcelsAmount":{"type":"integer","description":"The total number of parcels included in the shipment. This count helps in logistics planning and tracking.","minimum":1},"createdAt":{"type":"string","format":"date-time","description":"The date-time when the shipment record was created in the system."},"updatedAt":{"type":"string","format":"date-time","description":"The last date-time when the shipment record was updated. Helps in tracking changes and updates made to the shipment details."},"deletedAt":{"type":"string","format":"date-time","description":"The date-time when the shipment was canceled or removed from the system. If not canceled, this field is null.","nullable":true}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/Validation"},"503":{"$ref":"#/components/responses/Time-out"}},"summary":"Update Shipment Document"}}}}
```

## Delete Shipment Document

> This method allows you to delete a shipment document based on its unique identifier (ID).\
> To successfully remove the document from the system, the request must include its ID.\
> The response will indicate the success of the operation.\
> \
> \*\*Implementation Details for Different Regions:\*\*\
> \
> \*\*1. Europe:\*\*\
> \- The method primarily expects a unique ID (Ref ID) of the document.\
> \- Additionally, deletion using the shipment number (e.g., \`SHPL0123456789\`) is also supported.\
> \
> \*\*2. Ukraine:\*\*\
> \- Deletion is supported only by Ref ID (unique identifier of the document).\
> \- Deletion using the shipment number (e.g., waybill number) is not supported.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Shipments"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}},"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Validation":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Time-out":{"description":"Connection time-out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}}},"paths":{"/shipments/{id}":{"delete":{"tags":["Shipments"],"description":"This method allows you to delete a shipment document based on its unique identifier (ID).\nTo successfully remove the document from the system, the request must include its ID.\nThe response will indicate the success of the operation.\n\n**Implementation Details for Different Regions:**\n\n**1. Europe:**\n- The method primarily expects a unique ID (Ref ID) of the document.\n- Additionally, deletion using the shipment number (e.g., `SHPL0123456789`) is also supported.\n\n**2. Ukraine:**\n- Deletion is supported only by Ref ID (unique identifier of the document).\n- Deletion using the shipment number (e.g., waybill number) is not supported.\n","parameters":[{"name":"id","in":"path","description":"Transportation (shipment) document id.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"shipments","content":{"application/json":{"schema":{"type":"object","properties":{"deletedAt":{"type":"string","description":"Datetime when the document was deleted."}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/Validation"},"503":{"$ref":"#/components/responses/Time-out"}},"summary":"Delete Shipment Document"}}}}
```


# Create shipments

This section contains descriptions of shipment creation processes for domestic shipments within Ukraine, international shipments within Europe, and cross-border shipments to and from Ukraine.


# Domestic shipments within Ukraine

This page describes the process of creating shipments within Ukraine.

<details>

<summary>Shipment API Interaction Flow</summary>

```mermaid
flowchart LR

A((Start)) -->|POST shipments| B([Shipment created])

B -->|PUT shipments by id| C([Edit shipment])
B -->|GET shipment by id| D([Shipment info])
B -->|GET shipment label| E([Label print])
E --> F((End))

B -->|GET shipment status| G([Shipment status])

G -->|POST redirect shipment| H([Redirect])
G -->|POST add parcel info| I([Add parcel info])
G -->|POST cancel shipment| J([Cancellation])
J --> K((End))

G -->|GET print document| L([Label print])
L --> M((End))

style A fill:#ffffff,color:#E30613,stroke:#E30613,stroke-width:2px
style B fill:#E30613,color:#ffffff,stroke:#E30613,stroke-width:2px

style C fill:#ffffff,color:#222222,stroke:#E30613,stroke-width:2px
style D fill:#ffffff,color:#222222,stroke:#E30613,stroke-width:2px
style E fill:#ffffff,color:#222222,stroke:#E30613,stroke-width:2px
style G fill:#ffffff,color:#222222,stroke:#E30613,stroke-width:2px
style H fill:#ffffff,color:#222222,stroke:#E30613,stroke-width:2px
style I fill:#ffffff,color:#222222,stroke:#E30613,stroke-width:2px
style J fill:#ffffff,color:#222222,stroke:#E30613,stroke-width:2px
style L fill:#ffffff,color:#222222,stroke:#E30613,stroke-width:2px

style F fill:#E30613,color:#000000,stroke:#E30613,stroke-width:2px
style K fill:#E30613,color:#000000,stroke:#E30613,stroke-width:2px
style M fill:#E30613,color:#000000,stroke:#E30613,stroke-width:2px
```

</details>

<details>

<summary>Schema (Object)</summary>

<table data-search="false"><thead><tr><th width="127">Field</th><th width="91" align="center">Type</th><th width="108" align="center">Required</th><th>Description</th></tr></thead><tbody><tr><td><strong>status</strong></td><td align="center">enum</td><td align="center">yes</td><td><p>Signifies the current status of the transportation document, tracking its progress through the shipping lifecycle. Statuses detail each critical phase:</p><ul><li><code>Draft</code>: The document is in its preliminary stage, not yet finalized.</li><li><code>Accepted</code>: Reviewed and accepted, the document is ready for the next steps.</li><li><code>Issued</code>: The document has been completed and is ready for shipping.</li><li><code>ReadyToShip</code>: Indicates that the shipment is prepared for transport following the creation of the express waybill. Only this value can be specified when creating a shipment.</li><li><code>Deleted</code>: The document has been deleted from the system.</li><li><code>Returned</code>: The shipment has been returned to its sender.</li><li><code>Utilized</code>: Indicates that the physical goods associated with the transportation document have been disposed of or destroyed and the document is closed.</li></ul><p>Allowed: <code>ReadyToShip</code></p></td></tr><tr><td><strong>clientOrder</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Represents all potential order identifiers associated with the shipment. These identifiers are set by the customer for internal tracking purposes and are crucial for tracking the shipment throughout its journey. All entered values can be tracked in the shipment's tracking system.</p><p>Constraints: Max 50 chars</p></td></tr><tr><td><strong>note</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Any additional information or special instructions that pertain to the order can be included here. This could encompass delivery instructions, special handling requests, or other pertinent details that facilitate the handling and processing of the shipment.</p><p>Constraints: Max 255 chars</p></td></tr><tr><td><strong>deliveryType</strong></td><td align="center">string</td><td align="center">no</td><td><p>Defines the tariff type to be applied to the shipment during creation or update.</p><ul><li><code>standard</code>: Standard international delivery tariff.</li><li><code>economy</code>: Economy international delivery tariff.</li><li><code>express</code>: Express international delivery tariff.</li></ul><p>If the field is not provided, the tariff type is determined automatically according to current business rules, and the existing shipment creation behaviour remains unchanged.</p></td></tr><tr><td><strong>payerType</strong></td><td align="center">enum</td><td align="center">yes</td><td><p>Identifies who is responsible for the payment of delivery services. The payer type determines which party bears the cost:</p><ul><li><code>Sender</code>: The party sending the goods pays for the delivery.</li><li><code>Recipient</code>: The party receiving the goods is responsible for the delivery cost.</li><li><code>ThirdPerson</code>: A third party, not the sender or recipient, pays for the delivery services. When selecting <code>ThirdPerson</code>, the field <code>payerContractNumber</code> must be populated with the contract number of the paying party. For more detailed information, refer to the article on <a href="https://api-portal.novapost.com/en/api-methods/payment/">Payment for Delivery Services via Nova Post API</a>. This field is also referenced when generating an invoice.</li></ul><p>Allowed: <code>Sender</code> | <code>Recipient</code> | <code>ThirdPerson</code></p></td></tr><tr><td><strong>payerContractNumber</strong></td><td align="center">string┃null</td><td align="center">yes</td><td><p>This field is required in the following cases:</p><ul><li>When the <code>payerType</code> is set to <code>ThirdPerson</code>. It must contain the payer's contract number. For clients from Ukraine, it is also acceptable to provide the tax identification number (EDRPOU) instead of the contract number.</li><li>When the <code>payerType</code> is set to <code>Sender</code> or <code>Recipient</code> and a non-cash payment method is used.</li></ul><p>If this field is not provided in the cases described above, the payment method will automatically default to cash.</p><p>Ensure that the provided information is accurate, as it is essential for correct payment processing.</p><p>For more detailed information, refer to the article on <a href="https://api-portal.novapost.com/en/api-methods/payment/">Payment for Delivery Services via Nova Post API</a>.</p><p>Constraints: 2 to 20 chars</p></td></tr><tr><td><strong>services</strong></td><td align="center">array</td><td align="center">no</td><td>Contains information about additional services for the shipment.</td></tr><tr><td>services.<strong>shipmentParcelRowNumber</strong></td><td align="center">integer</td><td align="center">yes</td><td><p>Specifies the row number of the parcel to which the service is applied. The value must correspond to the <code>rowNumber</code> of an existing parcel in the <code>parcels</code> array.</p><p>For services applied to the <strong>entire shipment</strong> (for example, <code>ExpBackwardGoods</code>), this field must be set to <code>null</code>.</p></td></tr><tr><td>services.<strong>serviceCode</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The code indicating the service.</p><p><strong>A list of available codes and descriptions of their meanings:</strong></p><ul><li><code>COD</code> — The Cash on Delivery (COD) service allows the recipient to pay for the goods directly upon receiving them, without the need for prepayment. The sender can add this service to the shipment, and the recipient has the option to pay for the goods upon delivery and inspect them before making the payment, subject to payment method restrictions established for specific countries. </li></ul><p>🔸<strong>The COD service is planned to expand to other countries and delivery directions in the future, both for international shipments and within European countries.</strong></p><ul><li><code>ExpBackwardGoods</code> — Enables return delivery option for parent shipment</li><li><code>ExpBackwardCreditDoc</code> — Enables return delivery of signed documents for domestic document shipments within Moldova. The service is available only for legal entities and only for shipments with the <strong>Documents</strong> type. The return shipment is created as a separate document delivery (by courier or operator), and the payer is always the Recipient under a non-cash contract. Not available for Parcel Locker and PUDO service channels. In the first iteration, the service is enabled only for selected legal entities.</li></ul><p>🔹<strong>This field is required for the</strong> <code>services</code> <strong>group.</strong></p></td></tr><tr><td>services.<strong>serviceName</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Name of the service.</p><p>Allowed values include:</p><ul><li><code>PaymentControl</code> — Payment control service.</li><li><code>MoneyTransfer</code> — Money transfer service.</li><li>Other service types available within the <code>services</code> group.</li></ul><p>🔹<strong>This field is required within the</strong> <code>services</code> <strong>group.</strong></p></td></tr><tr><td>services.<strong>serviceId</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Unique identifier (reference ID) of the selected service.</p><p>This value must correspond to the service reference returned by the system. When creating or updating a shipment, the exact <code>serviceId</code> provided in the service reference response must be copied and used without modification.</p><p>🔹<strong>This field is required within the</strong> <code>services</code> <strong>group.</strong></p></td></tr><tr><td>services.<strong>amount</strong></td><td align="center">number</td><td align="center">yes</td><td><p>The total amount the recipient must pay under the COD service.</p><p>🔹<strong>This field is required for the</strong> <code>services</code> <strong>group.</strong></p></td></tr><tr><td>services.<strong>contractNumber</strong></td><td align="center">string┃null</td><td align="center">yes</td><td><p>Contract number of the payer responsible for the selected service. This parameter is used to identify the contractual agreement under which the service is paid.</p><p>The field is required when the service payer is a <strong>third party</strong> or when non-cash payment terms are applied. If not provided, the payment may be processed according to default billing rules.</p></td></tr><tr><td>services.<strong>payerType</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Determines who is responsible for paying for the service. The payer type determines which party bears the costs:</p><ul><li><code>Recipient</code> — The only allowed value for the COD service.</li><li><code>Sender</code>, <code>Recipient</code> — Allowed payer values for the ExpBackwardGoods service.</li><li><code>Sender</code>, <code>Recipient</code>, <code>ThirdPerson</code> — Allowed payer values for the BackwardDelGoods service.</li></ul><p><strong>🔻This field is required</strong></p></td></tr><tr><td>services.<strong>additionalParameters</strong></td><td align="center">string</td><td align="center">yes</td><td>Additional parameters for the service.</td></tr><tr><td>services.additionalParameters.<strong>cod</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Additional parameters for configuring COD.</p><p>🔹<strong>These parameters are mandatory and required only for the COD service</strong></p></td></tr><tr><td>services.additionalParameters.cod.<strong>bankAccount</strong></td><td align="center">object</td><td align="center">no</td><td>Information describing the bank account details to which the funds will be transferred. Includes the transfer amount, transaction currency, account identifiers, and the party responsible for paying the service fee.</td></tr><tr><td>services.additionalParameters.cod.bankAccount.<strong>amount</strong></td><td align="center">number</td><td align="center">yes</td><td><p>The amount that will be transferred to the sender’s account after payment. Specifies the amount the recipient must pay upon receipt. Automatic currency conversion is possible depending on the sender's or recipient's country.</p><p>🔹<strong>This field is required for the</strong> <code>services.additionalParameters.cod.bankAccount</code> <strong>field group.</strong></p></td></tr><tr><td>services.additionalParameters.cod.bankAccount.<strong>currencyCode</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The currency for the transaction, defined by the sender’s contract. Specified according to the ISO 4217 standard.</p><p>🔸<strong>By default, the currency of the sender’s country is used, but it is possible to set the currency manually (Feature under development).</strong></p><p>Pattern: ^[A-Z]{3}$</p></td></tr><tr><td>services.additionalParameters.cod.bankAccount.<strong>bankAccountId</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Tax identification number of an individual or a legal entity, used for its unique identification in the system and for verifying the existence of an active contract and the availability of financial services. The same as the value passed in the <code>companyTin</code> field.</p><p>🔹<strong>This field is required for the</strong> <code>services.additionalParameters.cod.bankAccount</code> <strong>field group.</strong></p><p>🔸<strong>Must contain the tax identification number or equivalent identifier (EDRPOU, TIN, NIP).</strong></p></td></tr><tr><td>services.additionalParameters.cod.bankAccount.<strong>bankAccountName</strong></td><td align="center">string</td><td align="center">yes</td><td><p>IBAN</p><p>🔹<strong>This field is required for the</strong> <code>services.additionalParameters.cod.bankAccount</code> <strong>field group.</strong></p><p>🔸<strong>Must contain the full account number in IBAN format.</strong></p></td></tr><tr><td>services.additionalParameters.cod.bankAccount.<strong>description</strong></td><td align="center">string</td><td align="center">yes</td><td>Additional description of the payment details.</td></tr><tr><td>services.additionalParameters.cod.bankAccount.<strong>commissionPayer</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Specifies the party responsible for paying the commission:</p><ul><li><code>Recipient</code></li><li><code>Sender</code></li></ul><p>🔹<strong>This field is required for the</strong> <code>services.additionalParameters.cod.bankAccount</code> <strong>field group.</strong></p></td></tr><tr><td>services.additionalParameters.<strong>backwardDelivery</strong></td><td align="center">object</td><td align="center">yes</td><td><p>Additional parameters for configuring return delivery.</p><p>🔹<strong>These parameters are mandatory and required only for the ExpBackwardGoods service</strong></p></td></tr><tr><td>services.additionalParameters.backwardDelivery.<strong>description</strong></td><td align="center">string</td><td align="center">no</td><td>Description of the goods to be returned. This value is used for informational and operational purposes during the return delivery process.</td></tr><tr><td><strong>invoice</strong></td><td align="center">object</td><td align="center">no</td><td><p>This object presents the necessary data for customs authorities to process the consignment efficiently, including the assessment of duties and taxes, and to confirm adherence to import/export regulations. The structured format of the invoice ensures that all pertinent information is easily accessible and clear, facilitating a smoother transit across borders.</p><p>Updated logic for invoice value handling. Clients must now send only two parameters in the invoice object:</p><ul><li><code>cost</code> — total declared value of the invoice</li><li><code>currency</code> — currency code of the invoice</li></ul><p><strong>🔸It encapsulates the invoice details, which are required for international shipments undergoing customs clearance.</strong></p></td></tr><tr><td>invoice.<strong>customerNumber</strong></td><td align="center">string┃null</td><td align="center">yes</td><td><p>Unique identifier/number of the invoice accompanying the goods in the shipment, generated directly by the client. It is used for customs processing (export and import clearance) because it ensures a clear link between the goods in the shipment and their accompanying documentation, including value, origin, and other necessary information for customs clearance.</p><p>If a client invoice exists in the shipment but its information is missing—specifically, its number—the shipment processing in the information system will be halted, the customs clearance period will be extended, and in the worst case, customs authorities may refuse clearance and initiate a return to the country of export.</p><p>Constraints: Max 50 chars</p></td></tr><tr><td>invoice.<strong>customerCreatedAt</strong></td><td align="center">string</td><td align="center">yes</td><td><p>You must provide the date specified in the invoice accompanying the shipment. If the date is not present in the client document, the shipment creation date may be used.</p><p><strong>🔹This field is required if the</strong> <code>invoice.customerNumber</code> <strong>field is filled in.</strong></p><p>Pattern: ^20[0-9]{2}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{6}Z$</p></td></tr><tr><td>invoice.<strong>type</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Type of client invoice accompanying the shipment and used for customs declaration. This field must reflect the actual type of document enclosed in the parcel. Available values:</p><ul><li><code>Invoice</code> — commercial invoice for shipments of a commercial nature</li><li><code>ProformaInvoice</code> — proforma invoice for shipments of a non-commercial nature</li></ul><p><strong>🔹This field is required if the</strong> <code>invoice.customerNumber</code> <strong>field is filled in.</strong></p><p>Possible values: <code>Invoice</code> | <code>ProformaInvoice</code></p></td></tr><tr><td>invoice.<strong>incoterm</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Specifies the trade terms for the shipping agreement between the buyer and seller, based on selected standards from the Incoterms® rules. These terms define the allocation of shipping costs, insurance, customs duties, and the distribution of risk. Only a limited subset of Incoterms® is available for use:</p><ul><li><code>DAP</code> (Delivered at Place) - The recipient is responsible for import customs clearance, duties, and taxes.</li><li><code>DDP</code> (Delivered Duty Paid) - The sender is responsible for import customs clearance and for paying all applicable duties and taxes.</li></ul><p><strong>🔹This field is required for shipments crossing the EU border or going outside the EU.</strong></p><p>Possible values: <code>DAP</code> | <code>DDP</code></p></td></tr><tr><td>invoice.<strong>exportReason</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Specifies the general reason for exporting items, which is required for customs and other regulatory bodies. This classification helps in understanding the type of shipment without getting into specifics. It's used to categorize shipments at a high level for smoother processing through customs. The available options are:</p><ul><li><code>ForPersonalPurposes</code>: Items are for personal use or gifts.</li><li><code>Selling</code>: Items are meant for sale.</li><li><code>Repair</code>: Items being sent for repair.</li><li><code>Return</code>: Items are being returned to the sender or manufacturer.</li><li><code>Other</code>: Any reason not covered by the other options.</li></ul><p><strong>🔹This field is required for shipments crossing the EU border or going outside the EU.</strong></p><p>Possible values: <code>ForPersonalPurposes</code>,<code>Selling</code>,<code>Repair</code>,<code>Return</code>,<code>Other</code></p></td></tr><tr><td>invoice.<strong>cost</strong></td><td align="center">number</td><td align="center">yes</td><td><p>Total declared invoice value in the original currency, which must equal the sum of all invoice items calculated as <strong>(amount × cost)</strong> for each item. Used for customs and shipment declarations.</p><p><strong>🔸If the provided <code>cost</code> value does not equal the sum of the <code>cost</code> values in the</strong> <code>items</code> <strong>array, it will be automatically recalculated by the system on our side.</strong></p><p><strong>🔸Values are validated for decimal precision, and digits beyond two decimal places are ignored.</strong></p><p><strong>🔹This field is required for shipments crossing the EU border or going outside the EU.</strong></p><p>Constraints: Min 0┃Max 9999999.99</p></td></tr><tr><td>invoice.<strong>currency</strong></td><td align="center">string</td><td align="center">yes</td><td><p>ISO 4217 currency code of the invoice. All items in the invoice must use the same currency.</p><p><strong>🔹This field is required for shipments crossing the EU border or going outside the EU.</strong></p><p>Pattern: ^[A-Z]{3}$</p></td></tr><tr><td>invoice.<strong>payerFeesCustoms</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Specifies who is responsible for paying for customs services. The parameter determines which party bears the costs:</p><ul><li><code>Sender</code>: The party sending the goods pays for the customs duties.</li><li><code>Recipient</code>: The party receiving the goods is responsible for the customs duties costs.</li><li><code>ThirdPerson</code>: A third party can only pay for customs services if this is permitted and the payer for delivery services is also a third party.</li></ul><p>The default value is <strong>"Recipient"</strong>.<br>This value will also be applied automatically if the parcel exceeds the maximum allowed value (in the recipient country’s currency) for which the sender is permitted to pay customs duties.</p><p><strong>🔹This parameter is required and valid only for the UA-EU direction.</strong></p><p>Possible values: <code>Sender</code> | <code>Recipient</code> | <code>ThirdPerson</code></p></td></tr><tr><td>invoice.<strong>items</strong></td><td align="center">object</td><td align="center">yes</td><td><p>A detailed list of goods being shipped, including required descriptions and values, essential for customs declarations and assessing duties.</p><p><strong>Logic:</strong> If the items block is provided, the system checks whether the total sum of all (<code>items.cost</code> × <code>items.amount</code>) matches the <code>invoice.cost</code> value. If not — the system updates <code>invoice.cost</code> to equal the sum of all items.</p><p><strong>🔸It is required to provide this information for each individual good in the shipment in the form of an array.</strong></p></td></tr><tr><td>invoice.items.<strong>customerId</strong></td><td align="center">string</td><td align="center">no</td><td><p>Client item identifier.</p><p><strong>🔹This field is optional.</strong></p></td></tr><tr><td>invoice.items.<strong>hsCode</strong></td><td align="center">string | null</td><td align="center">yes</td><td><p>The Harmonized System code for each item, a standardized numerical method of classifying traded products. This field is required for international shipments that pass through customs clearance. You can obtain the valid <code>hsCode</code> from the Cargo Classifiers (UKT ZED) dictionary. Validation rules:</p><ul><li><p><strong>If the sender or recipient country is Moldova (MD) or Canada (CA):</strong></p><ul><li>The <code>hsCode</code> must consist of exactly 10 numeric characters.</li><li>If the input is longer than 10 digits, it will be <strong>truncated</strong> on the right.</li><li>If it contains fewer than 10 digits - validation error.</li></ul></li><li><p><strong>For all other countries:</strong></p><ul><li>The <code>hsCode</code> must contain <strong>between 8 and 10 numeric characters</strong> (inclusive).</li><li>If fewer than 8 digits – validation error.</li></ul></li><li><strong>All non-digit characters will be stripped automatically before validation.</strong></li><li><p><strong>If the value of the <code>hsCode</code> field is <code>210690</code> or <code>630900</code>, the following conditions must be met:</strong></p><ul><li>The <code>measurementCode</code> must be set to <code>kg</code>.</li><li>Each item with this <code>hsCode</code> must be unique — the invoice must not contain more than one item with code <code>210690</code> or <code>630900</code>.</li><li>The amount value must not exceed 10.</li></ul></li></ul><p><strong>🔹This field is required for shipments crossing the EU border or going outside the EU.</strong></p><p>Constraints: Max 255 chars</p></td></tr><tr><td>invoice.items.<strong>name</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Represents the item's name in the local language, offering an accurate description for customs and logistical planning. The name should correspond with terminologies found in the Cargo Classifiers (UKT ZED) dictionary, ensuring compliance with standard classification codes. This detailed description aids in precise item identification during the customs clearance process. This field supports Unicode encoding, permitting the inclusion of special characters and symbols using the \uXXXX format. This capability allows for precise representation of item names in languages that incorporate non-Latin characters, enhancing clarity and understanding across diverse regulatory environments.</p><p><strong>🔹This field is required for shipments crossing the EU border or going outside the EU.</strong></p><p>Constraints: Max 512 chars</p></td></tr><tr><td>invoice.items.<strong>nameEng</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Specifies the item's name in English, critical for ensuring that the product is identifiable and understandable across international trade and logistics channels. The English name simplifies communication and documentation processes when dealing with international partners and authorities, aiding in the seamless facilitation of global shipments. Similar to the <code>name</code> field, this parameter also supports Unicode encoding. Using the \uXXXX format, it accommodates the accurate rendering of any special characters necessary for the correct representation of the item's name in English.</p><p><strong>🔹This field is required for shipments crossing the EU border or going outside the EU.</strong></p><p>Constraints: Max 512 chars</p></td></tr><tr><td>invoice.items.<strong>material</strong></td><td align="center">string</td><td align="center">no</td><td><p>The primary material from which the item is made, important for customs declarations and potential restrictions.</p><p><strong>🔸If this field is not provided, the default value will be applied.</strong></p><p>Constraints: Max 50 chars</p></td></tr><tr><td>invoice.items.<strong>materialEng</strong></td><td align="center">string</td><td align="center">no</td><td><p>The description of the item's material in English, aiding in the universal understanding of the product's composition.</p><p><strong>🔸If this field is not provided, the default value will be applied.</strong></p><p>Constraints: Max 255 chars</p></td></tr><tr><td>invoice.items.<strong>madeInCountryCode</strong></td><td align="center">string | null</td><td align="center">no</td><td><p>The ISO 3166-1 alpha-2 code indicating the country of manufacture, essential for determining import duties and compliance with trade agreements.</p><p><strong>🔸This field is not required; however, shipments with this field filled are given priority during customs clearance.</strong></p><p>Pattern: ^[A-Z]{2}$</p></td></tr><tr><td>invoice.items.<strong>producerAndModel</strong></td><td align="center">string | null</td><td align="center">no</td><td><p>The parameter represents the manufacturer and model of the device when creating a shipment. Both values are included in a single parameter. This parameter is mandatory for the following categories:</p><ul><li>Electrical appliances</li><li>Laptops</li><li>Phones</li><li>Large and small household appliances</li><li>Other similar items</li></ul><p><strong>🔸This field is not required; however, shipments with this field filled are given priority during customs clearance.</strong></p><p>Constraints: Max 255 chars</p></td></tr><tr><td>invoice.items.<strong>actualWeight</strong></td><td align="center">integer | null</td><td align="center">yes</td><td><p>Actual total weight of all units of the item in grams (g).</p><p>Supported precision: 10 grams (0.01 kg). Values not divisible by 10 g are rounded down to the nearest lower multiple of 10 g.</p><p><strong>🔸This field is mandatory when the</strong> <code>invoice.items</code> <strong>array is present in the request.</strong><br>The system validates that the sum of <code>actualWeight</code> values across <strong>all invoice items</strong> matches the <strong>total shipment weight</strong> (sum of <code>parcels[].actualWeight</code>).</p><p>⚠️IMPORTANT: Ensure that all invoice item weights are correctly rounded and that their total weight exactly matches the shipment weight to avoid validation errors.</p><p>Constraints: Min 1┃Max 2147483647</p></td></tr><tr><td>invoice.items.<strong>measurementCode</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The unit of measurement for the item quantity, such as pieces, kilograms, meters, etc., standardizing the way quantities are reported.</p><p><strong>🔹This field is required for shipments crossing the EU border or going outside the EU.</strong></p><p>Constraints: Max 255 chars</p></td></tr><tr><td>invoice.items.<strong>amount</strong></td><td align="center">number</td><td align="center">yes</td><td><p>The quantity of the item being shipped, necessary for inventory and customs documentation. Value in the units of measurement corresponding to the field <code>measurementCode</code>.</p><p><strong>🔹This field is required for shipments crossing the EU border or going outside the EU.</strong></p><p>Constraints: Min 0┃Max 9999999.99</p></td></tr><tr><td>invoice.items.<strong>cost</strong></td><td align="center">number</td><td align="center">yes</td><td><p>The value per single unit of the item in the sender's currency, important for insurance and customs valuation.</p><p><strong>🔸Values are validated for decimal precision, and digits beyond two decimal places are ignored.</strong></p><p><strong>🔹This field is required for shipments crossing the EU border or going outside the EU.</strong></p><p>Constraints: Min 0┃Max 9999999.99</p></td></tr><tr><td><strong>parcels</strong></td><td align="center">object</td><td align="center">yes</td><td><p>Parcels` description block. Array contains objects, each object responsible for information about parcel.</p><p><strong>🔻All fields in this array must be filled.</strong></p></td></tr><tr><td>parcels.<strong>cargoCategory</strong></td><td align="center">string</td><td align="center">no</td><td><p>Specifies the type of the shipment, helping to categorize the goods for logistics and customs processing. The category impacts how the shipment is handled, its shipping cost, and the required documentation. Available categories are:</p><ul><li><code>parcel</code>: Small to medium-sized packages, typically for consumer goods and retail items.</li><li><code>documents</code>: Postal shipments containing documents such as letters, contracts, and official papers. This category is specifically for items that weigh no more than 1 kg and have dimensions not exceeding 35 cm in length, 25 cm in width, and 2 cm in height.</li><li><p><code>pallet</code>: Type of cargo formed as a pallet shipment with fixed dimensions and weight limits, available in the Business Cabinet of Europe for legal entities:</p><ul><li>Up to 250 kg, area ~0.48 m², dimensions 80 × 60 × 170 cm</li><li>Up to 500 kg, area ~0.96 m², dimensions 120 × 80 × 170 cm</li><li>Up to 750 kg, area ~1.2 m², dimensions 120 × 100 × 170 cm</li><li>Up to 1000 kg, area ~1.2 m², dimensions 120 × 100 × 170 cm</li></ul></li></ul><p>Possible values: <code>parcel</code> | <code>documents</code> | <code>pallet</code></p></td></tr><tr><td>parcels.<strong>parcelDescription</strong></td><td align="center">string</td><td align="center">no</td><td><p>This field requires a concise description of the contents within the shipment, providing essential information on the nature of the items enclosed. This description aids in the logistics process, offering a clear understanding of the package contents for transportation planning and customs clearance. The summary should include details like the type of items, their purpose, and any other relevant information that describes the contents. It’s crucial for ensuring that the shipment complies with shipping regulations and facilitates smooth customs processing. Additionally, this field supports data in Unicode encoding, allowing for the inclusion of special characters and symbols using the \uXXXX format. This feature is particularly useful for languages that use non-Latin characters, ensuring accurate representation of item descriptions across diverse linguistic contexts.</p><p>Constraints: Max 255 chars</p></td></tr><tr><td>parcels.<strong>insuranceCost</strong></td><td align="center">number</td><td align="center">yes</td><td><p>Represents the declared value of the shipment for insurance coverage. This value indicates the maximum compensation amount in the event of damage or loss during transit. It is important to accurately declare this value to match the actual worth of the shipment contents, as underdeclaring can result in insufficient compensation.</p><p><strong>Currency handling:</strong></p><ul><li>If <code>insuranceCurrencyCode</code> is <strong>not provided</strong>, the value must be specified in the <strong>currency of the sender's country</strong>.</li><li>If <code>insuranceCurrencyCode</code> <strong>is provided</strong>, the value can be specified in any supported currency (ISO 4217). The system will automatically convert it to the sender's country currency before further processing.</li></ul><p>🔸<strong>When <code>insuranceCurrencyCode</code> is used, all parcels must specify the same currency code. Mixed or partially filled currency values will result in a validation error.</strong></p><p><strong>The value must always be greater than 0, regardless of the shipment direction.</strong>"</p><p>Example: <code>1.5</code></p></td></tr><tr><td>parcels.<strong>insuranceCurrencyCode</strong></td><td align="center">string</td><td align="center">no</td><td><p>ISO 4217 currency code for the declared insurance value (<code>insuranceCost</code>).</p><ul><li>When provided, the system converts <code>insuranceCost</code> to the sender's country currency automatically.</li><li>If used, all parcels must have the same <code>insuranceCurrencyCode</code>.</li></ul><p>🔹<strong>This field is optional.</strong>"</p><p>Pattern: ^[A-Z]{3}$</p></td></tr><tr><td>parcels.<strong>rowNumber</strong></td><td align="center">integer</td><td align="center">yes</td><td><p>Sequential identifier for each parcel within a shipment, used to organize and track individual packages, especially when multiple items are involved. If the shipment contains only one package, the value should be 1.</p><p>Constraints: Min 1</p></td></tr><tr><td>parcels.<strong>width</strong></td><td align="center">integer</td><td align="center">yes</td><td><p>The parcel's width measured in millimeters, used alongside length and height to compute the total volume for logistical planning.</p><p>Constraints: Min 1</p></td></tr><tr><td>parcels.<strong>length</strong></td><td align="center">integer</td><td align="center">yes</td><td><p>The parcel's length measured in millimeters, used alongside height and width to compute the total volume for logistical planning.</p><p>Constraints: Min 1</p></td></tr><tr><td>parcels.<strong>height</strong></td><td align="center">integer</td><td align="center">yes</td><td><p>The parcel's height measured in millimeters, used alongside length and width to compute the total volume for logistical planning.</p><p>Constraints: Min 1</p></td></tr><tr><td>parcels.<strong>actualWeight</strong></td><td align="center">integer</td><td align="center">yes</td><td><p>Actual item weight in grams (g).</p><p>Supported precision: 10 grams (0.01 kg). Values not divisible by 10 g are rounded down to the nearest lower multiple of 10 g.</p><p><strong>🔸This field is mandatory when the</strong> <code>invoice.items</code> <strong>array is present in the request.</strong><br>The system validates that the sum of <code>actualWeight</code> values across <strong>all invoice items</strong> matches the <strong>total shipment weight</strong> (sum of <code>parcels[].actualWeight</code>).</p><p>⚠️IMPORTANT: Ensure that all invoice item weights are correctly rounded and that their total weight exactly matches the shipment weight to avoid validation errors.</p><p>Constraints: Min 1┃Max 2147483647</p></td></tr><tr><td><strong>sender</strong></td><td align="center">object</td><td align="center">yes</td><td><p>Information about the party sending the shipment, including details about an individual or organization responsible for the dispatch.</p><p><strong>🔻This array of fields is required</strong></p></td></tr><tr><td>sender.<strong>companyTin</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The tax identification number or equivalent identifier (EDRPOU, TIN, NIP, IČO - for Slovakia) of a legal entity.</p><p><strong>🔸The fields are required for a legal entity. If they are not filled in, the sender will be considered an individual</strong></p><p>Constraints: Max 20 chars</p></td></tr><tr><td>sender.<strong>companyName</strong></td><td align="center">string | null</td><td align="center">yes</td><td><p>The official name of the sender's company. This field is used when the sender is a business entity, helping to identify the sending organization in documentation and records.</p><p>Constraints: Max 100 chars</p></td></tr><tr><td>sender.<strong>eoriCode</strong></td><td align="center">string | null</td><td align="center">yes</td><td><p>The EORI code (Economic Operators Registration and Identification number) is used by the European Union to identify economic operators engaged in international trade. The sender's EORI code should be included in the invoice to ensure correct customs clearance and taxation when shipping goods to EU countries. The code is not mandatory but strongly recommended for international shipments to the EU, as it facilitates customs processing and helps avoid delays.</p><p>Constraints: 3 to 17 chars</p></td></tr><tr><td>sender.<strong>phone</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The contact phone number of the sender or the sender’s company representative. It is required for shipment-related communication, including pickup coordination and issue resolution. </p><p><strong>Format:</strong> The phone number must be provided in <strong>international format</strong> according to the <strong>E.164</strong> standard. </p><p>Example: 380XXXXXXXXX, 491234567890, 371XXXXXXXX </p><p><strong>Restrictions:</strong></p><ul><li>The sender's phone number must be valid and reachable in case of delivery issues.</li><li>If the number is submitted in a local (non-international) format, the system will attempt to <strong>normalize</strong> it, but such logic is limited and may not support all variations across countries. We strongly recommend implementing <strong>front-end validation</strong> to ensure numbers are entered in the correct international format.</li></ul><p><strong>🔻This field is required</strong></p></td></tr><tr><td>sender.<strong>email</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Email address of the sender, providing an electronic means of contact for updates, inquiries, and important notifications about the shipment.</p><p><strong>🔹This field is required for shipments crossing the EU border or going outside the EU.</strong></p></td></tr><tr><td>sender.<strong>name</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The full name of the individual sender or the primary contact person for a company sender. This name is used in all correspondences and documents related to the shipment.</p><p><strong>🔸Important for EU → UA international shipments:</strong><br>The sender name <strong>must be provided using Latin characters only</strong>. Use of Cyrillic characters (including Ukrainian letters) is <strong>not allowed</strong> and will result in validation or processing errors on the Last Mile partner side.</p><p><strong>🔻This field is required</strong></p><p>Constraints: Max 100 chars</p></td></tr><tr><td>sender.<strong>ioss</strong></td><td align="center">string</td><td align="center">no</td><td><p>The IOSS (Import One-Stop Shop) number is an optional input used to facilitate the VAT declaration process for shipments from non-EU countries with a declared value of up to EUR 150. It is utilized by shippers using the IOSS process to simplify customs procedures for deliveries to private customers in the EU. This field is available for shipments where the sender's country is outside the EU and the destination is within the EU.</p><p>Constraints: Max 12 chars </p><p>Pattern: /^[a-zA-Z0-9]*$/u</p></td></tr><tr><td>sender.<strong>countryCode</strong></td><td align="center">string</td><td align="center">yes</td><td><p>A two-letter code representing the sender's country, following the ISO 3166-1 Alpha-2 standard, indicating the country of origin for the shipment.</p><p><strong>🔻This field is required</strong></p><p>Pattern: ^[A-Z]{2}$</p></td></tr><tr><td>sender.<strong>divisionNumber</strong></td><td align="center">string | null</td><td align="center">yes</td><td><p>This field is mandatory for parcels that are dispatched from a post office division or parcel locker, requiring the unique identifier of the dispatch location to be specified.</p><p><strong>🔹This field is required if both the</strong> <code>sender.addressParts</code> <strong>group and the</strong> <code>sender.divisionID</code> <strong>field are missing or empty</strong></p><p>Example: <code>32521/1</code></p></td></tr><tr><td>sender.<strong>divisionID</strong></td><td align="center">integer | null</td><td align="center">yes</td><td><p>Division ID for specific branch identification.</p><p><strong>🔹This field is required if both the</strong> <code>sender.addressParts</code> <strong>group and the</strong> <code>sender.divisionNumber</code> <strong>field are missing or empty</strong></p><p>Constraints: Min 1</p></td></tr><tr><td>sender.<strong>addressParts</strong></td><td align="center">object</td><td align="center">yes</td><td>This array of fields is required when shipping directly from an address, detailing the specific components of the location from which the parcel is dispatched. It includes detailed address information, ensuring the accurate identification of the pickup location.</td></tr><tr><td>sender.addressParts.<strong>city</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The name of the city from which the shipment is dispatched. It helps pinpoint the exact urban location for pickup or shipping.</p><p><strong>🔹This field is required if</strong> <code>sender.divisionNumber</code> <strong>and</strong> <code>sender.divisionID</code> <strong>fields are missing or empty.</strong><br>🔸For shipments where the sender country is <strong>Moldova</strong> or <strong>Ukraine</strong>, the sender city is validated against internal settlement directories. If the settlement cannot be resolved due to an invalid or unmapped value, the shipment will not be created.</p><p>Constraints: Max 100 chars</p></td></tr><tr><td>sender.addressParts.<strong>region</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Specifies the broader administrative area, like a state or province, encompassing the city, providing additional context for the shipment's origin.</p><p><strong>🔹This field is required for shipments when the sender or recipient country is the USA, Ireland, or Canada.</strong></p><p>Constraints: Max 100 chars</p></td></tr><tr><td>sender.addressParts.<strong>street</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Identifies the specific street address for the sender's location, crucial for accurate pickup or delivery operations.</p><p><strong>🔹This field is required if</strong> <code>sender.divisionNumber</code> <strong>and</strong> <code>sender.divisionID</code> <strong>fields are missing or empty.</strong></p><p>Constraints: Max 100 chars</p></td></tr><tr><td>sender.addressParts.<strong>postCode</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The postal or ZIP code corresponding to the sender's address. It's essential for sorting and routing the shipment efficiently.</p><p><strong>🔹This field is required if</strong> <code>sender.divisionNumber</code> <strong>and</strong> <code>sender.divisionID</code> <strong>fields are missing or empty.</strong></p><p>Constraints: Max 10 chars</p></td></tr><tr><td>sender.addressParts.<strong>building</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The building number or name at the specified street address, pinpointing the precise location for shipment collection.</p><p><strong>🔹This field is required if</strong> <code>sender.divisionNumber</code> <strong>and</strong> <code>sender.divisionID</code> <strong>fields are missing or empty.</strong></p><p>Constraints: Max 100 chars</p></td></tr><tr><td>sender.addressParts.<strong>flat</strong></td><td align="center">string</td><td align="center">no</td><td><p>If applicable, the apartment or suite number within a building from which the shipment originates, ensuring pickup personnel can locate the sender's exact unit.</p><p>Constraints: Max 10 chars</p></td></tr><tr><td>sender.addressParts.<strong>block</strong></td><td align="center">string | null</td><td align="center">no</td><td><p>Indicates a specific block or section within a larger residential area or complex, if relevant, aiding in locating the sender's precise starting point for the shipment.</p><p>Constraints: Max 100 chars</p></td></tr><tr><td>sender.addressParts.<strong>note</strong></td><td align="center">string</td><td align="center">no</td><td><p>Allows for the inclusion of additional details or instructions about the sender's address that might facilitate the pickup process, such as gate codes, specific entry points, or preferred contact times.</p><p>Constraints: Max 100 chars</p></td></tr><tr><td><strong>recipient</strong></td><td align="center">object</td><td align="center">yes</td><td><p>Information about the party receiving the shipment, detailing either an individual or an organization responsible for receiving the dispatched goods.</p><p><strong>🔻This array of fields is required</strong></p></td></tr><tr><td>recipient.<strong>companyTin</strong></td><td align="center">string | null</td><td align="center">yes</td><td><p>The tax identification number or equivalent identifier (EDRPOU, TIN, NIP, IČO - for Slovakia) of a legal entity.</p><p><strong>🔸The fields are required for a legal entity. If they are not filled in, the recipient will be considered an individual</strong></p><p>Constraints: Max 20 chars</p></td></tr><tr><td>recipient.<strong>companyName</strong></td><td align="center">string | null</td><td align="center">yes</td><td><p>The formal name of the recipient's company. Utilize this field when the recipient is a business entity, aiding in the identification of the receiving organization in documents and records.</p><p>Constraints: Max 100 chars</p></td></tr><tr><td>recipient.<strong>eoriCode</strong></td><td align="center">string | null</td><td align="center">yes</td><td><p>The recipient's EORI code is important for customs clearance when shipping goods to European Union countries, especially when sending to legal entities. The code is not mandatory but recommended, as it helps ensure smooth customs clearance and minimizes the risk of delays. The requirement for the recipient eoriCode depends on the type of goods being shipped:</p><ol><li>Non-excise goods: The EORI code is not mandatory if non-excise goods are being shipped from Ukraine to a legal entity in Europe. If the recipient does not have an EORI code, one will be automatically assigned.</li><li>Excise goods: The EORI code is required for shipments of excise goods. The recipient must obtain an EORI code before the goods can be shipped.</li></ol><p>Constraints: 3 to 17 chars</p></td></tr><tr><td>recipient.<strong>phone</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The contact phone number of the recipient or the recipient’s company representative. Used for delivery notifications and communication with the customer during shipment processing. </p><p><strong>Format:</strong> The phone number must be provided in <strong>international format</strong> according to the <strong>E.164</strong> standard. </p><p>Example: 380XXXXXXXXX, 491234567890, 371XXXXXXXX </p><p><strong>Restrictions:</strong></p><ul><li>For deliveries to Nova Post branches in Europe, Ukrainian mobile numbers are acceptable.</li><li>For deliveries to <strong>partner locations</strong> (such as InPost, GLS, Venipak, Cargus, etc.) and <strong>cross-border address deliveries</strong>, the phone number must belong to a mobile operator in the recipient's country. If the phone number is submitted in a local (non-international) format, the system will attempt to <strong>normalize</strong> it to the international format, but the internal algorithm does not cover all possible cases. If your system does not support front-end validation of phone numbers, we recommend informing us about failed phone number cases so we can assess potential improvements to the normalization logic.</li></ul><p><strong>🔻This field is required</strong></p></td></tr><tr><td>recipient.<strong>email</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The email address of the recipient, serving as a digital contact point for shipment updates, inquiries, and essential notifications.</p><p><strong>🔹This field is required for shipments crossing the EU border or going outside the EU.</strong></p></td></tr><tr><td>recipient.<strong>name</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The complete name of the individual recipient or the primary contact for a company recipient. This is the name used for all shipping-related correspondence and documentation.</p><p><strong>🔻This field is required</strong></p><p>Constraints: Max 100 chars</p></td></tr><tr><td>recipient.<strong>countryCode</strong></td><td align="center">string</td><td align="center">yes</td><td><p>A two-letter code that identifies the recipient's country, adhering to the ISO 3166-1 Alpha-2 standard, which specifies the shipment's destination country.</p><p><strong>🔻This field is required</strong></p><p>Pattern: ^[A-Z]{2}$</p></td></tr><tr><td>recipient.<strong>divisionNumber</strong></td><td align="center">string | null</td><td align="center">yes</td><td><p>This field is mandatory for parcels intended to be collected from a post office division or parcel locker, requiring the insertion of the unique identifier for the designated location.</p><p><strong>🔹This field is required if both the</strong> <code>recipient.addressParts</code> <strong>group and the</strong> <code>recipient.divisionID</code> <strong>field are missing or empty</strong></p><p>Example: <code>32521/1</code></p></td></tr><tr><td>recipient.<strong>divisionID</strong></td><td align="center">integer | null</td><td align="center">yes</td><td><p>Division ID for specific branch identification.</p><p><strong>🔹This field is required if both the</strong> <code>recipient.addressParts</code> <strong>group and the</strong> <code>recipient.divisionNumber</code> <strong>field are missing or empty</strong></p><p>Constraints: Min 1</p></td></tr><tr><td>recipient.<strong>addressParts</strong></td><td align="center">object</td><td align="center">yes</td><td><p>This array of fields is necessary when the shipment is directed to a specific address, outlining the precise location details to which the parcel is to be delivered. It encompasses comprehensive address information to ensure the exact identification of the delivery location.</p><p><strong>🔸The values in the nested address fields must not duplicate each other. Providing the same address information in multiple inner fields will result in an error.</strong></p></td></tr><tr><td>recipient.addressParts.<strong>city</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The city to which the shipment is being delivered. This detail ensures the parcel is directed to the correct urban area for the recipient.</p><p><strong>🔹This field is required if</strong> <code>recipient.divisionNumber</code> <strong>and</strong> <code>recipient.divisionID</code> <strong>fields are missing or empty.</strong><br>🔸For shipments where the recipient country is <strong>Moldova</strong> or <strong>Ukraine</strong>, the recipient city is validated against internal settlement directories. If the settlement cannot be resolved due to an invalid or unmapped value, the request will be rejected with the error:<code>validation.condition.recipient_settlement_not_defined</code>.</p><p>Constraints: Max 100 chars</p></td></tr><tr><td>recipient.addressParts.<strong>region</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Specifies the recipient's state or province within the destination country, crucial for accurate shipment routing and delivery. When sending to the USA, it's essential to include a two-letter state code, such as "WA" for Washington or "DC" for the District of Columbia, according to the ISO 3166-2:US standard.</p><p><strong>🔹This field is required for shipments when the sender or recipient country is the USA, Ireland, or Canada.</strong></p><p>Constraints: Max 100 chars</p></td></tr><tr><td>recipient.addressParts.<strong>street</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The street name of the recipient's address, vital for pinpointing the exact delivery spot.</p><p><strong>🔹This field is required if</strong> <code>recipient.divisionNumber</code> <strong>and</strong> <code>recipient.divisionID</code> <strong>fields are missing or empty.</strong></p><p>Constraints: Max 100 chars</p></td></tr><tr><td>recipient.addressParts.<strong>postCode</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The postal or ZIP code for the recipient's address, critical for the precise sorting and routing of the parcel to its final destination.</p><p><strong>🔹This field is required if</strong> <code>recipient.divisionNumber</code> <strong>and</strong> <code>recipient.divisionID</code> <strong>fields are missing or empty.</strong></p><p>Constraints: Max 10 chars</p></td></tr><tr><td>recipient.addressParts.<strong>building</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Specifies the building number or name at the recipient's address, guiding the delivery to the exact building within a given street.</p><p><strong>🔹This field is required if</strong> <code>recipient.divisionNumber</code> <strong>and</strong> <code>recipient.divisionID</code> <strong>fields are missing or empty.</strong></p><p>Constraints: Max 100 chars</p></td></tr><tr><td>recipient.addressParts.<strong>flat</strong></td><td align="center">string</td><td align="center">no</td><td><p>The apartment or suite number, if the delivery is to a multi-unit building, ensuring the parcel reaches the specific unit of the recipient.</p><p>Constraints: Max 10 chars</p></td></tr><tr><td>recipient.addressParts.<strong>block</strong></td><td align="center">string | null</td><td align="center">no</td><td><p>Identifies a block or section within a larger complex or residential area for the recipient, useful in large housing developments to further narrow down the delivery point.</p><p>Constraints: Max 100 chars</p></td></tr><tr><td>recipient.addressParts.<strong>note</strong></td><td align="center">string</td><td align="center">no</td><td><p>The space for any additional recipient-related address instructions or details that might assist in the delivery process, such as security instructions, specific doors for delivery, or preferred delivery times.</p><p>Constraints: Max 100 chars</p></td></tr><tr><td>recipient.<strong>registrationAddressRecipient</strong></td><td align="center">object</td><td align="center">no</td><td>The registrationAddressRecipient object provides a detailed breakdown of the recipient's registered address and is required when shipping to countries with specific customs requirements, such as Germany, Slovakia, Hungary, and France. This ensures compliance with local regulations and facilitates smooth customs processing. The object allows for a precise and complete representation of the recipient's address, which is especially important for international shipments to countries with strict customs regulations.</td></tr><tr><td>recipient.registrationAddressRecipient.<strong>city</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The name of the city where the recipient is registered. It must match the local naming conventions for accurate identification.</p><p><strong>🔹This field is required for shipments to countries with specific customs requirements, including Germany, Slovakia, Hungary, and France.</strong></p><p>Constraints: Max 100 chars</p></td></tr><tr><td>recipient.registrationAddressRecipient.<strong>street</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The name of the street in the recipient's address. It must match the local naming conventions for accurate identification.</p><p><strong>🔹This field is required for shipments to countries with specific customs requirements, including Germany, Slovakia, Hungary, and France.</strong></p><p>Constraints: Max 100 chars</p></td></tr><tr><td>recipient.registrationAddressRecipient.<strong>zipCode</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The postal code of the recipient's registered address.</p><p><strong>🔹This field is required for shipments to countries with specific customs requirements, including Germany, Slovakia, Hungary, and France.</strong></p><p>Constraints: Max 10 chars</p></td></tr><tr><td>recipient.registrationAddressRecipient.<strong>building</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The building number or name where the recipient is registered.</p><p><strong>🔹This field is required for shipments to countries with specific customs requirements, including Germany, Slovakia, Hungary, and France.</strong></p><p>Constraints: Max 100 chars</p></td></tr><tr><td>recipient.registrationAddressRecipient.<strong>apartment</strong></td><td align="center">string</td><td align="center">no</td><td><p>The flat or apartment number within the building.</p><p>Constraints: Max 10 chars</p></td></tr><tr><td>recipient.registrationAddressRecipient.<strong>state</strong></td><td align="center">string</td><td align="center">no</td><td><p>The state or region where the recipient is registered. Required in some countries for detailed geographical identification.</p><p>Constraints: Max 100 chars</p></td></tr></tbody></table>

</details>

## POST /shipments

> Create Shipment

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Shipments"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}},"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Validation":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Time-out":{"description":"Connection time-out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}}},"paths":{"/shipments":{"post":{"tags":["Shipments"],"requestBody":{"description":"Optional description in *Markdown*","required":true,"content":{"application/json":{"schema":{"type":"object","required":["sender","invoice"],"properties":{"status":{"type":"string","description":"Signifies the current status of the transportation document, tracking its progress through the shipping lifecycle.","enum":["ReadyToShip"]},"clientOrder":{"type":"string","description":"Represents all potential order identifiers associated with the shipment.","maxLength":50},"note":{"type":"string","description":"Any additional information or special instructions that pertain to the order can be included here.","maxLength":255},"deliveryType":{"type":"string","description":"Defines the tariff type to be applied to the shipment during creation or update."},"payerType*":{"type":"string","description":"Identifies who is responsible for the payment of delivery services.","enum":["Sender","Recipient","ThirdPerson"]},"payerContractNumber":{"type":"string","description":"Required for `ThirdPerson` payments and for non-cash payments when `payerType` is `Sender` or `Recipient`.","minLength":2,"maxLength":20,"nullable":true},"services":{"type":"array","description":"Contains information about additional services for the shipment.","properties":{"shipmentParcelRowNumber":{"type":"integer","nullable":true,"description":"Specifies the row number of the parcel to which the service is applied."},"serviceCode":{"type":"string","description":"The code indicating the service."},"serviceName":{"type":"string","description":"Name of the service."},"serviceId":{"type":"string","description":"Unique identifier (reference ID) of the selected service."},"amount":{"type":"number","description":"The total amount the recipient must pay under the COD service."},"contractNumber":{"type":"string","nullable":true,"description":"Contract number of the payer responsible for the selected service."},"payerType":{"type":"string","description":"Determines who is responsible for paying for the service."},"additionalParameters":{"type":"string","description":"Additional parameters for the service.","properties":{"cod":{"type":"string","description":"Additional parameters for configuring COD.","properties":{"bankAccount":{"type":"object","description":"Information describing the bank account details to which the funds will be transferred.","properties":{"amount":{"type":"number","description":"The amount that will be transferred to the sender’s account after payment."},"currencyCode":{"type":"string","description":"The currency for the transaction, defined by the sender’s contract."},"bankAccountId":{"type":"string","description":"Tax identification number of an individual or a legal entity."},"bankAccountName":{"type":"string","description":"IBAN"},"description":{"type":"string","description":"Additional description of the payment details."},"commissionPayer":{"type":"string","description":"Specifies the party responsible for paying the commission."}}}}},"backwardDelivery":{"type":"array","description":"Additional parameters for configuring return delivery.","items":{"type":"object","properties":{"description":{"type":"string","description":"Description of the goods to be returned."}}}}}}}},"invoice":{"type":"object","description":"This object presents the necessary data for customs authorities to process the consignment efficiently.","properties":{"customerNumber":{"type":"string","description":"Unique identifier/number of the invoice accompanying the goods in the shipment, generated directly by the client.","maxLength":50,"nullable":true},"customerCreatedAt":{"type":"string","format":"date-time","description":"You must provide the date specified in the invoice accompanying the shipment."},"type":{"type":"string","description":"Type of client invoice accompanying the shipment and used for customs declaration.","enum":["Invoice","ProformaInvoice"]},"incoterm":{"type":"string","description":"Specifies the trade terms for the shipping agreement between the buyer and seller.","enum":["DAP","DDP"]},"exportReason":{"type":"string","description":"Specifies the general reason for exporting items, which is required for customs and other regulatory bodies.","enum":["ForPersonalPurposes","Selling","Repair","Return","Other"]},"cost":{"type":"number","description":"Total declared invoice value in the original currency.","minimum":0,"maximum":9999999.99},"currency":{"type":"string","description":"ISO 4217 currency code of the invoice."},"payerFeesCustoms":{"type":"string","description":"Specifies who is responsible for paying for customs services.","enum":["Sender","Recipient","ThirdPerson"]},"items":{"type":"array","description":"A detailed list of goods being shipped.","items":{"type":"object","properties":{"customerId":{"type":"string","description":"Client item identifier."},"hsCode":{"type":"string","description":"The Harmonized System code for each item, a standardized numerical method of classifying traded products.","maxLength":255,"nullable":true},"name":{"type":"string","description":"Represents the item's name in the local language, offering an accurate description for customs and logistical planning.","maxLength":512},"nameEng":{"type":"string","description":"Specifies the item's name in English, critical for ensuring that the product is identifiable and understandable across international trade and logistics channels.","maxLength":512},"material":{"type":"string","description":"The primary material from which the item is made, important for customs declarations and potential restrictions.","maxLength":50},"materialEng":{"type":"string","description":"The description of the item's material in English, aiding in the universal understanding of the product's composition.","maxLength":255},"madeInCountryCode":{"type":"string","description":"The ISO 3166-1 alpha-2 code indicating the country of manufacture.","pattern":"^[A-Z]{2}$","nullable":true},"producerAndModel":{"type":"string","description":"The parameter represents the manufacturer and model of the device when creating a shipment.","maxLength":255,"nullable":true},"actualWeight":{"type":"integer","description":"Actual total weight of all units of the item in grams (g).","minimum":1,"maximum":2147483647,"nullable":true},"measurementCode":{"type":"string","description":"The unit of measurement for the item quantity, such as pieces, kilograms, meters, etc., standardizing the way quantities are reported.","maxLength":255},"amount":{"type":"number","description":"The quantity of the item being shipped.","minimum":0,"maximum":9999999.99},"cost":{"type":"number","description":"The value per single unit of the item in the sender's currency.","minimum":0,"maximum":9999999.99}}}}}},"parcels*":{"type":"array","description":"Parcels` description block.","items":{"type":"object","properties":{"cargoCategory*":{"type":"string","description":"Specifies the type of the shipment, helping to categorize the goods for logistics and customs processing.","enum":["parcel","documents","pallet"]},"parcelDescription*":{"type":"string","description":"This field requires a concise description of the contents within the shipment.","maxLength":255},"insuranceCost*":{"type":"number","format":"float","description":"Represents the declared value of the shipment for insurance coverage.","minimum":1,"exclusiveMinimum":true},"insuranceCurrencyCode":{"type":"string","description":"ISO 4217 currency code for the declared insurance value (`insuranceCost`).","pattern":"^[A-Z]{3}$"},"rowNumber*":{"type":"integer","description":"Sequential identifier for each parcel within a shipment.","minimum":1},"width*":{"type":"integer","description":"The parcel's width measured in millimeters.","minimum":1},"length*":{"type":"integer","description":"The parcel's length measured in millimeters.","minimum":1},"height*":{"type":"integer","description":"The parcel's height measured in millimeters.","minimum":1},"actualWeight*":{"type":"integer","description":"Actual item weight in grams (g).","minimum":1,"maximum":2147483647}}}},"sender*":{"type":"object","description":"Information about the party sending the shipment.","properties":{"companyTin":{"type":"string","description":"The tax identification number or equivalent identifier (EDRPOU, TIN, NIP, IČO - for Slovakia) of a legal entity.","maxLength":20,"nullable":true},"companyName":{"type":"string","description":"The official name of the sender's company.","maxLength":100,"nullable":true},"eoriCode":{"type":"string","description":"The EORI code (Economic Operators Registration and Identification number).","minLength":3,"maxLength":17,"nullable":true},"phone*":{"type":"string","description":"The contact phone number of the sender or the sender’s company representative."},"email":{"type":"string","description":"Email address of the sender, providing an electronic means of contact for updates, inquiries, and important notifications about the shipment."},"name*":{"type":"string","description":"The full name of the individual sender or the primary contact person for a company sender.","maxLength":100},"ioss":{"type":"string","description":"The IOSS (Import One-Stop Shop) number is an optional input used to facilitate the VAT declaration process for shipments from non-EU countries with a declared value of up to EUR 150.","maxLength":12,"pattern":"/^[a-zA-Z0-9]*$/u"},"countryCode*":{"type":"string","description":"A two-letter code representing the sender's country, following the ISO 3166-1 Alpha-2 standard.","pattern":"^[A-Z]{2}$"},"divisionNumber":{"type":"string","description":"This field is mandatory for parcels that are dispatched from a post office division or parcel locker.","nullable":true},"divisionID":{"type":"integer","description":"Division ID for specific branch identification.","minimum":1,"nullable":true},"addressParts":{"type":"object","description":"This array of fields is required when shipping directly from an address.","properties":{"city":{"type":"string","description":"The name of the city from which the shipment is dispatched.","maxLength":100},"region":{"type":"string","description":"Specifies the broader administrative area, like a state or province, encompassing the city.","maxLength":100},"street":{"type":"string","description":"Identifies the specific street address for the sender's location.","maxLength":100},"postCode":{"type":"string","description":"The postal or ZIP code corresponding to the sender's address.","maxLength":10},"building":{"type":"string","description":"The building number or name at the specified street address.","maxLength":100},"flat":{"type":"string","description":"If applicable, the apartment or suite number within a building from which the shipment originates.","maxLength":10},"block":{"type":"string","description":"Indicates a specific block or section within a larger residential area or complex.","maxLength":100,"nullable":true},"note":{"type":"string","description":"Allows for the inclusion of additional details or instructions about the sender's address that might facilitate the pickup process.","maxLength":100}}}}},"recipient*":{"type":"object","description":"Information about the party receiving the shipment.","properties":{"companyTin":{"type":"string","description":"The tax identification number or equivalent identifier (EDRPOU, TIN, NIP, IČO - for Slovakia) of a legal entity.","maxLength":20,"nullable":true},"companyName":{"type":"string","description":"The formal name of the recipient's company.","maxLength":100,"nullable":true},"eoriCode":{"type":"string","description":"The recipient's EORI code is important for customs clearance when shipping goods to European Union countries.","minLength":3,"maxLength":17,"nullable":true},"phone*":{"type":"string","description":"The contact phone number of the recipient or the recipient’s company representative."},"email":{"type":"string","description":"The email address of the recipient."},"name*":{"type":"string","description":"The complete name of the individual recipient or the primary contact for a company recipient.","maxLength":100},"countryCode*":{"type":"string","description":"A two-letter code that identifies the recipient's country, adhering to the ISO 3166-1 Alpha-2 standard.","pattern":"^[A-Z]{2}$"},"divisionNumber":{"type":"string","description":"This field is mandatory for parcels intended to be collected from a post office division or parcel locker.","nullable":true},"divisionID":{"type":"integer","description":"Division ID for specific branch identification.","minimum":1,"nullable":true},"addressParts":{"type":"object","description":"This array of fields is necessary when the shipment is directed to a specific address.","properties":{"city":{"type":"string","description":"The city to which the shipment is being delivered.","maxLength":100},"region":{"type":"string","description":"Specifies the recipient's state or province within the destination country.","maxLength":100},"street":{"type":"string","description":"The street name of the recipient's address.","maxLength":100},"postCode":{"type":"string","description":"The postal or ZIP code for the recipient's address.","maxLength":10},"building":{"type":"string","description":"Specifies the building number or name at the recipient's address.","maxLength":100},"flat":{"type":"string","description":"The apartment or suite number, if the delivery is to a multi-unit building.","maxLength":10},"block":{"type":"string","description":"Identifies a block or section within a larger complex or residential area for the recipient.","maxLength":100,"nullable":true},"note":{"type":"string","description":"The space for any additional recipient-related address instructions or details that might assist in the delivery process.","maxLength":100}}},"registrationAddressRecipient":{"type":"object","description":"The registrationAddressRecipient object provides a detailed breakdown of the recipient's registered address.","properties":{"city":{"type":"string","description":"The name of the city where the recipient is registered.","maxLength":100},"street":{"type":"string","description":"The name of the street in the recipient's address.","maxLength":100},"zipCode":{"type":"string","description":"The postal code of the recipient's registered address.","maxLength":10},"building":{"type":"string","description":"The building number or name where the recipient is registered.","maxLength":100},"apartment":{"type":"string","description":"The flat or apartment number within the building.","maxLength":10},"state":{"type":"string","description":"The state or region where the recipient is registered.","maxLength":100}}}}}}}}}},"responses":{"201":{"description":"Successfully created shipment.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"A unique identifier assigned to each shipment, facilitating internal operations such as modifications, system searches, and deletion of shipments. The `id` serves as a key reference for administrative and logistical processes within the delivery system, allowing precise access and management of shipment records.","minimum":1},"number":{"type":"string","description":"The transportation document number provided to clients for tracking purposes and accessing printed forms. It also facilitates shipment searches within the system, offering a customer-friendly way to monitor shipment progress. While `number` is used externally for tracking and documentation, it can also serve internal needs similar to `id` for identifying shipments in certain system operations.","pattern":"^[A-Z]{4}\\d{10}$"},"scheduledDeliveryDate":{"type":"string","format":"date-time","description":"Estimated delivery date based on routing and service level, subject to change based on logistics and external factors. Date in ISO 8601 format.","nullable":true},"status":{"type":"string","description":"Current status of the shipment. Initially set to `ReadyToShip` upon creation, indicating it's prepared for dispatch."},"cost":{"type":"number","format":"float","description":"Total cost calculated for the delivery services provided, based on shipment size, weight, destination, and service options selected."},"parcelsAmount":{"type":"integer","description":"The total number of parcels included in the shipment. This count helps in logistics planning and tracking.","minimum":1},"createdAt":{"type":"string","format":"date-time","description":"The date-time when the shipment record was created in the system. Date in ISO 8601 format."},"updatedAt":{"type":"string","format":"date-time","description":"The last date-time when the shipment record was updated. Helps in tracking changes and updates made to the shipment details.Date in ISO 8601 format."},"deletedAt":{"type":"string","format":"date-time","description":"The date-time when the shipment was canceled or removed from the system. If not canceled, this field is `null`.","nullable":true}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/Validation"},"503":{"$ref":"#/components/responses/Time-out"}},"summary":"Create Shipment"}}}}
```


# International shipments within Europe

This page describes the process of creating shipments outside of Ukraine. Shipments from Ukraine and to Ukraine are not included.

<details>

<summary>Shipment API Interaction Flow</summary>

```mermaid
flowchart LR

A((Start)) -->|POST shipments| B([Shipment created])

B -->|PUT shipments by id| C([Edit shipment])
B -->|GET shipment by id| D([Shipment info])
B -->|GET shipment label| E([Label print])
E --> F((End))

B -->|GET shipment status| G([Shipment status])

G -->|POST redirect shipment| H([Redirect])
G -->|POST add parcel info| I([Add parcel info])
G -->|POST cancel shipment| J([Cancellation])
J --> K((End))

G -->|GET print document| L([Label print])
L --> M((End))

style A fill:#ffffff,color:#E30613,stroke:#E30613,stroke-width:2px
style B fill:#E30613,color:#ffffff,stroke:#E30613,stroke-width:2px

style C fill:#ffffff,color:#222222,stroke:#E30613,stroke-width:2px
style D fill:#ffffff,color:#222222,stroke:#E30613,stroke-width:2px
style E fill:#ffffff,color:#222222,stroke:#E30613,stroke-width:2px
style G fill:#ffffff,color:#222222,stroke:#E30613,stroke-width:2px
style H fill:#ffffff,color:#222222,stroke:#E30613,stroke-width:2px
style I fill:#ffffff,color:#222222,stroke:#E30613,stroke-width:2px
style J fill:#ffffff,color:#222222,stroke:#E30613,stroke-width:2px
style L fill:#ffffff,color:#222222,stroke:#E30613,stroke-width:2px

style F fill:#E30613,color:#000000,stroke:#E30613,stroke-width:2px
style K fill:#E30613,color:#000000,stroke:#E30613,stroke-width:2px
style M fill:#E30613,color:#000000,stroke:#E30613,stroke-width:2px
```

</details>

<details>

<summary>Schema (Object)</summary>

<table data-search="false"><thead><tr><th width="127">Field</th><th width="91" align="center">Type</th><th width="108" align="center">Required</th><th>Description</th></tr></thead><tbody><tr><td><strong>status</strong></td><td align="center">enum</td><td align="center">yes</td><td><p>Signifies the current status of the transportation document, tracking its progress through the shipping lifecycle. Statuses detail each critical phase:</p><ul><li><code>Draft</code>: The document is in its preliminary stage, not yet finalized.</li><li><code>Accepted</code>: Reviewed and accepted, the document is ready for the next steps.</li><li><code>Issued</code>: The document has been completed and is ready for shipping.</li><li><code>ReadyToShip</code>: Indicates that the shipment is prepared for transport following the creation of the express waybill. Only this value can be specified when creating a shipment.</li><li><code>Deleted</code>: The document has been deleted from the system.</li><li><code>Returned</code>: The shipment has been returned to its sender.</li><li><code>Utilized</code>: Indicates that the physical goods associated with the transportation document have been disposed of or destroyed and the document is closed.</li></ul><p>Allowed: <code>ReadyToShip</code></p></td></tr><tr><td><strong>clientOrder</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Represents all potential order identifiers associated with the shipment. These identifiers are set by the customer for internal tracking purposes and are crucial for tracking the shipment throughout its journey. All entered values can be tracked in the shipment's tracking system.</p><p>Constraints: Max 50 chars</p></td></tr><tr><td><strong>note</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Any additional information or special instructions that pertain to the order can be included here. This could encompass delivery instructions, special handling requests, or other pertinent details that facilitate the handling and processing of the shipment.</p><p>Constraints: Max 255 chars</p></td></tr><tr><td><strong>deliveryType</strong></td><td align="center">string</td><td align="center">no</td><td><p>Defines the tariff type to be applied to the shipment during creation or update.</p><ul><li><code>standard</code>: Standard international delivery tariff.</li><li><code>economy</code>: Economy international delivery tariff.</li><li><code>express</code>: Express international delivery tariff.</li></ul><p>If the field is not provided, the tariff type is determined automatically according to current business rules, and the existing shipment creation behaviour remains unchanged.</p></td></tr><tr><td><strong>payerType</strong></td><td align="center">enum</td><td align="center">yes</td><td><p>Identifies who is responsible for the payment of delivery services. The payer type determines which party bears the cost:</p><ul><li><code>Sender</code>: The party sending the goods pays for the delivery.</li><li><code>Recipient</code>: The party receiving the goods is responsible for the delivery cost.</li><li><code>ThirdPerson</code>: A third party, not the sender or recipient, pays for the delivery services. When selecting <code>ThirdPerson</code>, the field <code>payerContractNumber</code> must be populated with the contract number of the paying party. For more detailed information, refer to the article on <a href="https://api-portal.novapost.com/en/api-methods/payment/">Payment for Delivery Services via Nova Post API</a>. This field is also referenced when generating an invoice.</li></ul><p>Allowed: <code>Sender</code> | <code>Recipient</code> | <code>ThirdPerson</code></p></td></tr><tr><td><strong>payerContractNumber</strong></td><td align="center">string┃null</td><td align="center">yes</td><td><p>This field is required in the following cases:</p><ul><li>When the <code>payerType</code> is set to <code>ThirdPerson</code>. It must contain the payer's contract number. For clients from Ukraine, it is also acceptable to provide the tax identification number (EDRPOU) instead of the contract number.</li><li>When the <code>payerType</code> is set to <code>Sender</code> or <code>Recipient</code> and a non-cash payment method is used.</li></ul><p>If this field is not provided in the cases described above, the payment method will automatically default to cash.</p><p>Ensure that the provided information is accurate, as it is essential for correct payment processing.</p><p>For more detailed information, refer to the article on <a href="https://api-portal.novapost.com/en/api-methods/payment/">Payment for Delivery Services via Nova Post API</a>.</p><p>Constraints: 2 to 20 chars</p></td></tr><tr><td><strong>services</strong></td><td align="center">array</td><td align="center">no</td><td>Contains information about additional services for the shipment.</td></tr><tr><td>services.<strong>shipmentParcelRowNumber</strong></td><td align="center">integer</td><td align="center">yes</td><td><p>Specifies the row number of the parcel to which the service is applied. The value must correspond to the <code>rowNumber</code> of an existing parcel in the <code>parcels</code> array.</p><p>For services applied to the <strong>entire shipment</strong> (for example, <code>ExpBackwardGoods</code>), this field must be set to <code>null</code>.</p></td></tr><tr><td>services.<strong>serviceCode</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The code indicating the service.</p><p><strong>A list of available codes and descriptions of their meanings:</strong></p><ul><li><code>COD</code> — The Cash on Delivery (COD) service allows the recipient to pay for the goods directly upon receiving them, without the need for prepayment. The sender can add this service to the shipment, and the recipient has the option to pay for the goods upon delivery and inspect them before making the payment, subject to payment method restrictions established for specific countries. </li></ul><p>🔸<strong>The COD service is planned to expand to other countries and delivery directions in the future, both for international shipments and within European countries.</strong></p><ul><li><code>ExpBackwardGoods</code> — Enables return delivery option for parent shipment</li><li><code>ExpBackwardCreditDoc</code> — Enables return delivery of signed documents for domestic document shipments within Moldova. The service is available only for legal entities and only for shipments with the <strong>Documents</strong> type. The return shipment is created as a separate document delivery (by courier or operator), and the payer is always the Recipient under a non-cash contract. Not available for Parcel Locker and PUDO service channels. In the first iteration, the service is enabled only for selected legal entities.</li></ul><p>🔹<strong>This field is required for the</strong> <code>services</code> <strong>group.</strong></p></td></tr><tr><td>services.<strong>serviceName</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Name of the service.</p><p>Allowed values include:</p><ul><li><code>PaymentControl</code> — Payment control service.</li><li><code>MoneyTransfer</code> — Money transfer service.</li><li>Other service types available within the <code>services</code> group.</li></ul><p>🔹<strong>This field is required within the</strong> <code>services</code> <strong>group.</strong></p></td></tr><tr><td>services.<strong>serviceId</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Unique identifier (reference ID) of the selected service.</p><p>This value must correspond to the service reference returned by the system. When creating or updating a shipment, the exact <code>serviceId</code> provided in the service reference response must be copied and used without modification.</p><p>🔹<strong>This field is required within the</strong> <code>services</code> <strong>group.</strong></p></td></tr><tr><td>services.<strong>amount</strong></td><td align="center">number</td><td align="center">yes</td><td><p>The total amount the recipient must pay under the COD service.</p><p>🔹<strong>This field is required for the</strong> <code>services</code> <strong>group.</strong></p></td></tr><tr><td>services.<strong>contractNumber</strong></td><td align="center">string┃null</td><td align="center">yes</td><td><p>Contract number of the payer responsible for the selected service. This parameter is used to identify the contractual agreement under which the service is paid.</p><p>The field is required when the service payer is a <strong>third party</strong> or when non-cash payment terms are applied. If not provided, the payment may be processed according to default billing rules.</p></td></tr><tr><td>services.<strong>payerType</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Determines who is responsible for paying for the service. The payer type determines which party bears the costs:</p><ul><li><code>Recipient</code> — The only allowed value for the COD service.</li><li><code>Sender</code>, <code>Recipient</code> — Allowed payer values for the ExpBackwardGoods service.</li><li><code>Sender</code>, <code>Recipient</code>, <code>ThirdPerson</code> — Allowed payer values for the BackwardDelGoods service.</li></ul><p><strong>🔻This field is required</strong></p></td></tr><tr><td>services.<strong>additionalParameters</strong></td><td align="center">string</td><td align="center">yes</td><td>Additional parameters for the service.</td></tr><tr><td>services.additionalParameters.<strong>cod</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Additional parameters for configuring COD.</p><p>🔹<strong>These parameters are mandatory and required only for the COD service</strong></p></td></tr><tr><td>services.additionalParameters.cod.<strong>bankAccount</strong></td><td align="center">object</td><td align="center">no</td><td>Information describing the bank account details to which the funds will be transferred. Includes the transfer amount, transaction currency, account identifiers, and the party responsible for paying the service fee.</td></tr><tr><td>services.additionalParameters.cod.bankAccount.<strong>amount</strong></td><td align="center">number</td><td align="center">yes</td><td><p>The amount that will be transferred to the sender’s account after payment. Specifies the amount the recipient must pay upon receipt. Automatic currency conversion is possible depending on the sender's or recipient's country.</p><p>🔹<strong>This field is required for the</strong> <code>services.additionalParameters.cod.bankAccount</code> <strong>field group.</strong></p></td></tr><tr><td>services.additionalParameters.cod.bankAccount.<strong>currencyCode</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The currency for the transaction, defined by the sender’s contract. Specified according to the ISO 4217 standard.</p><p>🔸<strong>By default, the currency of the sender’s country is used, but it is possible to set the currency manually (Feature under development).</strong></p><p>Pattern: ^[A-Z]{3}$</p></td></tr><tr><td>services.additionalParameters.cod.bankAccount.<strong>bankAccountId</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Tax identification number of an individual or a legal entity, used for its unique identification in the system and for verifying the existence of an active contract and the availability of financial services. The same as the value passed in the <code>companyTin</code> field.</p><p>🔹<strong>This field is required for the</strong> <code>services.additionalParameters.cod.bankAccount</code> <strong>field group.</strong></p><p>🔸<strong>Must contain the tax identification number or equivalent identifier (EDRPOU, TIN, NIP).</strong></p></td></tr><tr><td>services.additionalParameters.cod.bankAccount.<strong>bankAccountName</strong></td><td align="center">string</td><td align="center">yes</td><td><p>IBAN</p><p>🔹<strong>This field is required for the</strong> <code>services.additionalParameters.cod.bankAccount</code> <strong>field group.</strong></p><p>🔸<strong>Must contain the full account number in IBAN format.</strong></p></td></tr><tr><td>services.additionalParameters.cod.bankAccount.<strong>description</strong></td><td align="center">string</td><td align="center">yes</td><td>Additional description of the payment details.</td></tr><tr><td>services.additionalParameters.cod.bankAccount.<strong>commissionPayer</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Specifies the party responsible for paying the commission:</p><ul><li><code>Recipient</code></li><li><code>Sender</code></li></ul><p>🔹<strong>This field is required for the</strong> <code>services.additionalParameters.cod.bankAccount</code> <strong>field group.</strong></p></td></tr><tr><td>services.additionalParameters.<strong>backwardDelivery</strong></td><td align="center">object</td><td align="center">yes</td><td><p>Additional parameters for configuring return delivery.</p><p>🔹<strong>These parameters are mandatory and required only for the ExpBackwardGoods service</strong></p></td></tr><tr><td>services.additionalParameters.backwardDelivery.<strong>description</strong></td><td align="center">string</td><td align="center">no</td><td>Description of the goods to be returned. This value is used for informational and operational purposes during the return delivery process.</td></tr><tr><td><strong>invoice</strong></td><td align="center">object</td><td align="center">no</td><td><p>This object presents the necessary data for customs authorities to process the consignment efficiently, including the assessment of duties and taxes, and to confirm adherence to import/export regulations. The structured format of the invoice ensures that all pertinent information is easily accessible and clear, facilitating a smoother transit across borders.</p><p>Updated logic for invoice value handling. Clients must now send only two parameters in the invoice object:</p><ul><li><code>cost</code> — total declared value of the invoice</li><li><code>currency</code> — currency code of the invoice</li></ul><p><strong>🔸It encapsulates the invoice details, which are required for international shipments undergoing customs clearance.</strong></p></td></tr><tr><td>invoice.<strong>customerNumber</strong></td><td align="center">string┃null</td><td align="center">yes</td><td><p>Unique identifier/number of the invoice accompanying the goods in the shipment, generated directly by the client. It is used for customs processing (export and import clearance) because it ensures a clear link between the goods in the shipment and their accompanying documentation, including value, origin, and other necessary information for customs clearance.</p><p>If a client invoice exists in the shipment but its information is missing—specifically, its number—the shipment processing in the information system will be halted, the customs clearance period will be extended, and in the worst case, customs authorities may refuse clearance and initiate a return to the country of export.</p><p>Constraints: Max 50 chars</p></td></tr><tr><td>invoice.<strong>customerCreatedAt</strong></td><td align="center">string</td><td align="center">yes</td><td><p>You must provide the date specified in the invoice accompanying the shipment. If the date is not present in the client document, the shipment creation date may be used.</p><p><strong>🔹This field is required if the</strong> <code>invoice.customerNumber</code> <strong>field is filled in.</strong></p><p>Pattern: ^20[0-9]{2}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{6}Z$</p></td></tr><tr><td>invoice.<strong>type</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Type of client invoice accompanying the shipment and used for customs declaration. This field must reflect the actual type of document enclosed in the parcel. Available values:</p><ul><li><code>Invoice</code> — commercial invoice for shipments of a commercial nature</li><li><code>ProformaInvoice</code> — proforma invoice for shipments of a non-commercial nature</li></ul><p><strong>🔹This field is required if the</strong> <code>invoice.customerNumber</code> <strong>field is filled in.</strong></p><p>Possible values: <code>Invoice</code> | <code>ProformaInvoice</code></p></td></tr><tr><td>invoice.<strong>incoterm</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Specifies the trade terms for the shipping agreement between the buyer and seller, based on selected standards from the Incoterms® rules. These terms define the allocation of shipping costs, insurance, customs duties, and the distribution of risk. Only a limited subset of Incoterms® is available for use:</p><ul><li><code>DAP</code> (Delivered at Place) - The recipient is responsible for import customs clearance, duties, and taxes.</li><li><code>DDP</code> (Delivered Duty Paid) - The sender is responsible for import customs clearance and for paying all applicable duties and taxes.</li></ul><p><strong>🔹This field is required for shipments crossing the EU border or going outside the EU.</strong></p><p>Possible values: <code>DAP</code> | <code>DDP</code></p></td></tr><tr><td>invoice.<strong>exportReason</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Specifies the general reason for exporting items, which is required for customs and other regulatory bodies. This classification helps in understanding the type of shipment without getting into specifics. It's used to categorize shipments at a high level for smoother processing through customs. The available options are:</p><ul><li><code>ForPersonalPurposes</code>: Items are for personal use or gifts.</li><li><code>Selling</code>: Items are meant for sale.</li><li><code>Repair</code>: Items being sent for repair.</li><li><code>Return</code>: Items are being returned to the sender or manufacturer.</li><li><code>Other</code>: Any reason not covered by the other options.</li></ul><p><strong>🔹This field is required for shipments crossing the EU border or going outside the EU.</strong></p><p>Possible values: <code>ForPersonalPurposes</code>,<code>Selling</code>,<code>Repair</code>,<code>Return</code>,<code>Other</code></p></td></tr><tr><td>invoice.<strong>cost</strong></td><td align="center">number</td><td align="center">yes</td><td><p>Total declared invoice value in the original currency, which must equal the sum of all invoice items calculated as <strong>(amount × cost)</strong> for each item. Used for customs and shipment declarations.</p><p><strong>🔸If the provided <code>cost</code> value does not equal the sum of the <code>cost</code> values in the</strong> <code>items</code> <strong>array, it will be automatically recalculated by the system on our side.</strong></p><p><strong>🔸Values are validated for decimal precision, and digits beyond two decimal places are ignored.</strong></p><p><strong>🔹This field is required for shipments crossing the EU border or going outside the EU.</strong></p><p>Constraints: Min 0┃Max 9999999.99</p></td></tr><tr><td>invoice.<strong>currency</strong></td><td align="center">string</td><td align="center">yes</td><td><p>ISO 4217 currency code of the invoice. All items in the invoice must use the same currency.</p><p><strong>🔹This field is required for shipments crossing the EU border or going outside the EU.</strong></p><p>Pattern: ^[A-Z]{3}$</p></td></tr><tr><td>invoice.<strong>payerFeesCustoms</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Specifies who is responsible for paying for customs services. The parameter determines which party bears the costs:</p><ul><li><code>Sender</code>: The party sending the goods pays for the customs duties.</li><li><code>Recipient</code>: The party receiving the goods is responsible for the customs duties costs.</li><li><code>ThirdPerson</code>: A third party can only pay for customs services if this is permitted and the payer for delivery services is also a third party.</li></ul><p>The default value is <strong>"Recipient"</strong>.<br>This value will also be applied automatically if the parcel exceeds the maximum allowed value (in the recipient country’s currency) for which the sender is permitted to pay customs duties.</p><p><strong>🔹This parameter is required and valid only for the UA-EU direction.</strong></p><p>Possible values: <code>Sender</code> | <code>Recipient</code> | <code>ThirdPerson</code></p></td></tr><tr><td>invoice.<strong>items</strong></td><td align="center">object</td><td align="center">yes</td><td><p>A detailed list of goods being shipped, including required descriptions and values, essential for customs declarations and assessing duties.</p><p><strong>Logic:</strong> If the items block is provided, the system checks whether the total sum of all (<code>items.cost</code> × <code>items.amount</code>) matches the <code>invoice.cost</code> value. If not — the system updates <code>invoice.cost</code> to equal the sum of all items.</p><p><strong>🔸It is required to provide this information for each individual good in the shipment in the form of an array.</strong></p></td></tr><tr><td>invoice.items.<strong>customerId</strong></td><td align="center">string</td><td align="center">no</td><td><p>Client item identifier.</p><p><strong>🔹This field is optional.</strong></p></td></tr><tr><td>invoice.items.<strong>hsCode</strong></td><td align="center">string | null</td><td align="center">yes</td><td><p>The Harmonized System code for each item, a standardized numerical method of classifying traded products. This field is required for international shipments that pass through customs clearance. You can obtain the valid <code>hsCode</code> from the Cargo Classifiers (UKT ZED) dictionary. Validation rules:</p><ul><li><p><strong>If the sender or recipient country is Moldova (MD) or Canada (CA):</strong></p><ul><li>The <code>hsCode</code> must consist of exactly 10 numeric characters.</li><li>If the input is longer than 10 digits, it will be <strong>truncated</strong> on the right.</li><li>If it contains fewer than 10 digits - validation error.</li></ul></li><li><p><strong>For all other countries:</strong></p><ul><li>The <code>hsCode</code> must contain <strong>between 8 and 10 numeric characters</strong> (inclusive).</li><li>If fewer than 8 digits – validation error.</li></ul></li><li><strong>All non-digit characters will be stripped automatically before validation.</strong></li><li><p><strong>If the value of the <code>hsCode</code> field is <code>210690</code> or <code>630900</code>, the following conditions must be met:</strong></p><ul><li>The <code>measurementCode</code> must be set to <code>kg</code>.</li><li>Each item with this <code>hsCode</code> must be unique — the invoice must not contain more than one item with code <code>210690</code> or <code>630900</code>.</li><li>The amount value must not exceed 10.</li></ul></li></ul><p><strong>🔹This field is required for shipments crossing the EU border or going outside the EU.</strong></p><p>Constraints: Max 255 chars</p></td></tr><tr><td>invoice.items.<strong>name</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Represents the item's name in the local language, offering an accurate description for customs and logistical planning. The name should correspond with terminologies found in the Cargo Classifiers (UKT ZED) dictionary, ensuring compliance with standard classification codes. This detailed description aids in precise item identification during the customs clearance process. This field supports Unicode encoding, permitting the inclusion of special characters and symbols using the \uXXXX format. This capability allows for precise representation of item names in languages that incorporate non-Latin characters, enhancing clarity and understanding across diverse regulatory environments.</p><p><strong>🔹This field is required for shipments crossing the EU border or going outside the EU.</strong></p><p>Constraints: Max 512 chars</p></td></tr><tr><td>invoice.items.<strong>nameEng</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Specifies the item's name in English, critical for ensuring that the product is identifiable and understandable across international trade and logistics channels. The English name simplifies communication and documentation processes when dealing with international partners and authorities, aiding in the seamless facilitation of global shipments. Similar to the <code>name</code> field, this parameter also supports Unicode encoding. Using the \uXXXX format, it accommodates the accurate rendering of any special characters necessary for the correct representation of the item's name in English.</p><p><strong>🔹This field is required for shipments crossing the EU border or going outside the EU.</strong></p><p>Constraints: Max 512 chars</p></td></tr><tr><td>invoice.items.<strong>material</strong></td><td align="center">string</td><td align="center">no</td><td><p>The primary material from which the item is made, important for customs declarations and potential restrictions.</p><p><strong>🔸If this field is not provided, the default value will be applied.</strong></p><p>Constraints: Max 50 chars</p></td></tr><tr><td>invoice.items.<strong>materialEng</strong></td><td align="center">string</td><td align="center">no</td><td><p>The description of the item's material in English, aiding in the universal understanding of the product's composition.</p><p><strong>🔸If this field is not provided, the default value will be applied.</strong></p><p>Constraints: Max 255 chars</p></td></tr><tr><td>invoice.items.<strong>madeInCountryCode</strong></td><td align="center">string | null</td><td align="center">no</td><td><p>The ISO 3166-1 alpha-2 code indicating the country of manufacture, essential for determining import duties and compliance with trade agreements.</p><p><strong>🔸This field is not required; however, shipments with this field filled are given priority during customs clearance.</strong></p><p>Pattern: ^[A-Z]{2}$</p></td></tr><tr><td>invoice.items.<strong>producerAndModel</strong></td><td align="center">string | null</td><td align="center">no</td><td><p>The parameter represents the manufacturer and model of the device when creating a shipment. Both values are included in a single parameter. This parameter is mandatory for the following categories:</p><ul><li>Electrical appliances</li><li>Laptops</li><li>Phones</li><li>Large and small household appliances</li><li>Other similar items</li></ul><p><strong>🔸This field is not required; however, shipments with this field filled are given priority during customs clearance.</strong></p><p>Constraints: Max 255 chars</p></td></tr><tr><td>invoice.items.<strong>actualWeight</strong></td><td align="center">integer | null</td><td align="center">yes</td><td><p>Actual total weight of all units of the item in grams (g).</p><p>Supported precision: 10 grams (0.01 kg). Values not divisible by 10 g are rounded down to the nearest lower multiple of 10 g.</p><p><strong>🔸This field is mandatory when the</strong> <code>invoice.items</code> <strong>array is present in the request.</strong><br>The system validates that the sum of <code>actualWeight</code> values across <strong>all invoice items</strong> matches the <strong>total shipment weight</strong> (sum of <code>parcels[].actualWeight</code>).</p><p>⚠️IMPORTANT: Ensure that all invoice item weights are correctly rounded and that their total weight exactly matches the shipment weight to avoid validation errors.</p><p>Constraints: Min 1┃Max 2147483647</p></td></tr><tr><td>invoice.items.<strong>measurementCode</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The unit of measurement for the item quantity, such as pieces, kilograms, meters, etc., standardizing the way quantities are reported.</p><p><strong>🔹This field is required for shipments crossing the EU border or going outside the EU.</strong></p><p>Constraints: Max 255 chars</p></td></tr><tr><td>invoice.items.<strong>amount</strong></td><td align="center">number</td><td align="center">yes</td><td><p>The quantity of the item being shipped, necessary for inventory and customs documentation. Value in the units of measurement corresponding to the field <code>measurementCode</code>.</p><p><strong>🔹This field is required for shipments crossing the EU border or going outside the EU.</strong></p><p>Constraints: Min 0┃Max 9999999.99</p></td></tr><tr><td>invoice.items.<strong>cost</strong></td><td align="center">number</td><td align="center">yes</td><td><p>The value per single unit of the item in the sender's currency, important for insurance and customs valuation.</p><p><strong>🔸Values are validated for decimal precision, and digits beyond two decimal places are ignored.</strong></p><p><strong>🔹This field is required for shipments crossing the EU border or going outside the EU.</strong></p><p>Constraints: Min 0┃Max 9999999.99</p></td></tr><tr><td><strong>parcels</strong></td><td align="center">object</td><td align="center">yes</td><td><p>Parcels` description block. Array contains objects, each object responsible for information about parcel.</p><p><strong>🔻All fields in this array must be filled.</strong></p></td></tr><tr><td>parcels.<strong>cargoCategory</strong></td><td align="center">string</td><td align="center">no</td><td><p>Specifies the type of the shipment, helping to categorize the goods for logistics and customs processing. The category impacts how the shipment is handled, its shipping cost, and the required documentation. Available categories are:</p><ul><li><code>parcel</code>: Small to medium-sized packages, typically for consumer goods and retail items.</li><li><code>documents</code>: Postal shipments containing documents such as letters, contracts, and official papers. This category is specifically for items that weigh no more than 1 kg and have dimensions not exceeding 35 cm in length, 25 cm in width, and 2 cm in height.</li><li><p><code>pallet</code>: Type of cargo formed as a pallet shipment with fixed dimensions and weight limits, available in the Business Cabinet of Europe for legal entities:</p><ul><li>Up to 250 kg, area ~0.48 m², dimensions 80 × 60 × 170 cm</li><li>Up to 500 kg, area ~0.96 m², dimensions 120 × 80 × 170 cm</li><li>Up to 750 kg, area ~1.2 m², dimensions 120 × 100 × 170 cm</li><li>Up to 1000 kg, area ~1.2 m², dimensions 120 × 100 × 170 cm</li></ul></li></ul><p>Possible values: <code>parcel</code> | <code>documents</code> | <code>pallet</code></p></td></tr><tr><td>parcels.<strong>parcelDescription</strong></td><td align="center">string</td><td align="center">no</td><td><p>This field requires a concise description of the contents within the shipment, providing essential information on the nature of the items enclosed. This description aids in the logistics process, offering a clear understanding of the package contents for transportation planning and customs clearance. The summary should include details like the type of items, their purpose, and any other relevant information that describes the contents. It’s crucial for ensuring that the shipment complies with shipping regulations and facilitates smooth customs processing. Additionally, this field supports data in Unicode encoding, allowing for the inclusion of special characters and symbols using the \uXXXX format. This feature is particularly useful for languages that use non-Latin characters, ensuring accurate representation of item descriptions across diverse linguistic contexts.</p><p>Constraints: Max 255 chars</p></td></tr><tr><td>parcels.<strong>insuranceCost</strong></td><td align="center">number</td><td align="center">yes</td><td><p>Represents the declared value of the shipment for insurance coverage. This value indicates the maximum compensation amount in the event of damage or loss during transit. It is important to accurately declare this value to match the actual worth of the shipment contents, as underdeclaring can result in insufficient compensation.</p><p><strong>Currency handling:</strong></p><ul><li>If <code>insuranceCurrencyCode</code> is <strong>not provided</strong>, the value must be specified in the <strong>currency of the sender's country</strong>.</li><li>If <code>insuranceCurrencyCode</code> <strong>is provided</strong>, the value can be specified in any supported currency (ISO 4217). The system will automatically convert it to the sender's country currency before further processing.</li></ul><p>🔸<strong>When <code>insuranceCurrencyCode</code> is used, all parcels must specify the same currency code. Mixed or partially filled currency values will result in a validation error.</strong></p><p><strong>The value must always be greater than 0, regardless of the shipment direction.</strong>"</p><p>Example: <code>1.5</code></p></td></tr><tr><td>parcels.<strong>insuranceCurrencyCode</strong></td><td align="center">string</td><td align="center">no</td><td><p>ISO 4217 currency code for the declared insurance value (<code>insuranceCost</code>).</p><ul><li>When provided, the system converts <code>insuranceCost</code> to the sender's country currency automatically.</li><li>If used, all parcels must have the same <code>insuranceCurrencyCode</code>.</li></ul><p>🔹<strong>This field is optional.</strong>"</p><p>Pattern: ^[A-Z]{3}$</p></td></tr><tr><td>parcels.<strong>rowNumber</strong></td><td align="center">integer</td><td align="center">yes</td><td><p>Sequential identifier for each parcel within a shipment, used to organize and track individual packages, especially when multiple items are involved. If the shipment contains only one package, the value should be 1.</p><p>Constraints: Min 1</p></td></tr><tr><td>parcels.<strong>width</strong></td><td align="center">integer</td><td align="center">yes</td><td><p>The parcel's width measured in millimeters, used alongside length and height to compute the total volume for logistical planning.</p><p>Constraints: Min 1</p></td></tr><tr><td>parcels.<strong>length</strong></td><td align="center">integer</td><td align="center">yes</td><td><p>The parcel's length measured in millimeters, used alongside height and width to compute the total volume for logistical planning.</p><p>Constraints: Min 1</p></td></tr><tr><td>parcels.<strong>height</strong></td><td align="center">integer</td><td align="center">yes</td><td><p>The parcel's height measured in millimeters, used alongside length and width to compute the total volume for logistical planning.</p><p>Constraints: Min 1</p></td></tr><tr><td>parcels.<strong>actualWeight</strong></td><td align="center">integer</td><td align="center">yes</td><td><p>Actual item weight in grams (g).</p><p>Supported precision: 10 grams (0.01 kg). Values not divisible by 10 g are rounded down to the nearest lower multiple of 10 g.</p><p><strong>🔸This field is mandatory when the</strong> <code>invoice.items</code> <strong>array is present in the request.</strong><br>The system validates that the sum of <code>actualWeight</code> values across <strong>all invoice items</strong> matches the <strong>total shipment weight</strong> (sum of <code>parcels[].actualWeight</code>).</p><p>⚠️IMPORTANT: Ensure that all invoice item weights are correctly rounded and that their total weight exactly matches the shipment weight to avoid validation errors.</p><p>Constraints: Min 1┃Max 2147483647</p></td></tr><tr><td><strong>sender</strong></td><td align="center">object</td><td align="center">yes</td><td><p>Information about the party sending the shipment, including details about an individual or organization responsible for the dispatch.</p><p><strong>🔻This array of fields is required</strong></p></td></tr><tr><td>sender.<strong>companyTin</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The tax identification number or equivalent identifier (EDRPOU, TIN, NIP, IČO - for Slovakia) of a legal entity.</p><p><strong>🔸The fields are required for a legal entity. If they are not filled in, the sender will be considered an individual</strong></p><p>Constraints: Max 20 chars</p></td></tr><tr><td>sender.<strong>companyName</strong></td><td align="center">string | null</td><td align="center">yes</td><td><p>The official name of the sender's company. This field is used when the sender is a business entity, helping to identify the sending organization in documentation and records.</p><p>Constraints: Max 100 chars</p></td></tr><tr><td>sender.<strong>eoriCode</strong></td><td align="center">string | null</td><td align="center">yes</td><td><p>The EORI code (Economic Operators Registration and Identification number) is used by the European Union to identify economic operators engaged in international trade. The sender's EORI code should be included in the invoice to ensure correct customs clearance and taxation when shipping goods to EU countries. The code is not mandatory but strongly recommended for international shipments to the EU, as it facilitates customs processing and helps avoid delays.</p><p>Constraints: 3 to 17 chars</p></td></tr><tr><td>sender.<strong>phone</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The contact phone number of the sender or the sender’s company representative. It is required for shipment-related communication, including pickup coordination and issue resolution. </p><p><strong>Format:</strong> The phone number must be provided in <strong>international format</strong> according to the <strong>E.164</strong> standard. </p><p>Example: 380XXXXXXXXX, 491234567890, 371XXXXXXXX </p><p><strong>Restrictions:</strong></p><ul><li>The sender's phone number must be valid and reachable in case of delivery issues.</li><li>If the number is submitted in a local (non-international) format, the system will attempt to <strong>normalize</strong> it, but such logic is limited and may not support all variations across countries. We strongly recommend implementing <strong>front-end validation</strong> to ensure numbers are entered in the correct international format.</li></ul><p><strong>🔻This field is required</strong></p></td></tr><tr><td>sender.<strong>email</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Email address of the sender, providing an electronic means of contact for updates, inquiries, and important notifications about the shipment.</p><p><strong>🔹This field is required for shipments crossing the EU border or going outside the EU.</strong></p></td></tr><tr><td>sender.<strong>name</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The full name of the individual sender or the primary contact person for a company sender. This name is used in all correspondences and documents related to the shipment.</p><p><strong>🔸Important for EU → UA international shipments:</strong><br>The sender name <strong>must be provided using Latin characters only</strong>. Use of Cyrillic characters (including Ukrainian letters) is <strong>not allowed</strong> and will result in validation or processing errors on the Last Mile partner side.</p><p><strong>🔻This field is required</strong></p><p>Constraints: Max 100 chars</p></td></tr><tr><td>sender.<strong>ioss</strong></td><td align="center">string</td><td align="center">no</td><td><p>The IOSS (Import One-Stop Shop) number is an optional input used to facilitate the VAT declaration process for shipments from non-EU countries with a declared value of up to EUR 150. It is utilized by shippers using the IOSS process to simplify customs procedures for deliveries to private customers in the EU. This field is available for shipments where the sender's country is outside the EU and the destination is within the EU.</p><p>Constraints: Max 12 chars </p><p>Pattern: /^[a-zA-Z0-9]*$/u</p></td></tr><tr><td>sender.<strong>countryCode</strong></td><td align="center">string</td><td align="center">yes</td><td><p>A two-letter code representing the sender's country, following the ISO 3166-1 Alpha-2 standard, indicating the country of origin for the shipment.</p><p><strong>🔻This field is required</strong></p><p>Pattern: ^[A-Z]{2}$</p></td></tr><tr><td>sender.<strong>divisionNumber</strong></td><td align="center">string | null</td><td align="center">yes</td><td><p>This field is mandatory for parcels that are dispatched from a post office division or parcel locker, requiring the unique identifier of the dispatch location to be specified.</p><p><strong>🔹This field is required if both the</strong> <code>sender.addressParts</code> <strong>group and the</strong> <code>sender.divisionID</code> <strong>field are missing or empty</strong></p><p>Example: <code>32521/1</code></p></td></tr><tr><td>sender.<strong>divisionID</strong></td><td align="center">integer | null</td><td align="center">yes</td><td><p>Division ID for specific branch identification.</p><p><strong>🔹This field is required if both the</strong> <code>sender.addressParts</code> <strong>group and the</strong> <code>sender.divisionNumber</code> <strong>field are missing or empty</strong></p><p>Constraints: Min 1</p></td></tr><tr><td>sender.<strong>addressParts</strong></td><td align="center">object</td><td align="center">yes</td><td>This array of fields is required when shipping directly from an address, detailing the specific components of the location from which the parcel is dispatched. It includes detailed address information, ensuring the accurate identification of the pickup location.</td></tr><tr><td>sender.addressParts.<strong>city</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The name of the city from which the shipment is dispatched. It helps pinpoint the exact urban location for pickup or shipping.</p><p><strong>🔹This field is required if</strong> <code>sender.divisionNumber</code> <strong>and</strong> <code>sender.divisionID</code> <strong>fields are missing or empty.</strong><br>🔸For shipments where the sender country is <strong>Moldova</strong> or <strong>Ukraine</strong>, the sender city is validated against internal settlement directories. If the settlement cannot be resolved due to an invalid or unmapped value, the shipment will not be created.</p><p>Constraints: Max 100 chars</p></td></tr><tr><td>sender.addressParts.<strong>region</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Specifies the broader administrative area, like a state or province, encompassing the city, providing additional context for the shipment's origin.</p><p><strong>🔹This field is required for shipments when the sender or recipient country is the USA, Ireland, or Canada.</strong></p><p>Constraints: Max 100 chars</p></td></tr><tr><td>sender.addressParts.<strong>street</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Identifies the specific street address for the sender's location, crucial for accurate pickup or delivery operations.</p><p><strong>🔹This field is required if</strong> <code>sender.divisionNumber</code> <strong>and</strong> <code>sender.divisionID</code> <strong>fields are missing or empty.</strong></p><p>Constraints: Max 100 chars</p></td></tr><tr><td>sender.addressParts.<strong>postCode</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The postal or ZIP code corresponding to the sender's address. It's essential for sorting and routing the shipment efficiently.</p><p><strong>🔹This field is required if</strong> <code>sender.divisionNumber</code> <strong>and</strong> <code>sender.divisionID</code> <strong>fields are missing or empty.</strong></p><p>Constraints: Max 10 chars</p></td></tr><tr><td>sender.addressParts.<strong>building</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The building number or name at the specified street address, pinpointing the precise location for shipment collection.</p><p><strong>🔹This field is required if</strong> <code>sender.divisionNumber</code> <strong>and</strong> <code>sender.divisionID</code> <strong>fields are missing or empty.</strong></p><p>Constraints: Max 100 chars</p></td></tr><tr><td>sender.addressParts.<strong>flat</strong></td><td align="center">string</td><td align="center">no</td><td><p>If applicable, the apartment or suite number within a building from which the shipment originates, ensuring pickup personnel can locate the sender's exact unit.</p><p>Constraints: Max 10 chars</p></td></tr><tr><td>sender.addressParts.<strong>block</strong></td><td align="center">string | null</td><td align="center">no</td><td><p>Indicates a specific block or section within a larger residential area or complex, if relevant, aiding in locating the sender's precise starting point for the shipment.</p><p>Constraints: Max 100 chars</p></td></tr><tr><td>sender.addressParts.<strong>note</strong></td><td align="center">string</td><td align="center">no</td><td><p>Allows for the inclusion of additional details or instructions about the sender's address that might facilitate the pickup process, such as gate codes, specific entry points, or preferred contact times.</p><p>Constraints: Max 100 chars</p></td></tr><tr><td><strong>recipient</strong></td><td align="center">object</td><td align="center">yes</td><td><p>Information about the party receiving the shipment, detailing either an individual or an organization responsible for receiving the dispatched goods.</p><p><strong>🔻This array of fields is required</strong></p></td></tr><tr><td>recipient.<strong>companyTin</strong></td><td align="center">string | null</td><td align="center">yes</td><td><p>The tax identification number or equivalent identifier (EDRPOU, TIN, NIP, IČO - for Slovakia) of a legal entity.</p><p><strong>🔸The fields are required for a legal entity. If they are not filled in, the recipient will be considered an individual</strong></p><p>Constraints: Max 20 chars</p></td></tr><tr><td>recipient.<strong>companyName</strong></td><td align="center">string | null</td><td align="center">yes</td><td><p>The formal name of the recipient's company. Utilize this field when the recipient is a business entity, aiding in the identification of the receiving organization in documents and records.</p><p>Constraints: Max 100 chars</p></td></tr><tr><td>recipient.<strong>eoriCode</strong></td><td align="center">string | null</td><td align="center">yes</td><td><p>The recipient's EORI code is important for customs clearance when shipping goods to European Union countries, especially when sending to legal entities. The code is not mandatory but recommended, as it helps ensure smooth customs clearance and minimizes the risk of delays. The requirement for the recipient eoriCode depends on the type of goods being shipped:</p><ol><li>Non-excise goods: The EORI code is not mandatory if non-excise goods are being shipped from Ukraine to a legal entity in Europe. If the recipient does not have an EORI code, one will be automatically assigned.</li><li>Excise goods: The EORI code is required for shipments of excise goods. The recipient must obtain an EORI code before the goods can be shipped.</li></ol><p>Constraints: 3 to 17 chars</p></td></tr><tr><td>recipient.<strong>phone</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The contact phone number of the recipient or the recipient’s company representative. Used for delivery notifications and communication with the customer during shipment processing. </p><p><strong>Format:</strong> The phone number must be provided in <strong>international format</strong> according to the <strong>E.164</strong> standard. </p><p>Example: 380XXXXXXXXX, 491234567890, 371XXXXXXXX </p><p><strong>Restrictions:</strong></p><ul><li>For deliveries to Nova Post branches in Europe, Ukrainian mobile numbers are acceptable.</li><li>For deliveries to <strong>partner locations</strong> (such as InPost, GLS, Venipak, Cargus, etc.) and <strong>cross-border address deliveries</strong>, the phone number must belong to a mobile operator in the recipient's country. If the phone number is submitted in a local (non-international) format, the system will attempt to <strong>normalize</strong> it to the international format, but the internal algorithm does not cover all possible cases. If your system does not support front-end validation of phone numbers, we recommend informing us about failed phone number cases so we can assess potential improvements to the normalization logic.</li></ul><p><strong>🔻This field is required</strong></p></td></tr><tr><td>recipient.<strong>email</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The email address of the recipient, serving as a digital contact point for shipment updates, inquiries, and essential notifications.</p><p><strong>🔹This field is required for shipments crossing the EU border or going outside the EU.</strong></p></td></tr><tr><td>recipient.<strong>name</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The complete name of the individual recipient or the primary contact for a company recipient. This is the name used for all shipping-related correspondence and documentation.</p><p><strong>🔻This field is required</strong></p><p>Constraints: Max 100 chars</p></td></tr><tr><td>recipient.<strong>countryCode</strong></td><td align="center">string</td><td align="center">yes</td><td><p>A two-letter code that identifies the recipient's country, adhering to the ISO 3166-1 Alpha-2 standard, which specifies the shipment's destination country.</p><p><strong>🔻This field is required</strong></p><p>Pattern: ^[A-Z]{2}$</p></td></tr><tr><td>recipient.<strong>divisionNumber</strong></td><td align="center">string | null</td><td align="center">yes</td><td><p>This field is mandatory for parcels intended to be collected from a post office division or parcel locker, requiring the insertion of the unique identifier for the designated location.</p><p><strong>🔹This field is required if both the</strong> <code>recipient.addressParts</code> <strong>group and the</strong> <code>recipient.divisionID</code> <strong>field are missing or empty</strong></p><p>Example: <code>32521/1</code></p></td></tr><tr><td>recipient.<strong>divisionID</strong></td><td align="center">integer | null</td><td align="center">yes</td><td><p>Division ID for specific branch identification.</p><p><strong>🔹This field is required if both the</strong> <code>recipient.addressParts</code> <strong>group and the</strong> <code>recipient.divisionNumber</code> <strong>field are missing or empty</strong></p><p>Constraints: Min 1</p></td></tr><tr><td>recipient.<strong>addressParts</strong></td><td align="center">object</td><td align="center">yes</td><td><p>This array of fields is necessary when the shipment is directed to a specific address, outlining the precise location details to which the parcel is to be delivered. It encompasses comprehensive address information to ensure the exact identification of the delivery location.</p><p><strong>🔸The values in the nested address fields must not duplicate each other. Providing the same address information in multiple inner fields will result in an error.</strong></p></td></tr><tr><td>recipient.addressParts.<strong>city</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The city to which the shipment is being delivered. This detail ensures the parcel is directed to the correct urban area for the recipient.</p><p><strong>🔹This field is required if</strong> <code>recipient.divisionNumber</code> <strong>and</strong> <code>recipient.divisionID</code> <strong>fields are missing or empty.</strong><br>🔸For shipments where the recipient country is <strong>Moldova</strong> or <strong>Ukraine</strong>, the recipient city is validated against internal settlement directories. If the settlement cannot be resolved due to an invalid or unmapped value, the request will be rejected with the error:<code>validation.condition.recipient_settlement_not_defined</code>.</p><p>Constraints: Max 100 chars</p></td></tr><tr><td>recipient.addressParts.<strong>region</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Specifies the recipient's state or province within the destination country, crucial for accurate shipment routing and delivery. When sending to the USA, it's essential to include a two-letter state code, such as "WA" for Washington or "DC" for the District of Columbia, according to the ISO 3166-2:US standard.</p><p><strong>🔹This field is required for shipments when the sender or recipient country is the USA, Ireland, or Canada.</strong></p><p>Constraints: Max 100 chars</p></td></tr><tr><td>recipient.addressParts.<strong>street</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The street name of the recipient's address, vital for pinpointing the exact delivery spot.</p><p><strong>🔹This field is required if</strong> <code>recipient.divisionNumber</code> <strong>and</strong> <code>recipient.divisionID</code> <strong>fields are missing or empty.</strong></p><p>Constraints: Max 100 chars</p></td></tr><tr><td>recipient.addressParts.<strong>postCode</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The postal or ZIP code for the recipient's address, critical for the precise sorting and routing of the parcel to its final destination.</p><p><strong>🔹This field is required if</strong> <code>recipient.divisionNumber</code> <strong>and</strong> <code>recipient.divisionID</code> <strong>fields are missing or empty.</strong></p><p>Constraints: Max 10 chars</p></td></tr><tr><td>recipient.addressParts.<strong>building</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Specifies the building number or name at the recipient's address, guiding the delivery to the exact building within a given street.</p><p><strong>🔹This field is required if</strong> <code>recipient.divisionNumber</code> <strong>and</strong> <code>recipient.divisionID</code> <strong>fields are missing or empty.</strong></p><p>Constraints: Max 100 chars</p></td></tr><tr><td>recipient.addressParts.<strong>flat</strong></td><td align="center">string</td><td align="center">no</td><td><p>The apartment or suite number, if the delivery is to a multi-unit building, ensuring the parcel reaches the specific unit of the recipient.</p><p>Constraints: Max 10 chars</p></td></tr><tr><td>recipient.addressParts.<strong>block</strong></td><td align="center">string | null</td><td align="center">no</td><td><p>Identifies a block or section within a larger complex or residential area for the recipient, useful in large housing developments to further narrow down the delivery point.</p><p>Constraints: Max 100 chars</p></td></tr><tr><td>recipient.addressParts.<strong>note</strong></td><td align="center">string</td><td align="center">no</td><td><p>The space for any additional recipient-related address instructions or details that might assist in the delivery process, such as security instructions, specific doors for delivery, or preferred delivery times.</p><p>Constraints: Max 100 chars</p></td></tr><tr><td>recipient.<strong>registrationAddressRecipient</strong></td><td align="center">object</td><td align="center">no</td><td>The registrationAddressRecipient object provides a detailed breakdown of the recipient's registered address and is required when shipping to countries with specific customs requirements, such as Germany, Slovakia, Hungary, and France. This ensures compliance with local regulations and facilitates smooth customs processing. The object allows for a precise and complete representation of the recipient's address, which is especially important for international shipments to countries with strict customs regulations.</td></tr><tr><td>recipient.registrationAddressRecipient.<strong>city</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The name of the city where the recipient is registered. It must match the local naming conventions for accurate identification.</p><p><strong>🔹This field is required for shipments to countries with specific customs requirements, including Germany, Slovakia, Hungary, and France.</strong></p><p>Constraints: Max 100 chars</p></td></tr><tr><td>recipient.registrationAddressRecipient.<strong>street</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The name of the street in the recipient's address. It must match the local naming conventions for accurate identification.</p><p><strong>🔹This field is required for shipments to countries with specific customs requirements, including Germany, Slovakia, Hungary, and France.</strong></p><p>Constraints: Max 100 chars</p></td></tr><tr><td>recipient.registrationAddressRecipient.<strong>zipCode</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The postal code of the recipient's registered address.</p><p><strong>🔹This field is required for shipments to countries with specific customs requirements, including Germany, Slovakia, Hungary, and France.</strong></p><p>Constraints: Max 10 chars</p></td></tr><tr><td>recipient.registrationAddressRecipient.<strong>building</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The building number or name where the recipient is registered.</p><p><strong>🔹This field is required for shipments to countries with specific customs requirements, including Germany, Slovakia, Hungary, and France.</strong></p><p>Constraints: Max 100 chars</p></td></tr><tr><td>recipient.registrationAddressRecipient.<strong>apartment</strong></td><td align="center">string</td><td align="center">no</td><td><p>The flat or apartment number within the building.</p><p>Constraints: Max 10 chars</p></td></tr><tr><td>recipient.registrationAddressRecipient.<strong>state</strong></td><td align="center">string</td><td align="center">no</td><td><p>The state or region where the recipient is registered. Required in some countries for detailed geographical identification.</p><p>Constraints: Max 100 chars</p></td></tr></tbody></table>

</details>

## POST /shipments

> Create Shipment

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Shipments"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}},"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Validation":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Time-out":{"description":"Connection time-out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}}},"paths":{"/shipments":{"post":{"tags":["Shipments"],"requestBody":{"description":"Optional description in *Markdown*","required":true,"content":{"application/json":{"schema":{"type":"object","required":["sender","invoice"],"properties":{"status":{"type":"string","description":"Signifies the current status of the transportation document, tracking its progress through the shipping lifecycle.","enum":["ReadyToShip"]},"clientOrder":{"type":"string","description":"Represents all potential order identifiers associated with the shipment.","maxLength":50},"note":{"type":"string","description":"Any additional information or special instructions that pertain to the order can be included here.","maxLength":255},"deliveryType":{"type":"string","description":"Defines the tariff type to be applied to the shipment during creation or update."},"payerType*":{"type":"string","description":"Identifies who is responsible for the payment of delivery services.","enum":["Sender","Recipient","ThirdPerson"]},"payerContractNumber":{"type":"string","description":"Required for `ThirdPerson` payments and for non-cash payments when `payerType` is `Sender` or `Recipient`.","minLength":2,"maxLength":20,"nullable":true},"services":{"type":"array","description":"Contains information about additional services for the shipment.","properties":{"shipmentParcelRowNumber":{"type":"integer","nullable":true,"description":"Specifies the row number of the parcel to which the service is applied."},"serviceCode":{"type":"string","description":"The code indicating the service."},"serviceName":{"type":"string","description":"Name of the service."},"serviceId":{"type":"string","description":"Unique identifier (reference ID) of the selected service."},"amount":{"type":"number","description":"The total amount the recipient must pay under the COD service."},"contractNumber":{"type":"string","nullable":true,"description":"Contract number of the payer responsible for the selected service."},"payerType":{"type":"string","description":"Determines who is responsible for paying for the service."},"additionalParameters":{"type":"string","description":"Additional parameters for the service.","properties":{"cod":{"type":"string","description":"Additional parameters for configuring COD.","properties":{"bankAccount":{"type":"object","description":"Information describing the bank account details to which the funds will be transferred.","properties":{"amount":{"type":"number","description":"The amount that will be transferred to the sender’s account after payment."},"currencyCode":{"type":"string","description":"The currency for the transaction, defined by the sender’s contract."},"bankAccountId":{"type":"string","description":"Tax identification number of an individual or a legal entity."},"bankAccountName":{"type":"string","description":"IBAN"},"description":{"type":"string","description":"Additional description of the payment details."},"commissionPayer":{"type":"string","description":"Specifies the party responsible for paying the commission."}}}}},"backwardDelivery":{"type":"array","description":"Additional parameters for configuring return delivery.","items":{"type":"object","properties":{"description":{"type":"string","description":"Description of the goods to be returned."}}}}}}}},"invoice":{"type":"object","description":"This object presents the necessary data for customs authorities to process the consignment efficiently.","properties":{"customerNumber":{"type":"string","description":"Unique identifier/number of the invoice accompanying the goods in the shipment, generated directly by the client.","maxLength":50,"nullable":true},"customerCreatedAt":{"type":"string","format":"date-time","description":"You must provide the date specified in the invoice accompanying the shipment."},"type":{"type":"string","description":"Type of client invoice accompanying the shipment and used for customs declaration.","enum":["Invoice","ProformaInvoice"]},"incoterm":{"type":"string","description":"Specifies the trade terms for the shipping agreement between the buyer and seller.","enum":["DAP","DDP"]},"exportReason":{"type":"string","description":"Specifies the general reason for exporting items, which is required for customs and other regulatory bodies.","enum":["ForPersonalPurposes","Selling","Repair","Return","Other"]},"cost":{"type":"number","description":"Total declared invoice value in the original currency.","minimum":0,"maximum":9999999.99},"currency":{"type":"string","description":"ISO 4217 currency code of the invoice."},"payerFeesCustoms":{"type":"string","description":"Specifies who is responsible for paying for customs services.","enum":["Sender","Recipient","ThirdPerson"]},"items":{"type":"array","description":"A detailed list of goods being shipped.","items":{"type":"object","properties":{"customerId":{"type":"string","description":"Client item identifier."},"hsCode":{"type":"string","description":"The Harmonized System code for each item, a standardized numerical method of classifying traded products.","maxLength":255,"nullable":true},"name":{"type":"string","description":"Represents the item's name in the local language, offering an accurate description for customs and logistical planning.","maxLength":512},"nameEng":{"type":"string","description":"Specifies the item's name in English, critical for ensuring that the product is identifiable and understandable across international trade and logistics channels.","maxLength":512},"material":{"type":"string","description":"The primary material from which the item is made, important for customs declarations and potential restrictions.","maxLength":50},"materialEng":{"type":"string","description":"The description of the item's material in English, aiding in the universal understanding of the product's composition.","maxLength":255},"madeInCountryCode":{"type":"string","description":"The ISO 3166-1 alpha-2 code indicating the country of manufacture.","pattern":"^[A-Z]{2}$","nullable":true},"producerAndModel":{"type":"string","description":"The parameter represents the manufacturer and model of the device when creating a shipment.","maxLength":255,"nullable":true},"actualWeight":{"type":"integer","description":"Actual total weight of all units of the item in grams (g).","minimum":1,"maximum":2147483647,"nullable":true},"measurementCode":{"type":"string","description":"The unit of measurement for the item quantity, such as pieces, kilograms, meters, etc., standardizing the way quantities are reported.","maxLength":255},"amount":{"type":"number","description":"The quantity of the item being shipped.","minimum":0,"maximum":9999999.99},"cost":{"type":"number","description":"The value per single unit of the item in the sender's currency.","minimum":0,"maximum":9999999.99}}}}}},"parcels*":{"type":"array","description":"Parcels` description block.","items":{"type":"object","properties":{"cargoCategory*":{"type":"string","description":"Specifies the type of the shipment, helping to categorize the goods for logistics and customs processing.","enum":["parcel","documents","pallet"]},"parcelDescription*":{"type":"string","description":"This field requires a concise description of the contents within the shipment.","maxLength":255},"insuranceCost*":{"type":"number","format":"float","description":"Represents the declared value of the shipment for insurance coverage.","minimum":1,"exclusiveMinimum":true},"insuranceCurrencyCode":{"type":"string","description":"ISO 4217 currency code for the declared insurance value (`insuranceCost`).","pattern":"^[A-Z]{3}$"},"rowNumber*":{"type":"integer","description":"Sequential identifier for each parcel within a shipment.","minimum":1},"width*":{"type":"integer","description":"The parcel's width measured in millimeters.","minimum":1},"length*":{"type":"integer","description":"The parcel's length measured in millimeters.","minimum":1},"height*":{"type":"integer","description":"The parcel's height measured in millimeters.","minimum":1},"actualWeight*":{"type":"integer","description":"Actual item weight in grams (g).","minimum":1,"maximum":2147483647}}}},"sender*":{"type":"object","description":"Information about the party sending the shipment.","properties":{"companyTin":{"type":"string","description":"The tax identification number or equivalent identifier (EDRPOU, TIN, NIP, IČO - for Slovakia) of a legal entity.","maxLength":20,"nullable":true},"companyName":{"type":"string","description":"The official name of the sender's company.","maxLength":100,"nullable":true},"eoriCode":{"type":"string","description":"The EORI code (Economic Operators Registration and Identification number).","minLength":3,"maxLength":17,"nullable":true},"phone*":{"type":"string","description":"The contact phone number of the sender or the sender’s company representative."},"email":{"type":"string","description":"Email address of the sender, providing an electronic means of contact for updates, inquiries, and important notifications about the shipment."},"name*":{"type":"string","description":"The full name of the individual sender or the primary contact person for a company sender.","maxLength":100},"ioss":{"type":"string","description":"The IOSS (Import One-Stop Shop) number is an optional input used to facilitate the VAT declaration process for shipments from non-EU countries with a declared value of up to EUR 150.","maxLength":12,"pattern":"/^[a-zA-Z0-9]*$/u"},"countryCode*":{"type":"string","description":"A two-letter code representing the sender's country, following the ISO 3166-1 Alpha-2 standard.","pattern":"^[A-Z]{2}$"},"divisionNumber":{"type":"string","description":"This field is mandatory for parcels that are dispatched from a post office division or parcel locker.","nullable":true},"divisionID":{"type":"integer","description":"Division ID for specific branch identification.","minimum":1,"nullable":true},"addressParts":{"type":"object","description":"This array of fields is required when shipping directly from an address.","properties":{"city":{"type":"string","description":"The name of the city from which the shipment is dispatched.","maxLength":100},"region":{"type":"string","description":"Specifies the broader administrative area, like a state or province, encompassing the city.","maxLength":100},"street":{"type":"string","description":"Identifies the specific street address for the sender's location.","maxLength":100},"postCode":{"type":"string","description":"The postal or ZIP code corresponding to the sender's address.","maxLength":10},"building":{"type":"string","description":"The building number or name at the specified street address.","maxLength":100},"flat":{"type":"string","description":"If applicable, the apartment or suite number within a building from which the shipment originates.","maxLength":10},"block":{"type":"string","description":"Indicates a specific block or section within a larger residential area or complex.","maxLength":100,"nullable":true},"note":{"type":"string","description":"Allows for the inclusion of additional details or instructions about the sender's address that might facilitate the pickup process.","maxLength":100}}}}},"recipient*":{"type":"object","description":"Information about the party receiving the shipment.","properties":{"companyTin":{"type":"string","description":"The tax identification number or equivalent identifier (EDRPOU, TIN, NIP, IČO - for Slovakia) of a legal entity.","maxLength":20,"nullable":true},"companyName":{"type":"string","description":"The formal name of the recipient's company.","maxLength":100,"nullable":true},"eoriCode":{"type":"string","description":"The recipient's EORI code is important for customs clearance when shipping goods to European Union countries.","minLength":3,"maxLength":17,"nullable":true},"phone*":{"type":"string","description":"The contact phone number of the recipient or the recipient’s company representative."},"email":{"type":"string","description":"The email address of the recipient."},"name*":{"type":"string","description":"The complete name of the individual recipient or the primary contact for a company recipient.","maxLength":100},"countryCode*":{"type":"string","description":"A two-letter code that identifies the recipient's country, adhering to the ISO 3166-1 Alpha-2 standard.","pattern":"^[A-Z]{2}$"},"divisionNumber":{"type":"string","description":"This field is mandatory for parcels intended to be collected from a post office division or parcel locker.","nullable":true},"divisionID":{"type":"integer","description":"Division ID for specific branch identification.","minimum":1,"nullable":true},"addressParts":{"type":"object","description":"This array of fields is necessary when the shipment is directed to a specific address.","properties":{"city":{"type":"string","description":"The city to which the shipment is being delivered.","maxLength":100},"region":{"type":"string","description":"Specifies the recipient's state or province within the destination country.","maxLength":100},"street":{"type":"string","description":"The street name of the recipient's address.","maxLength":100},"postCode":{"type":"string","description":"The postal or ZIP code for the recipient's address.","maxLength":10},"building":{"type":"string","description":"Specifies the building number or name at the recipient's address.","maxLength":100},"flat":{"type":"string","description":"The apartment or suite number, if the delivery is to a multi-unit building.","maxLength":10},"block":{"type":"string","description":"Identifies a block or section within a larger complex or residential area for the recipient.","maxLength":100,"nullable":true},"note":{"type":"string","description":"The space for any additional recipient-related address instructions or details that might assist in the delivery process.","maxLength":100}}},"registrationAddressRecipient":{"type":"object","description":"The registrationAddressRecipient object provides a detailed breakdown of the recipient's registered address.","properties":{"city":{"type":"string","description":"The name of the city where the recipient is registered.","maxLength":100},"street":{"type":"string","description":"The name of the street in the recipient's address.","maxLength":100},"zipCode":{"type":"string","description":"The postal code of the recipient's registered address.","maxLength":10},"building":{"type":"string","description":"The building number or name where the recipient is registered.","maxLength":100},"apartment":{"type":"string","description":"The flat or apartment number within the building.","maxLength":10},"state":{"type":"string","description":"The state or region where the recipient is registered.","maxLength":100}}}}}}}}}},"responses":{"201":{"description":"Successfully created shipment.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","description":"A unique identifier assigned to each shipment, facilitating internal operations such as modifications, system searches, and deletion of shipments. The `id` serves as a key reference for administrative and logistical processes within the delivery system, allowing precise access and management of shipment records.","minimum":1},"number":{"type":"string","description":"The transportation document number provided to clients for tracking purposes and accessing printed forms. It also facilitates shipment searches within the system, offering a customer-friendly way to monitor shipment progress. While `number` is used externally for tracking and documentation, it can also serve internal needs similar to `id` for identifying shipments in certain system operations.","pattern":"^[A-Z]{4}\\d{10}$"},"scheduledDeliveryDate":{"type":"string","format":"date-time","description":"Estimated delivery date based on routing and service level, subject to change based on logistics and external factors. Date in ISO 8601 format.","nullable":true},"status":{"type":"string","description":"Current status of the shipment. Initially set to `ReadyToShip` upon creation, indicating it's prepared for dispatch."},"cost":{"type":"number","format":"float","description":"Total cost calculated for the delivery services provided, based on shipment size, weight, destination, and service options selected."},"parcelsAmount":{"type":"integer","description":"The total number of parcels included in the shipment. This count helps in logistics planning and tracking.","minimum":1},"createdAt":{"type":"string","format":"date-time","description":"The date-time when the shipment record was created in the system. Date in ISO 8601 format."},"updatedAt":{"type":"string","format":"date-time","description":"The last date-time when the shipment record was updated. Helps in tracking changes and updates made to the shipment details.Date in ISO 8601 format."},"deletedAt":{"type":"string","format":"date-time","description":"The date-time when the shipment was canceled or removed from the system. If not canceled, this field is `null`.","nullable":true}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/Validation"},"503":{"$ref":"#/components/responses/Time-out"}},"summary":"Create Shipment"}}}}
```


# Cross-border shipments to Ukraine

This page describes the process of creating shipments from abroad to Ukraine.

<details>

<summary>Shipment API Interaction Flow</summary>

```mermaid
flowchart LR

A((Start)) -->|POST shipments| B([Shipment created])

B -->|PUT shipments by id| C([Edit shipment])
B -->|GET shipment by id| D([Shipment info])
B -->|GET shipment label| E([Label print])
E --> F((End))

B -->|GET shipment status| G([Shipment status])

G -->|POST redirect shipment| H([Redirect])
G -->|POST add parcel info| I([Add parcel info])
G -->|POST cancel shipment| J([Cancellation])
J --> K((End))

G -->|GET print document| L([Label print])
L --> M((End))

style A fill:#ffffff,color:#E30613,stroke:#E30613,stroke-width:2px
style B fill:#E30613,color:#ffffff,stroke:#E30613,stroke-width:2px

style C fill:#ffffff,color:#222222,stroke:#E30613,stroke-width:2px
style D fill:#ffffff,color:#222222,stroke:#E30613,stroke-width:2px
style E fill:#ffffff,color:#222222,stroke:#E30613,stroke-width:2px
style G fill:#ffffff,color:#222222,stroke:#E30613,stroke-width:2px
style H fill:#ffffff,color:#222222,stroke:#E30613,stroke-width:2px
style I fill:#ffffff,color:#222222,stroke:#E30613,stroke-width:2px
style J fill:#ffffff,color:#222222,stroke:#E30613,stroke-width:2px
style L fill:#ffffff,color:#222222,stroke:#E30613,stroke-width:2px

style F fill:#E30613,color:#000000,stroke:#E30613,stroke-width:2px
style K fill:#E30613,color:#000000,stroke:#E30613,stroke-width:2px
style M fill:#E30613,color:#000000,stroke:#E30613,stroke-width:2px
```

</details>

<details>

<summary>Schema (Object)</summary>

<table data-search="false"><thead><tr><th width="127">Field</th><th width="91" align="center">Type</th><th width="108" align="center">Required</th><th>Description</th></tr></thead><tbody><tr><td><strong>status</strong></td><td align="center">enum</td><td align="center">yes</td><td><p>Signifies the current status of the transportation document, tracking its progress through the shipping lifecycle. Statuses detail each critical phase:</p><ul><li><code>Draft</code>: The document is in its preliminary stage, not yet finalized.</li><li><code>Accepted</code>: Reviewed and accepted, the document is ready for the next steps.</li><li><code>Issued</code>: The document has been completed and is ready for shipping.</li><li><code>ReadyToShip</code>: Indicates that the shipment is prepared for transport following the creation of the express waybill. Only this value can be specified when creating a shipment.</li><li><code>Deleted</code>: The document has been deleted from the system.</li><li><code>Returned</code>: The shipment has been returned to its sender.</li><li><code>Utilized</code>: Indicates that the physical goods associated with the transportation document have been disposed of or destroyed and the document is closed.</li></ul><p>Allowed: <code>ReadyToShip</code></p></td></tr><tr><td><strong>clientOrder</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Represents all potential order identifiers associated with the shipment. These identifiers are set by the customer for internal tracking purposes and are crucial for tracking the shipment throughout its journey. All entered values can be tracked in the shipment's tracking system.</p><p>Constraints: Max 50 chars</p></td></tr><tr><td><strong>note</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Any additional information or special instructions that pertain to the order can be included here. This could encompass delivery instructions, special handling requests, or other pertinent details that facilitate the handling and processing of the shipment.</p><p>Constraints: Max 255 chars</p></td></tr><tr><td><strong>deliveryType</strong></td><td align="center">string</td><td align="center">no</td><td><p>Defines the tariff type to be applied to the shipment during creation or update.</p><ul><li><code>standard</code>: Standard international delivery tariff.</li><li><code>economy</code>: Economy international delivery tariff.</li><li><code>express</code>: Express international delivery tariff.</li></ul><p>If the field is not provided, the tariff type is determined automatically according to current business rules, and the existing shipment creation behaviour remains unchanged.</p></td></tr><tr><td><strong>payerType</strong></td><td align="center">enum</td><td align="center">yes</td><td><p>Identifies who is responsible for the payment of delivery services. The payer type determines which party bears the cost:</p><ul><li><code>Sender</code>: The party sending the goods pays for the delivery.</li><li><code>Recipient</code>: The party receiving the goods is responsible for the delivery cost.</li><li><code>ThirdPerson</code>: A third party, not the sender or recipient, pays for the delivery services. When selecting <code>ThirdPerson</code>, the field <code>payerContractNumber</code> must be populated with the contract number of the paying party. For more detailed information, refer to the article on <a href="https://api-portal.novapost.com/en/api-methods/payment/">Payment for Delivery Services via Nova Post API</a>. This field is also referenced when generating an invoice.</li></ul><p>Allowed: <code>Sender</code> | <code>Recipient</code> | <code>ThirdPerson</code></p></td></tr><tr><td><strong>payerContractNumber</strong></td><td align="center">string┃null</td><td align="center">yes</td><td><p>This field is required in the following cases:</p><ul><li>When the <code>payerType</code> is set to <code>ThirdPerson</code>. It must contain the payer's contract number. For clients from Ukraine, it is also acceptable to provide the tax identification number (EDRPOU) instead of the contract number.</li><li>When the <code>payerType</code> is set to <code>Sender</code> or <code>Recipient</code> and a non-cash payment method is used.</li></ul><p>If this field is not provided in the cases described above, the payment method will automatically default to cash.</p><p>Ensure that the provided information is accurate, as it is essential for correct payment processing.</p><p>For more detailed information, refer to the article on <a href="https://api-portal.novapost.com/en/api-methods/payment/">Payment for Delivery Services via Nova Post API</a>.</p><p>Constraints: 2 to 20 chars</p></td></tr><tr><td><strong>services</strong></td><td align="center">array</td><td align="center">no</td><td>Contains information about additional services for the shipment.</td></tr><tr><td>services.<strong>shipmentParcelRowNumber</strong></td><td align="center">integer</td><td align="center">yes</td><td><p>Specifies the row number of the parcel to which the service is applied. The value must correspond to the <code>rowNumber</code> of an existing parcel in the <code>parcels</code> array.</p><p>For services applied to the <strong>entire shipment</strong> (for example, <code>ExpBackwardGoods</code>), this field must be set to <code>null</code>.</p></td></tr><tr><td>services.<strong>serviceCode</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The code indicating the service.</p><p><strong>A list of available codes and descriptions of their meanings:</strong></p><ul><li><code>COD</code> — The Cash on Delivery (COD) service allows the recipient to pay for the goods directly upon receiving them, without the need for prepayment. The sender can add this service to the shipment, and the recipient has the option to pay for the goods upon delivery and inspect them before making the payment, subject to payment method restrictions established for specific countries. </li></ul><p>🔸<strong>The COD service is planned to expand to other countries and delivery directions in the future, both for international shipments and within European countries.</strong></p><ul><li><code>ExpBackwardGoods</code> — Enables return delivery option for parent shipment</li><li><code>ExpBackwardCreditDoc</code> — Enables return delivery of signed documents for domestic document shipments within Moldova. The service is available only for legal entities and only for shipments with the <strong>Documents</strong> type. The return shipment is created as a separate document delivery (by courier or operator), and the payer is always the Recipient under a non-cash contract. Not available for Parcel Locker and PUDO service channels. In the first iteration, the service is enabled only for selected legal entities.</li></ul><p>🔹<strong>This field is required for the</strong> <code>services</code> <strong>group.</strong></p></td></tr><tr><td>services.<strong>serviceName</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Name of the service.</p><p>Allowed values include:</p><ul><li><code>PaymentControl</code> — Payment control service.</li><li><code>MoneyTransfer</code> — Money transfer service.</li><li>Other service types available within the <code>services</code> group.</li></ul><p>🔹<strong>This field is required within the</strong> <code>services</code> <strong>group.</strong></p></td></tr><tr><td>services.<strong>serviceId</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Unique identifier (reference ID) of the selected service.</p><p>This value must correspond to the service reference returned by the system. When creating or updating a shipment, the exact <code>serviceId</code> provided in the service reference response must be copied and used without modification.</p><p>🔹<strong>This field is required within the</strong> <code>services</code> <strong>group.</strong></p></td></tr><tr><td>services.<strong>amount</strong></td><td align="center">number</td><td align="center">yes</td><td><p>The total amount the recipient must pay under the COD service.</p><p>🔹<strong>This field is required for the</strong> <code>services</code> <strong>group.</strong></p></td></tr><tr><td>services.<strong>contractNumber</strong></td><td align="center">string┃null</td><td align="center">yes</td><td><p>Contract number of the payer responsible for the selected service. This parameter is used to identify the contractual agreement under which the service is paid.</p><p>The field is required when the service payer is a <strong>third party</strong> or when non-cash payment terms are applied. If not provided, the payment may be processed according to default billing rules.</p></td></tr><tr><td>services.<strong>payerType</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Determines who is responsible for paying for the service. The payer type determines which party bears the costs:</p><ul><li><code>Recipient</code> — The only allowed value for the COD service.</li><li><code>Sender</code>, <code>Recipient</code> — Allowed payer values for the ExpBackwardGoods service.</li><li><code>Sender</code>, <code>Recipient</code>, <code>ThirdPerson</code> — Allowed payer values for the BackwardDelGoods service.</li></ul><p><strong>🔻This field is required</strong></p></td></tr><tr><td>services.<strong>additionalParameters</strong></td><td align="center">string</td><td align="center">yes</td><td>Additional parameters for the service.</td></tr><tr><td>services.additionalParameters.<strong>cod</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Additional parameters for configuring COD.</p><p>🔹<strong>These parameters are mandatory and required only for the COD service</strong></p></td></tr><tr><td>services.additionalParameters.cod.<strong>bankAccount</strong></td><td align="center">object</td><td align="center">no</td><td>Information describing the bank account details to which the funds will be transferred. Includes the transfer amount, transaction currency, account identifiers, and the party responsible for paying the service fee.</td></tr><tr><td>services.additionalParameters.cod.bankAccount.<strong>amount</strong></td><td align="center">number</td><td align="center">yes</td><td><p>The amount that will be transferred to the sender’s account after payment. Specifies the amount the recipient must pay upon receipt. Automatic currency conversion is possible depending on the sender's or recipient's country.</p><p>🔹<strong>This field is required for the</strong> <code>services.additionalParameters.cod.bankAccount</code> <strong>field group.</strong></p></td></tr><tr><td>services.additionalParameters.cod.bankAccount.<strong>currencyCode</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The currency for the transaction, defined by the sender’s contract. Specified according to the ISO 4217 standard.</p><p>🔸<strong>By default, the currency of the sender’s country is used, but it is possible to set the currency manually (Feature under development).</strong></p><p>Pattern: ^[A-Z]{3}$</p></td></tr><tr><td>services.additionalParameters.cod.bankAccount.<strong>bankAccountId</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Tax identification number of an individual or a legal entity, used for its unique identification in the system and for verifying the existence of an active contract and the availability of financial services. The same as the value passed in the <code>companyTin</code> field.</p><p>🔹<strong>This field is required for the</strong> <code>services.additionalParameters.cod.bankAccount</code> <strong>field group.</strong></p><p>🔸<strong>Must contain the tax identification number or equivalent identifier (EDRPOU, TIN, NIP).</strong></p></td></tr><tr><td>services.additionalParameters.cod.bankAccount.<strong>bankAccountName</strong></td><td align="center">string</td><td align="center">yes</td><td><p>IBAN</p><p>🔹<strong>This field is required for the</strong> <code>services.additionalParameters.cod.bankAccount</code> <strong>field group.</strong></p><p>🔸<strong>Must contain the full account number in IBAN format.</strong></p></td></tr><tr><td>services.additionalParameters.cod.bankAccount.<strong>description</strong></td><td align="center">string</td><td align="center">yes</td><td>Additional description of the payment details.</td></tr><tr><td>services.additionalParameters.cod.bankAccount.<strong>commissionPayer</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Specifies the party responsible for paying the commission:</p><ul><li><code>Recipient</code></li><li><code>Sender</code></li></ul><p>🔹<strong>This field is required for the</strong> <code>services.additionalParameters.cod.bankAccount</code> <strong>field group.</strong></p></td></tr><tr><td>services.additionalParameters.<strong>backwardDelivery</strong></td><td align="center">object</td><td align="center">yes</td><td><p>Additional parameters for configuring return delivery.</p><p>🔹<strong>These parameters are mandatory and required only for the ExpBackwardGoods service</strong></p></td></tr><tr><td>services.additionalParameters.backwardDelivery.<strong>description</strong></td><td align="center">string</td><td align="center">no</td><td>Description of the goods to be returned. This value is used for informational and operational purposes during the return delivery process.</td></tr><tr><td><strong>invoice</strong></td><td align="center">object</td><td align="center">no</td><td><p>This object presents the necessary data for customs authorities to process the consignment efficiently, including the assessment of duties and taxes, and to confirm adherence to import/export regulations. The structured format of the invoice ensures that all pertinent information is easily accessible and clear, facilitating a smoother transit across borders.</p><p>Updated logic for invoice value handling. Clients must now send only two parameters in the invoice object:</p><ul><li><code>cost</code> — total declared value of the invoice</li><li><code>currency</code> — currency code of the invoice</li></ul><p><strong>🔸It encapsulates the invoice details, which are required for international shipments undergoing customs clearance.</strong></p></td></tr><tr><td>invoice.<strong>customerNumber</strong></td><td align="center">string┃null</td><td align="center">yes</td><td><p>Unique identifier/number of the invoice accompanying the goods in the shipment, generated directly by the client. It is used for customs processing (export and import clearance) because it ensures a clear link between the goods in the shipment and their accompanying documentation, including value, origin, and other necessary information for customs clearance.</p><p>If a client invoice exists in the shipment but its information is missing—specifically, its number—the shipment processing in the information system will be halted, the customs clearance period will be extended, and in the worst case, customs authorities may refuse clearance and initiate a return to the country of export.</p><p>Constraints: Max 50 chars</p></td></tr><tr><td>invoice.<strong>customerCreatedAt</strong></td><td align="center">string</td><td align="center">yes</td><td><p>You must provide the date specified in the invoice accompanying the shipment. If the date is not present in the client document, the shipment creation date may be used.</p><p><strong>🔹This field is required if the</strong> <code>invoice.customerNumber</code> <strong>field is filled in.</strong></p><p>Pattern: ^20[0-9]{2}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{6}Z$</p></td></tr><tr><td>invoice.<strong>type</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Type of client invoice accompanying the shipment and used for customs declaration. This field must reflect the actual type of document enclosed in the parcel. Available values:</p><ul><li><code>Invoice</code> — commercial invoice for shipments of a commercial nature</li><li><code>ProformaInvoice</code> — proforma invoice for shipments of a non-commercial nature</li></ul><p><strong>🔹This field is required if the</strong> <code>invoice.customerNumber</code> <strong>field is filled in.</strong></p><p>Possible values: <code>Invoice</code> | <code>ProformaInvoice</code></p></td></tr><tr><td>invoice.<strong>incoterm</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Specifies the trade terms for the shipping agreement between the buyer and seller, based on selected standards from the Incoterms® rules. These terms define the allocation of shipping costs, insurance, customs duties, and the distribution of risk. Only a limited subset of Incoterms® is available for use:</p><ul><li><code>DAP</code> (Delivered at Place) - The recipient is responsible for import customs clearance, duties, and taxes.</li><li><code>DDP</code> (Delivered Duty Paid) - The sender is responsible for import customs clearance and for paying all applicable duties and taxes.</li></ul><p><strong>🔹This field is required for shipments crossing the EU border or going outside the EU.</strong></p><p>Possible values: <code>DAP</code> | <code>DDP</code></p></td></tr><tr><td>invoice.<strong>exportReason</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Specifies the general reason for exporting items, which is required for customs and other regulatory bodies. This classification helps in understanding the type of shipment without getting into specifics. It's used to categorize shipments at a high level for smoother processing through customs. The available options are:</p><ul><li><code>ForPersonalPurposes</code>: Items are for personal use or gifts.</li><li><code>Selling</code>: Items are meant for sale.</li><li><code>Repair</code>: Items being sent for repair.</li><li><code>Return</code>: Items are being returned to the sender or manufacturer.</li><li><code>Other</code>: Any reason not covered by the other options.</li></ul><p><strong>🔹This field is required for shipments crossing the EU border or going outside the EU.</strong></p><p>Possible values: <code>ForPersonalPurposes</code>,<code>Selling</code>,<code>Repair</code>,<code>Return</code>,<code>Other</code></p></td></tr><tr><td>invoice.<strong>cost</strong></td><td align="center">number</td><td align="center">yes</td><td><p>Total declared invoice value in the original currency, which must equal the sum of all invoice items calculated as <strong>(amount × cost)</strong> for each item. Used for customs and shipment declarations.</p><p><strong>🔸If the provided <code>cost</code> value does not equal the sum of the <code>cost</code> values in the</strong> <code>items</code> <strong>array, it will be automatically recalculated by the system on our side.</strong></p><p><strong>🔸Values are validated for decimal precision, and digits beyond two decimal places are ignored.</strong></p><p><strong>🔹This field is required for shipments crossing the EU border or going outside the EU.</strong></p><p>Constraints: Min 0┃Max 9999999.99</p></td></tr><tr><td>invoice.<strong>currency</strong></td><td align="center">string</td><td align="center">yes</td><td><p>ISO 4217 currency code of the invoice. All items in the invoice must use the same currency.</p><p><strong>🔹This field is required for shipments crossing the EU border or going outside the EU.</strong></p><p>Pattern: ^[A-Z]{3}$</p></td></tr><tr><td>invoice.<strong>payerFeesCustoms</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Specifies who is responsible for paying for customs services. The parameter determines which party bears the costs:</p><ul><li><code>Sender</code>: The party sending the goods pays for the customs duties.</li><li><code>Recipient</code>: The party receiving the goods is responsible for the customs duties costs.</li><li><code>ThirdPerson</code>: A third party can only pay for customs services if this is permitted and the payer for delivery services is also a third party.</li></ul><p>The default value is <strong>"Recipient"</strong>.<br>This value will also be applied automatically if the parcel exceeds the maximum allowed value (in the recipient country’s currency) for which the sender is permitted to pay customs duties.</p><p><strong>🔹This parameter is required and valid only for the UA-EU direction.</strong></p><p>Possible values: <code>Sender</code> | <code>Recipient</code> | <code>ThirdPerson</code></p></td></tr><tr><td>invoice.<strong>items</strong></td><td align="center">object</td><td align="center">yes</td><td><p>A detailed list of goods being shipped, including required descriptions and values, essential for customs declarations and assessing duties.</p><p><strong>Logic:</strong> If the items block is provided, the system checks whether the total sum of all (<code>items.cost</code> × <code>items.amount</code>) matches the <code>invoice.cost</code> value. If not — the system updates <code>invoice.cost</code> to equal the sum of all items.</p><p><strong>🔸It is required to provide this information for each individual good in the shipment in the form of an array.</strong></p></td></tr><tr><td>invoice.items.<strong>customerId</strong></td><td align="center">string</td><td align="center">no</td><td><p>Client item identifier.</p><p><strong>🔹This field is optional.</strong></p></td></tr><tr><td>invoice.items.<strong>hsCode</strong></td><td align="center">string | null</td><td align="center">yes</td><td><p>The Harmonized System code for each item, a standardized numerical method of classifying traded products. This field is required for international shipments that pass through customs clearance. You can obtain the valid <code>hsCode</code> from the Cargo Classifiers (UKT ZED) dictionary. Validation rules:</p><ul><li><p><strong>If the sender or recipient country is Moldova (MD) or Canada (CA):</strong></p><ul><li>The <code>hsCode</code> must consist of exactly 10 numeric characters.</li><li>If the input is longer than 10 digits, it will be <strong>truncated</strong> on the right.</li><li>If it contains fewer than 10 digits - validation error.</li></ul></li><li><p><strong>For all other countries:</strong></p><ul><li>The <code>hsCode</code> must contain <strong>between 8 and 10 numeric characters</strong> (inclusive).</li><li>If fewer than 8 digits – validation error.</li></ul></li><li><strong>All non-digit characters will be stripped automatically before validation.</strong></li><li><p><strong>If the value of the <code>hsCode</code> field is <code>210690</code> or <code>630900</code>, the following conditions must be met:</strong></p><ul><li>The <code>measurementCode</code> must be set to <code>kg</code>.</li><li>Each item with this <code>hsCode</code> must be unique — the invoice must not contain more than one item with code <code>210690</code> or <code>630900</code>.</li><li>The amount value must not exceed 10.</li></ul></li></ul><p><strong>🔹This field is required for shipments crossing the EU border or going outside the EU.</strong></p><p>Constraints: Max 255 chars</p></td></tr><tr><td>invoice.items.<strong>serialNumber</strong></td><td align="center">string┃null</td><td align="center">no</td><td><p>Serial number of the device or equipment. This value can be used to identify the item during the Light Return process.</p><p>Constraints: Max 20 chars</p></td></tr><tr><td>invoice.items.<strong>name</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Represents the item's name in the local language, offering an accurate description for customs and logistical planning. The name should correspond with terminologies found in the Cargo Classifiers (UKT ZED) dictionary, ensuring compliance with standard classification codes. This detailed description aids in precise item identification during the customs clearance process. This field supports Unicode encoding, permitting the inclusion of special characters and symbols using the \uXXXX format. This capability allows for precise representation of item names in languages that incorporate non-Latin characters, enhancing clarity and understanding across diverse regulatory environments.</p><p><strong>🔹This field is required for shipments crossing the EU border or going outside the EU.</strong></p><p>Constraints: Max 512 chars</p></td></tr><tr><td>invoice.items.<strong>nameEng</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Specifies the item's name in English, critical for ensuring that the product is identifiable and understandable across international trade and logistics channels. The English name simplifies communication and documentation processes when dealing with international partners and authorities, aiding in the seamless facilitation of global shipments. Similar to the <code>name</code> field, this parameter also supports Unicode encoding. Using the \uXXXX format, it accommodates the accurate rendering of any special characters necessary for the correct representation of the item's name in English.</p><p><strong>🔹This field is required for shipments crossing the EU border or going outside the EU.</strong></p><p>Constraints: Max 512 chars</p></td></tr><tr><td>invoice.items.<strong>material</strong></td><td align="center">string</td><td align="center">no</td><td><p>The primary material from which the item is made, important for customs declarations and potential restrictions.</p><p><strong>🔸If this field is not provided, the default value will be applied.</strong></p><p>Constraints: Max 50 chars</p></td></tr><tr><td>invoice.items.<strong>materialEng</strong></td><td align="center">string</td><td align="center">no</td><td><p>The description of the item's material in English, aiding in the universal understanding of the product's composition.</p><p><strong>🔸If this field is not provided, the default value will be applied.</strong></p><p>Constraints: Max 255 chars</p></td></tr><tr><td>invoice.items.<strong>madeInCountryCode</strong></td><td align="center">string | null</td><td align="center">no</td><td><p>The ISO 3166-1 alpha-2 code indicating the country of manufacture, essential for determining import duties and compliance with trade agreements.</p><p><strong>🔸This field is not required; however, shipments with this field filled are given priority during customs clearance.</strong></p><p>Pattern: ^[A-Z]{2}$</p></td></tr><tr><td>invoice.items.<strong>producerAndModel</strong></td><td align="center">string | null</td><td align="center">no</td><td><p>The parameter represents the manufacturer and model of the device when creating a shipment. Both values are included in a single parameter. This parameter is mandatory for the following categories:</p><ul><li>Electrical appliances</li><li>Laptops</li><li>Phones</li><li>Large and small household appliances</li><li>Other similar items</li></ul><p><strong>🔸This field is not required; however, shipments with this field filled are given priority during customs clearance.</strong></p><p>Constraints: Max 255 chars</p></td></tr><tr><td>invoice.items.<strong>actualWeight</strong></td><td align="center">integer | null</td><td align="center">yes</td><td><p>Actual total weight of all units of the item in grams (g).</p><p>Supported precision: 10 grams (0.01 kg). Values not divisible by 10 g are rounded down to the nearest lower multiple of 10 g.</p><p><strong>🔸This field is mandatory when the</strong> <code>invoice.items</code> <strong>array is present in the request.</strong><br>The system validates that the sum of <code>actualWeight</code> values across <strong>all invoice items</strong> matches the <strong>total shipment weight</strong> (sum of <code>parcels[].actualWeight</code>).</p><p>⚠️IMPORTANT: Ensure that all invoice item weights are correctly rounded and that their total weight exactly matches the shipment weight to avoid validation errors.</p><p>Constraints: Min 1┃Max 2147483647</p></td></tr><tr><td>invoice.items.<strong>measurementCode</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The unit of measurement for the item quantity, such as pieces, kilograms, meters, etc., standardizing the way quantities are reported.</p><p><strong>🔹This field is required for shipments crossing the EU border or going outside the EU.</strong></p><p>Constraints: Max 255 chars</p></td></tr><tr><td>invoice.items.<strong>amount</strong></td><td align="center">number</td><td align="center">yes</td><td><p>The quantity of the item being shipped, necessary for inventory and customs documentation. Value in the units of measurement corresponding to the field <code>measurementCode</code>.</p><p><strong>🔹This field is required for shipments crossing the EU border or going outside the EU.</strong></p><p>Constraints: Min 0┃Max 9999999.99</p></td></tr><tr><td>invoice.items.<strong>cost</strong></td><td align="center">number</td><td align="center">yes</td><td><p>The value per single unit of the item in the sender's currency, important for insurance and customs valuation.</p><p><strong>🔸Values are validated for decimal precision, and digits beyond two decimal places are ignored.</strong></p><p><strong>🔹This field is required for shipments crossing the EU border or going outside the EU.</strong></p><p>Constraints: Min 0┃Max 9999999.99</p></td></tr><tr><td><strong>parcels</strong></td><td align="center">object</td><td align="center">yes</td><td><p>Parcels` description block. Array contains objects, each object responsible for information about parcel.</p><p><strong>🔻All fields in this array must be filled.</strong></p></td></tr><tr><td>parcels.<strong>cargoCategory</strong></td><td align="center">string</td><td align="center">no</td><td><p>Specifies the type of the shipment, helping to categorize the goods for logistics and customs processing. The category impacts how the shipment is handled, its shipping cost, and the required documentation. Available categories are:</p><ul><li><code>parcel</code>: Small to medium-sized packages, typically for consumer goods and retail items.</li><li><code>documents</code>: Postal shipments containing documents such as letters, contracts, and official papers. This category is specifically for items that weigh no more than 1 kg and have dimensions not exceeding 35 cm in length, 25 cm in width, and 2 cm in height.</li><li><p><code>pallet</code>: Type of cargo formed as a pallet shipment with fixed dimensions and weight limits, available in the Business Cabinet of Europe for legal entities:</p><ul><li>Up to 250 kg, area ~0.48 m², dimensions 80 × 60 × 170 cm</li><li>Up to 500 kg, area ~0.96 m², dimensions 120 × 80 × 170 cm</li><li>Up to 750 kg, area ~1.2 m², dimensions 120 × 100 × 170 cm</li><li>Up to 1000 kg, area ~1.2 m², dimensions 120 × 100 × 170 cm</li></ul></li></ul><p>Possible values: <code>parcel</code> | <code>documents</code> | <code>pallet</code></p></td></tr><tr><td>parcels.<strong>parcelDescription</strong></td><td align="center">string</td><td align="center">no</td><td><p>This field requires a concise description of the contents within the shipment, providing essential information on the nature of the items enclosed. This description aids in the logistics process, offering a clear understanding of the package contents for transportation planning and customs clearance. The summary should include details like the type of items, their purpose, and any other relevant information that describes the contents. It’s crucial for ensuring that the shipment complies with shipping regulations and facilitates smooth customs processing. Additionally, this field supports data in Unicode encoding, allowing for the inclusion of special characters and symbols using the \uXXXX format. This feature is particularly useful for languages that use non-Latin characters, ensuring accurate representation of item descriptions across diverse linguistic contexts.</p><p>Constraints: Max 255 chars</p></td></tr><tr><td>parcels.<strong>insuranceCost</strong></td><td align="center">number</td><td align="center">yes</td><td><p>Represents the declared value of the shipment for insurance coverage. This value indicates the maximum compensation amount in the event of damage or loss during transit. It is important to accurately declare this value to match the actual worth of the shipment contents, as underdeclaring can result in insufficient compensation.</p><p><strong>Currency handling:</strong></p><ul><li>If <code>insuranceCurrencyCode</code> is <strong>not provided</strong>, the value must be specified in the <strong>currency of the sender's country</strong>.</li><li>If <code>insuranceCurrencyCode</code> <strong>is provided</strong>, the value can be specified in any supported currency (ISO 4217). The system will automatically convert it to the sender's country currency before further processing.</li></ul><p>🔸<strong>When <code>insuranceCurrencyCode</code> is used, all parcels must specify the same currency code. Mixed or partially filled currency values will result in a validation error.</strong></p><p><strong>The value must always be greater than 0, regardless of the shipment direction.</strong>"</p><p>Example: <code>1.5</code></p></td></tr><tr><td>parcels.<strong>insuranceCurrencyCode</strong></td><td align="center">string</td><td align="center">no</td><td><p>ISO 4217 currency code for the declared insurance value (<code>insuranceCost</code>).</p><ul><li>When provided, the system converts <code>insuranceCost</code> to the sender's country currency automatically.</li><li>If used, all parcels must have the same <code>insuranceCurrencyCode</code>.</li></ul><p>🔹<strong>This field is optional.</strong>"</p><p>Pattern: ^[A-Z]{3}$</p></td></tr><tr><td>parcels.<strong>rowNumber</strong></td><td align="center">integer</td><td align="center">yes</td><td><p>Sequential identifier for each parcel within a shipment, used to organize and track individual packages, especially when multiple items are involved. If the shipment contains only one package, the value should be 1.</p><p>Constraints: Min 1</p></td></tr><tr><td>parcels.<strong>width</strong></td><td align="center">integer</td><td align="center">yes</td><td><p>The parcel's width measured in millimeters, used alongside length and height to compute the total volume for logistical planning.</p><p>Constraints: Min 1</p></td></tr><tr><td>parcels.<strong>length</strong></td><td align="center">integer</td><td align="center">yes</td><td><p>The parcel's length measured in millimeters, used alongside height and width to compute the total volume for logistical planning.</p><p>Constraints: Min 1</p></td></tr><tr><td>parcels.<strong>height</strong></td><td align="center">integer</td><td align="center">yes</td><td><p>The parcel's height measured in millimeters, used alongside length and width to compute the total volume for logistical planning.</p><p>Constraints: Min 1</p></td></tr><tr><td>parcels.<strong>actualWeight</strong></td><td align="center">integer</td><td align="center">yes</td><td><p>Actual item weight in grams (g).</p><p>Supported precision: 10 grams (0.01 kg). Values not divisible by 10 g are rounded down to the nearest lower multiple of 10 g.</p><p><strong>🔸This field is mandatory when the</strong> <code>invoice.items</code> <strong>array is present in the request.</strong><br>The system validates that the sum of <code>actualWeight</code> values across <strong>all invoice items</strong> matches the <strong>total shipment weight</strong> (sum of <code>parcels[].actualWeight</code>).</p><p>⚠️IMPORTANT: Ensure that all invoice item weights are correctly rounded and that their total weight exactly matches the shipment weight to avoid validation errors.</p><p>Constraints: Min 1┃Max 2147483647</p></td></tr><tr><td><strong>sender</strong></td><td align="center">object</td><td align="center">yes</td><td><p>Information about the party sending the shipment, including details about an individual or organization responsible for the dispatch.</p><p><strong>🔻This array of fields is required</strong></p></td></tr><tr><td>sender.<strong>companyTin</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The tax identification number or equivalent identifier (EDRPOU, TIN, NIP, IČO - for Slovakia) of a legal entity.</p><p><strong>🔸The fields are required for a legal entity. If they are not filled in, the sender will be considered an individual</strong></p><p>Constraints: Max 20 chars</p></td></tr><tr><td>sender.<strong>companyName</strong></td><td align="center">string | null</td><td align="center">yes</td><td><p>The official name of the sender's company. This field is used when the sender is a business entity, helping to identify the sending organization in documentation and records.</p><p>Constraints: Max 100 chars</p></td></tr><tr><td>sender.<strong>eoriCode</strong></td><td align="center">string | null</td><td align="center">yes</td><td><p>The EORI code (Economic Operators Registration and Identification number) is used by the European Union to identify economic operators engaged in international trade. The sender's EORI code should be included in the invoice to ensure correct customs clearance and taxation when shipping goods to EU countries. The code is not mandatory but strongly recommended for international shipments to the EU, as it facilitates customs processing and helps avoid delays.</p><p>Constraints: 3 to 17 chars</p></td></tr><tr><td>sender.<strong>phone</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The contact phone number of the sender or the sender’s company representative. It is required for shipment-related communication, including pickup coordination and issue resolution. </p><p><strong>Format:</strong> The phone number must be provided in <strong>international format</strong> according to the <strong>E.164</strong> standard. </p><p>Example: 380XXXXXXXXX, 491234567890, 371XXXXXXXX </p><p><strong>Restrictions:</strong></p><ul><li>The sender's phone number must be valid and reachable in case of delivery issues.</li><li>If the number is submitted in a local (non-international) format, the system will attempt to <strong>normalize</strong> it, but such logic is limited and may not support all variations across countries. We strongly recommend implementing <strong>front-end validation</strong> to ensure numbers are entered in the correct international format.</li></ul><p><strong>🔻This field is required</strong></p></td></tr><tr><td>sender.<strong>email</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Email address of the sender, providing an electronic means of contact for updates, inquiries, and important notifications about the shipment.</p><p><strong>🔹This field is required for shipments crossing the EU border or going outside the EU.</strong></p></td></tr><tr><td>sender.<strong>name</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The full name of the individual sender or the primary contact person for a company sender. This name is used in all correspondences and documents related to the shipment.</p><p><strong>🔸Important for EU → UA international shipments:</strong><br>The sender name <strong>must be provided using Latin characters only</strong>. Use of Cyrillic characters (including Ukrainian letters) is <strong>not allowed</strong> and will result in validation or processing errors on the Last Mile partner side.</p><p><strong>🔻This field is required</strong></p><p>Constraints: Max 100 chars</p></td></tr><tr><td>sender.<strong>ioss</strong></td><td align="center">string</td><td align="center">no</td><td><p>The IOSS (Import One-Stop Shop) number is an optional input used to facilitate the VAT declaration process for shipments from non-EU countries with a declared value of up to EUR 150. It is utilized by shippers using the IOSS process to simplify customs procedures for deliveries to private customers in the EU. This field is available for shipments where the sender's country is outside the EU and the destination is within the EU.</p><p>Constraints: Max 12 chars </p><p>Pattern: /^[a-zA-Z0-9]*$/u</p></td></tr><tr><td>sender.<strong>countryCode</strong></td><td align="center">string</td><td align="center">yes</td><td><p>A two-letter code representing the sender's country, following the ISO 3166-1 Alpha-2 standard, indicating the country of origin for the shipment.</p><p><strong>🔻This field is required</strong></p><p>Pattern: ^[A-Z]{2}$</p></td></tr><tr><td>sender.<strong>divisionNumber</strong></td><td align="center">string | null</td><td align="center">yes</td><td><p>This field is mandatory for parcels that are dispatched from a post office division or parcel locker, requiring the unique identifier of the dispatch location to be specified.</p><p><strong>🔹This field is required if both the</strong> <code>sender.addressParts</code> <strong>group and the</strong> <code>sender.divisionID</code> <strong>field are missing or empty</strong></p><p>Example: <code>32521/1</code></p></td></tr><tr><td>sender.<strong>divisionID</strong></td><td align="center">integer | null</td><td align="center">yes</td><td><p>Division ID for specific branch identification.</p><p><strong>🔹This field is required if both the</strong> <code>sender.addressParts</code> <strong>group and the</strong> <code>sender.divisionNumber</code> <strong>field are missing or empty</strong></p><p>Constraints: Min 1</p></td></tr><tr><td>sender.<strong>addressParts</strong></td><td align="center">object</td><td align="center">yes</td><td>This array of fields is required when shipping directly from an address, detailing the specific components of the location from which the parcel is dispatched. It includes detailed address information, ensuring the accurate identification of the pickup location.</td></tr><tr><td>sender.addressParts.<strong>city</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The name of the city from which the shipment is dispatched. It helps pinpoint the exact urban location for pickup or shipping.</p><p><strong>🔹This field is required if</strong> <code>sender.divisionNumber</code> <strong>and</strong> <code>sender.divisionID</code> <strong>fields are missing or empty.</strong><br>🔸For shipments where the sender country is <strong>Moldova</strong> or <strong>Ukraine</strong>, the sender city is validated against internal settlement directories. If the settlement cannot be resolved due to an invalid or unmapped value, the shipment will not be created.</p><p>Constraints: Max 100 chars</p></td></tr><tr><td>sender.addressParts.<strong>region</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Specifies the broader administrative area, like a state or province, encompassing the city, providing additional context for the shipment's origin.</p><p><strong>🔹This field is required for shipments when the sender or recipient country is the USA, Ireland, or Canada.</strong></p><p>Constraints: Max 100 chars</p></td></tr><tr><td>sender.addressParts.<strong>street</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Identifies the specific street address for the sender's location, crucial for accurate pickup or delivery operations.</p><p><strong>🔹This field is required if</strong> <code>sender.divisionNumber</code> <strong>and</strong> <code>sender.divisionID</code> <strong>fields are missing or empty.</strong></p><p>Constraints: Max 100 chars</p></td></tr><tr><td>sender.addressParts.<strong>postCode</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The postal or ZIP code corresponding to the sender's address. It's essential for sorting and routing the shipment efficiently.</p><p><strong>🔹This field is required if</strong> <code>sender.divisionNumber</code> <strong>and</strong> <code>sender.divisionID</code> <strong>fields are missing or empty.</strong></p><p>Constraints: Max 10 chars</p></td></tr><tr><td>sender.addressParts.<strong>building</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The building number or name at the specified street address, pinpointing the precise location for shipment collection.</p><p><strong>🔹This field is required if</strong> <code>sender.divisionNumber</code> <strong>and</strong> <code>sender.divisionID</code> <strong>fields are missing or empty.</strong></p><p>Constraints: Max 100 chars</p></td></tr><tr><td>sender.addressParts.<strong>flat</strong></td><td align="center">string</td><td align="center">no</td><td><p>If applicable, the apartment or suite number within a building from which the shipment originates, ensuring pickup personnel can locate the sender's exact unit.</p><p>Constraints: Max 10 chars</p></td></tr><tr><td>sender.addressParts.<strong>block</strong></td><td align="center">string | null</td><td align="center">no</td><td><p>Indicates a specific block or section within a larger residential area or complex, if relevant, aiding in locating the sender's precise starting point for the shipment.</p><p>Constraints: Max 100 chars</p></td></tr><tr><td>sender.addressParts.<strong>note</strong></td><td align="center">string</td><td align="center">no</td><td><p>Allows for the inclusion of additional details or instructions about the sender's address that might facilitate the pickup process, such as gate codes, specific entry points, or preferred contact times.</p><p>Constraints: Max 100 chars</p></td></tr><tr><td><strong>recipient</strong></td><td align="center">object</td><td align="center">yes</td><td><p>Information about the party receiving the shipment, detailing either an individual or an organization responsible for receiving the dispatched goods.</p><p><strong>🔻This array of fields is required</strong></p></td></tr><tr><td>recipient.<strong>companyTin</strong></td><td align="center">string | null</td><td align="center">yes</td><td><p>The tax identification number or equivalent identifier (EDRPOU, TIN, NIP, IČO - for Slovakia) of a legal entity.</p><p><strong>🔸The fields are required for a legal entity. If they are not filled in, the recipient will be considered an individual</strong></p><p>Constraints: Max 20 chars</p></td></tr><tr><td>recipient.<strong>companyName</strong></td><td align="center">string | null</td><td align="center">yes</td><td><p>The formal name of the recipient's company. Utilize this field when the recipient is a business entity, aiding in the identification of the receiving organization in documents and records.</p><p>Constraints: Max 100 chars</p></td></tr><tr><td>recipient.<strong>eoriCode</strong></td><td align="center">string | null</td><td align="center">yes</td><td><p>The recipient's EORI code is important for customs clearance when shipping goods to European Union countries, especially when sending to legal entities. The code is not mandatory but recommended, as it helps ensure smooth customs clearance and minimizes the risk of delays. The requirement for the recipient eoriCode depends on the type of goods being shipped:</p><ol><li>Non-excise goods: The EORI code is not mandatory if non-excise goods are being shipped from Ukraine to a legal entity in Europe. If the recipient does not have an EORI code, one will be automatically assigned.</li><li>Excise goods: The EORI code is required for shipments of excise goods. The recipient must obtain an EORI code before the goods can be shipped.</li></ol><p>Constraints: 3 to 17 chars</p></td></tr><tr><td>recipient.<strong>phone</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The contact phone number of the recipient or the recipient’s company representative. Used for delivery notifications and communication with the customer during shipment processing. </p><p><strong>Format:</strong> The phone number must be provided in <strong>international format</strong> according to the <strong>E.164</strong> standard. </p><p>Example: 380XXXXXXXXX, 491234567890, 371XXXXXXXX </p><p><strong>Restrictions:</strong></p><ul><li>For deliveries to Nova Post branches in Europe, Ukrainian mobile numbers are acceptable.</li><li>For deliveries to <strong>partner locations</strong> (such as InPost, GLS, Venipak, Cargus, etc.) and <strong>cross-border address deliveries</strong>, the phone number must belong to a mobile operator in the recipient's country. If the phone number is submitted in a local (non-international) format, the system will attempt to <strong>normalize</strong> it to the international format, but the internal algorithm does not cover all possible cases. If your system does not support front-end validation of phone numbers, we recommend informing us about failed phone number cases so we can assess potential improvements to the normalization logic.</li></ul><p><strong>🔻This field is required</strong></p></td></tr><tr><td>recipient.<strong>email</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The email address of the recipient, serving as a digital contact point for shipment updates, inquiries, and essential notifications.</p><p><strong>🔹This field is required for shipments crossing the EU border or going outside the EU.</strong></p></td></tr><tr><td>recipient.<strong>name</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The complete name of the individual recipient or the primary contact for a company recipient. This is the name used for all shipping-related correspondence and documentation.</p><p><strong>🔻This field is required</strong></p><p>Constraints: Max 100 chars</p></td></tr><tr><td>recipient.<strong>countryCode</strong></td><td align="center">string</td><td align="center">yes</td><td><p>A two-letter code that identifies the recipient's country, adhering to the ISO 3166-1 Alpha-2 standard, which specifies the shipment's destination country.</p><p><strong>🔻This field is required</strong></p><p>Pattern: ^[A-Z]{2}$</p></td></tr><tr><td>recipient.<strong>divisionNumber</strong></td><td align="center">string | null</td><td align="center">yes</td><td><p>This field is mandatory for parcels intended to be collected from a post office division or parcel locker, requiring the insertion of the unique identifier for the designated location.</p><p><strong>🔹This field is required if both the</strong> <code>recipient.addressParts</code> <strong>group and the</strong> <code>recipient.divisionID</code> <strong>field are missing or empty</strong></p><p>Example: <code>32521/1</code></p></td></tr><tr><td>recipient.<strong>divisionID</strong></td><td align="center">integer | null</td><td align="center">yes</td><td><p>Division ID for specific branch identification.</p><p><strong>🔹This field is required if both the</strong> <code>recipient.addressParts</code> <strong>group and the</strong> <code>recipient.divisionNumber</code> <strong>field are missing or empty</strong></p><p>Constraints: Min 1</p></td></tr><tr><td>recipient.<strong>addressParts</strong></td><td align="center">object</td><td align="center">yes</td><td><p>This array of fields is necessary when the shipment is directed to a specific address, outlining the precise location details to which the parcel is to be delivered. It encompasses comprehensive address information to ensure the exact identification of the delivery location.</p><p><strong>🔸The values in the nested address fields must not duplicate each other. Providing the same address information in multiple inner fields will result in an error.</strong></p></td></tr><tr><td>recipient.addressParts.<strong>city</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The city to which the shipment is being delivered. This detail ensures the parcel is directed to the correct urban area for the recipient.</p><p><strong>🔹This field is required if</strong> <code>recipient.divisionNumber</code> <strong>and</strong> <code>recipient.divisionID</code> <strong>fields are missing or empty.</strong><br>🔸For shipments where the recipient country is <strong>Moldova</strong> or <strong>Ukraine</strong>, the recipient city is validated against internal settlement directories. If the settlement cannot be resolved due to an invalid or unmapped value, the request will be rejected with the error:<code>validation.condition.recipient_settlement_not_defined</code>.</p><p>Constraints: Max 100 chars</p></td></tr><tr><td>recipient.addressParts.<strong>region</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Specifies the recipient's state or province within the destination country, crucial for accurate shipment routing and delivery. When sending to the USA, it's essential to include a two-letter state code, such as "WA" for Washington or "DC" for the District of Columbia, according to the ISO 3166-2:US standard.</p><p><strong>🔹This field is required for shipments when the sender or recipient country is the USA, Ireland, or Canada.</strong></p><p>Constraints: Max 100 chars</p></td></tr><tr><td>recipient.addressParts.<strong>street</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The street name of the recipient's address, vital for pinpointing the exact delivery spot.</p><p><strong>🔹This field is required if</strong> <code>recipient.divisionNumber</code> <strong>and</strong> <code>recipient.divisionID</code> <strong>fields are missing or empty.</strong></p><p>Constraints: Max 100 chars</p></td></tr><tr><td>recipient.addressParts.<strong>postCode</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The postal or ZIP code for the recipient's address, critical for the precise sorting and routing of the parcel to its final destination.</p><p><strong>🔹This field is required if</strong> <code>recipient.divisionNumber</code> <strong>and</strong> <code>recipient.divisionID</code> <strong>fields are missing or empty.</strong></p><p>Constraints: Max 10 chars</p></td></tr><tr><td>recipient.addressParts.<strong>building</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Specifies the building number or name at the recipient's address, guiding the delivery to the exact building within a given street.</p><p><strong>🔹This field is required if</strong> <code>recipient.divisionNumber</code> <strong>and</strong> <code>recipient.divisionID</code> <strong>fields are missing or empty.</strong></p><p>Constraints: Max 100 chars</p></td></tr><tr><td>recipient.addressParts.<strong>flat</strong></td><td align="center">string</td><td align="center">no</td><td><p>The apartment or suite number, if the delivery is to a multi-unit building, ensuring the parcel reaches the specific unit of the recipient.</p><p>Constraints: Max 10 chars</p></td></tr><tr><td>recipient.addressParts.<strong>block</strong></td><td align="center">string | null</td><td align="center">no</td><td><p>Identifies a block or section within a larger complex or residential area for the recipient, useful in large housing developments to further narrow down the delivery point.</p><p>Constraints: Max 100 chars</p></td></tr><tr><td>recipient.addressParts.<strong>note</strong></td><td align="center">string</td><td align="center">no</td><td><p>The space for any additional recipient-related address instructions or details that might assist in the delivery process, such as security instructions, specific doors for delivery, or preferred delivery times.</p><p>Constraints: Max 100 chars</p></td></tr><tr><td>recipient.<strong>registrationAddressRecipient</strong></td><td align="center">object</td><td align="center">no</td><td>The registrationAddressRecipient object provides a detailed breakdown of the recipient's registered address and is required when shipping to countries with specific customs requirements, such as Germany, Slovakia, Hungary, and France. This ensures compliance with local regulations and facilitates smooth customs processing. The object allows for a precise and complete representation of the recipient's address, which is especially important for international shipments to countries with strict customs regulations.</td></tr><tr><td>recipient.registrationAddressRecipient.<strong>city</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The name of the city where the recipient is registered. It must match the local naming conventions for accurate identification.</p><p><strong>🔹This field is required for shipments to countries with specific customs requirements, including Germany, Slovakia, Hungary, and France.</strong></p><p>Constraints: Max 100 chars</p></td></tr><tr><td>recipient.registrationAddressRecipient.<strong>street</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The name of the street in the recipient's address. It must match the local naming conventions for accurate identification.</p><p><strong>🔹This field is required for shipments to countries with specific customs requirements, including Germany, Slovakia, Hungary, and France.</strong></p><p>Constraints: Max 100 chars</p></td></tr><tr><td>recipient.registrationAddressRecipient.<strong>zipCode</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The postal code of the recipient's registered address.</p><p><strong>🔹This field is required for shipments to countries with specific customs requirements, including Germany, Slovakia, Hungary, and France.</strong></p><p>Constraints: Max 10 chars</p></td></tr><tr><td>recipient.registrationAddressRecipient.<strong>building</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The building number or name where the recipient is registered.</p><p><strong>🔹This field is required for shipments to countries with specific customs requirements, including Germany, Slovakia, Hungary, and France.</strong></p><p>Constraints: Max 100 chars</p></td></tr><tr><td>recipient.registrationAddressRecipient.<strong>apartment</strong></td><td align="center">string</td><td align="center">no</td><td><p>The flat or apartment number within the building.</p><p>Constraints: Max 10 chars</p></td></tr><tr><td>recipient.registrationAddressRecipient.<strong>state</strong></td><td align="center">string</td><td align="center">no</td><td><p>The state or region where the recipient is registered. Required in some countries for detailed geographical identification.</p><p>Constraints: Max 100 chars</p></td></tr></tbody></table>

</details>

## POST /shipments

> Create Shipment

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Shipments"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}},"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Validation":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Time-out":{"description":"Connection time-out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}}},"paths":{"/shipments":{"post":{"tags":["Shipments"],"requestBody":{"description":"Optional description in *Markdown*","required":true,"content":{"application/json":{"schema":{"type":"object","required":["sender","invoice"],"properties":{"status":{"type":"string","description":"Signifies the current status of the transportation document, tracking its progress through the shipping lifecycle.","enum":["ReadyToShip"]},"clientOrder":{"type":"string","description":"Represents all potential order identifiers associated with the shipment.","maxLength":50},"note":{"type":"string","description":"Any additional information or special instructions that pertain to the order can be included here.","maxLength":255},"deliveryType":{"type":"string","description":"Defines the tariff type to be applied to the shipment during creation or update."},"payerType*":{"type":"string","description":"Identifies who is responsible for the payment of delivery services.","enum":["Sender","Recipient","ThirdPerson"]},"payerContractNumber":{"type":"string","description":"Required for `ThirdPerson` payments and for non-cash payments when `payerType` is `Sender` or `Recipient`.","minLength":2,"maxLength":20,"nullable":true},"services":{"type":"array","description":"Contains information about additional services for the shipment.","properties":{"shipmentParcelRowNumber":{"type":"integer","nullable":true,"description":"Specifies the row number of the parcel to which the service is applied."},"serviceCode":{"type":"string","description":"The code indicating the service."},"serviceName":{"type":"string","description":"Name of the service."},"serviceId":{"type":"string","description":"Unique identifier (reference ID) of the selected service."},"amount":{"type":"number","description":"The total amount the recipient must pay under the COD service."},"contractNumber":{"type":"string","nullable":true,"description":"Contract number of the payer responsible for the selected service."},"payerType":{"type":"string","description":"Determines who is responsible for paying for the service."},"additionalParameters":{"type":"string","description":"Additional parameters for the service.","properties":{"cod":{"type":"string","description":"Additional parameters for configuring COD.","properties":{"bankAccount":{"type":"object","description":"Information describing the bank account details to which the funds will be transferred.","properties":{"amount":{"type":"number","description":"The amount that will be transferred to the sender’s account after payment."},"currencyCode":{"type":"string","description":"The currency for the transaction, defined by the sender’s contract."},"bankAccountId":{"type":"string","description":"Tax identification number of an individual or a legal entity."},"bankAccountName":{"type":"string","description":"IBAN"},"description":{"type":"string","description":"Additional description of the payment details."},"commissionPayer":{"type":"string","description":"Specifies the party responsible for paying the commission."}}}}},"backwardDelivery":{"type":"array","description":"Additional parameters for configuring return delivery.","items":{"type":"object","properties":{"description":{"type":"string","description":"Description of the goods to be returned."}}}}}}}},"invoice":{"type":"object","description":"This object presents the necessary data for customs authorities to process the consignment efficiently.","properties":{"customerNumber":{"type":"string","description":"Unique identifier/number of the invoice accompanying the goods in the shipment, generated directly by the client.","maxLength":50,"nullable":true},"customerCreatedAt":{"type":"string","format":"date-time","description":"You must provide the date specified in the invoice accompanying the shipment."},"type":{"type":"string","description":"Type of client invoice accompanying the shipment and used for customs declaration.","enum":["Invoice","ProformaInvoice"]},"incoterm":{"type":"string","description":"Specifies the trade terms for the shipping agreement between the buyer and seller.","enum":["DAP","DDP"]},"exportReason":{"type":"string","description":"Specifies the general reason for exporting items, which is required for customs and other regulatory bodies.","enum":["ForPersonalPurposes","Selling","Repair","Return","Other"]},"cost":{"type":"number","description":"Total declared invoice value in the original currency.","minimum":0,"maximum":9999999.99},"currency":{"type":"string","description":"ISO 4217 currency code of the invoice."},"payerFeesCustoms":{"type":"string","description":"Specifies who is responsible for paying for customs services.","enum":["Sender","Recipient","ThirdPerson"]},"items":{"type":"array","description":"A detailed list of goods being shipped.","items":{"type":"object","properties":{"customerId":{"type":"string","description":"Client item identifier."},"hsCode":{"type":"string","description":"The Harmonized System code for each item, a standardized numerical method of classifying traded products.","maxLength":255,"nullable":true},"serialNumber":{"type":"string","description":"Serial number of the device or equipment. This value can be used to identify the item during the Light Return process.","maxLength":20,"nullable":true},"name":{"type":"string","description":"Represents the item's name in the local language, offering an accurate description for customs and logistical planning.","maxLength":512},"nameEng":{"type":"string","description":"Specifies the item's name in English, critical for ensuring that the product is identifiable and understandable across international trade and logistics channels.","maxLength":512},"material":{"type":"string","description":"The primary material from which the item is made, important for customs declarations and potential restrictions.","maxLength":50},"materialEng":{"type":"string","description":"The description of the item's material in English, aiding in the universal understanding of the product's composition.","maxLength":255},"madeInCountryCode":{"type":"string","description":"The ISO 3166-1 alpha-2 code indicating the country of manufacture.","pattern":"^[A-Z]{2}$","nullable":true},"producerAndModel":{"type":"string","description":"The parameter represents the manufacturer and model of the device when creating a shipment.","maxLength":255,"nullable":true},"actualWeight":{"type":"integer","description":"Actual total weight of all units of the item in grams (g).","minimum":1,"maximum":2147483647,"nullable":true},"measurementCode":{"type":"string","description":"The unit of measurement for the item quantity, such as pieces, kilograms, meters, etc., standardizing the way quantities are reported.","maxLength":255},"amount":{"type":"number","description":"The quantity of the item being shipped.","minimum":0,"maximum":9999999.99},"cost":{"type":"number","description":"The value per single unit of the item in the sender's currency.","minimum":0,"maximum":9999999.99}}}}}},"parcels*":{"type":"array","description":"Parcels` description block.","items":{"type":"object","properties":{"cargoCategory*":{"type":"string","description":"Specifies the type of the shipment, helping to categorize the goods for logistics and customs processing.","enum":["parcel","documents","pallet"]},"parcelDescription*":{"type":"string","description":"This field requires a concise description of the contents within the shipment.","maxLength":255},"insuranceCost*":{"type":"number","format":"float","description":"Represents the declared value of the shipment for insurance coverage.","minimum":1,"exclusiveMinimum":true},"insuranceCurrencyCode":{"type":"string","description":"ISO 4217 currency code for the declared insurance value (`insuranceCost`).","pattern":"^[A-Z]{3}$"},"rowNumber*":{"type":"integer","description":"Sequential identifier for each parcel within a shipment.","minimum":1},"width*":{"type":"integer","description":"The parcel's width measured in millimeters.","minimum":1},"length*":{"type":"integer","description":"The parcel's length measured in millimeters.","minimum":1},"height*":{"type":"integer","description":"The parcel's height measured in millimeters.","minimum":1},"actualWeight*":{"type":"integer","description":"Actual item weight in grams (g).","minimum":1,"maximum":2147483647}}}},"sender*":{"type":"object","description":"Information about the party sending the shipment.","properties":{"companyTin":{"type":"string","description":"The tax identification number or equivalent identifier (EDRPOU, TIN, NIP, IČO - for Slovakia) of a legal entity.","maxLength":20,"nullable":true},"companyName":{"type":"string","description":"The official name of the sender's company.","maxLength":100,"nullable":true},"eoriCode":{"type":"string","description":"The EORI code (Economic Operators Registration and Identification number).","minLength":3,"maxLength":17,"nullable":true},"phone*":{"type":"string","description":"The contact phone number of the sender or the sender’s company representative."},"email":{"type":"string","description":"Email address of the sender, providing an electronic means of contact for updates, inquiries, and important notifications about the shipment."},"name*":{"type":"string","description":"The full name of the individual sender or the primary contact person for a company sender.","maxLength":100},"ioss":{"type":"string","description":"The IOSS (Import One-Stop Shop) number is an optional input used to facilitate the VAT declaration process for shipments from non-EU countries with a declared value of up to EUR 150.","maxLength":12,"pattern":"/^[a-zA-Z0-9]*$/u"},"countryCode*":{"type":"string","description":"A two-letter code representing the sender's country, following the ISO 3166-1 Alpha-2 standard.","pattern":"^[A-Z]{2}$"},"divisionNumber":{"type":"string","description":"This field is mandatory for parcels that are dispatched from a post office division or parcel locker.","nullable":true},"divisionID":{"type":"integer","description":"Division ID for specific branch identification.","minimum":1,"nullable":true},"addressParts":{"type":"object","description":"This array of fields is required when shipping directly from an address.","properties":{"city":{"type":"string","description":"The name of the city from which the shipment is dispatched.","maxLength":100},"region":{"type":"string","description":"Specifies the broader administrative area, like a state or province, encompassing the city.","maxLength":100},"street":{"type":"string","description":"Identifies the specific street address for the sender's location.","maxLength":100},"postCode":{"type":"string","description":"The postal or ZIP code corresponding to the sender's address.","maxLength":10},"building":{"type":"string","description":"The building number or name at the specified street address.","maxLength":100},"flat":{"type":"string","description":"If applicable, the apartment or suite number within a building from which the shipment originates.","maxLength":10},"block":{"type":"string","description":"Indicates a specific block or section within a larger residential area or complex.","maxLength":100,"nullable":true},"note":{"type":"string","description":"Allows for the inclusion of additional details or instructions about the sender's address that might facilitate the pickup process.","maxLength":100}}}}},"recipient*":{"type":"object","description":"Information about the party receiving the shipment.","properties":{"companyTin":{"type":"string","description":"The tax identification number or equivalent identifier (EDRPOU, TIN, NIP, IČO - for Slovakia) of a legal entity.","maxLength":20,"nullable":true},"companyName":{"type":"string","description":"The formal name of the recipient's company.","maxLength":100,"nullable":true},"eoriCode":{"type":"string","description":"The recipient's EORI code is important for customs clearance when shipping goods to European Union countries.","minLength":3,"maxLength":17,"nullable":true},"phone*":{"type":"string","description":"The contact phone number of the recipient or the recipient’s company representative."},"email":{"type":"string","description":"The email address of the recipient."},"name*":{"type":"string","description":"The complete name of the individual recipient or the primary contact for a company recipient.","maxLength":100},"countryCode*":{"type":"string","description":"A two-letter code that identifies the recipient's country, adhering to the ISO 3166-1 Alpha-2 standard.","pattern":"^[A-Z]{2}$"},"divisionNumber":{"type":"string","description":"This field is mandatory for parcels intended to be collected from a post office division or parcel locker.","nullable":true},"divisionID":{"type":"integer","description":"Division ID for specific branch identification.","minimum":1,"nullable":true},"addressParts":{"type":"object","description":"This array of fields is necessary when the shipment is directed to a specific address.","properties":{"city":{"type":"string","description":"The city to which the shipment is being delivered.","maxLength":100},"region":{"type":"string","description":"Specifies the recipient's state or province within the destination country.","maxLength":100},"street":{"type":"string","description":"The street name of the recipient's address.","maxLength":100},"postCode":{"type":"string","description":"The postal or ZIP code for the recipient's address.","maxLength":10},"building":{"type":"string","description":"Specifies the building number or name at the recipient's address.","maxLength":100},"flat":{"type":"string","description":"The apartment or suite number, if the delivery is to a multi-unit building.","maxLength":10},"block":{"type":"string","description":"Identifies a block or section within a larger complex or residential area for the recipient.","maxLength":100,"nullable":true},"note":{"type":"string","description":"The space for any additional recipient-related address instructions or details that might assist in the delivery process.","maxLength":100}}},"registrationAddressRecipient":{"type":"object","description":"The registrationAddressRecipient object provides a detailed breakdown of the recipient's registered address.","properties":{"city":{"type":"string","description":"The name of the city where the recipient is registered.","maxLength":100},"street":{"type":"string","description":"The name of the street in the recipient's address.","maxLength":100},"zipCode":{"type":"string","description":"The postal code of the recipient's registered address.","maxLength":10},"building":{"type":"string","description":"The building number or name where the recipient is registered.","maxLength":100},"apartment":{"type":"string","description":"The flat or apartment number within the building.","maxLength":10},"state":{"type":"string","description":"The state or region where the recipient is registered.","maxLength":100}}}}}}}}}},"responses":{"201":{"description":"Successfully created shipment.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","description":"A unique identifier assigned to each shipment, facilitating internal operations such as modifications, system searches, and deletion of shipments. The `id` serves as a key reference for administrative and logistical processes within the delivery system, allowing precise access and management of shipment records.","minimum":1},"number":{"type":"string","description":"The transportation document number provided to clients for tracking purposes and accessing printed forms. It also facilitates shipment searches within the system, offering a customer-friendly way to monitor shipment progress. While `number` is used externally for tracking and documentation, it can also serve internal needs similar to `id` for identifying shipments in certain system operations.","pattern":"^[A-Z]{4}\\d{10}$"},"scheduledDeliveryDate":{"type":"string","format":"date-time","description":"Estimated delivery date based on routing and service level, subject to change based on logistics and external factors. Date in ISO 8601 format.","nullable":true},"status":{"type":"string","description":"Current status of the shipment. Initially set to `ReadyToShip` upon creation, indicating it's prepared for dispatch."},"cost":{"type":"number","format":"float","description":"Total cost calculated for the delivery services provided, based on shipment size, weight, destination, and service options selected."},"parcelsAmount":{"type":"integer","description":"The total number of parcels included in the shipment. This count helps in logistics planning and tracking.","minimum":1},"createdAt":{"type":"string","format":"date-time","description":"The date-time when the shipment record was created in the system. Date in ISO 8601 format."},"updatedAt":{"type":"string","format":"date-time","description":"The last date-time when the shipment record was updated. Helps in tracking changes and updates made to the shipment details.Date in ISO 8601 format."},"deletedAt":{"type":"string","format":"date-time","description":"The date-time when the shipment was canceled or removed from the system. If not canceled, this field is `null`.","nullable":true}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/Validation"},"503":{"$ref":"#/components/responses/Time-out"}},"summary":"Create Shipment"}}}}
```


# Cross-border shipments from Ukraine

This page describes the process of creating shipments from Ukraine for international delivery.

<details>

<summary>Shipment API Interaction Flow</summary>

```mermaid
flowchart LR

A((Start)) -->|POST shipments| B([Shipment created])

B -->|PUT shipments by id| C([Edit shipment])
B -->|GET shipment by id| D([Shipment info])
B -->|GET shipment label| E([Label print])
E --> F((End))

B -->|GET shipment status| G([Shipment status])

G -->|POST redirect shipment| H([Redirect])
G -->|POST add parcel info| I([Add parcel info])
G -->|POST cancel shipment| J([Cancellation])
J --> K((End))

G -->|GET print document| L([Label print])
L --> M((End))

style A fill:#ffffff,color:#E30613,stroke:#E30613,stroke-width:2px
style B fill:#E30613,color:#ffffff,stroke:#E30613,stroke-width:2px

style C fill:#ffffff,color:#222222,stroke:#E30613,stroke-width:2px
style D fill:#ffffff,color:#222222,stroke:#E30613,stroke-width:2px
style E fill:#ffffff,color:#222222,stroke:#E30613,stroke-width:2px
style G fill:#ffffff,color:#222222,stroke:#E30613,stroke-width:2px
style H fill:#ffffff,color:#222222,stroke:#E30613,stroke-width:2px
style I fill:#ffffff,color:#222222,stroke:#E30613,stroke-width:2px
style J fill:#ffffff,color:#222222,stroke:#E30613,stroke-width:2px
style L fill:#ffffff,color:#222222,stroke:#E30613,stroke-width:2px

style F fill:#E30613,color:#000000,stroke:#E30613,stroke-width:2px
style K fill:#E30613,color:#000000,stroke:#E30613,stroke-width:2px
style M fill:#E30613,color:#000000,stroke:#E30613,stroke-width:2px
```

</details>

<details>

<summary>Schema (Object)</summary>

<table data-search="false"><thead><tr><th width="127">Field</th><th width="91" align="center">Type</th><th width="108" align="center">Required</th><th>Description</th></tr></thead><tbody><tr><td><strong>status</strong></td><td align="center">enum</td><td align="center">yes</td><td><p>Signifies the current status of the transportation document, tracking its progress through the shipping lifecycle. Statuses detail each critical phase:</p><ul><li><code>Draft</code>: The document is in its preliminary stage, not yet finalized.</li><li><code>Accepted</code>: Reviewed and accepted, the document is ready for the next steps.</li><li><code>Issued</code>: The document has been completed and is ready for shipping.</li><li><code>ReadyToShip</code>: Indicates that the shipment is prepared for transport following the creation of the express waybill. Only this value can be specified when creating a shipment.</li><li><code>Deleted</code>: The document has been deleted from the system.</li><li><code>Returned</code>: The shipment has been returned to its sender.</li><li><code>Utilized</code>: Indicates that the physical goods associated with the transportation document have been disposed of or destroyed and the document is closed.</li></ul><p>Allowed: <code>ReadyToShip</code></p></td></tr><tr><td><strong>clientOrder</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Represents all potential order identifiers associated with the shipment. These identifiers are set by the customer for internal tracking purposes and are crucial for tracking the shipment throughout its journey. All entered values can be tracked in the shipment's tracking system.</p><p>Constraints: Max 50 chars</p></td></tr><tr><td><strong>note</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Any additional information or special instructions that pertain to the order can be included here. This could encompass delivery instructions, special handling requests, or other pertinent details that facilitate the handling and processing of the shipment.</p><p>Constraints: Max 255 chars</p></td></tr><tr><td><strong>deliveryType</strong></td><td align="center">string</td><td align="center">no</td><td><p>Defines the tariff type to be applied to the shipment during creation or update.</p><ul><li><code>standard</code>: Standard international delivery tariff.</li><li><code>economy</code>: Economy international delivery tariff.</li><li><code>express</code>: Express international delivery tariff.</li></ul><p>If the field is not provided, the tariff type is determined automatically according to current business rules, and the existing shipment creation behaviour remains unchanged.</p></td></tr><tr><td><strong>payerType</strong></td><td align="center">enum</td><td align="center">yes</td><td><p>Identifies who is responsible for the payment of delivery services. The payer type determines which party bears the cost:</p><ul><li><code>Sender</code>: The party sending the goods pays for the delivery.</li><li><code>Recipient</code>: The party receiving the goods is responsible for the delivery cost.</li><li><code>ThirdPerson</code>: A third party, not the sender or recipient, pays for the delivery services. When selecting <code>ThirdPerson</code>, the field <code>payerContractNumber</code> must be populated with the contract number of the paying party. For more detailed information, refer to the article on <a href="https://api-portal.novapost.com/en/api-methods/payment/">Payment for Delivery Services via Nova Post API</a>. This field is also referenced when generating an invoice.</li></ul><p>Allowed: <code>Sender</code> | <code>Recipient</code> | <code>ThirdPerson</code></p></td></tr><tr><td><strong>payerContractNumber</strong></td><td align="center">string┃null</td><td align="center">yes</td><td><p>This field is required in the following cases:</p><ul><li>When the <code>payerType</code> is set to <code>ThirdPerson</code>. It must contain the payer's contract number. For clients from Ukraine, it is also acceptable to provide the tax identification number (EDRPOU) instead of the contract number.</li><li>When the <code>payerType</code> is set to <code>Sender</code> or <code>Recipient</code> and a non-cash payment method is used.</li></ul><p>If this field is not provided in the cases described above, the payment method will automatically default to cash.</p><p>Ensure that the provided information is accurate, as it is essential for correct payment processing.</p><p>For more detailed information, refer to the article on <a href="https://api-portal.novapost.com/en/api-methods/payment/">Payment for Delivery Services via Nova Post API</a>.</p><p>Constraints: 2 to 20 chars</p></td></tr><tr><td><strong>services</strong></td><td align="center">array</td><td align="center">no</td><td>Contains information about additional services for the shipment.</td></tr><tr><td>services.<strong>shipmentParcelRowNumber</strong></td><td align="center">integer</td><td align="center">yes</td><td><p>Specifies the row number of the parcel to which the service is applied. The value must correspond to the <code>rowNumber</code> of an existing parcel in the <code>parcels</code> array.</p><p>For services applied to the <strong>entire shipment</strong> (for example, <code>ExpBackwardGoods</code>), this field must be set to <code>null</code>.</p></td></tr><tr><td>services.<strong>serviceCode</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The code indicating the service.</p><p><strong>A list of available codes and descriptions of their meanings:</strong></p><ul><li><code>COD</code> — The Cash on Delivery (COD) service allows the recipient to pay for the goods directly upon receiving them, without the need for prepayment. The sender can add this service to the shipment, and the recipient has the option to pay for the goods upon delivery and inspect them before making the payment, subject to payment method restrictions established for specific countries. </li></ul><p>🔸<strong>The COD service is planned to expand to other countries and delivery directions in the future, both for international shipments and within European countries.</strong></p><ul><li><code>ExpBackwardGoods</code> — Enables return delivery option for parent shipment</li><li><code>ExpBackwardCreditDoc</code> — Enables return delivery of signed documents for domestic document shipments within Moldova. The service is available only for legal entities and only for shipments with the <strong>Documents</strong> type. The return shipment is created as a separate document delivery (by courier or operator), and the payer is always the Recipient under a non-cash contract. Not available for Parcel Locker and PUDO service channels. In the first iteration, the service is enabled only for selected legal entities.</li></ul><p>🔹<strong>This field is required for the</strong> <code>services</code> <strong>group.</strong></p></td></tr><tr><td>services.<strong>serviceName</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Name of the service.</p><p>Allowed values include:</p><ul><li><code>PaymentControl</code> — Payment control service.</li><li><code>MoneyTransfer</code> — Money transfer service.</li><li>Other service types available within the <code>services</code> group.</li></ul><p>🔹<strong>This field is required within the</strong> <code>services</code> <strong>group.</strong></p></td></tr><tr><td>services.<strong>serviceId</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Unique identifier (reference ID) of the selected service.</p><p>This value must correspond to the service reference returned by the system. When creating or updating a shipment, the exact <code>serviceId</code> provided in the service reference response must be copied and used without modification.</p><p>🔹<strong>This field is required within the</strong> <code>services</code> <strong>group.</strong></p></td></tr><tr><td>services.<strong>amount</strong></td><td align="center">number</td><td align="center">yes</td><td><p>The total amount the recipient must pay under the COD service.</p><p>🔹<strong>This field is required for the</strong> <code>services</code> <strong>group.</strong></p></td></tr><tr><td>services.<strong>contractNumber</strong></td><td align="center">string┃null</td><td align="center">yes</td><td><p>Contract number of the payer responsible for the selected service. This parameter is used to identify the contractual agreement under which the service is paid.</p><p>The field is required when the service payer is a <strong>third party</strong> or when non-cash payment terms are applied. If not provided, the payment may be processed according to default billing rules.</p></td></tr><tr><td>services.<strong>payerType</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Determines who is responsible for paying for the service. The payer type determines which party bears the costs:</p><ul><li><code>Recipient</code> — The only allowed value for the COD service.</li><li><code>Sender</code>, <code>Recipient</code> — Allowed payer values for the ExpBackwardGoods service.</li><li><code>Sender</code>, <code>Recipient</code>, <code>ThirdPerson</code> — Allowed payer values for the BackwardDelGoods service.</li></ul><p><strong>🔻This field is required</strong></p></td></tr><tr><td>services.<strong>additionalParameters</strong></td><td align="center">string</td><td align="center">yes</td><td>Additional parameters for the service.</td></tr><tr><td>services.additionalParameters.<strong>cod</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Additional parameters for configuring COD.</p><p>🔹<strong>These parameters are mandatory and required only for the COD service</strong></p></td></tr><tr><td>services.additionalParameters.cod.<strong>bankAccount</strong></td><td align="center">object</td><td align="center">no</td><td>Information describing the bank account details to which the funds will be transferred. Includes the transfer amount, transaction currency, account identifiers, and the party responsible for paying the service fee.</td></tr><tr><td>services.additionalParameters.cod.bankAccount.<strong>amount</strong></td><td align="center">number</td><td align="center">yes</td><td><p>The amount that will be transferred to the sender’s account after payment. Specifies the amount the recipient must pay upon receipt. Automatic currency conversion is possible depending on the sender's or recipient's country.</p><p>🔹<strong>This field is required for the</strong> <code>services.additionalParameters.cod.bankAccount</code> <strong>field group.</strong></p></td></tr><tr><td>services.additionalParameters.cod.bankAccount.<strong>currencyCode</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The currency for the transaction, defined by the sender’s contract. Specified according to the ISO 4217 standard.</p><p>🔸<strong>By default, the currency of the sender’s country is used, but it is possible to set the currency manually (Feature under development).</strong></p><p>Pattern: ^[A-Z]{3}$</p></td></tr><tr><td>services.additionalParameters.cod.bankAccount.<strong>bankAccountId</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Tax identification number of an individual or a legal entity, used for its unique identification in the system and for verifying the existence of an active contract and the availability of financial services. The same as the value passed in the <code>companyTin</code> field.</p><p>🔹<strong>This field is required for the</strong> <code>services.additionalParameters.cod.bankAccount</code> <strong>field group.</strong></p><p>🔸<strong>Must contain the tax identification number or equivalent identifier (EDRPOU, TIN, NIP).</strong></p></td></tr><tr><td>services.additionalParameters.cod.bankAccount.<strong>bankAccountName</strong></td><td align="center">string</td><td align="center">yes</td><td><p>IBAN</p><p>🔹<strong>This field is required for the</strong> <code>services.additionalParameters.cod.bankAccount</code> <strong>field group.</strong></p><p>🔸<strong>Must contain the full account number in IBAN format.</strong></p></td></tr><tr><td>services.additionalParameters.cod.bankAccount.<strong>description</strong></td><td align="center">string</td><td align="center">yes</td><td>Additional description of the payment details.</td></tr><tr><td>services.additionalParameters.cod.bankAccount.<strong>commissionPayer</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Specifies the party responsible for paying the commission:</p><ul><li><code>Recipient</code></li><li><code>Sender</code></li></ul><p>🔹<strong>This field is required for the</strong> <code>services.additionalParameters.cod.bankAccount</code> <strong>field group.</strong></p></td></tr><tr><td>services.additionalParameters.<strong>backwardDelivery</strong></td><td align="center">object</td><td align="center">yes</td><td><p>Additional parameters for configuring return delivery.</p><p>🔹<strong>These parameters are mandatory and required only for the ExpBackwardGoods service</strong></p></td></tr><tr><td>services.additionalParameters.backwardDelivery.<strong>description</strong></td><td align="center">string</td><td align="center">no</td><td>Description of the goods to be returned. This value is used for informational and operational purposes during the return delivery process.</td></tr><tr><td><strong>invoice</strong></td><td align="center">object</td><td align="center">no</td><td><p>This object presents the necessary data for customs authorities to process the consignment efficiently, including the assessment of duties and taxes, and to confirm adherence to import/export regulations. The structured format of the invoice ensures that all pertinent information is easily accessible and clear, facilitating a smoother transit across borders.</p><p>Updated logic for invoice value handling. Clients must now send only two parameters in the invoice object:</p><ul><li><code>cost</code> — total declared value of the invoice</li><li><code>currency</code> — currency code of the invoice</li></ul><p><strong>🔸It encapsulates the invoice details, which are required for international shipments undergoing customs clearance.</strong></p></td></tr><tr><td>invoice.<strong>customerNumber</strong></td><td align="center">string┃null</td><td align="center">yes</td><td><p>Unique identifier/number of the invoice accompanying the goods in the shipment, generated directly by the client. It is used for customs processing (export and import clearance) because it ensures a clear link between the goods in the shipment and their accompanying documentation, including value, origin, and other necessary information for customs clearance.</p><p>If a client invoice exists in the shipment but its information is missing—specifically, its number—the shipment processing in the information system will be halted, the customs clearance period will be extended, and in the worst case, customs authorities may refuse clearance and initiate a return to the country of export.</p><p>Constraints: Max 50 chars</p></td></tr><tr><td>invoice.<strong>customerCreatedAt</strong></td><td align="center">string</td><td align="center">yes</td><td><p>You must provide the date specified in the invoice accompanying the shipment. If the date is not present in the client document, the shipment creation date may be used.</p><p><strong>🔹This field is required if the</strong> <code>invoice.customerNumber</code> <strong>field is filled in.</strong></p><p>Pattern: ^20[0-9]{2}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{6}Z$</p></td></tr><tr><td>invoice.<strong>type</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Type of client invoice accompanying the shipment and used for customs declaration. This field must reflect the actual type of document enclosed in the parcel. Available values:</p><ul><li><code>Invoice</code> — commercial invoice for shipments of a commercial nature</li><li><code>ProformaInvoice</code> — proforma invoice for shipments of a non-commercial nature</li></ul><p><strong>🔹This field is required if the</strong> <code>invoice.customerNumber</code> <strong>field is filled in.</strong></p><p>Possible values: <code>Invoice</code> | <code>ProformaInvoice</code></p></td></tr><tr><td>invoice.<strong>incoterm</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Specifies the trade terms for the shipping agreement between the buyer and seller, based on selected standards from the Incoterms® rules. These terms define the allocation of shipping costs, insurance, customs duties, and the distribution of risk. Only a limited subset of Incoterms® is available for use:</p><ul><li><code>DAP</code> (Delivered at Place) - The recipient is responsible for import customs clearance, duties, and taxes.</li><li><code>DDP</code> (Delivered Duty Paid) - The sender is responsible for import customs clearance and for paying all applicable duties and taxes.</li></ul><p><strong>🔹This field is required for shipments crossing the EU border or going outside the EU.</strong></p><p>Possible values: <code>DAP</code> | <code>DDP</code></p></td></tr><tr><td>invoice.<strong>exportReason</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Specifies the general reason for exporting items, which is required for customs and other regulatory bodies. This classification helps in understanding the type of shipment without getting into specifics. It's used to categorize shipments at a high level for smoother processing through customs. The available options are:</p><ul><li><code>ForPersonalPurposes</code>: Items are for personal use or gifts.</li><li><code>Selling</code>: Items are meant for sale.</li><li><code>Repair</code>: Items being sent for repair.</li><li><code>Return</code>: Items are being returned to the sender or manufacturer.</li><li><code>Other</code>: Any reason not covered by the other options.</li></ul><p><strong>🔹This field is required for shipments crossing the EU border or going outside the EU.</strong></p><p>Possible values: <code>ForPersonalPurposes</code>,<code>Selling</code>,<code>Repair</code>,<code>Return</code>,<code>Other</code></p></td></tr><tr><td>invoice.<strong>cost</strong></td><td align="center">number</td><td align="center">yes</td><td><p>Total declared invoice value in the original currency, which must equal the sum of all invoice items calculated as <strong>(amount × cost)</strong> for each item. Used for customs and shipment declarations.</p><p><strong>🔸If the provided <code>cost</code> value does not equal the sum of the <code>cost</code> values in the</strong> <code>items</code> <strong>array, it will be automatically recalculated by the system on our side.</strong></p><p><strong>🔸Values are validated for decimal precision, and digits beyond two decimal places are ignored.</strong></p><p><strong>🔹This field is required for shipments crossing the EU border or going outside the EU.</strong></p><p>Constraints: Min 0┃Max 9999999.99</p></td></tr><tr><td>invoice.<strong>currency</strong></td><td align="center">string</td><td align="center">yes</td><td><p>ISO 4217 currency code of the invoice. All items in the invoice must use the same currency.</p><p><strong>🔹This field is required for shipments crossing the EU border or going outside the EU.</strong></p><p>Pattern: ^[A-Z]{3}$</p></td></tr><tr><td>invoice.<strong>payerFeesCustoms</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Specifies who is responsible for paying for customs services. The parameter determines which party bears the costs:</p><ul><li><code>Sender</code>: The party sending the goods pays for the customs duties.</li><li><code>Recipient</code>: The party receiving the goods is responsible for the customs duties costs.</li><li><code>ThirdPerson</code>: A third party can only pay for customs services if this is permitted and the payer for delivery services is also a third party.</li></ul><p>The default value is <strong>"Recipient"</strong>.<br>This value will also be applied automatically if the parcel exceeds the maximum allowed value (in the recipient country’s currency) for which the sender is permitted to pay customs duties.</p><p><strong>🔹This parameter is required and valid only for the UA-EU direction.</strong></p><p>Possible values: <code>Sender</code> | <code>Recipient</code> | <code>ThirdPerson</code></p></td></tr><tr><td>invoice.<strong>items</strong></td><td align="center">object</td><td align="center">yes</td><td><p>A detailed list of goods being shipped, including required descriptions and values, essential for customs declarations and assessing duties.</p><p><strong>Logic:</strong> If the items block is provided, the system checks whether the total sum of all (<code>items.cost</code> × <code>items.amount</code>) matches the <code>invoice.cost</code> value. If not — the system updates <code>invoice.cost</code> to equal the sum of all items.</p><p><strong>🔸It is required to provide this information for each individual good in the shipment in the form of an array.</strong></p></td></tr><tr><td>invoice.items.<strong>customerId</strong></td><td align="center">string</td><td align="center">no</td><td><p>Client item identifier.</p><p><strong>🔹This field is optional.</strong></p></td></tr><tr><td>invoice.items.<strong>hsCode</strong></td><td align="center">string | null</td><td align="center">yes</td><td><p>The Harmonized System code for each item, a standardized numerical method of classifying traded products. This field is required for international shipments that pass through customs clearance. You can obtain the valid <code>hsCode</code> from the Cargo Classifiers (UKT ZED) dictionary. Validation rules:</p><ul><li><p><strong>If the sender or recipient country is Moldova (MD) or Canada (CA):</strong></p><ul><li>The <code>hsCode</code> must consist of exactly 10 numeric characters.</li><li>If the input is longer than 10 digits, it will be <strong>truncated</strong> on the right.</li><li>If it contains fewer than 10 digits - validation error.</li></ul></li><li><p><strong>For all other countries:</strong></p><ul><li>The <code>hsCode</code> must contain <strong>between 8 and 10 numeric characters</strong> (inclusive).</li><li>If fewer than 8 digits – validation error.</li></ul></li><li><strong>All non-digit characters will be stripped automatically before validation.</strong></li><li><p><strong>If the value of the <code>hsCode</code> field is <code>210690</code> or <code>630900</code>, the following conditions must be met:</strong></p><ul><li>The <code>measurementCode</code> must be set to <code>kg</code>.</li><li>Each item with this <code>hsCode</code> must be unique — the invoice must not contain more than one item with code <code>210690</code> or <code>630900</code>.</li><li>The amount value must not exceed 10.</li></ul></li></ul><p><strong>🔹This field is required for shipments crossing the EU border or going outside the EU.</strong></p><p>Constraints: Max 255 chars</p></td></tr><tr><td>invoice.items.<strong>name</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Represents the item's name in the local language, offering an accurate description for customs and logistical planning. The name should correspond with terminologies found in the Cargo Classifiers (UKT ZED) dictionary, ensuring compliance with standard classification codes. This detailed description aids in precise item identification during the customs clearance process. This field supports Unicode encoding, permitting the inclusion of special characters and symbols using the \uXXXX format. This capability allows for precise representation of item names in languages that incorporate non-Latin characters, enhancing clarity and understanding across diverse regulatory environments.</p><p><strong>🔹This field is required for shipments crossing the EU border or going outside the EU.</strong></p><p>Constraints: Max 512 chars</p></td></tr><tr><td>invoice.items.<strong>nameEng</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Specifies the item's name in English, critical for ensuring that the product is identifiable and understandable across international trade and logistics channels. The English name simplifies communication and documentation processes when dealing with international partners and authorities, aiding in the seamless facilitation of global shipments. Similar to the <code>name</code> field, this parameter also supports Unicode encoding. Using the \uXXXX format, it accommodates the accurate rendering of any special characters necessary for the correct representation of the item's name in English.</p><p><strong>🔹This field is required for shipments crossing the EU border or going outside the EU.</strong></p><p>Constraints: Max 512 chars</p></td></tr><tr><td>invoice.items.<strong>material</strong></td><td align="center">string</td><td align="center">no</td><td><p>The primary material from which the item is made, important for customs declarations and potential restrictions.</p><p><strong>🔸If this field is not provided, the default value will be applied.</strong></p><p>Constraints: Max 50 chars</p></td></tr><tr><td>invoice.items.<strong>materialEng</strong></td><td align="center">string</td><td align="center">no</td><td><p>The description of the item's material in English, aiding in the universal understanding of the product's composition.</p><p><strong>🔸If this field is not provided, the default value will be applied.</strong></p><p>Constraints: Max 255 chars</p></td></tr><tr><td>invoice.items.<strong>madeInCountryCode</strong></td><td align="center">string | null</td><td align="center">no</td><td><p>The ISO 3166-1 alpha-2 code indicating the country of manufacture, essential for determining import duties and compliance with trade agreements.</p><p><strong>🔸This field is not required; however, shipments with this field filled are given priority during customs clearance.</strong></p><p>Pattern: ^[A-Z]{2}$</p></td></tr><tr><td>invoice.items.<strong>producerAndModel</strong></td><td align="center">string | null</td><td align="center">no</td><td><p>The parameter represents the manufacturer and model of the device when creating a shipment. Both values are included in a single parameter. This parameter is mandatory for the following categories:</p><ul><li>Electrical appliances</li><li>Laptops</li><li>Phones</li><li>Large and small household appliances</li><li>Other similar items</li></ul><p><strong>🔸This field is not required; however, shipments with this field filled are given priority during customs clearance.</strong></p><p>Constraints: Max 255 chars</p></td></tr><tr><td>invoice.items.<strong>actualWeight</strong></td><td align="center">integer | null</td><td align="center">yes</td><td><p>Actual total weight of all units of the item in grams (g).</p><p>Supported precision: 10 grams (0.01 kg). Values not divisible by 10 g are rounded down to the nearest lower multiple of 10 g.</p><p><strong>🔸This field is mandatory when the</strong> <code>invoice.items</code> <strong>array is present in the request.</strong><br>The system validates that the sum of <code>actualWeight</code> values across <strong>all invoice items</strong> matches the <strong>total shipment weight</strong> (sum of <code>parcels[].actualWeight</code>).</p><p>⚠️IMPORTANT: Ensure that all invoice item weights are correctly rounded and that their total weight exactly matches the shipment weight to avoid validation errors.</p><p>Constraints: Min 1┃Max 2147483647</p></td></tr><tr><td>invoice.items.<strong>measurementCode</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The unit of measurement for the item quantity, such as pieces, kilograms, meters, etc., standardizing the way quantities are reported.</p><p><strong>🔹This field is required for shipments crossing the EU border or going outside the EU.</strong></p><p>Constraints: Max 255 chars</p></td></tr><tr><td>invoice.items.<strong>amount</strong></td><td align="center">number</td><td align="center">yes</td><td><p>The quantity of the item being shipped, necessary for inventory and customs documentation. Value in the units of measurement corresponding to the field <code>measurementCode</code>.</p><p><strong>🔹This field is required for shipments crossing the EU border or going outside the EU.</strong></p><p>Constraints: Min 0┃Max 9999999.99</p></td></tr><tr><td>invoice.items.<strong>cost</strong></td><td align="center">number</td><td align="center">yes</td><td><p>The value per single unit of the item in the sender's currency, important for insurance and customs valuation.</p><p><strong>🔸Values are validated for decimal precision, and digits beyond two decimal places are ignored.</strong></p><p><strong>🔹This field is required for shipments crossing the EU border or going outside the EU.</strong></p><p>Constraints: Min 0┃Max 9999999.99</p></td></tr><tr><td><strong>parcels</strong></td><td align="center">object</td><td align="center">yes</td><td><p>Parcels` description block. Array contains objects, each object responsible for information about parcel.</p><p><strong>🔻All fields in this array must be filled.</strong></p></td></tr><tr><td>parcels.<strong>cargoCategory</strong></td><td align="center">string</td><td align="center">no</td><td><p>Specifies the type of the shipment, helping to categorize the goods for logistics and customs processing. The category impacts how the shipment is handled, its shipping cost, and the required documentation. Available categories are:</p><ul><li><code>parcel</code>: Small to medium-sized packages, typically for consumer goods and retail items.</li><li><code>documents</code>: Postal shipments containing documents such as letters, contracts, and official papers. This category is specifically for items that weigh no more than 1 kg and have dimensions not exceeding 35 cm in length, 25 cm in width, and 2 cm in height.</li><li><p><code>pallet</code>: Type of cargo formed as a pallet shipment with fixed dimensions and weight limits, available in the Business Cabinet of Europe for legal entities:</p><ul><li>Up to 250 kg, area ~0.48 m², dimensions 80 × 60 × 170 cm</li><li>Up to 500 kg, area ~0.96 m², dimensions 120 × 80 × 170 cm</li><li>Up to 750 kg, area ~1.2 m², dimensions 120 × 100 × 170 cm</li><li>Up to 1000 kg, area ~1.2 m², dimensions 120 × 100 × 170 cm</li></ul></li></ul><p>Possible values: <code>parcel</code> | <code>documents</code> | <code>pallet</code></p></td></tr><tr><td>parcels.<strong>parcelDescription</strong></td><td align="center">string</td><td align="center">no</td><td><p>This field requires a concise description of the contents within the shipment, providing essential information on the nature of the items enclosed. This description aids in the logistics process, offering a clear understanding of the package contents for transportation planning and customs clearance. The summary should include details like the type of items, their purpose, and any other relevant information that describes the contents. It’s crucial for ensuring that the shipment complies with shipping regulations and facilitates smooth customs processing. Additionally, this field supports data in Unicode encoding, allowing for the inclusion of special characters and symbols using the \uXXXX format. This feature is particularly useful for languages that use non-Latin characters, ensuring accurate representation of item descriptions across diverse linguistic contexts.</p><p>Constraints: Max 255 chars</p></td></tr><tr><td>parcels.<strong>insuranceCost</strong></td><td align="center">number</td><td align="center">yes</td><td><p>Represents the declared value of the shipment for insurance coverage. This value indicates the maximum compensation amount in the event of damage or loss during transit. It is important to accurately declare this value to match the actual worth of the shipment contents, as underdeclaring can result in insufficient compensation.</p><p><strong>Currency handling:</strong></p><ul><li>If <code>insuranceCurrencyCode</code> is <strong>not provided</strong>, the value must be specified in the <strong>currency of the sender's country</strong>.</li><li>If <code>insuranceCurrencyCode</code> <strong>is provided</strong>, the value can be specified in any supported currency (ISO 4217). The system will automatically convert it to the sender's country currency before further processing.</li></ul><p>🔸<strong>When <code>insuranceCurrencyCode</code> is used, all parcels must specify the same currency code. Mixed or partially filled currency values will result in a validation error.</strong></p><p><strong>The value must always be greater than 0, regardless of the shipment direction.</strong>"</p><p>Example: <code>1.5</code></p></td></tr><tr><td>parcels.<strong>insuranceCurrencyCode</strong></td><td align="center">string</td><td align="center">no</td><td><p>ISO 4217 currency code for the declared insurance value (<code>insuranceCost</code>).</p><ul><li>When provided, the system converts <code>insuranceCost</code> to the sender's country currency automatically.</li><li>If used, all parcels must have the same <code>insuranceCurrencyCode</code>.</li></ul><p>🔹<strong>This field is optional.</strong>"</p><p>Pattern: ^[A-Z]{3}$</p></td></tr><tr><td>parcels.<strong>rowNumber</strong></td><td align="center">integer</td><td align="center">yes</td><td><p>Sequential identifier for each parcel within a shipment, used to organize and track individual packages, especially when multiple items are involved. If the shipment contains only one package, the value should be 1.</p><p>Constraints: Min 1</p></td></tr><tr><td>parcels.<strong>width</strong></td><td align="center">integer</td><td align="center">yes</td><td><p>The parcel's width measured in millimeters, used alongside length and height to compute the total volume for logistical planning.</p><p>Constraints: Min 1</p></td></tr><tr><td>parcels.<strong>length</strong></td><td align="center">integer</td><td align="center">yes</td><td><p>The parcel's length measured in millimeters, used alongside height and width to compute the total volume for logistical planning.</p><p>Constraints: Min 1</p></td></tr><tr><td>parcels.<strong>height</strong></td><td align="center">integer</td><td align="center">yes</td><td><p>The parcel's height measured in millimeters, used alongside length and width to compute the total volume for logistical planning.</p><p>Constraints: Min 1</p></td></tr><tr><td>parcels.<strong>actualWeight</strong></td><td align="center">integer</td><td align="center">yes</td><td><p>Actual item weight in grams (g).</p><p>Supported precision: 10 grams (0.01 kg). Values not divisible by 10 g are rounded down to the nearest lower multiple of 10 g.</p><p><strong>🔸This field is mandatory when the</strong> <code>invoice.items</code> <strong>array is present in the request.</strong><br>The system validates that the sum of <code>actualWeight</code> values across <strong>all invoice items</strong> matches the <strong>total shipment weight</strong> (sum of <code>parcels[].actualWeight</code>).</p><p>⚠️IMPORTANT: Ensure that all invoice item weights are correctly rounded and that their total weight exactly matches the shipment weight to avoid validation errors.</p><p>Constraints: Min 1┃Max 2147483647</p></td></tr><tr><td><strong>sender</strong></td><td align="center">object</td><td align="center">yes</td><td><p>Information about the party sending the shipment, including details about an individual or organization responsible for the dispatch.</p><p><strong>🔻This array of fields is required</strong></p></td></tr><tr><td>sender.<strong>companyTin</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The tax identification number or equivalent identifier (EDRPOU, TIN, NIP, IČO - for Slovakia) of a legal entity.</p><p><strong>🔸The fields are required for a legal entity. If they are not filled in, the sender will be considered an individual</strong></p><p>Constraints: Max 20 chars</p></td></tr><tr><td>sender.<strong>companyName</strong></td><td align="center">string | null</td><td align="center">yes</td><td><p>The official name of the sender's company. This field is used when the sender is a business entity, helping to identify the sending organization in documentation and records.</p><p>Constraints: Max 100 chars</p></td></tr><tr><td>sender.<strong>eoriCode</strong></td><td align="center">string | null</td><td align="center">yes</td><td><p>The EORI code (Economic Operators Registration and Identification number) is used by the European Union to identify economic operators engaged in international trade. The sender's EORI code should be included in the invoice to ensure correct customs clearance and taxation when shipping goods to EU countries. The code is not mandatory but strongly recommended for international shipments to the EU, as it facilitates customs processing and helps avoid delays.</p><p>Constraints: 3 to 17 chars</p></td></tr><tr><td>sender.<strong>phone</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The contact phone number of the sender or the sender’s company representative. It is required for shipment-related communication, including pickup coordination and issue resolution. </p><p><strong>Format:</strong> The phone number must be provided in <strong>international format</strong> according to the <strong>E.164</strong> standard. </p><p>Example: 380XXXXXXXXX, 491234567890, 371XXXXXXXX </p><p><strong>Restrictions:</strong></p><ul><li>The sender's phone number must be valid and reachable in case of delivery issues.</li><li>If the number is submitted in a local (non-international) format, the system will attempt to <strong>normalize</strong> it, but such logic is limited and may not support all variations across countries. We strongly recommend implementing <strong>front-end validation</strong> to ensure numbers are entered in the correct international format.</li></ul><p><strong>🔻This field is required</strong></p></td></tr><tr><td>sender.<strong>email</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Email address of the sender, providing an electronic means of contact for updates, inquiries, and important notifications about the shipment.</p><p><strong>🔹This field is required for shipments crossing the EU border or going outside the EU.</strong></p></td></tr><tr><td>sender.<strong>name</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The full name of the individual sender or the primary contact person for a company sender. This name is used in all correspondences and documents related to the shipment.</p><p><strong>🔸Important for EU → UA international shipments:</strong><br>The sender name <strong>must be provided using Latin characters only</strong>. Use of Cyrillic characters (including Ukrainian letters) is <strong>not allowed</strong> and will result in validation or processing errors on the Last Mile partner side.</p><p><strong>🔻This field is required</strong></p><p>Constraints: Max 100 chars</p></td></tr><tr><td>sender.<strong>ioss</strong></td><td align="center">string</td><td align="center">no</td><td><p>The IOSS (Import One-Stop Shop) number is an optional input used to facilitate the VAT declaration process for shipments from non-EU countries with a declared value of up to EUR 150. It is utilized by shippers using the IOSS process to simplify customs procedures for deliveries to private customers in the EU. This field is available for shipments where the sender's country is outside the EU and the destination is within the EU.</p><p>Constraints: Max 12 chars </p><p>Pattern: /^[a-zA-Z0-9]*$/u</p></td></tr><tr><td>sender.<strong>countryCode</strong></td><td align="center">string</td><td align="center">yes</td><td><p>A two-letter code representing the sender's country, following the ISO 3166-1 Alpha-2 standard, indicating the country of origin for the shipment.</p><p><strong>🔻This field is required</strong></p><p>Pattern: ^[A-Z]{2}$</p></td></tr><tr><td>sender.<strong>divisionNumber</strong></td><td align="center">string | null</td><td align="center">yes</td><td><p>This field is mandatory for parcels that are dispatched from a post office division or parcel locker, requiring the unique identifier of the dispatch location to be specified.</p><p><strong>🔹This field is required if both the</strong> <code>sender.addressParts</code> <strong>group and the</strong> <code>sender.divisionID</code> <strong>field are missing or empty</strong></p><p>Example: <code>32521/1</code></p></td></tr><tr><td>sender.<strong>divisionID</strong></td><td align="center">integer | null</td><td align="center">yes</td><td><p>Division ID for specific branch identification.</p><p><strong>🔹This field is required if both the</strong> <code>sender.addressParts</code> <strong>group and the</strong> <code>sender.divisionNumber</code> <strong>field are missing or empty</strong></p><p>Constraints: Min 1</p></td></tr><tr><td>sender.<strong>addressParts</strong></td><td align="center">object</td><td align="center">yes</td><td>This array of fields is required when shipping directly from an address, detailing the specific components of the location from which the parcel is dispatched. It includes detailed address information, ensuring the accurate identification of the pickup location.</td></tr><tr><td>sender.addressParts.<strong>city</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The name of the city from which the shipment is dispatched. It helps pinpoint the exact urban location for pickup or shipping.</p><p><strong>🔹This field is required if</strong> <code>sender.divisionNumber</code> <strong>and</strong> <code>sender.divisionID</code> <strong>fields are missing or empty.</strong><br>🔸For shipments where the sender country is <strong>Moldova</strong> or <strong>Ukraine</strong>, the sender city is validated against internal settlement directories. If the settlement cannot be resolved due to an invalid or unmapped value, the shipment will not be created.</p><p>Constraints: Max 100 chars</p></td></tr><tr><td>sender.addressParts.<strong>region</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Specifies the broader administrative area, like a state or province, encompassing the city, providing additional context for the shipment's origin.</p><p><strong>🔹This field is required for shipments when the sender or recipient country is the USA, Ireland, or Canada.</strong></p><p>Constraints: Max 100 chars</p></td></tr><tr><td>sender.addressParts.<strong>street</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Identifies the specific street address for the sender's location, crucial for accurate pickup or delivery operations.</p><p><strong>🔹This field is required if</strong> <code>sender.divisionNumber</code> <strong>and</strong> <code>sender.divisionID</code> <strong>fields are missing or empty.</strong></p><p>Constraints: Max 100 chars</p></td></tr><tr><td>sender.addressParts.<strong>postCode</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The postal or ZIP code corresponding to the sender's address. It's essential for sorting and routing the shipment efficiently.</p><p><strong>🔹This field is required if</strong> <code>sender.divisionNumber</code> <strong>and</strong> <code>sender.divisionID</code> <strong>fields are missing or empty.</strong></p><p>Constraints: Max 10 chars</p></td></tr><tr><td>sender.addressParts.<strong>building</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The building number or name at the specified street address, pinpointing the precise location for shipment collection.</p><p><strong>🔹This field is required if</strong> <code>sender.divisionNumber</code> <strong>and</strong> <code>sender.divisionID</code> <strong>fields are missing or empty.</strong></p><p>Constraints: Max 100 chars</p></td></tr><tr><td>sender.addressParts.<strong>flat</strong></td><td align="center">string</td><td align="center">no</td><td><p>If applicable, the apartment or suite number within a building from which the shipment originates, ensuring pickup personnel can locate the sender's exact unit.</p><p>Constraints: Max 10 chars</p></td></tr><tr><td>sender.addressParts.<strong>block</strong></td><td align="center">string | null</td><td align="center">no</td><td><p>Indicates a specific block or section within a larger residential area or complex, if relevant, aiding in locating the sender's precise starting point for the shipment.</p><p>Constraints: Max 100 chars</p></td></tr><tr><td>sender.addressParts.<strong>note</strong></td><td align="center">string</td><td align="center">no</td><td><p>Allows for the inclusion of additional details or instructions about the sender's address that might facilitate the pickup process, such as gate codes, specific entry points, or preferred contact times.</p><p>Constraints: Max 100 chars</p></td></tr><tr><td><strong>recipient</strong></td><td align="center">object</td><td align="center">yes</td><td><p>Information about the party receiving the shipment, detailing either an individual or an organization responsible for receiving the dispatched goods.</p><p><strong>🔻This array of fields is required</strong></p></td></tr><tr><td>recipient.<strong>companyTin</strong></td><td align="center">string | null</td><td align="center">yes</td><td><p>The tax identification number or equivalent identifier (EDRPOU, TIN, NIP, IČO - for Slovakia) of a legal entity.</p><p><strong>🔸The fields are required for a legal entity. If they are not filled in, the recipient will be considered an individual</strong></p><p>Constraints: Max 20 chars</p></td></tr><tr><td>recipient.<strong>companyName</strong></td><td align="center">string | null</td><td align="center">yes</td><td><p>The formal name of the recipient's company. Utilize this field when the recipient is a business entity, aiding in the identification of the receiving organization in documents and records.</p><p>Constraints: Max 100 chars</p></td></tr><tr><td>recipient.<strong>eoriCode</strong></td><td align="center">string | null</td><td align="center">yes</td><td><p>The recipient's EORI code is important for customs clearance when shipping goods to European Union countries, especially when sending to legal entities. The code is not mandatory but recommended, as it helps ensure smooth customs clearance and minimizes the risk of delays. The requirement for the recipient eoriCode depends on the type of goods being shipped:</p><ol><li>Non-excise goods: The EORI code is not mandatory if non-excise goods are being shipped from Ukraine to a legal entity in Europe. If the recipient does not have an EORI code, one will be automatically assigned.</li><li>Excise goods: The EORI code is required for shipments of excise goods. The recipient must obtain an EORI code before the goods can be shipped.</li></ol><p>Constraints: 3 to 17 chars</p></td></tr><tr><td>recipient.<strong>phone</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The contact phone number of the recipient or the recipient’s company representative. Used for delivery notifications and communication with the customer during shipment processing. </p><p><strong>Format:</strong> The phone number must be provided in <strong>international format</strong> according to the <strong>E.164</strong> standard. </p><p>Example: 380XXXXXXXXX, 491234567890, 371XXXXXXXX </p><p><strong>Restrictions:</strong></p><ul><li>For deliveries to Nova Post branches in Europe, Ukrainian mobile numbers are acceptable.</li><li>For deliveries to <strong>partner locations</strong> (such as InPost, GLS, Venipak, Cargus, etc.) and <strong>cross-border address deliveries</strong>, the phone number must belong to a mobile operator in the recipient's country. If the phone number is submitted in a local (non-international) format, the system will attempt to <strong>normalize</strong> it to the international format, but the internal algorithm does not cover all possible cases. If your system does not support front-end validation of phone numbers, we recommend informing us about failed phone number cases so we can assess potential improvements to the normalization logic.</li></ul><p><strong>🔻This field is required</strong></p></td></tr><tr><td>recipient.<strong>email</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The email address of the recipient, serving as a digital contact point for shipment updates, inquiries, and essential notifications.</p><p><strong>🔹This field is required for shipments crossing the EU border or going outside the EU.</strong></p></td></tr><tr><td>recipient.<strong>name</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The complete name of the individual recipient or the primary contact for a company recipient. This is the name used for all shipping-related correspondence and documentation.</p><p><strong>🔻This field is required</strong></p><p>Constraints: Max 100 chars</p></td></tr><tr><td>recipient.<strong>countryCode</strong></td><td align="center">string</td><td align="center">yes</td><td><p>A two-letter code that identifies the recipient's country, adhering to the ISO 3166-1 Alpha-2 standard, which specifies the shipment's destination country.</p><p><strong>🔻This field is required</strong></p><p>Pattern: ^[A-Z]{2}$</p></td></tr><tr><td>recipient.<strong>divisionNumber</strong></td><td align="center">string | null</td><td align="center">yes</td><td><p>This field is mandatory for parcels intended to be collected from a post office division or parcel locker, requiring the insertion of the unique identifier for the designated location.</p><p><strong>🔹This field is required if both the</strong> <code>recipient.addressParts</code> <strong>group and the</strong> <code>recipient.divisionID</code> <strong>field are missing or empty</strong></p><p>Example: <code>32521/1</code></p></td></tr><tr><td>recipient.<strong>divisionID</strong></td><td align="center">integer | null</td><td align="center">yes</td><td><p>Division ID for specific branch identification.</p><p><strong>🔹This field is required if both the</strong> <code>recipient.addressParts</code> <strong>group and the</strong> <code>recipient.divisionNumber</code> <strong>field are missing or empty</strong></p><p>Constraints: Min 1</p></td></tr><tr><td>recipient.<strong>addressParts</strong></td><td align="center">object</td><td align="center">yes</td><td><p>This array of fields is necessary when the shipment is directed to a specific address, outlining the precise location details to which the parcel is to be delivered. It encompasses comprehensive address information to ensure the exact identification of the delivery location.</p><p><strong>🔸The values in the nested address fields must not duplicate each other. Providing the same address information in multiple inner fields will result in an error.</strong></p></td></tr><tr><td>recipient.addressParts.<strong>city</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The city to which the shipment is being delivered. This detail ensures the parcel is directed to the correct urban area for the recipient.</p><p><strong>🔹This field is required if</strong> <code>recipient.divisionNumber</code> <strong>and</strong> <code>recipient.divisionID</code> <strong>fields are missing or empty.</strong><br>🔸For shipments where the recipient country is <strong>Moldova</strong> or <strong>Ukraine</strong>, the recipient city is validated against internal settlement directories. If the settlement cannot be resolved due to an invalid or unmapped value, the request will be rejected with the error:<code>validation.condition.recipient_settlement_not_defined</code>.</p><p>Constraints: Max 100 chars</p></td></tr><tr><td>recipient.addressParts.<strong>region</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Specifies the recipient's state or province within the destination country, crucial for accurate shipment routing and delivery. When sending to the USA, it's essential to include a two-letter state code, such as "WA" for Washington or "DC" for the District of Columbia, according to the ISO 3166-2:US standard.</p><p><strong>🔹This field is required for shipments when the sender or recipient country is the USA, Ireland, or Canada.</strong></p><p>Constraints: Max 100 chars</p></td></tr><tr><td>recipient.addressParts.<strong>street</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The street name of the recipient's address, vital for pinpointing the exact delivery spot.</p><p><strong>🔹This field is required if</strong> <code>recipient.divisionNumber</code> <strong>and</strong> <code>recipient.divisionID</code> <strong>fields are missing or empty.</strong></p><p>Constraints: Max 100 chars</p></td></tr><tr><td>recipient.addressParts.<strong>postCode</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The postal or ZIP code for the recipient's address, critical for the precise sorting and routing of the parcel to its final destination.</p><p><strong>🔹This field is required if</strong> <code>recipient.divisionNumber</code> <strong>and</strong> <code>recipient.divisionID</code> <strong>fields are missing or empty.</strong></p><p>Constraints: Max 10 chars</p></td></tr><tr><td>recipient.addressParts.<strong>building</strong></td><td align="center">string</td><td align="center">yes</td><td><p>Specifies the building number or name at the recipient's address, guiding the delivery to the exact building within a given street.</p><p><strong>🔹This field is required if</strong> <code>recipient.divisionNumber</code> <strong>and</strong> <code>recipient.divisionID</code> <strong>fields are missing or empty.</strong></p><p>Constraints: Max 100 chars</p></td></tr><tr><td>recipient.addressParts.<strong>flat</strong></td><td align="center">string</td><td align="center">no</td><td><p>The apartment or suite number, if the delivery is to a multi-unit building, ensuring the parcel reaches the specific unit of the recipient.</p><p>Constraints: Max 10 chars</p></td></tr><tr><td>recipient.addressParts.<strong>block</strong></td><td align="center">string | null</td><td align="center">no</td><td><p>Identifies a block or section within a larger complex or residential area for the recipient, useful in large housing developments to further narrow down the delivery point.</p><p>Constraints: Max 100 chars</p></td></tr><tr><td>recipient.addressParts.<strong>note</strong></td><td align="center">string</td><td align="center">no</td><td><p>The space for any additional recipient-related address instructions or details that might assist in the delivery process, such as security instructions, specific doors for delivery, or preferred delivery times.</p><p>Constraints: Max 100 chars</p></td></tr><tr><td>recipient.<strong>registrationAddressRecipient</strong></td><td align="center">object</td><td align="center">no</td><td>The registrationAddressRecipient object provides a detailed breakdown of the recipient's registered address and is required when shipping to countries with specific customs requirements, such as Germany, Slovakia, Hungary, and France. This ensures compliance with local regulations and facilitates smooth customs processing. The object allows for a precise and complete representation of the recipient's address, which is especially important for international shipments to countries with strict customs regulations.</td></tr><tr><td>recipient.registrationAddressRecipient.<strong>city</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The name of the city where the recipient is registered. It must match the local naming conventions for accurate identification.</p><p><strong>🔹This field is required for shipments to countries with specific customs requirements, including Germany, Slovakia, Hungary, and France.</strong></p><p>Constraints: Max 100 chars</p></td></tr><tr><td>recipient.registrationAddressRecipient.<strong>street</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The name of the street in the recipient's address. It must match the local naming conventions for accurate identification.</p><p><strong>🔹This field is required for shipments to countries with specific customs requirements, including Germany, Slovakia, Hungary, and France.</strong></p><p>Constraints: Max 100 chars</p></td></tr><tr><td>recipient.registrationAddressRecipient.<strong>zipCode</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The postal code of the recipient's registered address.</p><p><strong>🔹This field is required for shipments to countries with specific customs requirements, including Germany, Slovakia, Hungary, and France.</strong></p><p>Constraints: Max 10 chars</p></td></tr><tr><td>recipient.registrationAddressRecipient.<strong>building</strong></td><td align="center">string</td><td align="center">yes</td><td><p>The building number or name where the recipient is registered.</p><p><strong>🔹This field is required for shipments to countries with specific customs requirements, including Germany, Slovakia, Hungary, and France.</strong></p><p>Constraints: Max 100 chars</p></td></tr><tr><td>recipient.registrationAddressRecipient.<strong>apartment</strong></td><td align="center">string</td><td align="center">no</td><td><p>The flat or apartment number within the building.</p><p>Constraints: Max 10 chars</p></td></tr><tr><td>recipient.registrationAddressRecipient.<strong>state</strong></td><td align="center">string</td><td align="center">no</td><td><p>The state or region where the recipient is registered. Required in some countries for detailed geographical identification.</p><p>Constraints: Max 100 chars</p></td></tr></tbody></table>

</details>

## POST /shipments

> Create Shipment

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Shipments"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}},"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Validation":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Time-out":{"description":"Connection time-out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}}},"paths":{"/shipments":{"post":{"tags":["Shipments"],"requestBody":{"description":"Optional description in *Markdown*","required":true,"content":{"application/json":{"schema":{"type":"object","required":["sender","invoice"],"properties":{"status":{"type":"string","description":"Signifies the current status of the transportation document, tracking its progress through the shipping lifecycle.","enum":["ReadyToShip"]},"clientOrder":{"type":"string","description":"Represents all potential order identifiers associated with the shipment.","maxLength":50},"note":{"type":"string","description":"Any additional information or special instructions that pertain to the order can be included here.","maxLength":255},"deliveryType":{"type":"string","description":"Defines the tariff type to be applied to the shipment during creation or update."},"payerType*":{"type":"string","description":"Identifies who is responsible for the payment of delivery services.","enum":["Sender","Recipient","ThirdPerson"]},"payerContractNumber":{"type":"string","description":"Required for `ThirdPerson` payments and for non-cash payments when `payerType` is `Sender` or `Recipient`.","minLength":2,"maxLength":20,"nullable":true},"services":{"type":"array","description":"Contains information about additional services for the shipment.","properties":{"shipmentParcelRowNumber":{"type":"integer","nullable":true,"description":"Specifies the row number of the parcel to which the service is applied."},"serviceCode":{"type":"string","description":"The code indicating the service."},"serviceName":{"type":"string","description":"Name of the service."},"serviceId":{"type":"string","description":"Unique identifier (reference ID) of the selected service."},"amount":{"type":"number","description":"The total amount the recipient must pay under the COD service."},"contractNumber":{"type":"string","nullable":true,"description":"Contract number of the payer responsible for the selected service."},"payerType":{"type":"string","description":"Determines who is responsible for paying for the service."},"additionalParameters":{"type":"string","description":"Additional parameters for the service.","properties":{"cod":{"type":"string","description":"Additional parameters for configuring COD.","properties":{"bankAccount":{"type":"object","description":"Information describing the bank account details to which the funds will be transferred.","properties":{"amount":{"type":"number","description":"The amount that will be transferred to the sender’s account after payment."},"currencyCode":{"type":"string","description":"The currency for the transaction, defined by the sender’s contract."},"bankAccountId":{"type":"string","description":"Tax identification number of an individual or a legal entity."},"bankAccountName":{"type":"string","description":"IBAN"},"description":{"type":"string","description":"Additional description of the payment details."},"commissionPayer":{"type":"string","description":"Specifies the party responsible for paying the commission."}}}}},"backwardDelivery":{"type":"array","description":"Additional parameters for configuring return delivery.","items":{"type":"object","properties":{"description":{"type":"string","description":"Description of the goods to be returned."}}}}}}}},"invoice":{"type":"object","description":"This object presents the necessary data for customs authorities to process the consignment efficiently.","properties":{"customerNumber":{"type":"string","description":"Unique identifier/number of the invoice accompanying the goods in the shipment, generated directly by the client.","maxLength":50,"nullable":true},"customerCreatedAt":{"type":"string","format":"date-time","description":"You must provide the date specified in the invoice accompanying the shipment."},"type":{"type":"string","description":"Type of client invoice accompanying the shipment and used for customs declaration.","enum":["Invoice","ProformaInvoice"]},"incoterm":{"type":"string","description":"Specifies the trade terms for the shipping agreement between the buyer and seller.","enum":["DAP","DDP"]},"exportReason":{"type":"string","description":"Specifies the general reason for exporting items, which is required for customs and other regulatory bodies.","enum":["ForPersonalPurposes","Selling","Repair","Return","Other"]},"cost":{"type":"number","description":"Total declared invoice value in the original currency.","minimum":0,"maximum":9999999.99},"currency":{"type":"string","description":"ISO 4217 currency code of the invoice."},"payerFeesCustoms":{"type":"string","description":"Specifies who is responsible for paying for customs services.","enum":["Sender","Recipient","ThirdPerson"]},"items":{"type":"array","description":"A detailed list of goods being shipped.","items":{"type":"object","properties":{"customerId":{"type":"string","description":"Client item identifier."},"hsCode":{"type":"string","description":"The Harmonized System code for each item, a standardized numerical method of classifying traded products.","maxLength":255,"nullable":true},"name":{"type":"string","description":"Represents the item's name in the local language, offering an accurate description for customs and logistical planning.","maxLength":512},"nameEng":{"type":"string","description":"Specifies the item's name in English, critical for ensuring that the product is identifiable and understandable across international trade and logistics channels.","maxLength":512},"material":{"type":"string","description":"The primary material from which the item is made, important for customs declarations and potential restrictions.","maxLength":50},"materialEng":{"type":"string","description":"The description of the item's material in English, aiding in the universal understanding of the product's composition.","maxLength":255},"madeInCountryCode":{"type":"string","description":"The ISO 3166-1 alpha-2 code indicating the country of manufacture.","pattern":"^[A-Z]{2}$","nullable":true},"producerAndModel":{"type":"string","description":"The parameter represents the manufacturer and model of the device when creating a shipment.","maxLength":255,"nullable":true},"actualWeight":{"type":"integer","description":"Actual total weight of all units of the item in grams (g).","minimum":1,"maximum":2147483647,"nullable":true},"measurementCode":{"type":"string","description":"The unit of measurement for the item quantity, such as pieces, kilograms, meters, etc., standardizing the way quantities are reported.","maxLength":255},"amount":{"type":"number","description":"The quantity of the item being shipped.","minimum":0,"maximum":9999999.99},"cost":{"type":"number","description":"The value per single unit of the item in the sender's currency.","minimum":0,"maximum":9999999.99}}}}}},"parcels*":{"type":"array","description":"Parcels` description block.","items":{"type":"object","properties":{"cargoCategory*":{"type":"string","description":"Specifies the type of the shipment, helping to categorize the goods for logistics and customs processing.","enum":["parcel","documents","pallet"]},"parcelDescription*":{"type":"string","description":"This field requires a concise description of the contents within the shipment.","maxLength":255},"insuranceCost*":{"type":"number","format":"float","description":"Represents the declared value of the shipment for insurance coverage.","minimum":1,"exclusiveMinimum":true},"insuranceCurrencyCode":{"type":"string","description":"ISO 4217 currency code for the declared insurance value (`insuranceCost`).","pattern":"^[A-Z]{3}$"},"rowNumber*":{"type":"integer","description":"Sequential identifier for each parcel within a shipment.","minimum":1},"width*":{"type":"integer","description":"The parcel's width measured in millimeters.","minimum":1},"length*":{"type":"integer","description":"The parcel's length measured in millimeters.","minimum":1},"height*":{"type":"integer","description":"The parcel's height measured in millimeters.","minimum":1},"actualWeight*":{"type":"integer","description":"Actual item weight in grams (g).","minimum":1,"maximum":2147483647}}}},"sender*":{"type":"object","description":"Information about the party sending the shipment.","properties":{"companyTin":{"type":"string","description":"The tax identification number or equivalent identifier (EDRPOU, TIN, NIP, IČO - for Slovakia) of a legal entity.","maxLength":20,"nullable":true},"companyName":{"type":"string","description":"The official name of the sender's company.","maxLength":100,"nullable":true},"eoriCode":{"type":"string","description":"The EORI code (Economic Operators Registration and Identification number).","minLength":3,"maxLength":17,"nullable":true},"phone*":{"type":"string","description":"The contact phone number of the sender or the sender’s company representative."},"email":{"type":"string","description":"Email address of the sender, providing an electronic means of contact for updates, inquiries, and important notifications about the shipment."},"name*":{"type":"string","description":"The full name of the individual sender or the primary contact person for a company sender.","maxLength":100},"ioss":{"type":"string","description":"The IOSS (Import One-Stop Shop) number is an optional input used to facilitate the VAT declaration process for shipments from non-EU countries with a declared value of up to EUR 150.","maxLength":12,"pattern":"/^[a-zA-Z0-9]*$/u"},"countryCode*":{"type":"string","description":"A two-letter code representing the sender's country, following the ISO 3166-1 Alpha-2 standard.","pattern":"^[A-Z]{2}$"},"divisionNumber":{"type":"string","description":"This field is mandatory for parcels that are dispatched from a post office division or parcel locker.","nullable":true},"divisionID":{"type":"integer","description":"Division ID for specific branch identification.","minimum":1,"nullable":true},"addressParts":{"type":"object","description":"This array of fields is required when shipping directly from an address.","properties":{"city":{"type":"string","description":"The name of the city from which the shipment is dispatched.","maxLength":100},"region":{"type":"string","description":"Specifies the broader administrative area, like a state or province, encompassing the city.","maxLength":100},"street":{"type":"string","description":"Identifies the specific street address for the sender's location.","maxLength":100},"postCode":{"type":"string","description":"The postal or ZIP code corresponding to the sender's address.","maxLength":10},"building":{"type":"string","description":"The building number or name at the specified street address.","maxLength":100},"flat":{"type":"string","description":"If applicable, the apartment or suite number within a building from which the shipment originates.","maxLength":10},"block":{"type":"string","description":"Indicates a specific block or section within a larger residential area or complex.","maxLength":100,"nullable":true},"note":{"type":"string","description":"Allows for the inclusion of additional details or instructions about the sender's address that might facilitate the pickup process.","maxLength":100}}}}},"recipient*":{"type":"object","description":"Information about the party receiving the shipment.","properties":{"companyTin":{"type":"string","description":"The tax identification number or equivalent identifier (EDRPOU, TIN, NIP, IČO - for Slovakia) of a legal entity.","maxLength":20,"nullable":true},"companyName":{"type":"string","description":"The formal name of the recipient's company.","maxLength":100,"nullable":true},"eoriCode":{"type":"string","description":"The recipient's EORI code is important for customs clearance when shipping goods to European Union countries.","minLength":3,"maxLength":17,"nullable":true},"phone*":{"type":"string","description":"The contact phone number of the recipient or the recipient’s company representative."},"email":{"type":"string","description":"The email address of the recipient."},"name*":{"type":"string","description":"The complete name of the individual recipient or the primary contact for a company recipient.","maxLength":100},"countryCode*":{"type":"string","description":"A two-letter code that identifies the recipient's country, adhering to the ISO 3166-1 Alpha-2 standard.","pattern":"^[A-Z]{2}$"},"divisionNumber":{"type":"string","description":"This field is mandatory for parcels intended to be collected from a post office division or parcel locker.","nullable":true},"divisionID":{"type":"integer","description":"Division ID for specific branch identification.","minimum":1,"nullable":true},"addressParts":{"type":"object","description":"This array of fields is necessary when the shipment is directed to a specific address.","properties":{"city":{"type":"string","description":"The city to which the shipment is being delivered.","maxLength":100},"region":{"type":"string","description":"Specifies the recipient's state or province within the destination country.","maxLength":100},"street":{"type":"string","description":"The street name of the recipient's address.","maxLength":100},"postCode":{"type":"string","description":"The postal or ZIP code for the recipient's address.","maxLength":10},"building":{"type":"string","description":"Specifies the building number or name at the recipient's address.","maxLength":100},"flat":{"type":"string","description":"The apartment or suite number, if the delivery is to a multi-unit building.","maxLength":10},"block":{"type":"string","description":"Identifies a block or section within a larger complex or residential area for the recipient.","maxLength":100,"nullable":true},"note":{"type":"string","description":"The space for any additional recipient-related address instructions or details that might assist in the delivery process.","maxLength":100}}},"registrationAddressRecipient":{"type":"object","description":"The registrationAddressRecipient object provides a detailed breakdown of the recipient's registered address.","properties":{"city":{"type":"string","description":"The name of the city where the recipient is registered.","maxLength":100},"street":{"type":"string","description":"The name of the street in the recipient's address.","maxLength":100},"zipCode":{"type":"string","description":"The postal code of the recipient's registered address.","maxLength":10},"building":{"type":"string","description":"The building number or name where the recipient is registered.","maxLength":100},"apartment":{"type":"string","description":"The flat or apartment number within the building.","maxLength":10},"state":{"type":"string","description":"The state or region where the recipient is registered.","maxLength":100}}}}}}}}}},"responses":{"201":{"description":"Successfully created shipment.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"A unique identifier assigned to each shipment, facilitating internal operations such as modifications, system searches, and deletion of shipments. The `id` serves as a key reference for administrative and logistical processes within the delivery system, allowing precise access and management of shipment records.","minimum":1},"number":{"type":"string","description":"The transportation document number provided to clients for tracking purposes and accessing printed forms. It also facilitates shipment searches within the system, offering a customer-friendly way to monitor shipment progress. While `number` is used externally for tracking and documentation, it can also serve internal needs similar to `id` for identifying shipments in certain system operations.","pattern":"^[A-Z]{4}\\d{10}$"},"scheduledDeliveryDate":{"type":"string","format":"date-time","description":"Estimated delivery date based on routing and service level, subject to change based on logistics and external factors. Date in ISO 8601 format.","nullable":true},"status":{"type":"string","description":"Current status of the shipment. Initially set to `ReadyToShip` upon creation, indicating it's prepared for dispatch."},"cost":{"type":"number","format":"float","description":"Total cost calculated for the delivery services provided, based on shipment size, weight, destination, and service options selected."},"parcelsAmount":{"type":"integer","description":"The total number of parcels included in the shipment. This count helps in logistics planning and tracking.","minimum":1},"createdAt":{"type":"string","format":"date-time","description":"The date-time when the shipment record was created in the system. Date in ISO 8601 format."},"updatedAt":{"type":"string","format":"date-time","description":"The last date-time when the shipment record was updated. Helps in tracking changes and updates made to the shipment details.Date in ISO 8601 format."},"deletedAt":{"type":"string","format":"date-time","description":"The date-time when the shipment was canceled or removed from the system. If not canceled, this field is `null`.","nullable":true}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/Validation"},"503":{"$ref":"#/components/responses/Time-out"}},"summary":"Create Shipment"}}}}
```


# Shipments from EU to UA

## Shipment creation example from EU to Ukraine (EU-UA)

> Shipment creation example from EU to Ukraine (EU-UA)

```json
{"openapi":"3.0.3","info":{"title":"Shipment Create Example EU-UA","version":"1.0.0"},"paths":{"/shipments":{"post":{"summary":"Shipment creation example from EU to Ukraine (EU-UA)","description":"Shipment creation example from EU to Ukraine (EU-UA)","operationId":"createShipmentEuUa","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShipmentCreateRequest"}}}},"responses":{"200":{"description":"Successful shipment creation response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}}},"components":{"schemas":{"ShipmentCreateRequest":{"type":"object","additionalProperties":true}}}}
```


# Shipments from UA to UA


# Shipments from US to UA


# Shipments from EU to EU

## Shipment creation example within EU (EU-EU)

> Shipment creation example within EU (EU-EU)

```json
{"openapi":"3.0.3","info":{"title":"Shipment Create Example EU-EU","version":"1.0.0"},"paths":{"/shipments":{"post":{"summary":"Shipment creation example within EU (EU-EU)","description":"Shipment creation example within EU (EU-EU)","operationId":"createShipmentEuEu","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShipmentCreateRequest"}}}},"responses":{"200":{"description":"Successful shipment creation response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}}},"components":{"schemas":{"ShipmentCreateRequest":{"type":"object","additionalProperties":true}}}}
```


# Return

This section contains descriptions of Light Return methods for international shipments within Europe and cross-border shipments from Ukraine to Europe. These methods allow customers to create return shipments after the original shipment has been delivered.


# Light Return for international shipments within Europe

## Create Light Return Shipment

> Creates a return shipment after the original order has been delivered.\
> This method allows customers to create a return shipment after delivery — regardless of who handled the last mile (Nova Post or a partner).\
> \
> Supported shipment direction:\
> \- Europe → Europe (including Moldova → Romania)\
> \
> ℹ️ \*\*Information:\*\* \</br>\
> To allow this request to work, the account manager must enable the LightReturn setting on the legal entity in the internal Nova Post system.\</br>\
> Once this setting is activated, the request will function via API on new delivered shipments.\
> The return can be created only if the parent shipment has the \*\*Delivered\*\* status and includes the \*\*AllowedLightReturn\*\* service. \</br>\
> The current status of a shipment can be found in the \`"items" → "statusCode"\` field of the \[Find documents]\(<https://api-portal.novapost.com/metodi-1/methods/shipments#get-shipments>) method.\</br>\
> \*\*AllowedLightReturn\*\* defines the number of days within which the recipient can initiate a return after the delivery.\
> Internally, the system verifies several conditions before allowing a Light Return shipment to be created:\
> \- The parent shipment status must be one of: \`Issued (9, 10, 11, 106)\`.\
> \- The system calculates the allowed return period using the following logic: \</br>\
> &#x20; \`finalDate = toTZ(parentShipment.RecipientDateTime) + returnDays + 1 day\`\</br>\
> &#x20; where returnDays is taken from the AllowedLightReturn service, and toTZ applies the relevant system time zone (e.g., EU region).\
> \- The return can be created only if the current time (nowTZ) is earlier than finalDate.\
> \- The system also checks that no Light Return has already been created for the same parent shipment.\
> \
> If all these conditions are met, the return creation request is accepted; otherwise, the system responds with a validation error indicating why the return is not permitted.\
> \
> \*\*How the Light Return Shipment works (Europe → Europe)\*\*\
> \- The request must include one required parameter — \`number\` (the parent shipment number). All other parameters are optional.\
> \- If optional parameters are not specified, their values are automatically inherited from the parent shipment whenever possible.\
> \- The customer can hand over the return shipment at a Nova Post branch or use courier pickup.\
> \- If the parent delivery was made to a parcel locker, PUDO, or an address, the nearest available Nova Post branch is selected automatically.\
> \- Customers may specify a valid branch directly in the request.\
> \- Parcel lockers and PUDO cannot be used as return handover locations.\
> \
> When the return is created, the system automatically generates a return waybill.\</br>\
> For more information on printing the return label, see \[Print Shipment Documents]\(<https://api-portal.novapost.com/metodi-1/methods/shipments/print-documents#get-shipments-print).\\></br>\
> For more information on creating a parent shipment, see \[Create documents]\(<https://api-portal.novapost.com/metodi-1/methods/shipments/create-shipments>).<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Shipments"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}}},"paths":{"/shipments/light-return":{"post":{"tags":["Shipments"],"summary":"Create Light Return Shipment","description":"Creates a return shipment after the original order has been delivered.\nThis method allows customers to create a return shipment after delivery — regardless of who handled the last mile (Nova Post or a partner).\n\nSupported shipment direction:\n- Europe → Europe (including Moldova → Romania)\n\nℹ️ **Information:** </br>\nTo allow this request to work, the account manager must enable the LightReturn setting on the legal entity in the internal Nova Post system.</br>\nOnce this setting is activated, the request will function via API on new delivered shipments.\nThe return can be created only if the parent shipment has the **Delivered** status and includes the **AllowedLightReturn** service. </br>\nThe current status of a shipment can be found in the `\"items\" → \"statusCode\"` field of the [Find documents](https://api-portal.novapost.com/metodi-1/methods/shipments#get-shipments) method.</br>\n**AllowedLightReturn** defines the number of days within which the recipient can initiate a return after the delivery.\nInternally, the system verifies several conditions before allowing a Light Return shipment to be created:\n- The parent shipment status must be one of: `Issued (9, 10, 11, 106)`.\n- The system calculates the allowed return period using the following logic: </br>\n  `finalDate = toTZ(parentShipment.RecipientDateTime) + returnDays + 1 day`</br>\n  where returnDays is taken from the AllowedLightReturn service, and toTZ applies the relevant system time zone (e.g., EU region).\n- The return can be created only if the current time (nowTZ) is earlier than finalDate.\n- The system also checks that no Light Return has already been created for the same parent shipment.\n\nIf all these conditions are met, the return creation request is accepted; otherwise, the system responds with a validation error indicating why the return is not permitted.\n\n**How the Light Return Shipment works (Europe → Europe)**\n- The request must include one required parameter — `number` (the parent shipment number). All other parameters are optional.\n- If optional parameters are not specified, their values are automatically inherited from the parent shipment whenever possible.\n- The customer can hand over the return shipment at a Nova Post branch or use courier pickup.\n- If the parent delivery was made to a parcel locker, PUDO, or an address, the nearest available Nova Post branch is selected automatically.\n- Customers may specify a valid branch directly in the request.\n- Parcel lockers and PUDO cannot be used as return handover locations.\n\nWhen the return is created, the system automatically generates a return waybill.</br>\nFor more information on printing the return label, see [Print Shipment Documents](https://api-portal.novapost.com/metodi-1/methods/shipments/print-documents#get-shipments-print).</br>\nFor more information on creating a parent shipment, see [Create documents](https://api-portal.novapost.com/metodi-1/methods/shipments/create-shipments).\n","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["number"],"properties":{"number":{"type":"string","description":"The number of the **parent shipment** for which the return is initiated.\n\nThis parameter is mandatory to create a return.\n"},"divisionId":{"type":"string","description":"Identifier of the division that will process the return.\n\n🔹Legacy field. Use `sender.divisionId` instead.\n\n**🔹This field is optional.**\n"},"sender":{"type":"object","description":"Sender information for the return shipment.","properties":{"divisionId":{"type":"string","description":"Identifier of the Nova Post branch in Ukraine where the return shipment will be handed over."},"senderPhone":{"type":"string","description":"Phone number of the sender for the return shipment.\n"},"addressParts":{"type":"object","description":"Structure describing the courier pickup address.\n\n🔹Used if `divisionId` is not provided.\n","properties":{"countryCode":{"type":"string","description":"Country code according to ISO 3166-1 alpha-2."},"city":{"type":"string","description":"City name of the pickup address."},"region":{"type":"string","description":"Region or administrative area of the address."},"street":{"type":"string","description":"Street name of the pickup address."},"postCode":{"type":"string","description":"Postal code of the pickup address."},"building":{"type":"string","description":"Building number of the pickup address."},"flat":{"type":"string","description":"Apartment or office number at the specified address."},"block":{"type":"string","description":"Block or section information for the address, if applicable."},"note":{"type":"string","description":"Additional details or notes for the address (e.g., entrance, floor, or courier instructions)."}}}}},"recipient":{"type":"object","description":"Recipient information for the return shipment.","properties":{"divisionId":{"type":"string","description":"Identifier of the Nova Post branch where the return shipment will be delivered."},"addressParts":{"type":"object","description":"Structure describing the delivery address.\n\n🔹Used if `divisionId` is not provided.\n","properties":{"countryCode":{"type":"string","description":"Country code according to ISO 3166-1 alpha-2."},"city":{"type":"string","description":"City name of the delivery address."},"region":{"type":"string","description":"Region or administrative area of the address."},"street":{"type":"string","description":"Street name of the delivery address."},"postCode":{"type":"string","description":"Postal code of the delivery address."},"building":{"type":"string","description":"Building number of the delivery address."},"flat":{"type":"string","description":"Apartment or office number at the specified address."},"block":{"type":"string","description":"Block or section information for the address, if applicable."},"note":{"type":"string","description":"Additional details or notes for the address (e.g., entrance, floor, or delivery instructions)."}}}}},"invoice":{"type":"object","description":"This object presents the necessary data for customs authorities to process the consignment efficiently, including the assessment of duties and taxes, and to confirm adherence to import/export regulations. The structured format of the invoice ensures that all pertinent information is easily accessible and clear, facilitating a smoother transit across borders.\n","properties":{"customerNumber":{"type":"string","description":"Unique invoice identifier provided by the client, corresponding to the goods being shipped.","maxLength":50,"nullable":true},"incoterm":{"type":"string","description":"Specifies the trade terms based on Incoterms® (e.g., DAP). Required for cross-border shipments.","enum":["DAP"]},"exportReason":{"type":"string","description":"Reason for export (ForPersonalPurposes, Selling, Repair, Return, Other).","enum":["ForPersonalPurposes","Selling","Repair","Return","Other"]},"cost":{"type":"number","description":"Total declared invoice value in the original currency, which must equal the sum of all invoice items calculated as **(amount × cost)** for each item.","minimum":1,"maximum":9999999.99},"currency":{"type":"string","description":"ISO 4217 currency code of the invoice. All items in the invoice must use the same currency.","pattern":"^[A-Z]{3}$"},"items":{"type":"array","description":"Detailed list of goods being shipped, required for customs declaration.","items":{"type":"object","properties":{"hsCode":{"type":"string","description":"Harmonized System code for each item (8–10 digits)."},"name":{"type":"string","description":"Item name in the local language."},"nameEng":{"type":"string","description":"Item name in English."},"material":{"type":"string","description":"Primary material of the item."},"madeInCountryCode":{"type":"string","description":"Country of manufacture, ISO-3166 alpha-2."},"actualWeight":{"type":"integer","description":"Actual total weight of all units of the item in grams (g)."},"measurementCode":{"type":"string","description":"Unit of measurement (e.g., pcs, kg, m)."},"amount":{"type":"number","description":"The quantity of the item being shipped, necessary for inventory and customs documentation."},"cost":{"type":"number","description":"The value per single unit of the item in the sender's currency, important for insurance and customs valuation."},"costUsd":{"type":"number","description":"The item's value converted to US Dollars, facilitating consistent valuation in international transactions.\n\n**🔹This field is required for shipments crossing the EU border or going outside the EU.**\n","minimum":0,"maximum":9999999.99},"costEur":{"type":"number","description":"The item's value in Euros, providing a standardized currency evaluation for European trade operations.\n\n**🔹This field is required for shipments crossing the EU border or going outside the EU.**\n"}}}}}},"parcels":{"type":"array","description":"`Parcels` description block.\nEach object contains information about one parcel in the shipment.\n","items":{"type":"object","properties":{"cargoCategory":{"type":"string","enum":["parcel","documents","pallet"],"description":"Type of shipment (parcel or documents)."},"parcelDescription":{"type":"string","description":"Short description of parcel contents."},"insuranceCost":{"type":"number","format":"float","description":"Declared insurance value of the parcel."},"rowNumber":{"type":"integer","description":"Sequential identifier for each parcel in the shipment."},"width":{"type":"integer","description":"Parcel width in millimeters."},"length":{"type":"integer","description":"Parcel length in millimeters."},"height":{"type":"integer","description":"Parcel height in millimeters."},"actualWeight":{"type":"integer","description":"Actual total weight of all units of the item in grams (g)."}}}},"payerType":{"type":"string","description":"Specifies who pays for the return shipment.\n\n🔹If not specified, the default value is Recipient\n\n🔹Supported only for Europe → Europe Light Return shipments.\n","enum":["Recipient","Sender","ThirdPerson"]},"payerContractNumber":{"type":"string","description":"Contract number of the payer.\n\nRules:\n- Required when `payerType = ThirdPerson`.\n- Optional for `Sender` (not supported for `MD → RO`).\n- Optional for `Recipient` if the parent shipment used contract payment.\n"}}}}}},"responses":{"200":{"description":"Successfully created Light Return shipment.","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Unauthorized request — invalid or missing authentication token.","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"object","properties":{"errorMessage":{"type":"string"}}}}}}}},"403":{"description":"Parent shipment is missing the AllowedLightReturn parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"object","properties":{"errorMessage":{"type":"string"}}}}}}}},"404":{"description":"Parent shipment not found or status not allowed.","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"object","properties":{"errorMessage":{"type":"string"}}}}}}}},"422":{"description":"Parent shipment not found or status not allowed.","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"object","properties":{"errorMessage":{"type":"string"}}}}}}}},"503":{"description":"Service unavailable or request timeout.","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"object","properties":{"errorMessage":{"type":"string"}}}}}}}}}}}}}
```


# Light Return for cross-border shipments from Ukraine to Europe

## Create Light Return Shipment

> Creates a return after the original shipment has been delivered.\
> \
> ℹ️ \*\*Information:\*\* \</br>\
> To allow this request to work, the account manager must enable the LightReturn setting on the legal entity in the internal Nova Post system.\</br>\
> Once this setting is activated, the request will function via API on new delivered shipments.\
> The return can be created only if the parent shipment has the \*\*Delivered\*\* status and includes the \*\*AllowedLightReturn\*\* service. \</br>\
> The current status of a shipment can be found in the \`"items" → "statusCode"\` field of the \[Find documents]\(<https://api-portal.novapost.com/metodi-1/methods/shipments#get-shipments>) method.\</br>\
> \*\*AllowedLightReturn\*\* defines the number of days within which the recipient can initiate a return after the delivery.\
> Internally, the system verifies several conditions before allowing a Light Return shipment to be created:\
> \- The parent shipment status must be one of: \`Issued (9, 10, 11, 106)\`.\
> \- The system calculates the allowed return period using the following logic: \</br>\
> &#x20; \`finalDate = toTZ(parentShipment.RecipientDateTime) + returnDays + 1 day\`\</br>\
> &#x20; where returnDays is taken from the AllowedLightReturn service, and toTZ applies the relevant system time zone (e.g., EU region).\
> \- The return can be created only if the current time (nowTZ) is earlier than finalDate.\
> \- The system also checks that no Light Return has already been created for the same parent shipment.\
> \
> If all these conditions are met, the return creation request is accepted; otherwise, the system responds with a validation error indicating why the return is not permitted.\
> \
> \*\*How the Light Return Shipment works (Ukraine → Europe)\*\*\
> \
> \- The request must include one required parameter — \`number\` (the parent shipment number). All other parameters are optional.\
> \- Two return scenarios are supported:\
> &#x20; \- \*\*Full Return\*\* – only the \`number\` parameter is required. All shipment data is inherited from the parent shipment.\
> &#x20; \- \*\*Partial Return\*\* – additional shipment data (such as \`invoice\` and \`parcels\`) can be provided to return only selected goods or update parcel dimensions.\
> \- If optional parameters are not specified, their values are automatically inherited from the parent shipment whenever possible.\
> \- Only Nova Post branches are allowed as return handover locations.\
> \- If the parent delivery was made to an APM (parcel locker), PUDO, or an address, the nearest available Nova Post branch is selected automatically.\
> \- Customers may specify a valid \`divisionId\` directly in the request.\
> \- Courier pickup, APMs (parcel lockers), and PUDO cannot be used as return handover locations.\
> \
> \*\*Partial Return\*\*\
> \
> For Partial Returns:\
> \- All values in \`invoice.items\[]\` must exactly match the corresponding items from the parent shipment.\
> \- Creating new invoice items or modifying existing item values is not allowed.\
> \- The initiating client is responsible for ensuring consistency between \`amount\`, \`cost\`, and \`actualWeight\`.\
> \- To avoid validation errors, it is recommended to copy invoice data directly from the parent shipment.\
> \
> When the return is created, the system automatically generates a return waybill.\</br>\
> For more information on printing the return label, see \[Print Shipment Documents]\(<https://api-portal.novapost.com/metodi-1/methods/shipments/print-documents#get-shipments-print).\\></br>\
> For more information on creating a parent shipment, see \[Create documents]\(<https://api-portal.novapost.com/metodi-1/methods/shipments/create-shipments>).<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Shipments"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}}},"paths":{"/shipments/light-return":{"post":{"tags":["Shipments"],"summary":"Create Light Return Shipment","description":"Creates a return after the original shipment has been delivered.\n\nℹ️ **Information:** </br>\nTo allow this request to work, the account manager must enable the LightReturn setting on the legal entity in the internal Nova Post system.</br>\nOnce this setting is activated, the request will function via API on new delivered shipments.\nThe return can be created only if the parent shipment has the **Delivered** status and includes the **AllowedLightReturn** service. </br>\nThe current status of a shipment can be found in the `\"items\" → \"statusCode\"` field of the [Find documents](https://api-portal.novapost.com/metodi-1/methods/shipments#get-shipments) method.</br>\n**AllowedLightReturn** defines the number of days within which the recipient can initiate a return after the delivery.\nInternally, the system verifies several conditions before allowing a Light Return shipment to be created:\n- The parent shipment status must be one of: `Issued (9, 10, 11, 106)`.\n- The system calculates the allowed return period using the following logic: </br>\n  `finalDate = toTZ(parentShipment.RecipientDateTime) + returnDays + 1 day`</br>\n  where returnDays is taken from the AllowedLightReturn service, and toTZ applies the relevant system time zone (e.g., EU region).\n- The return can be created only if the current time (nowTZ) is earlier than finalDate.\n- The system also checks that no Light Return has already been created for the same parent shipment.\n\nIf all these conditions are met, the return creation request is accepted; otherwise, the system responds with a validation error indicating why the return is not permitted.\n\n**How the Light Return Shipment works (Ukraine → Europe)**\n\n- The request must include one required parameter — `number` (the parent shipment number). All other parameters are optional.\n- Two return scenarios are supported:\n  - **Full Return** – only the `number` parameter is required. All shipment data is inherited from the parent shipment.\n  - **Partial Return** – additional shipment data (such as `invoice` and `parcels`) can be provided to return only selected goods or update parcel dimensions.\n- If optional parameters are not specified, their values are automatically inherited from the parent shipment whenever possible.\n- Only Nova Post branches are allowed as return handover locations.\n- If the parent delivery was made to an APM (parcel locker), PUDO, or an address, the nearest available Nova Post branch is selected automatically.\n- Customers may specify a valid `divisionId` directly in the request.\n- Courier pickup, APMs (parcel lockers), and PUDO cannot be used as return handover locations.\n\n**Partial Return**\n\nFor Partial Returns:\n- All values in `invoice.items[]` must exactly match the corresponding items from the parent shipment.\n- Creating new invoice items or modifying existing item values is not allowed.\n- The initiating client is responsible for ensuring consistency between `amount`, `cost`, and `actualWeight`.\n- To avoid validation errors, it is recommended to copy invoice data directly from the parent shipment.\n\nWhen the return is created, the system automatically generates a return waybill.</br>\nFor more information on printing the return label, see [Print Shipment Documents](https://api-portal.novapost.com/metodi-1/methods/shipments/print-documents#get-shipments-print).</br>\nFor more information on creating a parent shipment, see [Create documents](https://api-portal.novapost.com/metodi-1/methods/shipments/create-shipments).\n","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["number"],"properties":{"number":{"type":"string","description":"The number of the **parent shipment** for which the return is initiated.\nThis parameter is mandatory to create a return.\n"},"divisionId":{"type":"string","description":"Identifier of the division that will process the return.\n\n**🔹This field is optional.**\n"},"sender":{"type":"object","description":"Sender information for the return shipment.","properties":{"divisionId":{"type":"string","description":"Identifier of the Nova Post branch in Ukraine where the return shipment will be handed over."},"senderPhone":{"type":"string","description":"Phone number of the sender for the return shipment.\n"},"addressParts":{"type":"object","description":"Structure describing the courier pickup address.\n\n🔹Used if `divisionId` is not provided.\n","properties":{"countryCode":{"type":"string","description":"Country code according to ISO 3166-1 alpha-2."},"city":{"type":"string","description":"City name of the pickup address."},"region":{"type":"string","description":"Region or administrative area of the address."},"street":{"type":"string","description":"Street name of the pickup address."},"postCode":{"type":"string","description":"Postal code of the pickup address."},"building":{"type":"string","description":"Building number of the pickup address."},"flat":{"type":"string","description":"Apartment or office number at the specified address."},"block":{"type":"string","description":"Block or section information for the address, if applicable."},"note":{"type":"string","description":"Additional details or notes for the address (e.g., entrance, floor, or courier instructions)."}}}}},"recipient":{"type":"object","description":"Recipient information for the return shipment.","properties":{"divisionId":{"type":"string","description":"Identifier of the Nova Post branch where the return shipment will be delivered."},"addressParts":{"type":"object","description":"Structure describing the delivery address.\n\n🔹Used if `divisionId` is not provided.\n","properties":{"countryCode":{"type":"string","description":"Country code according to ISO 3166-1 alpha-2."},"city":{"type":"string","description":"City name of the delivery address."},"region":{"type":"string","description":"Region or administrative area of the address."},"street":{"type":"string","description":"Street name of the delivery address."},"postCode":{"type":"string","description":"Postal code of the delivery address."},"building":{"type":"string","description":"Building number of the delivery address."},"flat":{"type":"string","description":"Apartment or office number at the specified address."},"block":{"type":"string","description":"Block or section information for the address, if applicable."},"note":{"type":"string","description":"Additional details or notes for the address (e.g., entrance, floor, or delivery instructions)."}}}}},"invoice":{"type":"object","description":"This object presents the necessary data for customs authorities to process the consignment efficiently, including the assessment of duties and taxes, and to confirm adherence to import/export regulations. The structured format of the invoice ensures that all pertinent information is easily accessible and clear, facilitating a smoother transit across borders.\n\n🔹For Partial Returns, all values in `invoice.items[]` must match the corresponding items from the parent shipment. Creating new items or modifying existing values is not allowed.\n","properties":{"incoterm":{"type":"string","description":"Specifies the trade terms based on Incoterms® (e.g., DAP). Required for cross-border shipments.","enum":["DAP"]},"currencyCode":{"type":"string","description":"ISO 4217 currency code of the invoice. All items in the invoice must use the same currency.","pattern":"^[A-Z]{3}$"},"exportReason":{"type":"string","description":"Reason for export (ForPersonalPurposes, Selling, Repair, Return, Other).","enum":["ForPersonalPurposes","Selling","Repair","Return","Other"]},"totalCost":{"type":"number","description":"Total declared invoice value in the original currency, which must equal the sum of all invoice items calculated as **(amount × cost)** for each item.","minimum":1,"maximum":9999999.99},"items":{"type":"array","description":"Detailed list of goods being shipped, required for customs declaration.\n\n🔹For Partial Returns, all item values must match the corresponding items from the parent shipment.\n","items":{"type":"object","properties":{"name":{"type":"string","description":"Item name in the local language."},"nameEng":{"type":"string","description":"Item name in English."},"measurementCode":{"type":"string","description":"Unit of measurement (e.g., pcs, kg, m)."},"hsCode":{"type":"string","description":"Harmonized System code for each item (8–10 digits)."},"amount":{"type":"number","description":"The quantity of the item being shipped, necessary for inventory and customs documentation.\n\nFor Partial Returns, the value must remain consistent with `cost` and `actualWeight`.\n"},"cost":{"type":"number","description":"The value per single unit of the item in the sender's currency, important for insurance and customs valuation.\n\nFor Partial Returns, the value must remain consistent with `amount` and `actualWeight`.\n"},"costUsd":{"type":"number","description":"The item's value converted to US Dollars, facilitating consistent valuation in international transactions.\n\n**🔹This field is required for shipments crossing the EU border or going outside the EU.**\n","minimum":0,"maximum":9999999.99},"costEur":{"type":"number","description":"The item's value in Euros, providing a standardized currency evaluation for European trade operations.\n\n**🔹This field is required for shipments crossing the EU border or going outside the EU.**\n"},"producerAndModel":{"type":"string","description":"The parameter represents the manufacturer and model of the device. Both values are included in a single parameter. This parameter is mandatory for the following categories:\n- Electrical appliances\n- Laptops\n- Phones\n- Large and small household appliances\n- Other similar items\n\n**🔸This field is not required; however, shipments with this field filled are given priority during customs clearance.**\n"}}}}}},"parcels":{"type":"array","description":"`Parcels` description block.\nEach object contains information about one parcel in the shipment.\n","items":{"type":"object","properties":{"cargoCategory":{"type":"string","enum":["parcel","documents","pallet"],"description":"Type of shipment (parcel or documents)."},"number":{"type":"string","description":"The number of the **parent shipment** for which the return is initiated.\n\nThis parameter is mandatory to create a return.\n"},"parcelDescription":{"type":"string","description":"Short description of parcel contents."},"insuranceCost":{"type":"number","format":"float","description":"Declared insurance value of the parcel."},"untied":{"type":"boolean","description":"Indicates whether the parcel is untied.\n\nA value of `false` indicates a standard parcel, while `true` indicates an untied parcel (unsecured cargo).\n"},"width":{"type":"integer","description":"Parcel width in millimeters."},"length":{"type":"integer","description":"Parcel length in millimeters."},"height":{"type":"integer","description":"Parcel height in millimeters."},"actualWeight":{"type":"integer","description":"Actual total weight of all units of the item in grams (g)."},"volumetricWeight":{"type":"integer","description":"Parcel volumetric weight in grams (g).\n\nRetrieved from the parent shipment for return shipments.\n"}}}}}}}}},"responses":{"200":{"description":"Successfully created Light Return shipment.","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Unauthorized request — invalid or missing authentication token.","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"object","properties":{"errorMessage":{"type":"string"}}}}}}}},"403":{"description":"Parent shipment is missing the AllowedLightReturn parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"object","properties":{"errorMessage":{"type":"string"}}}}}}}},"404":{"description":"Parent shipment not found or status not allowed.","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"object","properties":{"errorMessage":{"type":"string"}}}}}}}},"422":{"description":"Parent shipment not found or status not allowed.","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"object","properties":{"errorMessage":{"type":"string"}}}}}}}},"503":{"description":"Service unavailable or request timeout.","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"object","properties":{"errorMessage":{"type":"string"}}}}}}}}}}}}}
```


# Delivery cost

## Calculate delivery cost

> This API method allows you to calculate the estimated delivery cost and delivery time for your cargo.\
> The delivery cost and delivery time are calculated based on factors such as weight, dimensions, destination, and shipping method.\
> By providing the necessary details of your cargo and shipment, you can obtain an estimated cost for delivering the goods.\
> The response will typically include the calculated cost and the scheduled delivery date based on the provided information.\</br><br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Shipments"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}},"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Validation":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Time-out":{"description":"Connection time-out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}}},"paths":{"/shipments/calculations":{"post":{"tags":["Shipments"],"description":"This API method allows you to calculate the estimated delivery cost and delivery time for your cargo.\nThe delivery cost and delivery time are calculated based on factors such as weight, dimensions, destination, and shipping method.\nBy providing the necessary details of your cargo and shipment, you can obtain an estimated cost for delivering the goods.\nThe response will typically include the calculated cost and the scheduled delivery date based on the provided information.</br>\n","requestBody":{"description":"Optional description in *Markdown*","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"payerType":{"type":"string","description":"Identifies who is responsible for the payment of delivery services. The payer type determines which party bears the cost:\n- `Sender`: The party sending the goods pays for the delivery.\n- `Recipient`: The party receiving the goods is responsible for the delivery cost.\n- `ThirdPerson`: A third party pays for delivery.\n- For shipments within Europe or from Europe to Ukraine, the field `payerContractNumber` must be provided.\n- For shipments from Ukraine, `payerContractNumber` is not required.\n","enum":["Sender","Recipient","ThirdPerson"]},"payerContractNumber":{"type":"string","description":"Required when `payerType` is `ThirdPerson` for shipments within Europe or from Europe to Ukraine.\nSpecifies the contract number of the third-party payer (e.g., `CNPP-00001797`).\n"},"deliveryTypes":{"type":"array","items":{"type":"string"},"description":"Defines the list of tariff types to be used for shipment cost calculation.\nThe calculation response returns pricing results for each submitted delivery type.\n\n- `standard`: Standard international delivery tariff.\n- `economy`: Economy international delivery tariff.\n- `express`: Express international delivery tariff.\n\nIf the field is not provided, the applicable tariff is determined automatically according to current business rules, and the existing calculation behavior remains unchanged.\n\n**🔹This field is optional.**\n","enum":["standard","economy","express"]},"invoice":{"type":"object","description":"Information for calculating shipping costs and customs payments.","properties":{"incoterm":{"type":"string","description":"Type of tax calculation.\n- `DAP` – Delivered At Place\n- `DDP` – Delivered Duty Paid\n","enum":["DAP","DDP"]},"currency":{"type":"string","description":"Currency code in ISO 4217 format (e.g., USD, EUR, GBP)."},"cost":{"type":"number","description":"Total declared invoice value in the original currency, which must equal the sum of all invoice items calculated as **(amount × cost)** for each item.\nDeclared value of the shipment used for customs duty calculation.\nAlso indicates the maximum compensation in case of loss or damage.\nRequired if incoterm = `DDP`.\n","minimum":1},"payerFeesCustoms":{"type":"string","description":"Identifies who is responsible for the customs payments.\nDetermines which party bears the cost: `Sender`, `Recipient`, or `ThirdPerson`.\n","enum":["Sender","Recipient","ThirdPerson"]}}},"parcels":{"type":"array","description":"An array of parcel objects, each representing a distinct package within the shipment. This parameter is essential for calculating the delivery cost as it includes details about each parcel's dimensions, weight, and other specific attributes. Each object in this array provides the necessary information to accurately assess shipping fees based on the parcel's size, weight, and possibly the type of goods it contains, which may affect the shipping method and pricing.","items":{"type":"object","properties":{"cargoCategory":{"type":"string","description":"Specifies the type of the shipment, helping to categorize the goods for logistics and customs processing. The category impacts how the shipment is handled, its shipping cost, and the required documentation. Available categories are:\n- `parcel`: Small to medium-sized packages, typically for consumer goods and retail items.\n- `documents`: Postal shipments containing documents such as letters, contracts, and official papers. This category is specifically for items that weigh no more than 1 kg and have dimensions not exceeding 35 cm in length, 25 cm in width, and 2 cm in height.\n","enum":["parcel","documents","pallet"]},"insuranceCost":{"type":"number","format":"float","description":"Represents the declared value of the shipment for insurance coverage, in the currency of the sender's country. This value indicates the maximum compensation amount in the event of damage or loss during transit. Setting this value appropriately is crucial for ensuring adequate insurance protection. It is important to accurately declare this value to match the actual worth of the shipment contents, as underdeclaring can result in insufficient compensation.","minimum":0,"exclusiveMinimum":true},"rowNumber":{"type":"integer","description":"Sequential identifier for each parcel within a shipment, used to organize and track individual packages, especially when multiple items are involved. If the shipment contains only one package, the value should be 1.","minimum":1},"width":{"type":"integer","description":"The parcel's width measured in millimeters, used alongside length and height to compute the total volume for logistical planning.","minimum":1},"length":{"type":"integer","description":"The parcel's length measured in millimeters, used alongside height and width to compute the total volume for logistical planning.","minimum":1},"height":{"type":"integer","description":"The parcel's height measured in millimeters, used alongside length and width to compute the total volume for logistical planning.","minimum":1},"actualWeight":{"type":"integer","description":"Actual total weight of all units of the item in grams (g), critical for shipping cost calculations and compliance with carrier weight limits.\n\nExpected unit: grams (g)\n\nOnly precision up to 10 grams (0.01 kg) is supported. Values not divisible by 10 g will be rounded down to the nearest lower multiple of 10 g.\n\n⚠️IMPORTANT: Please round weight values to the nearest 10 g before sending, to avoid unexpected adjustments.\n","minimum":1,"maximum":2147483647},"volumetricWeight":{"type":"integer","description":"Calculated weight based on parcel dimensions, used for billing purposes where volume impacts cost more than actual weight. Represents the dimensional weight of the parcel.","minimum":0,"maximum":2147483647}}}},"sender":{"type":"object","description":"Contains essential information about the party sending the shipment. The information provided here is used to manage the shipment's origin details for logistics planning and affect the calculation of shipping costs based on the sender's location and applicable shipping regulations. If the payer is the Sender and the shipment is from a Legal entity, the parameters `companyTin` and `companyName` are used to apply the counterparty's individual discount. If there's no applicable discount or it doesn't need to be considered, these parameters can be left blank or removed from the request.","properties":{"companyTin":{"type":"string","description":"The tax identification number or equivalent identifier (EDRPOU, TIN, NIP, IČO) of a legal entity. \n\n🔹**Required for legal and customs documentation when the sender is a legal entity.**\n","maxLength":20,"nullable":true},"companyName":{"type":"string","description":"The official name of the sender's company. This field is used when the sender is a business entity, helping to identify the sending organization in documentation and records. Insert `Private person` if the sender is not a company.","maxLength":100,"nullable":true},"countryCode":{"type":"string","description":"A two-letter code representing the sender's country, following the ISO 3166-1 Alpha-2 standard, indicating the country of origin for the shipment.","pattern":"^[A-Z]{2}$"},"divisionNumber":{"type":"string","description":"Optional identifier used to specify the unique number of the post office division or parcel locker from which the shipment is dispatched. It is relevant when the shipment originates from a specific postal division. This field is interchangeable with 'divisionId', and providing one of these identifiers is sufficient when the shipment originates from a division. Leave this field null when shipping from a non-division-specific address.","nullable":true},"divisionId":{"type":"integer","description":"Optional identifier representing the unique code for the post office division from which the shipment originates. This identifier is crucial when the shipment needs specific division handling at the origin. It can be used alternatively to 'divisionNumber'; providing just one of these identifiers is enough for identifying the dispatch division. This field should be left null if the shipment is from a direct address that is not associated with a specific division.","nullable":true},"addressParts":{"type":"object","description":"This array of fields is required when shipping directly from an address, detailing the specific components of the location from which the parcel is dispatched. It includes detailed address information, ensuring the accurate identification of the pickup location.","properties":{"city":{"type":"string","description":"The name of the city from which the shipment is dispatched. It helps pinpoint the exact urban location for pickup or shipping.","maxLength":100},"region":{"type":"string","description":"Specifies the broader administrative area, like a state or province, encompassing the city, providing additional context for the shipment's origin.","maxLength":100},"street":{"type":"string","description":"Identifies the specific street address for the sender's location, crucial for accurate pickup or delivery operations.","maxLength":100},"postCode":{"type":"string","description":"The postal or ZIP code corresponding to the sender's address. It's essential for sorting and routing the shipment efficiently.","maxLength":10},"building":{"type":"string","description":"The building number or name at the specified street address, pinpointing the precise location for shipment collection.","maxLength":100},"flat":{"type":"string","description":"If applicable, the apartment or suite number within a building from which the shipment originates, ensuring pickup personnel can locate the sender's exact unit.","maxLength":10},"block":{"type":"string","description":"Indicates a specific block or section within a larger residential area or complex, if relevant, aiding in locating the sender's precise starting point for the shipment.","maxLength":100,"nullable":true},"note":{"type":"string","description":"Allows for the inclusion of additional details or instructions about the sender's address that might facilitate the pickup process, such as gate codes, specific entry points, or preferred contact times.","maxLength":100}}}}},"recipient":{"type":"object","description":"Information about the party receiving the shipment, detailing either an individual or an organization responsible for receiving the dispatched goods.","properties":{"countryCode":{"type":"string","description":"A two-letter code that identifies the recipient's country, adhering to the ISO 3166-1 Alpha-2 standard, which specifies the shipment's destination country.","pattern":"^[A-Z]{2}$"},"divisionNumber":{"type":"string","description":"Optional identifier used to specify the unique number of the post office division or parcel locker where the shipment is to be collected. It is relevant when the shipment is routed to a specific postal division. This field is interchangeable with 'divisionId', and providing one of these identifiers is sufficient when the shipment is destined for a division. This field should be left null when the shipment is directly addressed to a non-division-specific location.","nullable":true},"divisionId":{"type":"integer","description":"Optional identifier representing the unique code for the post office division where the shipment is to be delivered. Like `recipientDivisionNumber`, this identifier is crucial when the shipment involves specific division handling at the destination. It can be used alternatively to 'divisionNumber'; providing just one of these identifiers is enough for identifying the receiving division. This field should also be left null if the shipment is to a direct address not associated with a specific division.","nullable":true},"addressParts":{"type":"object","description":"This array of fields is necessary when the shipment is directed to a specific address, outlining the precise location details to which the parcel is to be delivered. It encompasses comprehensive address information to ensure the exact identification of the delivery location.","properties":{"city":{"type":"string","description":"The city to which the shipment is being delivered. This detail ensures the parcel is directed to the correct urban area for the recipient.","maxLength":100},"region":{"type":"string","description":"Specifies the recipient's state or province within the destination country, crucial for accurate shipment routing and delivery. When sending to the USA, it's essential to include a two-letter state code, such as `WA` for Washington or `DC` for the District of Columbia, according to the ISO 3166-2:US standard.","maxLength":100},"street":{"type":"string","description":"The street name of the recipient's address, vital for pinpointing the exact delivery spot.","maxLength":100},"postCode":{"type":"string","description":"The postal or ZIP code for the recipient's address, critical for the precise sorting and routing of the parcel to its final destination.","maxLength":10},"building":{"type":"string","description":"Specifies the building number or name at the recipient's address, guiding the delivery to the exact building within a given street.","maxLength":100},"flat":{"type":"string","description":"The apartment or suite number, if the delivery is to a multi-unit building, ensuring the parcel reaches the specific unit of the recipient.","maxLength":10},"block":{"type":"string","description":"Identifies a block or section within a larger complex or residential area for the recipient, useful in large housing developments to further narrow down the delivery point.","maxLength":100,"nullable":true},"note":{"type":"string","description":"The space for any additional recipient-related address instructions or details that might assist in the delivery process, such as security instructions, specific doors for delivery, or preferred delivery times.","maxLength":100}}}}}}}}}},"responses":{"200":{"description":"Successful cost calculation","content":{"application/json":{"schema":{"type":"object","properties":{"scheduledDeliveryDate":{"type":"string","format":"date-time","description":"Estimated delivery date based on routing and service level, subject to change based on logistics and external factors. Date in ISO 8601 format.","nullable":true},"sender":{"type":"object","description":"Provides the sender's basic geographical information as part of the shipment's origin details in the response. This object outlines the sender’s country and may include additional location identifiers like settlement and division IDs if available.","properties":{"countryCode":{"type":"string","description":"A two-letter code representing the sender's country, following the ISO 3166-1 Alpha-2 standard, indicating the country of origin for the shipment.","pattern":"^[A-Z]{2}$"},"settlementId":{"type":"integer","description":"Identifier for the settlement (town or city) from which the shipment originates, if 'divisionId' was specified. If the sender's home address was specified, this field will be null.","nullable":true},"divisionId":{"type":"integer","description":"Unique identifier for the sender's division from which the shipment originates, which was specified. If the sender's home address was specified, this field will be null.","nullable":true}}},"recipient":{"type":"object","description":"Provides the recipient's basic geographical information as part of the shipment's delivery details in the response. This object outlines the recipient’s country and may include additional location identifiers like settlement and division IDs if available.","properties":{"countryCode":{"type":"string","description":"A two-letter code representing the recipient's country, following the ISO 3166-1 Alpha-2 standard, indicating the destination country of the shipment.","pattern":"^[A-Z]{2}$"},"settlementId":{"type":"integer","description":"Identifier for the settlement (town or city) to which the shipment is being sent if 'divisionId' was specified. If the recipient's home address was specified, this field will be null.","nullable":true},"divisionId":{"type":"integer","description":"Unique identifier for the recipient's division or branch, which was specified. If the recipient's home address was specified, this field will be null.","nullable":true}}},"services":{"type":"array","description":"A collection of services associated with the shipment, each entry detailing specific services applied or requested for the shipment. This objects encompasses various service details such as type of service, amount, and contractual details, along with any additional parameters that specify further service-related requirements or conditions.","items":{"type":"object","properties":{"shipmentId":{"type":"integer","description":"Unique identifier for the shipment that this service is part of. It helps in linking the service to the specific shipment within the system. This field may be null or zero if the service is being pre-configured or if the shipment has not yet been created or assigned in the system.","nullable":true},"shipmentParcelRowNumber":{"type":"string","description":"Identifies the parcel within a shipment to which the service is applied, helping in organizing and managing multiple parcels under a single shipment.","nullable":true},"serviceId":{"type":"string","description":"A unique identifier assigned to the specific service being described, essential for service tracking and management."},"serviceType":{"type":"string","description":"Service type.</br>\n**🔹This field is optional.**\n"},"serviceName":{"type":"string","description":"Service name.</br>\n**🔹This field is optional.**\n"},"serviceCode":{"type":"string","description":"Service code.</br>\n**🔹This field is optional.**\n"},"amount":{"type":"number","description":"Represents the total quantity of items or units included in this particular service.","minimum":0},"contractNumber":{"type":"string","description":"If applicable, the contract number under which the service is rendered. This is often used in B2B or B2C contexts where services are governed by specific contractual agreements.","minLength":2,"maxLength":20,"nullable":true},"payer_type":{"type":"string","description":"Indicates who is responsible for paying for the service. Typical values include 'Sender', 'Recipient', or 'Third Party'."},"paymentStatus":{"type":"string","description":"Payment status for the delivery services (e.g. 'Paid', 'NeedPay', 'ContractAfterPayment', 'FreeOfCharge', 'Holded')."},"divisionId":{"type":"string","description":"Unique identifier for the division or branch, if applicable.","nullable":true},"price":{"type":"number","description":"The cost associated with the service before any discounts.","minimum":0},"discount":{"type":"number","description":"Any discount applied to the service, reducing the overall cost.","minimum":0},"cost":{"type":"number","format":"float","description":"The total cost of the service after applying discounts.","minimum":0},"user":{"type":"string","description":"Specifies the type of user interacting with the service. For internal use.","maxLength":50},"shipmentLockVersion":{"type":"integer","description":"Version of the shipment data for concurrency control."},"additional_parameters":{"type":"object","description":"This object holds a variety of supplementary details  that provide critical information for ensuring accurate processing and delivery of the shipment.","properties":{"cod":{"type":"number","description":"Cash on delivery amount, if applicable. This specifies the amount to be collected upon delivery, which is crucial for transactions requiring payment at the time of delivery.","nullable":true},"date":{"type":"integer","description":"The estimated date of delivery, calculated based on the logistics and routing information. If the route's delivery date cannot be calculated due to insufficient data in the chosen direction, this field may hold a zero value.","nullable":true},"from":{"type":"integer","description":"Represents the estimated start time of the delivery window. This field can be zero if there is not enough information to determine a starting time for the delivery.","nullable":true},"to":{"type":"integer","description":"Represents the estimated end time of the delivery window. Similar to the 'from' parameter, this field can also be zero if there is insufficient data to define an ending time for delivery.","nullable":true},"string":{"type":"integer","description":"Represents the cargo category as specified in the cargoCategory parameter. This can include values such as 'Parcel', 'Documents', 'Cargo', or 'Pallet' reflecting the type of items being shipped.","nullable":true},"fullName":{"type":"integer","description":"The full name of the recipient. This is used to ensure that the delivery is addressed to the correct individual, essential for verification upon delivery.","nullable":true},"phone":{"type":"integer","description":"The contact phone number of the recipient or the recipient’s company representative. Used for delivery notifications and communication with the customer during shipment processing.\n\n**Format:** The phone number must be provided in **international format** according to the **E.164** standard.\n\nExample: 380XXXXXXXXX, 491234567890, 371XXXXXXXX\n\n**Restrictions:**\n- For deliveries to Nova Post branches in Europe, Ukrainian mobile numbers are acceptable.\n- For deliveries to **partner locations** (such as InPost, GLS, Venipak, Cargus, etc.) and **cross-border address deliveries**, the phone number must belong to a mobile operator in the recipient's country. If the phone number is submitted in a local (non-international) format, the system will attempt to **normalize** it to the international format, but the internal algorithm does not cover all possible cases. If your system does not support front-end validation of phone numbers, we recommend informing us about failed phone number cases so we can assess potential improvements to the normalization logic.\n","nullable":true}}},"createdAt":{"type":"string","format":"date-time","description":"The date-time indicating when the record was initially created, formatted in ISO 8601 standard."},"updatedAt":{"type":"string","format":"date-time","description":"The date-time indicating the last update made to the record, formatted in ISO 8601 standard."},"deliveryType":{"type":"string","description":"Unique identifier (UUID) of the delivery tariff type used in the calculation result.\nThis value corresponds to the internal reference of the selected tariff.\n"},"deliveryTypeName":{"type":"string","description":"Code of the delivery tariff type applied to the calculation result.\n- `standard`: Standard international delivery tariff.\n- `economy`: Economy international delivery tariff.\n- `express`: Express international delivery tariff.\n"}}}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/Validation"},"503":{"$ref":"#/components/responses/Time-out"}},"summary":"Calculate delivery cost"}}}}
```


# Verification status of UA→World

## Get Verification status of UA→World shipments

> Returns verification statuses for international shipments for the UA→World direction (“international shipment from Ukraine to World”).\
> Responses and errors from the core system are proxied unchanged.\</br><br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Shipments"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}},"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Time-out":{"description":"Connection time-out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}}},"paths":{"/shipments/international/status":{"get":{"tags":["Shipments"],"summary":"Get Verification status of UA→World shipments","description":"Returns verification statuses for international shipments for the UA→World direction (“international shipment from Ukraine to World”).\nResponses and errors from the core system are proxied unchanged.</br>\n","parameters":[{"in":"query","name":"refs[]","required":true,"description":"Array of shipment references. Must not be empty. Pass as repeated query parameters. \nRaw query example: </br>\nrefs[]=`38e4fe97-9484-11f0-903f-005056bd9e02`'\n","schema":{"type":"array","items":{"type":"string"}},"style":"form","explode":true},{"in":"query","name":"state","required":true,"description":"Verification state filter. Allowed values are Order Closed allOrders.","schema":{"type":"string","enum":["Order","Closed","allOrders"]}}],"responses":{"200":{"description":"Verification status list","content":{"application/json":{"schema":{"type":"object","properties":{"jsonrpc":{"type":"string"},"result":{"type":"array","items":{"type":"object","properties":{"Ref":{"type":"string"},"State":{"type":"string","description":"e.g. NotVerified Verified Rejected"},"Date":{"type":"string","format":"date-time"},"StatusOfInternationalExpressWaybill":{"type":"string","description":"Human-readable verification status"},"Note":{"type":"string"},"ClosedDate":{"type":"string","format":"date-time"}}}},"id":{"oneOf":[{"type":"string"},{"type":"integer"}]}}}}}},"400":{"description":"Invalid request parameters","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"503":{"$ref":"#/components/responses/Time-out"}}}}}}
```


# Uploads file

## Shipments uploads file

> Uploads supporting documents to a specific shipment by its ID.\
> This method is used for attaching invoices, product specifications, customs declarations, or other shipment-related documents required for processing and clearance.\
> Files are stored and linked to the shipment, ensuring better traceability and compliance.\
> \
> ⚠️ Region restriction:\</br>\
> This method is available only for European shipments (EU/EU and EU/UA directions).\</br>\
> It is not available for shipments originating from Ukraine.\
> \
> File naming:\
> • If the "fileName" parameter is provided, the uploaded file will be stored with that name.\
> • If "fileName" is not provided, the default file name will be set to "invoice".\
> \
> Use cases:\
> 1\) "I want to upload a client invoice in PDF to shipment 980911" - send the base64-encoded content in "file", set \`"fileName": "invoice.pdf"\`.\
> 2\) "I want to attach a product photo in JPEG" - encode the photo in base64, set \`"fileName": "product-photo.jpeg"\`.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Shipments"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}},"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Validation":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Time-out":{"description":"Connection time-out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}}},"paths":{"/shipments/attachments/uploads/{id}":{"post":{"tags":["Shipments"],"description":"Uploads supporting documents to a specific shipment by its ID.\nThis method is used for attaching invoices, product specifications, customs declarations, or other shipment-related documents required for processing and clearance.\nFiles are stored and linked to the shipment, ensuring better traceability and compliance.\n\n⚠️ Region restriction:</br>\nThis method is available only for European shipments (EU/EU and EU/UA directions).</br>\nIt is not available for shipments originating from Ukraine.\n\nFile naming:\n• If the \"fileName\" parameter is provided, the uploaded file will be stored with that name.\n• If \"fileName\" is not provided, the default file name will be set to \"invoice\".\n\nUse cases:\n1) \"I want to upload a client invoice in PDF to shipment 980911\" - send the base64-encoded content in \"file\", set `\"fileName\": \"invoice.pdf\"`.\n2) \"I want to attach a product photo in JPEG\" - encode the photo in base64, set `\"fileName\": \"product-photo.jpeg\"`.\n","parameters":[{"name":"id","in":"path","description":"Unique identifier of the shipment to which the files are attached.</br>\nThis value represents the `shipmentId` of the European system.</br>\nUsing a Ukrainian shipment number will result in a validation error.\n","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":{"description":"JSON body containing the base64-encoded file and optional file name.","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"file":{"type":"string","description":"Base64-encoded document file (PDF, JPEG, or other supported formats)."},"fileName":{"type":"string","description":"Optional file name. Defaults to \"invoice\" if not provided."}}}}}},"responses":{"201":{"description":"File upload result","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"Indicates whether the file upload was successful."}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/Validation"},"503":{"$ref":"#/components/responses/Time-out"}},"summary":"Shipments uploads file"}}}}
```


# Print documents

## Print Shipment Documents

> This API method allows you to retrieve a transportation document marking in PDF format by providing the document number. \
> The document marking is a printable document that clients can attach or affix to their cargo when sending it. \
> By specifying the document number in the request, you can generate a PDF file containing the document marking for easy printing.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Shipments"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}},"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Validation":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Time-out":{"description":"Connection time-out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}}},"paths":{"/shipments/print":{"get":{"tags":["Shipments"],"description":"This API method allows you to retrieve a transportation document marking in PDF format by providing the document number. \nThe document marking is a printable document that clients can attach or affix to their cargo when sending it. \nBy specifying the document number in the request, you can generate a PDF file containing the document marking for easy printing.\n","parameters":[{"in":"query","name":"numbers[]","description":"Shipment numbers. Can accept either a single number or an array of numbers. When `type=marking` is used, only one number is allowed per request.","schema":{"type":"string"}},{"in":"query","name":"type","description":"Type of document to be printed.\n- `marking`: for shipment marking labels (`100x100`, `100x150`, or other formats depending on the shipment)\n- `international`: for customs declaration/invoice\n- `invoice`: for commercial invoice\n","schema":{"type":"array","enum":["marking","international","invoice"]}},{"in":"query","name":"printSizeType","required":false,"description":"Selection of document size.\n\nFor `type=marking`, this parameter defines the marking print request type, but does not guarantee the final physical PDF format returned by the service. \n\nThe final label format is determined automatically according to the created shipment. \n\nIf not provided: \n- `type=marking` uses the internal marking print logic; \n- `type=international` and `type=invoice` use `size_A4` by default. \n\nBackward compatibility for `100_100` and `size_100_100` values is preserved.\n","schema":{"type":"array"}},{"in":"query","name":"deliveryType","description":"Type of delivery flow for marking document printing. Applicable only for `type=marking`.\n- `Pickup`: first mile\n- `Shipment`: last mile\n","required":false,"schema":{"type":"string","enum":["Pickup","Shipment"]}}],"responses":{"200":{"description":"A PDF file.","content":{"application/pdf":{"schema":{"type":"string","format":"binary"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/Validation"},"503":{"$ref":"#/components/responses/Time-out"}},"summary":"Print Shipment Documents"}}}}
```


# Marking labels

## Print Shipment Documents

> This API method allows you to retrieve a shipment marking label in PDF format by providing the document number.\
> The shipment marking label is a printable document that clients can attach or affix to their cargo when sending it.\
> By specifying the document number in the request, you can generate a PDF file containing the shipment marking label for easy printing.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Shipments"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}},"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Validation":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Time-out":{"description":"Connection time-out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}}},"paths":{"/shipments/print":{"get":{"tags":["Shipments"],"description":"This API method allows you to retrieve a shipment marking label in PDF format by providing the document number.\nThe shipment marking label is a printable document that clients can attach or affix to their cargo when sending it.\nBy specifying the document number in the request, you can generate a PDF file containing the shipment marking label for easy printing.\n","parameters":[{"in":"query","name":"numbers[]","description":"Shipment numbers. Can accept either a single number or an array of numbers. When `type=marking` is used, only one number is allowed per request.","schema":{"type":"string"}},{"in":"query","name":"type","description":"Type of document to be printed.\n\n- `marking`: for shipment marking labels (`100x100`, `100x150`, or other formats depending on the shipment)\n","schema":{"type":"array","items":{"type":"string","enum":["marking"]}}},{"in":"query","name":"printSizeType","required":false,"description":"Selection of document size.\n\nFor `type=marking`, this parameter defines the marking print request type, but does not guarantee the final physical PDF format returned by the service. \n\nThe final label format is determined automatically according to the created shipment. \n\nIf not provided: \n- `type=marking` uses the internal marking print logic. \n\nBackward compatibility for `100_100` and `size_100_100` values is preserved.\n","schema":{"type":"array","items":{"type":"string","enum":["size_100_100"]}}},{"in":"query","name":"deliveryType","description":"Type of delivery flow for marking document printing. Applicable only for `type=marking`.\n\n- `Pickup`: first mile\n- `Shipment`: last mile\n","required":false,"schema":{"type":"string","enum":["Pickup","Shipment"]}}],"responses":{"200":{"description":"A PDF file.","content":{"application/pdf":{"schema":{"type":"string","format":"binary"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/Validation"},"503":{"$ref":"#/components/responses/Time-out"}},"summary":"Print Shipment Documents"}}}}
```


# Invoice

## Print Shipment Documents

> This API method allows you to retrieve a transportation document in PDF format by providing the document number.\
> Depending on the selected document type, the generated PDF may contain a customs declaration, commercial invoice, or another transportation-related document.\
> By specifying the document number in the request, you can generate a PDF file containing the requested document for viewing, printing, or further processing.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Shipments"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}},"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Validation":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Time-out":{"description":"Connection time-out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}}},"paths":{"/shipments/print":{"get":{"tags":["Shipments"],"description":"This API method allows you to retrieve a transportation document in PDF format by providing the document number.\nDepending on the selected document type, the generated PDF may contain a customs declaration, commercial invoice, or another transportation-related document.\nBy specifying the document number in the request, you can generate a PDF file containing the requested document for viewing, printing, or further processing.\n","parameters":[{"in":"query","name":"numbers[]","description":"Shipment numbers. Can accept either a single number or an array of numbers.","schema":{"type":"string"}},{"in":"query","name":"type","description":"Type of document to be printed.\n\n- `international`: for customs declaration/invoice\n- `invoice`: for commercial invoice\n","schema":{"type":"array","items":{"type":"string","enum":["international","invoice"]}}},{"in":"query","name":"printSizeType","required":false,"description":"Selection of document size.\n\nIf not provided: \n- `type=international` and `type=invoice` use `size_A4` by default. \n","schema":{"type":"array","items":{"type":"string","enum":["size_A4"]}}}],"responses":{"200":{"description":"A PDF file.","content":{"application/pdf":{"schema":{"type":"string","format":"binary"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/Validation"},"503":{"$ref":"#/components/responses/Time-out"}},"summary":"Print Shipment Documents"}}}}
```


# Parcel registry

Nova Post provides the ability to generate a printable PDF registry containing the list of shipments included in the selected registry. For more information, refer to the [**Print parcel registry**](https://api-portal.novapost.com/metodi-1/methods/registers#get-registry-print) method.


# Tracking shipment

## BasicTracking

> This API method enables you to retrieve the status of a shipment by providing the transportation document number. By specifying the document number in the request, you can obtain information about the current location or status of the shipment, providing clients with real-time updates on the progress of their cargo.\</br>\
> 🔸This method works \*\*only with the transportation document number (shipment number)\*\* and does \*\*not support searching by client order numbers or any external identifiers\*\*.\</br>\
> 🔸\*\*BasicTracking\*\* provides a simplified tracking response focused on the shipment’s status history and, optionally, its related shipment numbers. Unlike \*\*FullTracking\*\*, it does not return detailed routing information, parcel-level data, undelivery reasons, return/redirect records, or extended metadata. This method is intended for quick, lightweight status checks.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Shipments"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}},"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Validation":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Time-out":{"description":"Connection time-out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}}},"paths":{"/shipments/tracking/history":{"get":{"tags":["Shipments"],"description":"This API method enables you to retrieve the status of a shipment by providing the transportation document number. By specifying the document number in the request, you can obtain information about the current location or status of the shipment, providing clients with real-time updates on the progress of their cargo.</br>\n🔸This method works **only with the transportation document number (shipment number)** and does **not support searching by client order numbers or any external identifiers**.</br>\n🔸**BasicTracking** provides a simplified tracking response focused on the shipment’s status history and, optionally, its related shipment numbers. Unlike **FullTracking**, it does not return detailed routing information, parcel-level data, undelivery reasons, return/redirect records, or extended metadata. This method is intended for quick, lightweight status checks.\n","parameters":[{"in":"query","name":"numbers[]","description":"Shipment`s numbers. Can accept either a single number or an array of numbers.","schema":{"type":"string"}},{"in":"query","name":"extended","description":"Parameter responsible for including in the response an array of objects listing all related shipments.\n\nTo receive this data in the response, set the value to `1`.\n","schema":{"type":"string","default":0},"required":false}],"responses":{"200":{"description":"Tracking response schema","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","description":"Array of items in the invoice.","items":{"type":"object","properties":{"id":{"type":"string","description":"Transportation document id."},"number":{"type":"string","description":"Transportation document number."},"history_tracking":{"type":"array","description":"Array of tracking history statuses for the specified shipment.","items":{"type":"object","properties":{"code":{"type":"string","description":"Tracking status code number.\n\n**A list of available statuses with their codes and descriptions of their meaning:**\n- `1` — Ready to send\n- `2` — Deleted\n- `4` — Accepted for sending\n- `5` — Sent from the Sender's Division\n- `6` — Arrived in the city of the Recipient\n- `7` — Arrived (at the Division)\n- `8` — Arrived (at the Postomat)\n- `9` — Closed\n- `10` — The shipment is closed and the money transfer is sent to the Sender\n- `11` — The shipment is closed and the sender has received the money transfer\n- `13` — Arrival at the transit sorting center\n- `16` — Departure from the transit sorting center\n- `17` — ArrivalTransitWarehouse (currently not used)\n- `19` — DepartureFromTransitWarehouse (currently not used)\n- `30` — Arrived at customs terminal\n- `31` — Departed from customs terminal\n- `99` — Delivery to Postomat is impossible (technical issues or oversized parcel)\n- `101` — Uploaded to the courier for delivery to the address\n- `102` — Returns (sender ordered a return)\n- `103` — Refusal of shipment\n- `104` — Redirecting\n- `105` — Utilization\n- `106` — Received and created return shipment of Documents/Document Subtypes\n- `110` — Shipment transferred to temporary storage\n- `111` — Failed delivery attempt (in case of targeted delivery)\n- `112` — Delivery date postponed (for targeted delivery)\n- `113` — Storage period expired (Postomat)\n- `114` — Awaiting customs clearance\n- `115` — Arrived at customs terminal\n- `116` — Broker refusal — under resolution\n- `117` — Cargo not found or lost (customs)\n- `118` — Forbidden content — delivery impossible (customs)\n- `119` — Customs clearance in progress\n- `120` — Customs clearance completed\n- `121` — Sent to destination city after customs\n- `122` — Preparing for transfer to customs\n- `123` — Awaiting information from the recipient\n- `125` — Preparing for transfer to customs\n- `126` — Preparing for transfer to customs\n- `127` — Customs declaration data verification in progress\n- `128` — Processing accompanying documents prior to customs\n- `130` — Import prohibited by customs\n- `131` — Return of uncleared cargo\n- `132` — Preparing for return\n- `133` — Client communication regarding a customs comment\n- `134` — The international shipment has been handed over to the customs broker for processing\n- `135` — The international shipment has been placed in Storage Area\n- `138` — Shipment delay due to incorrect recipient information\n- `141` — Storage period expired\n- `144` — Storage period expired\n- `149` — In storage\n- `155` — Shipment transferred for disposal\n- `197` — Processing customs documents\n- `198` — Cargo inspection by customs\n- `199` — Shipment requires customs clearance\n- `999` — Undetermined\n"},"code_name":{"type":"string","description":"Tracking status name.\n\nIf the `extended`=`1` parameter is passed in the request, this field in the response will contain the detailed tracking status name.\n\n🔸**This field is provided for informational purposes only and its value may change over time. It is recommended to rely on the** `history_tracking.code` **field when processing tracking statuses.**\n"},"country_code":{"type":"string","description":"Country code for the place where tracking status was created."},"settlement":{"type":"string","description":"City name for the place where tracking status was created."},"date":{"type":"string","description":"Datetime when tracking status was created."}}}},"related_numbers":{"type":"array","description":"An array of objects containing a list of related shipments.\n\n🔸**The shipment numbers listed here are subject to change.**\n","items":{"type":"string"}}}}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/Validation"},"503":{"$ref":"#/components/responses/Time-out"}},"summary":"BasicTracking"}}}}
```

## FullTracking

> This API method enables you to retrieve the status of a shipment by providing the transportation document number. By specifying the document number in the request, you can obtain information about the current location or status of the shipment, providing clients with real-time updates on the progress of their cargo.\
> \
> By default, the response contains the following data blocks:\
> \- Current status of the shipment;\
> \- Tracking history;\
> \- Actual tracking history;\
> \- Description of the shipment;\
> \- Extended information about related shipments.\
> \
> If necessary, additional blocks can be included in the response by passing the appropriate parameters:\
> \- withUndeliveryReason = true - adds an array of objects with information about the reasons for non-delivery of shipments.\
> \- withCreatedOnTheBasis = true - adds an array of objects with information about returns or forwarding associated with the shipment.\
> \
> 🔸\*\*FullTracking\*\* provides a comprehensive tracking response containing detailed shipment status data, full movement history, parcel descriptions, undelivery reasons, and information about related or derivative shipments. Unlike \*\*BasicTracking\*\*, it offers extended operational details and is designed for cases requiring full visibility into the shipment’s logistics lifecycle.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Shipments"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}},"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Validation":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Time-out":{"description":"Connection time-out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}}},"paths":{"/shipments/tracking":{"get":{"tags":["Shipments"],"description":"This API method enables you to retrieve the status of a shipment by providing the transportation document number. By specifying the document number in the request, you can obtain information about the current location or status of the shipment, providing clients with real-time updates on the progress of their cargo.\n\nBy default, the response contains the following data blocks:\n- Current status of the shipment;\n- Tracking history;\n- Actual tracking history;\n- Description of the shipment;\n- Extended information about related shipments.\n\nIf necessary, additional blocks can be included in the response by passing the appropriate parameters:\n- withUndeliveryReason = true - adds an array of objects with information about the reasons for non-delivery of shipments.\n- withCreatedOnTheBasis = true - adds an array of objects with information about returns or forwarding associated with the shipment.\n\n🔸**FullTracking** provides a comprehensive tracking response containing detailed shipment status data, full movement history, parcel descriptions, undelivery reasons, and information about related or derivative shipments. Unlike **BasicTracking**, it offers extended operational details and is designed for cases requiring full visibility into the shipment’s logistics lifecycle.\n","parameters":[{"in":"query","name":"numbers[]","description":"Shipment numbers. Can accept either a single number or an array of numbers.","schema":{"type":"string"}},{"in":"query","name":"ids[]","description":"Search shipments by transportation document ids. Accepts either a single search id or an array of ids to conduct the search.","schema":{"type":"integer","format":"int32"}},{"in":"query","name":"withUndeliveryReason","description":"A parameter that controls the inclusion of an array of objects containing information about non-delivery reasons in the response.\nTo receive this data in the response, set the value to `true`.\n","schema":{"type":"boolean","default":false},"required":false},{"in":"query","name":"withCreatedOnTheBasis","description":"Parameter responsible for including in the response an array of objects containing information about related shipments (types: `Redirecting`, `Return`, `Utilization`, `Redelivery`).\nTo receive this data in the response, set the value to `true`.\n","schema":{"type":"boolean","default":false},"required":false},{"in":"query","name":"countryCode","description":"Two-letter sender country code according to the ISO 3166-1 Alpha-2 standard.\nIf this parameter is specified, Tracking history and Actual tracking history will be shown only for the specified country.\nPattern: ^[A-Z]{2}$\n","schema":{"type":"string"}},{"in":"query","name":"external","description":"Parameter responsible for including in the response an array of objects listing all related shipments, as well as an array containing extended information about those shipments — including the shipment owner’s name, shipment number, and shipment creation date.\nTo receive this data in the response, set the value to `1`.\n","schema":{"type":"string","default":0},"required":false},{"in":"query","name":"trackingByBarcode","description":"The system filters aggregated data and returns information only for the specified parcel. This allows tracking the delivery route of a specific parcel within a multi-parcel shipment.","schema":{"type":"string"},"required":false},{"in":"query","name":"withAllParcels","description":"The system aggregates events from all parcel into a single array, grouped by parcel number. This allows tracking the delivery route of each parcel within a multi-parcel shipment.","schema":{"type":"boolean","default":false},"required":false}],"responses":{"200":{"description":"Tracking response schema","content":{"application/json":{"schema":{"type":"object","properties":{"currentStatus":{"type":"array","description":"An array of objects containing detailed information about the current shipment status.","items":{"type":"object","properties":{"number":{"type":"string","description":"Shipment number."},"createdDate":{"type":"string","format":"date-time","description":"Shipment creation date.\n\nDate in ISO 8601 format with UTC time zone.\n"},"scheduledDate":{"type":"string","format":"date-time","description":"Estimated delivery date.\n\nDate in ISO 8601 format with UTC time zone.\n"},"scheduledDateOriginal":{"type":"string","format":"date-time","nullable":true,"description":"Initial estimated delivery date.\n\nDate in ISO 8601 format with UTC time zone\n"},"adjustedDate":{"type":"string","format":"date-time","nullable":true,"description":"Adjusted delivery date.\n\nDate in ISO 8601 format with UTC time zone.\n"},"closingDate":{"type":"string","format":"date-time","nullable":true,"description":"Shipment closure date (completion of all operations).\n\nDate in ISO 8601 format with UTC time zone.\n"},"statusCode":{"type":"string","description":"Tracking status code number.\n\n**A list of available statuses with their codes and descriptions of their meaning:**\n- `1` — Ready to send\n- `2` — Deleted\n- `4` — Accepted for sending\n- `5` — Sent from the Sender's Division\n- `6` — Arrived in the city of the Recipient\n- `7` — Arrived (at the Division)\n- `8` — Arrived (at the Postomat)\n- `9` — Closed\n- `10` — The shipment is closed and the money transfer is sent to the Sender\n- `11` — The shipment is closed and the sender has received the money transfer\n- `13` — Arrival at the transit sorting center\n- `16` — Departure from the transit sorting center\n- `17` — ArrivalTransitWarehouse (currently not used)\n- `19` — DepartureFromTransitWarehouse (currently not used)\n- `30` — Arrived at customs terminal\n- `31` — Departed from customs terminal\n- `99` — Delivery to Postomat is impossible (technical issues or oversized parcel)\n- `101` — Uploaded to the courier for delivery to the address\n- `102` — Returns (sender ordered a return)\n- `103` — Refusal of shipment\n- `104` — Redirecting\n- `105` — Utilization\n- `106` — Received and created return shipment of Documents/Document Subtypes\n- `110` — Shipment transferred to temporary storage\n- `111` — Failed delivery attempt (in case of targeted delivery)\n- `112` — Delivery date postponed (for targeted delivery)\n- `113` — Storage period expired (Postomat)\n- `114` — Awaiting customs clearance\n- `115` — Arrived at customs terminal\n- `116` — Broker refusal — under resolution\n- `117` — Cargo not found or lost (customs)\n- `118` — Forbidden content — delivery impossible (customs)\n- `119` — Customs clearance in progress\n- `120` — Customs clearance completed\n- `121` — Sent to destination city after customs\n- `122` — Preparing for transfer to customs\n- `123` — Awaiting information from the recipient\n- `125` — Preparing for transfer to customs\n- `126` — Preparing for transfer to customs\n- `127` — Customs declaration data verification in progress\n- `128` — Processing accompanying documents prior to customs\n- `130` — Import prohibited by customs\n- `131` — Return of uncleared cargo\n- `132` — Preparing for return\n- `133` — Client communication regarding a customs comment\n- `134` — The international shipment has been handed over to the customs broker for processing\n- `135` — The international shipment has been placed in Storage Area\n- `138` — Shipment delay due to incorrect recipient information\n- `141` — Storage period expired\n- `144` — Storage period expired\n- `149` — In storage\n- `155` — Shipment transferred for disposal\n- `197` — Processing customs documents\n- `198` — Cargo inspection by customs\n- `199` — Shipment requires customs clearance\n- `999` — Undetermined\n"},"status":{"type":"string","description":"Status code name."},"statusDate":{"type":"string","format":"date-time","description":"Date and time when this status was set.\n\nDate in ISO 8601 format with UTC time zone\n"},"deliveryType":{"type":"string","description":"Delivery type"},"deliveryCountry":{"type":"string","pattern":"^[A-Z]{2}$","description":"Two-letter destination country code according to the ISO 3166-1 Alpha-2 standard."}}}},"detailsTracking":{"type":"array","description":"An array of objects containing detailed information about the entire shipment movement, including the movement of related shipments, if available.\n\nNot populated when parcel-level tracking is used (i.e., when `trackingByBarcode` is provided or `withAllParcels` = `true`).\n","items":{"type":"object","properties":{"number":{"type":"string","description":"Shipment number."},"date":{"type":"string","format":"date-time","nullable":true,"description":"Date and time when this status was set.\n\nDate in ISO 8601 format with UTC time zone\n"},"event":{"type":"string","description":"Event name.\n\n**Available event names:**\n- `CreateID` — Shipment ID created\n- `CreateIDFullfilment` — Shipment ID created (fulfillment)\n- `Deleted` — Deleted\n- `CanceledSender` — Shipment cancelled by sender\n- `DeclarationDeleted` — Declaration cancelled\n- `ArrivalSenderWarehouse` — Arrival at sender’s warehouse\n- `ArrivalSenderPostomat` — Arrival at sender’s parcel locker\n- `ArrivalSenderDoors` — Courier picked up the shipment from sender\n- `DepartureSenderWarehouseFullfilment` — Shipped from sender's warehouse (fulfillment)\n- `DepartureSenderWarehouse` — Shipment dispatched from sender’s warehouse\n- `Departure` — Shipment\n- `Arrival` — Arrival\n- `DepartureSenderWarehouseFuture` — Shipment from sender’s warehouse (future event)\n- `DepartureFuture` — Shipment (future event)\n- `ArrivalFuture` — Arrival (future event)\n- `OnTheWayArrival` — En route to arrival point\n- `OnTheWayArrivalFuture` — En route to arrival point (future event)\n- `OnTheWayDeparture` — Shipment in transit\n- `OnTheWayDepartureFuture` — Shipment in transit (future event)\n- `ArrivalSenderDoorsFuture` — Courier picked up the shipment from sender (future event)\n- `ArrivalSenderCityDeliveryService` — Delivery service in recipient’s city (arrival)\n- `ArrivalTerminal` — Arrival at terminal\n- `ArrivalCustomsBrokerPartner` — Partner customs broker (arrival)\n- `DepartureDeliveryService` — Delivery service (dispatch)\n- `DepartureSenderCityDeliveryService` — Delivery service in sender’s city (dispatch)\n- `DepartureCustomsBrokerPartner` — Partner customs broker (dispatch)\n- `ArrivalDeliveryServiceFuture` — Delivery service (arrival, future event)\n- `ArrivalSenderCityDeliveryServiceFuture` — Delivery service in sender’s city (arrival, future event)\n- `ArrivalTerminalFuture` — Arrival at terminal (future event)\n- `ArrivalCustomsBrokerPartnerFuture` — Partner customs broker (arrival, future event)\n- `DepartureDeliveryServiceFuture` — Delivery service (dispatch, future event)\n- `DepartureSenderCityDeliveryServiceFuture` — Delivery service in sender’s city (dispatch, future event)\n- `DepartureTerminalFuture` — Dispatch from terminal (future event)\n- `DepartureTerminal` — Dispatch from terminal\n- `ArrivalDepot` — Arrival at depot\n- `DepartureDepot` — Dispatch from depot\n- `ArrivalDepotFuture` — Arrival at depot (future event)\n- `DepartureDepotFuture` — Dispatch from depot (future event)\n- `ArrivalSenderCityDepot` — Depot in sender’s city (arrival)\n- `DepartureSenderCityDepot` — Depot in sender’s city (dispatch)\n- `ArrivalSenderCityDepotFuture` — Depot in sender’s city (arrival, future event)\n- `DepartureSenderCityDepotFuture` — Depot in sender’s city (dispatch, future event)\n- `CustomsClearanceInitiated` — Customs clearance\n- `ArrivalSenderCityTerminal` — Terminal in sender’s city (arrival)\n- `ArrivalSenderCityTerminalFuture` — Terminal in sender’s city (arrival, future event)\n- `DepartureSenderCityTerminal` — Terminal in sender’s city (dispatch)\n- `DepartureSenderCityTerminalFuture` — Terminal in sender’s city (dispatch, future event)\n- `SentForCustomsClearance` — Sent for customs clearance\n- `CustomClearanceIsCompleted` — Customs processing completed\n- `SentToDestinationCountry` — Sent to destination city after customs\n- `ArrivalCustomTerminal` — Arrived at customs terminal\n- `ArrivalDeliveryService` — Delivery service (arrival)\n- `MovingPostomat` — Awaiting transportation / In transit to parcel locker\n- `InCityRecipientDeparture` — In recipient's city (dispatch)\n- `InCityRecipientArrival` — In recipient's city (arrival)\n- `InCityRecipientPlan` — In recipient's city (planned event)\n- `InCityRecipientFuture` — In recipient’s city (future event)\n- `InCityRecipient` — In recipient’s city\n- `InCityRecipientArrivalFuture` — In recipient’s city (future arrival event)\n- `InCityRecipientDepartureFuture` — In recipient’s city (future dispatch event)\n- `InCityRecipientPlanFuture` — In recipient’s city (future planned event)\n- `ArrivalDestinationDepot` — Destination city warehouse (arrival)\n- `DepartureDestinationDepot` — Destination city warehouse (dispatch)\n- `ArrivalDestinationDepotFuture` — Destination city warehouse (arrival, future event)\n- `DepartureDestinationDepotFuture` — Destination city warehouse (dispatch, future event)\n- `ArrivalDestinationDeliveryService` — Delivery service in recipient’s city (arrival)\n- `DepartureDestinationDeliveryService` — Delivery service in recipient’s city (dispatch)\n- `ArrivalDestinationDeliveryServiceFuture` — Delivery service in recipient’s city (arrival, future event)\n- `DepartureDestinationDeliveryServiceFuture` — Delivery service in recipient’s city (dispatch, future event)\n- `ArrivalDestinationTerminal` — Terminal in recipient’s city (arrival)\n- `ArrivalDestinationTerminalFuture` — Terminal in recipient’s city (arrival, future event)\n- `DepartureDestinationTerminal` — Terminal in recipient’s city (dispatch)\n- `DepartureDestinationTerminalFuture` — Terminal in recipient’s city (dispatch, future event)\n- `ArrivalSameSettlementImport` — Single locality (import, arrival)\n- `NoFreeSlotsInPostomat` — No free parcel locker cells available\n- `LoadingCourierForMoving` — Courier picked up the shipment\n- `ArrivalSameSettlementImportFuture` — Single locality (import, arrival, future event)\n- `ParcelWasTransferredToPartner` — Transferred to partner for further delivery\n- `ArrivalSameSettlementLocal` — Single locality (local, arrival)\n- `ArrivalSameSettlementLocalFuture` — Single locality (local, arrival, future event)\n- `ArrivalDuplicate` — Shipment pending processing at partner warehouse\n- `ArrivalDuplicatePassed` — Shipment was pending processing at partner warehouse\n- `DepartureDuplicate` — Shipment in the process of dispatching from partner warehouse\n- `DepartureDuplicatePassed` — Shipment was in dispatch process from partner warehouse\n- `InRouteDuplicate` — Shipment in transit — temporary partner-side delay\n- `InRouteDuplicatePassed` — Temporary partner-side delay resolved\n- `TransferPoint` — Transfer point\n- `MovingPoint` — At pickup point\n- `TransferPointPostomat` — Arrival at parcel locker\n- `ArrivalRecipientWarehouse` — Arrival at recipient’s warehouse\n- `ArrivalRecipientWarehouseFuture` — Arrival at recipient’s warehouse (future event)\n- `ArrivalRecipientPartnerWarehouse` — Arrived at partner warehouse\n- `ArrivalRecipientPostomat` — Arrived at recipient’s parcel locker\n- `ReceivedDoorsFuture` — Delivery to address (future event)\n- `ReceivedWarehouse` — Received at warehouse\n- `ReceivedDoors` — Delivered to address\n- `ReceivedPartner` — Shipment received by partner\n- `AlternativeDelivery` — Alternative delivery type applied (delivered to neighbor, left at the door, placed in mailbox, etc.)\n- `MoneyTransferAddress` — Money transfer (to address)\n- `MoneyTransfer` — Money transfer (to branch)\n- `MoneyTransferAddressFuture` — Money transfer (to address, future event)\n- `ArrivalSC` — Arrival at sorting center (SC)\n- `TransferToPartner` — Handed over to partner\n- `ArrivalTransitWarehouse` — Arrived at transit warehouse\n- `DepartureFromTransitWarehouse` — Departed from transit warehouse\n- `ProblemWithPostomat` — Delivery to Postomat impossible\n- `LoadingCourier` — Courier loading\n- `LoadingCourierFuture` — Courier loading (future event)\n- `ReturnTransferPoint` — Return to transfer point\n- `EWCargoAutoReturnRecipient` — Automatic return to sender\n- `OrderCargoReturn` — Return requested\n- `UndeliveryReasonsClient` — Not delivered (recipient refused the shipment)\n- `OrderRedirecting` — Redirection requested\n- `Utilization` — Sent for utilization\n- `DeclarationUtilization` — Shipment disposed\n- `EWRedeliveryAddress` — Redelivery (to address)\n- `EWRedeliveryDivision` — Redelivery (to branch)\n- `EWRedeliveryAddressFuture` — Redelivery (to address, future event)\n- `UndeliveryReasonsNoConnection` — Not delivered (no contact with recipient)\n- `ChangingTheDateWithTimeInterval` — Delivery rescheduled (time slot specified)\n- `ChangingTheDate` — Delivery rescheduled\n- `ShelfLifeHasExpired` — Storage period expired\n- `DeclarationArrivalCustomTerminalOutsideManifest` — Customs control started (outside manifest)\n- `DeclarationArrivalCustomTerminal` — Customs control started\n- `DeclarationInRoute` — Shipment en route to customs control\n- `DeclarationBrokerRejection` — Broker rejection — under review\n- `DeclarationCargoLost` — Shipment lost\n- `DeclarationCargoNotArrive` — Shipment did not arrive on schedule — under additional verification\n- `DeclarationCargoProhibitedForImport` — Prohibited content — delivery impossible\n- `DeclarationCustomsCargoSeizedBySmugglingDepartment` — Shipment seized by customs anti-smuggling department\n- `DeclarationCustomsCargoInspection` — Shipment undergoing customs inspection\n- `DeclarationCargoUnderInspectionCustoms` — Shipment under additional customs inspection\n- `DeclarationCustomsClearanceInitiated` — Customs clearance in progress\n- `DeclarationCustomsHold` — Shipment temporarily on hold by customs\n- `DeclarationCustomClearanceIsCompleted` — Customs clearance completed\n- `DeclarationSentToDestinationCountry` — Cleared customs — en route to destination country\n- `DeclarationAddedToManifest` — Added to the manifest\n- `DeclarationCustomerNoResponse` — Awaiting information from the recipient\n- `DeclarationPackagingDamaged` — Packaging damaged\n- `DeclarationShipmentDamaged` — Shipment damaged\n- `DeclarationInvalidCustomerData` — Verifying declaration data\n- `DeclarationNoSupportingDocuments` — Supporting documents missing\n- `CustomsRefusal` — Import prohibited by customs\n- `DeclarationAwaitingCustomsRelease` — Processing customs documents\n- `DeclarationCustomsDocumentsReceived` — Customs documents received, clearance in progress\n- `DeclarationShipmentAudit` — Cargo inspection by customs\n- `DeclarationRequireCustomsClearance` — Customs clearance required\n- `PickUpCreated` — Pickup order created\n- `PickUpAppointedCourier` — Courier assigned\n- `PickUpInProgress` — Courier en route for pickup\n- `PickUpReceivedByCourier` — Shipment received by courier\n- `PickUpDone` — Shipment picked up by courier\n- `PickUpNotPacked` — Pickup not completed — shipment was not packed\n- `PickUpNotCompleted` — Pickup not completed by courier\n\n- `DepartureCustomsBrokerPartnerFuture` — Partner customs broker (dispatch, future event)\n- `ShelfLifeHasExpiredReturn` — Not collected from Postomat — moved to the nearest division\n- `Lost` — Shipment lost\n"},"eventStatus":{"type":"string","description":"Event execution statuses.\n\n**Possible values:** \n- `Passed` — the event has already occurred\n- `Now` — the event is currently taking place\n- `Future` — the event is planned for the future\n"},"countryCode":{"type":"string","pattern":"^[A-Z]{2}$","nullable":true,"description":"A two-letter code representing the sender's country, following the ISO 3166-1 Alpha-2 standard, indicating the country of origin for the shipment."},"code":{"type":"string","description":"Tracking status code number.\n\n**Permissible values match those defined for the `currentStatus. statusCode` field.**\n"},"divisionName":{"type":"string","description":"Warehouse where the corresponding event occurs."},"postCode":{"type":"string","description":"Actual postal code."},"settlementName":{"type":"string","description":"Name of the locality where the event takes place."},"eventName":{"type":"string","description":"Client-specific event name."},"postCode1":{"type":"string","description":"Start of the postal code range for the settlement."},"postCode2":{"type":"string","description":"End of the postal code range for the settlement."}}}},"historyOnlineTracking":{"type":"array","description":"An array of objects containing information about the shipment’s online tracking status history, excluding duplicate events.\n\nNot populated when parcel-level tracking is used (i.e., when `trackingByBarcode` is provided or `withAllParcels` = `true`).\n","items":{"type":"object","properties":{"number":{"type":"string","description":"Shipment number."},"date":{"type":"string","format":"date-time","nullable":true,"description":"Date and time when this status was set.\n\nDate in ISO 8601 format with UTC time zone\n"},"event":{"type":"string","description":"Event name.\n\n**Permissible values match those defined for the** `detailsTracking.event` **field.**\n"},"eventStatus":{"type":"string","description":"Event execution statuses.\n\n**Possible values:**\n- `Passed` — the event has already occurred\n- `Now` — the event is currently taking place\n"},"countryCode":{"type":"string","pattern":"^[A-Z]{2}$","nullable":true,"description":"A two-letter code representing the sender's country, following the ISO 3166-1 Alpha-2 standard, indicating the country of origin for the shipment."},"code":{"type":"string","description":"Tracking status code number.\n\n**Permissible values match those defined for the** `currentStatus. statusCode` **field.**\n"},"divisionName":{"type":"string","description":"Warehouse where the corresponding event occurs."},"postCode":{"type":"string","description":"Actual postal code."},"settlementName":{"type":"string","description":"Name of the locality where the event takes place."},"eventName":{"type":"string","description":"Client-specific event name."},"postCode1":{"type":"string","description":"Start of the postal code range for the settlement."},"postCode2":{"type":"string","description":"End of the postal code range for the settlement."}}}},"parcelsDetailsTracking":{"type":"object","description":"An array of objects containing detailed information about the entire parcel movement.\n\nPopulated when parcel-level tracking is used (i.e., when `trackingByBarcode` is provided or `withAllParcels` = `true`).\n","additionalProperties":{"type":"array","description":"Dynamic object key whose value is the Parcel number. Used to group tracking events by specific Parcel.","items":{"type":"object","properties":{"number":{"type":"string","description":"Shipment number."},"date":{"type":"string","format":"date-time","nullable":true,"description":"Date and time when this status was set.\n\nDate in ISO 8601 format with UTC time zone\n"},"event":{"type":"string","description":"Event name.\n\n**Available event names:**\n- `CreateID` — Shipment ID created\n- `CreateIDFullfilment` — Shipment ID created (fulfillment)\n- `Deleted` — Deleted\n- `CanceledSender` — Shipment cancelled by sender\n- `DeclarationDeleted` — Declaration cancelled\n- `ArrivalSenderWarehouse` — Arrival at sender’s warehouse\n- `ArrivalSenderPostomat` — Arrival at sender’s parcel locker\n- `ArrivalSenderDoors` — Courier picked up the shipment from sender\n- `DepartureSenderWarehouseFullfilment` — Shipped from sender's warehouse (fulfillment)\n- `DepartureSenderWarehouse` — Shipment dispatched from sender’s warehouse\n- `Departure` — Shipment\n- `Arrival` — Arrival\n- `DepartureSenderWarehouseFuture` — Shipment from sender’s warehouse (future event)\n- `DepartureFuture` — Shipment (future event)\n- `ArrivalFuture` — Arrival (future event)\n- `OnTheWayArrival` — En route to arrival point\n- `OnTheWayArrivalFuture` — En route to arrival point (future event)\n- `OnTheWayDeparture` — Shipment in transit\n- `OnTheWayDepartureFuture` — Shipment in transit (future event)\n- `ArrivalSenderDoorsFuture` — Courier picked up the shipment from sender (future event)\n- `ArrivalSenderCityDeliveryService` — Delivery service in recipient’s city (arrival)\n- `ArrivalTerminal` — Arrival at terminal\n- `ArrivalCustomsBrokerPartner` — Partner customs broker (arrival)\n- `DepartureDeliveryService` — Delivery service (dispatch)\n- `DepartureSenderCityDeliveryService` — Delivery service in sender’s city (dispatch)\n- `DepartureCustomsBrokerPartner` — Partner customs broker (dispatch)\n- `ArrivalDeliveryServiceFuture` — Delivery service (arrival, future event)\n- `ArrivalSenderCityDeliveryServiceFuture` — Delivery service in sender’s city (arrival, future event)\n- `ArrivalTerminalFuture` — Arrival at terminal (future event)\n- `ArrivalCustomsBrokerPartnerFuture` — Partner customs broker (arrival, future event)\n- `DepartureDeliveryServiceFuture` — Delivery service (dispatch, future event)\n- `DepartureSenderCityDeliveryServiceFuture` — Delivery service in sender’s city (dispatch, future event)\n- `DepartureTerminalFuture` — Dispatch from terminal (future event)\n- `DepartureTerminal` — Dispatch from terminal\n- `ArrivalDepot` — Arrival at depot\n- `DepartureDepot` — Dispatch from depot\n- `ArrivalDepotFuture` — Arrival at depot (future event)\n- `DepartureDepotFuture` — Dispatch from depot (future event)\n- `ArrivalSenderCityDepot` — Depot in sender’s city (arrival)\n- `DepartureSenderCityDepot` — Depot in sender’s city (dispatch)\n- `ArrivalSenderCityDepotFuture` — Depot in sender’s city (arrival, future event)\n- `DepartureSenderCityDepotFuture` — Depot in sender’s city (dispatch, future event)\n- `CustomsClearanceInitiated` — Customs clearance\n- `ArrivalSenderCityTerminal` — Terminal in sender’s city (arrival)\n- `ArrivalSenderCityTerminalFuture` — Terminal in sender’s city (arrival, future event)\n- `DepartureSenderCityTerminal` — Terminal in sender’s city (dispatch)\n- `DepartureSenderCityTerminalFuture` — Terminal in sender’s city (dispatch, future event)\n- `SentForCustomsClearance` — Sent for customs clearance\n- `CustomClearanceIsCompleted` — Customs processing completed\n- `SentToDestinationCountry` — Sent to destination city after customs\n- `ArrivalCustomTerminal` — Arrived at customs terminal\n- `ArrivalDeliveryService` — Delivery service (arrival)\n- `MovingPostomat` — Awaiting transportation / In transit to parcel locker\n- `InCityRecipientDeparture` — In recipient's city (dispatch)\n- `InCityRecipientArrival` — In recipient's city (arrival)\n- `InCityRecipientPlan` — In recipient's city (planned event)\n- `InCityRecipientFuture` — In recipient’s city (future event)\n- `InCityRecipient` — In recipient’s city\n- `InCityRecipientArrivalFuture` — In recipient’s city (future arrival event)\n- `InCityRecipientDepartureFuture` — In recipient’s city (future dispatch event)\n- `InCityRecipientPlanFuture` — In recipient’s city (future planned event)\n- `ArrivalDestinationDepot` — Destination city warehouse (arrival)\n- `DepartureDestinationDepot` — Destination city warehouse (dispatch)\n- `ArrivalDestinationDepotFuture` — Destination city warehouse (arrival, future event)\n- `DepartureDestinationDepotFuture` — Destination city warehouse (dispatch, future event)\n- `ArrivalDestinationDeliveryService` — Delivery service in recipient’s city (arrival)\n- `DepartureDestinationDeliveryService` — Delivery service in recipient’s city (dispatch)\n- `ArrivalDestinationDeliveryServiceFuture` — Delivery service in recipient’s city (arrival, future event)\n- `DepartureDestinationDeliveryServiceFuture` — Delivery service in recipient’s city (dispatch, future event)\n- `ArrivalDestinationTerminal` — Terminal in recipient’s city (arrival)\n- `ArrivalDestinationTerminalFuture` — Terminal in recipient’s city (arrival, future event)\n- `DepartureDestinationTerminal` — Terminal in recipient’s city (dispatch)\n- `DepartureDestinationTerminalFuture` — Terminal in recipient’s city (dispatch, future event)\n- `ArrivalSameSettlementImport` — Single locality (import, arrival)\n- `NoFreeSlotsInPostomat` — No free parcel locker cells available\n- `LoadingCourierForMoving` — Courier picked up the shipment\n- `ArrivalSameSettlementImportFuture` — Single locality (import, arrival, future event)\n- `ParcelWasTransferredToPartner` — Transferred to partner for further delivery\n- `ArrivalSameSettlementLocal` — Single locality (local, arrival)\n- `ArrivalSameSettlementLocalFuture` — Single locality (local, arrival, future event)\n- `ArrivalDuplicate` — Shipment pending processing at partner warehouse\n- `ArrivalDuplicatePassed` — Shipment was pending processing at partner warehouse\n- `DepartureDuplicate` — Shipment in the process of dispatching from partner warehouse\n- `DepartureDuplicatePassed` — Shipment was in dispatch process from partner warehouse\n- `InRouteDuplicate` — Shipment in transit — temporary partner-side delay\n- `InRouteDuplicatePassed` — Temporary partner-side delay resolved\n- `TransferPoint` — Transfer point\n- `MovingPoint` — At pickup point\n- `TransferPointPostomat` — Arrival at parcel locker\n- `ArrivalRecipientWarehouse` — Arrival at recipient’s warehouse\n- `ArrivalRecipientWarehouseFuture` — Arrival at recipient’s warehouse (future event)\n- `ArrivalRecipientPartnerWarehouse` — Arrived at partner warehouse\n- `ArrivalRecipientPostomat` — Arrived at recipient’s parcel locker\n- `ReceivedDoorsFuture` — Delivery to address (future event)\n- `ReceivedWarehouse` — Received at warehouse\n- `ReceivedDoors` — Delivered to address\n- `ReceivedPartner` — Shipment received by partner\n- `AlternativeDelivery` — Alternative delivery type applied (delivered to neighbor, left at the door, placed in mailbox, etc.)\n- `MoneyTransferAddress` — Money transfer (to address)\n- `MoneyTransfer` — Money transfer (to branch)\n- `MoneyTransferAddressFuture` — Money transfer (to address, future event)\n- `ArrivalSC` — Arrival at sorting center (SC)\n- `TransferToPartner` — Handed over to partner\n- `ArrivalTransitWarehouse` — Arrived at transit warehouse\n- `DepartureFromTransitWarehouse` — Departed from transit warehouse\n- `ProblemWithPostomat` — Delivery to Postomat impossible\n- `LoadingCourier` — Courier loading\n- `LoadingCourierFuture` — Courier loading (future event)\n- `ReturnTransferPoint` — Return to transfer point\n- `EWCargoAutoReturnRecipient` — Automatic return to sender\n- `OrderCargoReturn` — Return requested\n- `UndeliveryReasonsClient` — Not delivered (recipient refused the shipment)\n- `OrderRedirecting` — Redirection requested\n- `Utilization` — Sent for utilization\n- `DeclarationUtilization` — Shipment disposed\n- `EWRedeliveryAddress` — Redelivery (to address)\n- `EWRedeliveryDivision` — Redelivery (to branch)\n- `EWRedeliveryAddressFuture` — Redelivery (to address, future event)\n- `UndeliveryReasonsNoConnection` — Not delivered (no contact with recipient)\n- `ChangingTheDateWithTimeInterval` — Delivery rescheduled (time slot specified)\n- `ChangingTheDate` — Delivery rescheduled\n- `ShelfLifeHasExpired` — Storage period expired\n- `DeclarationArrivalCustomTerminalOutsideManifest` — Customs control started (outside manifest)\n- `DeclarationArrivalCustomTerminal` — Customs control started\n- `DeclarationInRoute` — Shipment en route to customs control\n- `DeclarationBrokerRejection` — Broker rejection — under review\n- `DeclarationCargoLost` — Shipment lost\n- `DeclarationCargoNotArrive` — Shipment did not arrive on schedule — under additional verification\n- `DeclarationCargoProhibitedForImport` — Prohibited content — delivery impossible\n- `DeclarationCustomsCargoSeizedBySmugglingDepartment` — Shipment seized by customs anti-smuggling department\n- `DeclarationCustomsCargoInspection` — Shipment undergoing customs inspection\n- `DeclarationCargoUnderInspectionCustoms` — Shipment under additional customs inspection\n- `DeclarationCustomsClearanceInitiated` — Customs clearance in progress\n- `DeclarationCustomsHold` — Shipment temporarily on hold by customs\n- `DeclarationCustomClearanceIsCompleted` — Customs clearance completed\n- `DeclarationSentToDestinationCountry` — Cleared customs — en route to destination country\n- `DeclarationAddedToManifest` — Added to the manifest\n- `DeclarationCustomerNoResponse` — Awaiting information from the recipient\n- `DeclarationPackagingDamaged` — Packaging damaged\n- `DeclarationShipmentDamaged` — Shipment damaged\n- `DeclarationInvalidCustomerData` — Verifying declaration data\n- `DeclarationNoSupportingDocuments` — Supporting documents missing\n- `CustomsRefusal` — Import prohibited by customs\n- `DeclarationAwaitingCustomsRelease` — Processing customs documents\n- `DeclarationCustomsDocumentsReceived` — Customs documents received, clearance in progress\n- `DeclarationShipmentAudit` — Cargo inspection by customs\n- `DeclarationRequireCustomsClearance` — Customs clearance required\n- `PickUpCreated` — Pickup order created\n- `PickUpAppointedCourier` — Courier assigned\n- `PickUpInProgress` — Courier en route for pickup\n- `PickUpReceivedByCourier` — Shipment received by courier\n- `PickUpDone` — Shipment picked up by courier\n- `PickUpNotPacked` — Pickup not completed — shipment was not packed\n- `PickUpNotCompleted` — Pickup not completed by courier\n\n- `DepartureCustomsBrokerPartnerFuture` — Partner customs broker (dispatch, future event)\n- `ShelfLifeHasExpiredReturn` — Not collected from Postomat — moved to the nearest division\n- `Lost` — Shipment lost\n"},"eventStatus":{"type":"string","description":"Event execution statuses.\n\n**Possible values:**\n- `Passed` — the event has already occurred\n- `Now` — the event is currently taking place\n- `Future` — the event is planned for the future\n"},"countryCode":{"type":"string","pattern":"^[A-Z]{2}$","nullable":true,"description":"A two-letter code representing the sender's country, following the ISO 3166-1 Alpha-2 standard, indicating the country of origin for the shipment."},"code":{"type":"string","description":"Tracking status code number.\n\n**Permissible values match those defined for the** `currentStatus. statusCode` **field.**\n"},"divisionName":{"type":"string","description":"Warehouse where the corresponding event occurs."},"postCode":{"type":"string","description":"Actual postal code."},"settlementName":{"type":"string","description":"Name of the locality where the event takes place."},"eventName":{"type":"string","description":"Client-specific event name."},"postCode1":{"type":"string","description":"Start of the postal code range for the settlement."},"postCode2":{"type":"string","description":"End of the postal code range for the settlement."}}}}},"parcelsHistoryOnlineTracking":{"type":"object","description":"An array of objects containing information about the parcel’s online tracking status history, excluding duplicate events.\n\nPopulated when parcel-level tracking is used (i.e., when `trackingByBarcode` is provided or `withAllParcels` = `true`).\n","additionalProperties":{"type":"array","description":"Dynamic object key whose value is the Parcel number. Used to group tracking events by specific Parcel.","items":{"type":"object","properties":{"number":{"type":"string","description":"Shipment number."},"date":{"type":"string","format":"date-time","nullable":true,"description":"Date and time when this status was set.\n\nDate in ISO 8601 format with UTC time zone.\n"},"event":{"type":"string","description":"Event name.\n\n**Permissible values match those defined for the** `detailsTracking.event` **field.**\n"},"eventStatus":{"type":"string","description":"Event execution statuses.\n\n**Possible values:**\n- `Passed` — the event has already occurred\n- `Now` — the event is currently taking place\n"},"countryCode":{"type":"string","pattern":"^[A-Z]{2}$","nullable":true,"description":"A two-letter code representing the sender's country, following the ISO 3166-1 Alpha-2 standard, indicating the country of origin for the shipment."},"code":{"type":"string","description":"Tracking status code number.\n\n**Permissible values match those defined for the** `currentStatus. statusCode` **field.**\n"},"divisionName":{"type":"string","description":"Warehouse where the corresponding event occurs."},"postCode":{"type":"string","description":"Actual postal code."},"settlementName":{"type":"string","description":"Name of the locality where the event takes place."},"eventName":{"type":"string","description":"Client-specific event name."},"postCode1":{"type":"string","description":"Start of the postal code range for the settlement."},"postCode2":{"type":"string","description":"End of the postal code range for the settlement."}}}}},"parcels":{"type":"array","description":"Parcels` description block. Array contains objects, each object responsible for information about parcel.","items":{"type":"object","properties":{"number":{"type":"string","pattern":"^[A-Z]{4}\\d{10}$","description":"Transportation document number."},"rowNumber":{"type":"integer","minimum":1,"nullable":true,"description":"Parcel number."},"untied":{"type":"boolean","description":"Internal data, not for use."},"cargoCategoryGroup":{"type":"string","description":"Shipment type (`parcel`, `documents`, `pallet`, etc.)."},"cargoCategoryId":{"type":"string","description":"Internal data, not for use."},"categoryCargoName":{"type":"string","description":"Shipment category name."},"parcelDescription":{"type":"string","maxLength":255,"description":"A brief description of the contents of the package."},"insuranceCost":{"type":"number","minimum":0,"description":"The amount of the declared value."},"insuranceCostCurrencyCode":{"type":"string","description":"Currency in which the shipment's declared value is specified, according to the ISO 4217 standard."},"length":{"type":"integer","minimum":1,"description":"The actual length of the parcel in mm."},"width":{"type":"integer","minimum":1,"description":"The actual width of the parcel in mm."},"height":{"type":"integer","minimum":1,"description":"The actual height of the parcel in mm."},"actualWeight":{"type":"number","minimum":0,"maximum":2147483647,"description":"The actual weight of the parcel in grams."},"volumetricWeight":{"type":"number","minimum":0,"maximum":2147483647,"description":"The volumetric weight of the parcel."},"lengthCheck":{"type":"number","nullable":true,"description":"Actual adjusted shipment length in millimeters after control measurement."},"widthCheck":{"type":"number","nullable":true,"description":"Actual adjusted shipment width in millimeters after control measurement."},"heightCheck":{"type":"number","nullable":true,"description":"Actual adjusted shipment height in millimeters after control measurement."},"actualWeightCheck":{"type":"number","nullable":true,"description":"Actual adjusted shipment weight in grams after control measurement."},"volumetricWeightCheck":{"type":"number","nullable":true,"description":"Actual adjusted shipment volumetric weight in grams after control measurement."}}}},"alternativeNumbers":{"type":"array","description":"An array of objects containing a list of related shipments.","items":{"type":"string"}},"alternativeNumbersGW":{"type":"array","description":"An array of objects containing extended information about related shipments.","items":{"type":"object","properties":{"name":{"type":"string","description":"Shipment owner name."},"number":{"type":"string","description":"Shipment number."},"date":{"type":"string","format":"date-time","description":"Shipment creation date.\n\nDate in ISO 8601 format with UTC time zone.\n"}}}},"undeliveryReasons":{"type":"array","description":"An array of objects containing information about shipment non-delivery reasons.","items":{"type":"object","properties":{"reasonName":{"type":"string","description":"Non-delivery reason name."},"reasonDate":{"type":"string","format":"date-time","description":"Non-delivery date.\n\nDate in ISO 8601 format with UTC time zone.\n"},"reasonId":{"type":"string","description":"Unique identifier of the non-delivery reason."},"subtypeOfReasonId":{"type":"string","description":"Unique identifier of the non-delivery subreason."},"subtypeOfReasonName":{"type":"string","description":"Non-delivery subreason name."}}}},"createdOnTheBasis":{"type":"array","description":"An array of objects containing information about shipments based on other ones.","items":{"type":"object","properties":{"number":{"type":"string","description":"Document number."},"type":{"type":"string","description":"Document type.\n\n**Possible values:**\n- `Redirecting`\n- `Return`\n- `Utilization`\n- `Redelivery`\n"},"createdDate":{"type":"string","format":"date-time","description":"Non-delivery date.\n\nDate in ISO 8601 format with UTC time zone.\n"}}}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/Validation"},"503":{"$ref":"#/components/responses/Time-out"}},"summary":"FullTracking"}}}}
```


# Proof of delivery

## List attachments

> Returns a list of available shipment-related attachment files (photos and/or signature) for the specified shipment \*\*only if the shipment belongs to the authenticated client\*\*.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Shipments"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}},"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Time-out":{"description":"Connection time-out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}}},"paths":{"/shipments/{shipmentNumber}/attachments":{"get":{"tags":["Shipments"],"description":"Returns a list of available shipment-related attachment files (photos and/or signature) for the specified shipment **only if the shipment belongs to the authenticated client**.\n","parameters":[{"in":"path","name":"shipmentNumber","required":true,"description":"Shipment`s numbers.","schema":{"type":"string"}}],"responses":{"200":{"description":"Metadata structure","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"shipmentId":{"type":"integer","description":"Internal ID of the shipment."},"storageInfo":{"type":"object","description":"Contains information about the file.","properties":{"id":{"type":"string","description":"Unique file identifier {fileId} of the stored file."},"name":{"type":"string","description":"File name."},"documentType":{"type":"string","description":"Type of the document:\n- Signature\n- ProofOfDelivery\n"}}},"createdAt":{"type":"string","description":"Date and time when the file was uploaded. Date in ISO 8601 format."}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"description":"Possible Error Responses","content":{"application/json":{}}},"503":{"$ref":"#/components/responses/Time-out"}},"summary":"List attachments"}}}}
```

## Download attachment

> Returns the \*\*stream of the file\*\* specified by fileId, if the shipment belongs to the authenticated client.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Shipments"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}},"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Time-out":{"description":"Connection time-out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}}},"paths":{"/shipments/{shipmentNumber}/attachments/{fileId}":{"get":{"tags":["Shipments"],"description":"Returns the **stream of the file** specified by fileId, if the shipment belongs to the authenticated client.\n","parameters":[{"in":"path","name":"shipmentNumber","required":true,"description":"Shipment`s numbers.","schema":{"type":"string"}},{"in":"path","name":"fileId","required":true,"description":"Unique file identifier.","schema":{"type":"string"}}],"responses":{"200":{"description":"A file.","content":{"application/pdf":{"schema":{"type":"string","format":"binary"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"description":"Unprocessable Entity","content":{"application/json":{}}},"503":{"$ref":"#/components/responses/Time-out"}},"summary":"Download attachment"}}}}
```


# Repeat Delivery

## Create Repeat Delivery

> This method creates a Repeat Delivery request for a shipment that is currently stored at a long-term storage warehouse (LTS).\
> \
> Key rules:\
> \- Available only for shipments currently at long-term storage (LTS).\
> \- A maximum of 4 completed Repeat Delivery services is allowed per shipment.\
> \- A Repeat Delivery service cannot be ordered if the shipment already has a Redirecting, Return, or Repeat Delivery request in the \`NeedProcessing\` or \`InProgress\` status.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Shipments"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}},"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Time-out":{"description":"Connection time-out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}}},"paths":{"/shipments/modification/repeat-delivery":{"post":{"tags":["Shipments"],"summary":"Create Repeat Delivery","description":"This method creates a Repeat Delivery request for a shipment that is currently stored at a long-term storage warehouse (LTS).\n\nKey rules:\n- Available only for shipments currently at long-term storage (LTS).\n- A maximum of 4 completed Repeat Delivery services is allowed per shipment.\n- A Repeat Delivery service cannot be ordered if the shipment already has a Redirecting, Return, or Repeat Delivery request in the `NeedProcessing` or `InProgress` status.\n","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["shipmentId","recipient"],"properties":{"shipmentId":{"type":"integer","description":"ID of the shipment at long-term storage.\n\n**🔻This field is required.**\n"},"payerType":{"type":"string","nullable":true,"description":"Identifies who is responsible for payment of the repeat delivery service.\n\nAllowed values:\n- Sender\n- Recipient\n- ThirdPerson\n\nIf the field is not provided, the order creator pays for the service.\n","enum":["Sender","Recipient","ThirdPerson"]},"payerContractNumber":{"type":"string","nullable":true,"description":"Required for B2B clients (legal entities with contract payment).\n"},"note":{"type":"string","description":"Any comment to the order.\n"},"recipient":{"type":"object","description":"Recipient details for re-delivery.\n\n**🔻This field is required.**\n","required":["name","phone","email","countryCode"],"properties":{"name":{"type":"string","description":"Recipient full name.\n\n**🔻This field is required.**\n"},"phone":{"type":"string","description":"Recipient phone number.\n\n**🔻This field is required.**\n"},"email":{"type":"string","description":"Recipient email.\n\n**🔻This field is required.**\n"},"companyTin":{"type":"string","nullable":true,"description":"Company tax identification number if the recipient is a Company.\n"},"companyName":{"type":"string","nullable":true,"description":"Company name.\n"},"countryCode":{"type":"string","description":"Delivery country code according to ISO 3166-1 alpha-2.\n\n**🔻This field is required.**\n","pattern":"^[A-Z]{2}$"},"eoriCode":{"type":"string","nullable":true,"description":"EORI code.\n"},"divisionId":{"type":"integer","nullable":true,"description":"Branch/postomat ID.\n\n**🔹This field is required if delivery is performed to a branch.**\n"},"settlementId":{"type":"integer","nullable":true,"description":"Settlement ID.\n"},"address":{"type":"object","nullable":true,"description":"Address object.\n"},"latitude":{"type":"number","nullable":true,"description":"Latitude coordinate.\n"},"longitude":{"type":"number","nullable":true,"description":"Longitude coordinate.\n"},"addressParts":{"type":"object","nullable":true,"description":"Address details for delivery.\n\nRequired if `divisionId` is null.\n\nIf `divisionId` is null, the delivery is performed to an address and the fields `city`, `street`, and `building` become required.\n","properties":{"city":{"type":"string","nullable":true,"description":"City name.\n\n**🔹This field is required if delivery is performed to an address.**\n"},"street":{"type":"string","nullable":true,"description":"Street name.\n\n**🔹This field is required if delivery is performed to an address.**\n"},"building":{"type":"string","nullable":true,"description":"Building number.\n\n**🔹This field is required if delivery is performed to an address.**\n"},"postCode":{"type":"string","nullable":true,"description":"Postal code.\n"},"region":{"type":"string","nullable":true,"description":"Region.\n"},"flat":{"type":"string","nullable":true,"description":"Flat/apartment number.\n"},"block":{"type":"string","nullable":true,"description":"Block.\n"},"note":{"type":"string","nullable":true,"description":"Additional delivery notes.\n"}}}}}}}}}},"responses":{"200":{"description":"Repeat Delivery order successfully created.","content":{"application/json":{"schema":{"type":"object","properties":{"cost":{"type":"number","description":"Delivery cost for the repeat delivery service."},"currency":{"type":"string","description":"Currency code according to ISO 4217."},"currencySymbol":{"type":"string","description":"Currency symbol."},"scheduledDeliveryDate":{"type":"string","format":"date-time","description":"Estimated delivery date in ISO 8601 format."}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"422":{"description":"Validation error.","content":{"application/json":{}}},"503":{"$ref":"#/components/responses/Time-out"}}}}}}
```

## Cancel Repeat Delivery

> The method cancels the current active Repeat Delivery request associated with the specified shipment.\
> \
> Use this method when you need to cancel a repeat delivery request that has not yet been processed. Cancellation is available only while the repeat delivery order is still being processed.\
> \
> \*\*Key rules:\*\*\
> \- Cancellation is available only while the repeat delivery order is still being processed.\
> \- Once a repeat delivery has been completed, it cannot be cancelled.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Shipments"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}}},"paths":{"/shipments/modification/repeat-delivery/delete/{shipmentID}":{"delete":{"tags":["Shipments"],"summary":"Cancel Repeat Delivery","description":"The method cancels the current active Repeat Delivery request associated with the specified shipment.\n\nUse this method when you need to cancel a repeat delivery request that has not yet been processed. Cancellation is available only while the repeat delivery order is still being processed.\n\n**Key rules:**\n- Cancellation is available only while the repeat delivery order is still being processed.\n- Once a repeat delivery has been completed, it cannot be cancelled.\n","operationId":"cancelRepeatDelivery","parameters":[{"name":"shipmentID","in":"path","required":true,"description":"The ID of the shipment for which the Repeat Delivery order should be cancelled.","schema":{"type":"integer"}}],"responses":{"200":{"description":"Repeat Delivery order successfully cancelled. Returns the cancellation timestamp.","content":{"application/json":{"schema":{"type":"object","properties":{"deletedAt":{"type":"string","description":"Timestamp when the Repeat Delivery order was cancelled.","pattern":"^20[0-9]{2}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{6}Z$"}},"required":["deletedAt"]}}}},"422":{"description":"Unprocessable Entity. The cancellation cannot be processed.","content":{"application/json":{}}}}}}}}
```


# Services


# COD


# Registers

## Get registries

> The method allows the user to get information about their registries or registries related to their profile in the registry.\
> \
> 🔸Registries are automatically filtered by creation source (\`clientapi\` or \`bc\`) depending on the method used.\</br>\
> 🔸Shipments that were removed from the registry are not included in the response.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}},"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Validation":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Time-out":{"description":"Connection time-out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}}},"paths":{"/registry":{"get":{"tags":["Registers"],"summary":"Get registries","description":"The method allows the user to get information about their registries or registries related to their profile in the registry.\n\n🔸Registries are automatically filtered by creation source (`clientapi` or `bc`) depending on the method used.</br>\n🔸Shipments that were removed from the registry are not included in the response.\n","parameters":[{"in":"query","name":"isEURegistry","description":"Indicates that European registries should be returned.\n","schema":{"type":"boolean"}},{"in":"query","name":"ids[]","description":"Unique registry identifiers for which information should be retrieved. This parameter is required if the `numbers` parameter is not specified.","schema":{"type":"array","items":{"type":"string"}}},{"in":"query","name":"numbers[]","description":"Unique registry number for which information should be retrieved. This parameter is required if the `ids` parameter is not specified.","schema":{"type":"array","items":{"type":"string"}}},{"in":"query","name":"settlementIds[]","description":"Unique settlement identifier.","schema":{"type":"array","items":{"type":"string"}}},{"in":"query","name":"withShipmentsInfo","description":"When set to `true`, the response includes extended shipment information in the `shipmentsInfo` array.\n\nIf omitted or set to `false`, the response contains only `shipmentId` and `shipmentNumber` in the `shipments` array.\n","schema":{"type":"boolean"}},{"in":"query","name":"createdAtFrom","description":"Start date of the registry filtering period. Used to retrieve records created from this date onwards (inclusive). The `createdAtFrom` field must be a date before `createdAtTo`","schema":{"type":"string","format":"date"}},{"in":"query","name":"createdAtTo","description":"End date of the registry filtering period. Used to retrieve records created before this date (exclusive).","schema":{"type":"string","format":"date"}},{"in":"query","name":"page","description":"Number of page to return.","schema":{"type":"integer"}},{"in":"query","name":"limit","description":"Max number of items to return on page.","schema":{"type":"integer"}}],"responses":{"200":{"description":"Registries list","content":{"application/json":{"schema":{"type":"object","properties":{"current_page":{"type":"integer","description":"Indicates the current page number in the paginated response.\n"},"last_page":{"type":"integer","description":"Total number of available pages calculated.\n"},"per_page":{"type":"integer","description":"Number of registry records returned per page.\n"},"total":{"type":"integer","description":"Total number of registries that match the request criteria.\n"},"items":{"type":"array","description":"Array of registry objects.\nEach registry aggregates shipments and related metadata.\n","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier of the registry generated by the system.\n"},"number":{"type":"string","description":"Registry number in the format:\nCR + country code + unique numeric identifier.\n"},"createdAt":{"type":"string","format":"date-time","description":"Date and time when the registry was created.\n"},"updatedAt":{"type":"string","format":"date-time","description":"Date and time of the last registry update.\n"},"deletedAt":{"type":"string","format":"date-time","description":"Date and time when the registry was deleted, if applicable.\n"},"posted":{"type":"boolean","description":"Indicates whether the registry has been posted (processed).\n- `true` — registry is processed\n- `false` — registry is not processed\n"},"printed":{"type":"boolean","description":"Indicates whether the registry has been printed.\n"},"description":{"type":"string","description":"User-defined name of the registry.\n"},"status":{"type":"string","description":"Current registry status.\n"},"type":{"type":"string","description":"Registry type.\nWhen created via API, the value is always `Client`.\n","enum":["Client"]},"createdByUser":{"type":"string","description":"Identifier of the user who created the registry.\n"},"scannedBarcodesAmount":{"type":"integer","description":"Number of shipments included in the registry.\n"},"source":{"type":"string","description":"Source of registry creation (for example, `clientapi`).\n"},"companyId":{"type":"string","description":"Company identification number.\n"},"companyTin":{"type":"string","description":"Company tax identification number.\n"},"companyName":{"type":"string","description":"Company name.\n"},"fullName":{"type":"string","description":"Full sender name from the first shipment in the registry.\n"},"phone":{"type":"string","description":"Sender phone number from the first shipment.\n"},"countryCode":{"type":"string","description":"ISO 3166-1 alpha-2 country code of the sender.\n"},"country":{"type":"string","description":"Country of the sender.\n"},"settlementId":{"type":"string","description":"Sender settlement identifier.\n"},"settlementName":{"type":"string","description":"Sender settlement name.\n"},"divisionId":{"type":"string","description":"Sender division identifier.\n"},"divisionName":{"type":"string","description":"Sender division name.\n"},"address":{"type":"string","description":"Full sender address in text format.\n"},"addressParts":{"type":"object","description":"Structured address object containing detailed address information.\n\nUsed for accurate routing, pickup, delivery, and customs processing.\n","properties":{"city":{"type":"string","description":"City name."},"region":{"type":"string","description":"Region, province, or administrative area."},"street":{"type":"string","description":"Street name."},"streetId":{"type":"string","description":"Unique street identifier."},"postCode":{"type":"string","description":"Postal or ZIP code."},"building":{"type":"string","description":"Building number or name."},"flat":{"type":"string","description":"Apartment or unit number."},"block":{"type":"string","description":"Block or section of the building."},"latitude":{"type":"number","description":"Geographic latitude coordinate."},"longitude":{"type":"number","description":"Geographic longitude coordinate."},"note":{"type":"string","description":"Additional address details or instructions."},"addressId":{"type":"string","description":"Unique address identifier in the system."}}},"currencyCode":{"type":"string","description":"Currency code.\n"},"shipments":{"type":"array","description":"Array of shipment objects included in the registry.\n\nReturned when `withShipmentsInfo` is omitted or set to `false`.\n","items":{"type":"object","properties":{"shipmentId":{"type":"string","description":"Unique shipment identifier.\n"},"shipmentNumber":{"type":"string","description":"Shipment number.\n"}}}},"shipmentsInfo":{"type":"array","description":"Array of shipment objects included in the registry.\n\nReturned when `withShipmentsInfo=true`.\n","items":{"type":"object","properties":{"id":{"type":"string","description":"Shipment identifier."},"number":{"type":"string","description":"Shipment number."},"totalWeight":{"type":"integer","description":"Total shipment weight in grams."},"totalCost":{"type":"number","description":"Total shipment value."},"currencyCode":{"type":"string","description":"Shipment currency code."},"invoice":{"type":"boolean","description":"Indicates whether an invoice exists."}}}}}}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/Validation"},"503":{"$ref":"#/components/responses/Time-out"}}}}}}
```

## Create a shipment registry

> The method is used to create a \*\*client registry of shipments\*\*, which combines multiple shipments into a single document for further processing.\
> \
> This method is available for shipments \*\*from anywhere in the world to anywhere in the world\*\*.\
> \
> \*\*Limitations for working with registers:\*\*\
> 1\. A shipment can be added to a register only if the sender’s data (city, counterparty, address) are identical for all shipments being added.\
> 2\. A shipment can be added only to one register — the same document cannot be added to multiple registers simultaneously.\
> 3\. A shipment can be added to a register only until an express waybill has been created for it (or until the shipment has been scanned at a Nova Post branch/unit).\
> 4\. A shipment marked for deletion cannot be added to a register.\
> 5\. The maximum number of shipments in a single register is \*\*100\*\*.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}},"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Validation":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Time-out":{"description":"Connection time-out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}}},"paths":{"/registry":{"post":{"tags":["Registers"],"summary":"Create a shipment registry","description":"The method is used to create a **client registry of shipments**, which combines multiple shipments into a single document for further processing.\n\nThis method is available for shipments **from anywhere in the world to anywhere in the world**.\n\n**Limitations for working with registers:**\n1. A shipment can be added to a register only if the sender’s data (city, counterparty, address) are identical for all shipments being added.\n2. A shipment can be added only to one register — the same document cannot be added to multiple registers simultaneously.\n3. A shipment can be added to a register only until an express waybill has been created for it (or until the shipment has been scanned at a Nova Post branch/unit).\n4. A shipment marked for deletion cannot be added to a register.\n5. The maximum number of shipments in a single register is **100**.\n","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["description","shipments"],"properties":{"description":{"type":"string","description":"Name of the registry."},"shipments":{"type":"array","description":"Array of unique shipment numbers for World parcels.\nEach shipment must belong to the same sender.\n","minItems":1,"maxItems":100,"uniqueItems":true,"items":{"type":"string","description":"Unique shipment number (World parcel)."}}},"description":"Registry creation request"}}}},"responses":{"200":{"description":"Registry successfully created.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier of the registry."},"number":{"type":"string","description":"Registry number in the format:\n`CR + alpha country code from the first shipment + unique number`.\n"},"versionTracking":{"type":"string","description":"Registry version tracking identifier."},"status":{"type":"string","description":"Registry status. After creation, the status is `Open`."},"createdAt":{"type":"string","format":"date-time","description":"Registry creation date."},"updatedAt":{"type":"string","format":"date-time","description":"Registry update date."},"deletedAt":{"type":"string","description":"Registry deletion date."},"posted":{"type":"boolean","description":"Registry posting status."},"printed":{"type":"boolean","description":"Registry printing status."},"scannedBarcodesAmount":{"type":"integer","description":"Number of shipments in the registry."},"forScanBarcodesAmount":{"type":"integer","description":"Number of shipments pending scanning."},"description":{"type":"string","description":"Registry name specified during creation."},"senderCompanyId":{"type":"string","description":"Sender company identifier."},"senderCompanyTin":{"type":"string","description":"Sender company TIN."},"senderPhone":{"type":"string","description":"Sender phone number."},"senderCountryCode":{"type":"string","description":"Sender country code in ISO 3166-1 alpha-2 format."},"senderSettlementId":{"type":"string","description":"Sender settlement identifier."},"senderSettlementExternalId":{"type":"string"},"senderSettlementName":{"type":"string","description":"Sender settlement name."},"senderDivisionId":{"type":"string","description":"Sender division identifier."},"senderDivisionExternalId":{"type":"string"},"senderDivisionName":{"type":"string","description":"Sender division name."},"senderAddress":{"type":"string","description":"Full sender address string."},"senderAddressParts":{"type":"object","description":"Structured sender address data.","properties":{"city":{"type":"string","description":"City name."},"region":{"type":"string","description":"Region or administrative area."},"street":{"type":"string","description":"Street name."},"streetId":{"type":"string","description":"Street identifier."},"postCode":{"type":"string","description":"Postal code."},"building":{"type":"string","description":"Building number."},"flat":{"type":"string","description":"Apartment or office number."},"block":{"type":"string","description":"Block or section."},"latitude":{"type":"number","format":"double","description":"Address latitude."},"longitude":{"type":"number","format":"double","description":"Address longitude."},"note":{"type":"string","description":"Additional address note."},"addressId":{"type":"string","description":"Address identifier."}}},"shipments":{"type":"array","description":"List of shipments added to the registry.","items":{"type":"object","properties":{"shipmentId":{"type":"string","description":"Unique shipment identifier."},"shipmentNumber":{"type":"string","description":"Unique shipment number."},"destinationDivision":{"type":"object","description":"Destination division information.","properties":{"name":{"type":"string","description":"Destination division name."},"id":{"type":"integer","description":"Destination division identifier."},"number":{"type":"string","description":"Destination division number."}}}}}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/Validation"},"503":{"$ref":"#/components/responses/Time-out"}}}}}}
```

## Add shipments to registry

> This method allows users to add a parcel to an existing shipment registry, which simplifies further shipping.\
> \
> The method supports:\
> \- European shipments (shipment numbers such as \`SHPL...\`)\
> \- Ukrainian shipments (MEN/ID identifiers)\
> \
> \*\*Limitations for working with registers:\*\*\
> \
> 1\. This method is available for shipments from anywhere in the world to anywhere in the world.\
> 2\. A shipment can be added to a register only if the sender’s data (city, counterparty, address) are identical for all shipments being added.\
> 4\. A shipment can be added to only one register — the same document cannot be added to multiple registers simultaneously.\
> 5\. A shipment can be added to a register only until an express waybill has been created for it (or until the shipment has been scanned at a Nova Poshta branch/unit).\
> 6\. A shipment marked for deletion cannot be added to a register.\
> 7\. The maximum number of shipments in a single register is \*\*100\*\*.\
> \
> This method is used to add already created shipments to an existing registry.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}},"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Validation":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Time-out":{"description":"Connection time-out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}}},"paths":{"/registry/{id}/shipments":{"post":{"tags":["Registers"],"summary":"Add shipments to registry","description":"This method allows users to add a parcel to an existing shipment registry, which simplifies further shipping.\n\nThe method supports:\n- European shipments (shipment numbers such as `SHPL...`)\n- Ukrainian shipments (MEN/ID identifiers)\n\n**Limitations for working with registers:**\n\n1. This method is available for shipments from anywhere in the world to anywhere in the world.\n2. A shipment can be added to a register only if the sender’s data (city, counterparty, address) are identical for all shipments being added.\n4. A shipment can be added to only one register — the same document cannot be added to multiple registers simultaneously.\n5. A shipment can be added to a register only until an express waybill has been created for it (or until the shipment has been scanned at a Nova Poshta branch/unit).\n6. A shipment marked for deletion cannot be added to a register.\n7. The maximum number of shipments in a single register is **100**.\n\nThis method is used to add already created shipments to an existing registry.\n","parameters":[{"in":"path","name":"id","required":true,"description":"Unique register identifier to which the shipment will be added.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["shipments"],"properties":{"shipments":{"type":"array","description":"Array of shipment identifiers that should be added to the registry.\nEach shipment must belong to the same sender.\n","minItems":1,"maxItems":100,"uniqueItems":true,"items":{"type":"string","description":"Unique shipment number."}}}}}}},"responses":{"200":{"description":"Registry","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier of the registry."},"number":{"type":"string","description":"Registry number."},"versionTracking":{"type":"integer","nullable":true,"description":"Registry version number."},"status":{"type":"string","description":"Registry status."},"createdAt":{"type":"string","format":"date-time","description":"Date of registry creation."},"updatedAt":{"type":"string","format":"date-time","description":"Date of registry update."},"deletedAt":{"type":"string","nullable":true,"description":"Date of registry deletion."},"posted":{"type":"boolean","description":"Mark of registry post."},"printed":{"type":"boolean","description":"Mark of registry print."},"scannedBarcodesAmount":{"type":"integer","description":"Number of shipments in the registry."},"description":{"type":"string","description":"User name of the registry."},"senderCompanyId":{"type":"string","nullable":true,"description":"Sender company identifier."},"senderCompanyTin":{"type":"string","description":"Sender company TIN."},"senderPhone":{"type":"string","description":"Sender phone number."},"senderCountryCode":{"type":"string","description":"Sender country code."},"senderSettlementId":{"type":"string","description":"Sender settlement identifier."},"senderSettlementExternalId":{"type":"string","nullable":true,"description":"External settlement identifier."},"senderSettlementName":{"type":"string","description":"Sender settlement name."},"senderDivisionId":{"type":"string","description":"Sender division identifier."},"senderDivisionExternalId":{"type":"string","nullable":true,"description":"External division identifier."},"senderDivisionName":{"type":"string","description":"Sender division name."},"senderAddress":{"type":"string","description":"Full sender address."},"senderAddressParts":{"type":"object","description":"Structured sender address information.","properties":{"city":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"street":{"type":"string","nullable":true},"streetId":{"type":"string","nullable":true},"postCode":{"type":"string","nullable":true},"building":{"type":"string","nullable":true},"flat":{"type":"string","nullable":true},"block":{"type":"string","nullable":true},"latitude":{"type":"number","nullable":true},"longitude":{"type":"number","nullable":true},"note":{"type":"string","nullable":true},"addressId":{"type":"string","nullable":true}}},"shipments":{"type":"array","description":"List of shipments included in the registry.","items":{"type":"object","properties":{"shipmentId":{"type":"string","description":"Unique shipment identifier."},"shipmentNumber":{"type":"string","description":"Shipment number."},"destinationDivision":{"type":"object","nullable":true,"description":"Destination division information. Returned for European registries.","properties":{"name":{"type":"string"},"id":{"type":"integer"},"number":{"type":"string"}}}}}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/Validation"},"503":{"$ref":"#/components/responses/Time-out"}}}}}}
```

## Remove shipments from registry

> The method allows users to delete shipment from an existing client registry.\
> \
> The method supports:\
> \- European shipments (shipment numbers such as \`SHPL...\`)\
> \- Ukrainian shipments (MEN/ID identifiers)<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}},"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Validation":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Time-out":{"description":"Connection time-out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}}},"paths":{"/registry/{id}/shipments":{"delete":{"tags":["Registers"],"summary":"Remove shipments from registry","description":"The method allows users to delete shipment from an existing client registry.\n\nThe method supports:\n- European shipments (shipment numbers such as `SHPL...`)\n- Ukrainian shipments (MEN/ID identifiers)\n","parameters":[{"in":"path","name":"id","required":true,"description":"Unique register identifier from which the shipment must be removed.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["shipments"],"properties":{"shipments":{"type":"array","description":"Array of shipment identifiers that should be removed from the registry.\nEach shipment must belong to the same sender.\n","minItems":1,"maxItems":100,"uniqueItems":true,"items":{"type":"string","description":"Unique shipment number."}}}}}}},"responses":{"200":{"description":"Shipment successfully removed from registry.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Unique registry identifier."},"number":{"type":"string","description":"Registry number."},"versionTracking":{"type":"integer","nullable":true,"description":"Registry version number."},"status":{"type":"string","nullable":true,"description":"Registry status."},"createdAt":{"type":"string","format":"date-time","description":"Registry creation date and time."},"updatedAt":{"type":"string","format":"date-time","nullable":true,"description":"Registry update date and time."},"deletedAt":{"type":"string","format":"date-time","nullable":true,"description":"Registry deletion date and time."},"posted":{"type":"boolean","nullable":true,"description":"Indicates whether the registry has been posted."},"printed":{"type":"boolean","nullable":true,"description":"Indicates whether the registry has been printed."},"scannedBarcodesAmount":{"type":"integer","nullable":true,"description":"Number of shipments in the registry."},"description":{"type":"string","description":"Registry name."},"senderCompanyId":{"type":"string","nullable":true,"description":"Sender company identifier."},"senderCompanyTin":{"type":"string","description":"Sender company TIN."},"senderPhone":{"type":"string","description":"Sender phone number."},"senderCountryCode":{"type":"string","description":"Sender country code (ISO Alpha-2)."},"senderSettlementId":{"type":"string","description":"Sender settlement identifier."},"senderSettlementExternalId":{"type":"string","nullable":true,"description":"External settlement identifier."},"senderSettlementName":{"type":"string","description":"Sender settlement name."},"senderDivisionId":{"type":"string","description":"Sender division identifier."},"senderDivisionExternalId":{"type":"string","nullable":true,"description":"External division identifier."},"senderDivisionName":{"type":"string","description":"Sender division name."},"senderAddress":{"type":"string","description":"Sender address."},"senderAddressParts":{"type":"object","description":"Structured sender address."},"shipments":{"type":"array","description":"List of shipments remaining in the registry.","items":{"type":"object","properties":{"shipmentId":{"type":"string","description":"Shipment identifier."},"shipmentNumber":{"type":"string","description":"Shipment number."}}}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/Validation"},"503":{"$ref":"#/components/responses/Time-out"}}}}}}
```

## Rename registry

> The method allows users to rename an existing registry.\
> \
> The method supports:\
> \- European shipments (shipment numbers such as \`SHPL...\`)\
> \- Ukrainian shipments (MEN/ID identifiers)<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}},"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Validation":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Time-out":{"description":"Connection time-out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}}},"paths":{"/registry/{id}/rename":{"put":{"tags":["Registers"],"summary":"Rename registry","description":"The method allows users to rename an existing registry.\n\nThe method supports:\n- European shipments (shipment numbers such as `SHPL...`)\n- Ukrainian shipments (MEN/ID identifiers)\n","parameters":[{"in":"path","name":"id","required":true,"description":"Unique register identifier.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["description"],"properties":{"description":{"type":"string","description":"New name of registry."}}}}}},"responses":{"200":{"description":"Request successful. The registry was renamed.","content":{"application/json":{"schema":{"type":"object","required":["success"],"properties":{"id":{"type":"string","description":"Unique registry identifier."},"number":{"type":"string","description":"Registry number."},"versionTracking":{"type":"integer","nullable":true,"description":"Registry version number."},"status":{"type":"string","nullable":true,"description":"Registry status."},"createdAt":{"type":"string","format":"date-time","description":"Registry creation date and time."},"updatedAt":{"type":"string","format":"date-time","nullable":true,"description":"Registry update date and time."},"deletedAt":{"type":"string","format":"date-time","nullable":true,"description":"Registry deletion date and time."},"posted":{"type":"boolean","nullable":true,"description":"Indicates whether the registry has been posted."},"printed":{"type":"boolean","nullable":true,"description":"Indicates whether the registry has been printed."},"scannedBarcodesAmount":{"type":"integer","nullable":true,"description":"Number of shipments in the registry."},"description":{"type":"string","description":"Registry name."},"senderCompanyId":{"type":"string","nullable":true,"description":"Sender company identifier."},"senderCompanyTin":{"type":"string","description":"Sender company TIN."},"senderPhone":{"type":"string","description":"Sender phone number."},"senderCountryCode":{"type":"string","description":"Sender country code (ISO Alpha-2)."},"senderSettlementId":{"type":"string","description":"Sender settlement identifier."},"senderSettlementExternalId":{"type":"string","nullable":true,"description":"External settlement identifier."},"senderSettlementName":{"type":"string","description":"Sender settlement name."},"senderDivisionId":{"type":"string","description":"Sender division identifier."},"senderDivisionExternalId":{"type":"string","nullable":true,"description":"External division identifier."},"senderDivisionName":{"type":"string","description":"Sender division name."},"senderAddress":{"type":"string","description":"Sender address."},"senderAddressParts":{"type":"object","description":"Structured sender address."},"shipments":{"type":"array","description":"Shipments included in the registry.","items":{"type":"object","properties":{"shipmentId":{"type":"string","description":"Shipment identifier."},"shipmentNumber":{"type":"string","description":"Shipment number."}}}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/Validation"},"503":{"$ref":"#/components/responses/Time-out"}}}}}}
```

## Delete registry

> The method allows users to delete an existing registry.\
> \
> 🔸Currently, deleting the registry is only possible after deleting all shipments from the registry.\
> \
> The method supports:\
> \- European shipments (shipment numbers such as \`SHPL...\`)\
> \- Ukrainian shipments (MEN/ID identifiers)<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}},"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Validation":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Time-out":{"description":"Connection time-out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}}},"paths":{"/registry/{id}":{"delete":{"tags":["Registers"],"summary":"Delete registry","description":"The method allows users to delete an existing registry.\n\n🔸Currently, deleting the registry is only possible after deleting all shipments from the registry.\n\nThe method supports:\n- European shipments (shipment numbers such as `SHPL...`)\n- Ukrainian shipments (MEN/ID identifiers)\n","parameters":[{"in":"path","name":"id","required":true,"description":"Unique register identifier of the registry to be deleted.","schema":{"type":"string"}}],"responses":{"200":{"description":"Request successful. The registry was deleted.","content":{"application/json":{"schema":{"type":"object","required":["success"],"properties":{"success":{"type":"boolean","description":"Indicates whether the registry was successfully deleted."}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/Validation"},"503":{"$ref":"#/components/responses/Time-out"}}}}}}
```

## Print parcel registry

> The method allows users to receive a generated PDF file with a list of client parcels for further printing.\
> \
> The response is returned as a generated file and contains a printable register with the list of shipments included in the selected registry.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}}},"paths":{"/registry/print":{"get":{"tags":["Registers"],"summary":"Print parcel registry","description":"The method allows users to receive a generated PDF file with a list of client parcels for further printing.\n\nThe response is returned as a generated file and contains a printable register with the list of shipments included in the selected registry.\n","parameters":[{"in":"query","name":"id","required":true,"description":"Registry identifier in the system.","schema":{"type":"integer"}},{"in":"query","name":"type","required":false,"description":"Type of printable document.\n\nApplicable only to **Ukrainian** registries.\n\nAvailable values:\n- `international` - international shipment documents\n- `invoice` - shipment invoices\n- `marking` - shipment marking labels\n","schema":{"type":"string","enum":["international","invoice","marking"]}},{"in":"query","name":"printSizeType","required":false,"description":"Marking print size.\n\nApplicable only to **Ukrainian** registries.\n\nRequired for `type=marking`.\n","schema":{"type":"string","enum":["size_100_100"]}},{"in":"query","name":"copies","required":false,"description":"Number of copies of the printed document.","schema":{"type":"integer","default":1}}],"responses":{"200":{"description":"Generated file.","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"422":{"description":"Unprocessable entity.","content":{"application/json":{"schema":{"type":"object","properties":{"errorCode":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}},"500":{"description":"Internal Server Error.","content":{"application/json":{"schema":{"type":"object","properties":{"errorCode":{"type":"string"},"message":{"type":"string"}}}}}}}}}}}
```


# Pickups

## Retrieve list of courier pickup requests

> This method allows business clients to retrieve a list of all courier pickup requests they have created. Clients can filter the list using specific parameters such as pickup IDs or pickup numbers.\
> \
> \*\*CourierPickupService\*\*:\</br>\
> This service allows business clients to request a paid courier pickup without pre-creating shipments.\
> \
> \*\*Behavior\*\*:\</br>\
> A pickup request using the \`CourierPickupService\` service can reach the \`Created\` status without any associated shipments. Shipments can be added later after the pickup request is created.\
> \
> \*\*Permissions\*\*:\</br>\
> This service is restricted and available only for authorized business accounts according to individual contract terms. The service is currently available in Moldova.\
> \
> If the service is not available in your account, please contact your Nova Post account manager or Sales representative.\
> \
> This method is available to business clients in EU countries where Nova Post operates.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Pickups"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}},"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Validation":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Time-out":{"description":"Connection time-out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}}},"paths":{"/pickups":{"get":{"tags":["Pickups"],"description":"This method allows business clients to retrieve a list of all courier pickup requests they have created. Clients can filter the list using specific parameters such as pickup IDs or pickup numbers.\n\n**CourierPickupService**:</br>\nThis service allows business clients to request a paid courier pickup without pre-creating shipments.\n\n**Behavior**:</br>\nA pickup request using the `CourierPickupService` service can reach the `Created` status without any associated shipments. Shipments can be added later after the pickup request is created.\n\n**Permissions**:</br>\nThis service is restricted and available only for authorized business accounts according to individual contract terms. The service is currently available in Moldova.\n\nIf the service is not available in your account, please contact your Nova Post account manager or Sales representative.\n\nThis method is available to business clients in EU countries where Nova Post operates.\n","parameters":[{"in":"query","name":"numbers[]","description":"Search pickups by document number. Can accept either a single search number or an array of numbers for conducting the search.","schema":{"type":"string"}},{"in":"query","name":"ids[]","description":"A list of pickup request IDs to search. Can accept either a single search number or an array of numbers for conducting the search.\n\n🔹The id can be obtained from the [Create a courier pickup request](https://api-portal.novapost.com/metodi-1/methods/pickups#post-pickups) response or by searching for the pickup request by its document number.\n","schema":{"type":"integer","format":"int32"}},{"in":"query","name":"serviceCodes[]","description":"Filter pickup requests by service code.\n\nAllowed values:\n- CourierPickupService\n\nReturns only pickup requests that contain the specified service.\n","schema":{"type":"string"}},{"in":"query","name":"limit","description":"Max number of items to return on page.","schema":{"type":"integer","format":"int32","default":15}},{"in":"query","name":"page","description":"Number of page to return.","schema":{"type":"integer","format":"int32"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ids":{"type":"string","description":"A list of pickup request IDs to search.","maxLength":296132}}}}}},"responses":{"200":{"description":"List of courier pickup requests retrieved successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"current_page":{"type":"integer","description":"The current page of results in the paginated response.","minimum":1},"last_page":{"type":"integer","description":"The last available page in the paginated response.","minimum":1},"per_page":{"type":"integer","description":"The number of items per page.","minimum":1},"total":{"type":"integer","description":"Total number of pickup requests matching the filter criteria.","minimum":0},"items":{"type":"array","description":"List of pickup requests.","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the pickup request.","minimum":1},"number":{"type":"string","description":"Reference number for the pickup request.","pattern":"^[A-Z]{4}\\d{10}$"},"status":{"type":"string","description":"Current pickup status, representing the different stages in the pickup process.\n\nPossible values include:\n- **Draft**: Initial stage where the pickup request is created but not yet finalized.\n- **Created**: The pickup request has been created and is ready for processing.\n- **AppointedCourier**: A courier has been assigned to the pickup request.\n- **InProgress**: The pickup process is underway.\n- **Done**: The pickup has been successfully completed.\n- **ClientCanceled**: The pickup was canceled by the client.\n- **NotCompleted**: The pickup process could not be completed.\n- **Deleted**: The pickup request has been removed from the system.\n- **ReceivedByCourier**: The parcel has been received by the courier.\n"},"statusDateTime":{"type":"string","format":"date-time","description":"Date-time of the last status update.","pattern":"^20[0-9]{2}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{6}Z$"},"source":{"type":"string","description":"Source of the request creation (e.g., API, Web)."},"executor":{"type":"string","description":"Identifier of the executor (courier or service)."},"companyTin":{"type":"string","description":"The tax identification number (TIN) of a legal entity."},"companyName":{"type":"string","description":"Name of the company creating the request."},"fullName":{"type":"string","description":"Full name of the client sending the parcel.","maxLength":100},"phone":{"type":"string","description":"The contact phone number of the sender.","minLength":8,"maxLength":14},"email":{"type":"string","description":"Contact email address, if applicable.","nullable":true},"countryCode":{"type":"string","description":"ISO Alpha-2 code for the pickup location.","pattern":"^[A-Z]{2}$"},"externalId":{"type":"string","description":"External identifier of the pickup request provided by the client."},"createdByUser":{"type":"string","description":"User ID of the person who created the request."},"divisionId":{"type":"integer","description":"Division ID responsible for handling the request."},"settlementId":{"type":"integer","description":"Settlement ID for the pickup location."},"cityDistrict":{"type":"string","description":"District of the city for the pickup."},"deliveryPartner":{"type":"string","description":"Delivery partner handling the request."},"lockVersion":{"type":"integer","description":"Version control number for preventing conflicts during updates."},"address":{"type":"object","description":"Full address details.","properties":{"address":{"type":"string","description":"Full formatted address."},"latitude":{"type":"string","description":"Latitude coordinate of the pickup location."},"longitude":{"type":"string","description":"Longitude coordinate of the pickup location."},"timeZoneId":{"type":"integer","description":"Time Zone internal identificator."},"timeZone":{"type":"string","description":"Time Zone of the pickup location based on latitude and longitude."}}},"addressParts":{"type":"object","description":"Breakdown of address details.","properties":{"postCode":{"type":"string","description":"Postal code of the pickup location.","maxLength":10},"building":{"type":"string","description":"Building number of the pickup location.","maxLength":100},"street":{"type":"string","description":"Street name for the pickup location.","maxLength":100},"city":{"type":"string","description":"City name for the pickup location.","maxLength":100},"region":{"type":"string","description":"Region name for the pickup location.","maxLength":100},"flat":{"type":"string","description":"Flat or apartment number.","maxLength":10},"note":{"type":"string","description":"Additional notes for the address.","maxLength":100},"block":{"type":"string","description":"Block or building section.","maxLength":100,"nullable":true}}},"pickedTimeFrom":{"type":"string","format":"date-time","description":"Start of the pickup time window, specified in request.","pattern":"^20[0-9]{2}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{6}Z$","nullable":true},"pickedTimeTo":{"type":"string","format":"date-time","description":"End time for the pickup window, specified in request.","pattern":"^20[0-9]{2}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{6}Z$","nullable":true},"currencyCode":{"type":"string","description":"Currency code of the country used for payment transactions.","pattern":"^[A-Z]{3}$"},"shipments":{"type":"array","items":{"type":"object"},"description":"List of shipments associated with this pickup request."},"services":{"type":"array","description":"List of additional services associated with the pickup request.","items":{"type":"object","properties":{"id":{"type":"integer","description":"Unique service identifier."},"shipmentParcelRowNumber":{"type":"string","description":"Parcel row number associated with the service.","nullable":true},"serviceId":{"type":"string","description":"Internal service identifier."},"pickupId":{"type":"integer","description":"Pickup request identifier."},"serviceType":{"type":"string","description":"Internal service type."},"serviceName":{"type":"string","description":"Service name.","nullable":true},"serviceCode":{"type":"string","description":"Service code."},"parcelNumber":{"type":"string","description":"Associated parcel number.","nullable":true},"payerType":{"type":"string","description":"Party responsible for payment."},"contractNumber":{"type":"string","description":"Contract number used for service payment."},"amount":{"type":"number","description":"Service amount."},"price":{"type":"number","description":"Service price before discounts."},"discount":{"type":"number","description":"Applied discount amount."},"cost":{"type":"number","description":"Final service cost."},"costBeforeCheck":{"type":"boolean","description":"Indicates whether the cost was calculated before validation."},"paymentStatus":{"type":"string","description":"Current payment status."},"currencyCode":{"type":"string","description":"ISO 4217 currency code."},"executionAt":{"type":"string","format":"date-time","description":"Date and time of service execution."},"additionalParameters":{"type":"object","description":"Planned cargo parameters provided for the CourierPickupService.","properties":{"parcel_description":{"type":"string","description":"Description of the cargo."},"parcels_amount":{"type":"number","description":"Planned number of parcels."},"total_actual_weight":{"type":"number","description":"Total planned actual weight."},"total_volumetric_weight":{"type":"number","description":"Total planned volumetric weight."},"length":{"type":"number","description":"Planned parcel length."},"width":{"type":"number","description":"Planned parcel width."},"height":{"type":"number","description":"Planned parcel height."}}}}}},"statuses":{"type":"array","description":"Array of status objects tracking pickup status changes.","items":{"type":"object","properties":{"id":{"type":"integer","description":"Unique status identifier.","minimum":1},"pickupId":{"type":"integer","description":"Pickup request ID.","minimum":1},"status":{"type":"string","description":"Current pickup status, representing the different stages in the pickup process.\n\nPossible values include: `Draft`, `Created`, `AppointedCourier`, `InProgress`, `Done`, `ClientCanceled`, `NotCompleted`, `Deleted`, `ReceivedByCourier`.\n"},"dateTime":{"type":"string","format":"date-time","description":"Date and time of status update.","pattern":"^20[0-9]{2}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{6}Z$"},"note":{"type":"string","description":"Optional notes related to the status.","maxLength":255,"nullable":true},"user":{"type":"string","description":"User ID who changed the status.","maxLength":50},"createdAt":{"type":"string","format":"date-time","description":"Date-time of status creation.","pattern":"^20[0-9]{2}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{6}Z$"},"updatedAt":{"type":"string","format":"date-time","description":"Date-time of the last update.","pattern":"^20[0-9]{2}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{6}Z$"},"deletedAt":{"type":"string","format":"date-time","description":"Date-time of delete, if applicable.","pattern":"^20[0-9]{2}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{6}Z$","nullable":true}}}},"createdAt":{"type":"string","format":"date-time","description":"Date-time when the pickup request was created."},"updatedAt":{"type":"string","format":"date-time","description":"Date-time when the pickup request was last updated."},"deletedAt":{"type":"string","format":"date-time","description":"Date-time when the pickup request was deleted, if applicable.","nullable":true}}}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/Validation"},"503":{"$ref":"#/components/responses/Time-out"}},"summary":"Retrieve list of courier pickup requests"}}}}
```

## Retrieve available pickup time intervals

> This method retrieves available time intervals for pickups. \
> The algorithm operates based on geographical zones serviced by couriers.\
> These zones are conditional areas on a map defined by logistical features of courier operations.\
> Depending on the pickup location, the system identifies the specific courier responsible for that zone and returns the detailed time intervals available for pickup.\
> \
> \*\*Mandatory Parameters:\*\*\
> \- \`countryCode\`: Specifies the country code according to ISO 3166-1 Alpha-2 standard.\
> \- \`type\`: Defines the type of pickup. Allowed values are \`PickupDayToDay\` (same-day pickup) or \`PickupNextDay\` (next-day pickup).\
> \
> If only these two parameters are provided, the method will return general courier working hours for the specified country without detailed intervals for a specific location or zone.\
> \
> \*\*Recommended Parameters for Accurate Results:\*\*\
> \- \`addressParts\`: Provide the full pickup address, including building, street, city, region, and postal code. This ensures precise time intervals are returned for the specified address.\
> \- \`latitude\` and \`longitude\`: Use geographical coordinates if a full address is not available to determine the zone.\
> \- \`divisionId\`: Specify the ID of the nearest division if the exact address is unknown. However, note that proximity to a division does not guarantee that the courier servicing the address operates from the same division.\
> \
> \*\*Additional Parameters:\*\*\
> \- \`weight\`: Time intervals may depend on the shipment's weight. This parameter is helpful for large or weight-sensitive shipments.\
> \
> \*\*Important Notes:\*\*\
> 1\. If only \`countryCode\` and \`type\` are provided, the system will return general working hours of couriers without detailed time intervals for a specific address.\
> 2\. For the most accurate time intervals, providing a full address or coordinates is strongly recommended.\
> \
> \*\*Time Interval Selection Logic:\*\*  \
> \- If a \`PickupDayToDay\` configuration exists:\
> &#x20; \- It takes priority over PickupNextDay.\
> &#x20; \- Today is available if:\
> &#x20;   \- Not a holiday (\`holiday == false\`);\
> &#x20;   \- A working schedule exists (\`from != null\`);\
> &#x20;   \- Current time < \`orderTo\`.\
> &#x20; \- Up to 7 calendar days (including today) may be returned if:\
> &#x20;   \- Not holidays;\
> &#x20;   \- \`from\` is set;\
> &#x20;   \- \`orderTo\` is only checked for today.\
> \- If no \`PickupDayToDay\`, but \`PickupNextDay\` is configured:\
> &#x20; \- Today is not available.\
> &#x20; \- Up to 7 calendar days (excluding today) may be returned if:\
> &#x20;   \- Not holidays;\
> &#x20;   \- \`from\` is set.\
> &#x20; \- \`orderTo\` applies \*\*only to tomorrow\*\*. If current time > \`orderTo\`, tomorrow is excluded.\
> \- If no time interval configuration exists (fallback mode):\
> &#x20; \- Today is not available.\
> &#x20; \- Up to 7 calendar days (excluding today, weekends, holidays) may be returned.\
> &#x20; \- A fixed \`orderTo = 17:00\` applies only to tomorrow.\
> &#x20; \
> \*\*Note:\*\*\
> If \`from\` is set but \`timeIntervals\` is empty, the courier will arrive \*\*sometime during the day\*\* without a fixed slot.\
> This logic applies \*\*to all types\*\* of configurations.\
> \
> \*\*Validation behavior:\*\*  \
> \- If the selected day is no longer valid, the system automatically assigns the next available valid day.\
> \- If the time interval is invalid or empty, the courier will arrive during the full working period.\
> \
> \*\*Recommendation:\*\*  \
> Providing full address details or coordinates is strongly recommended to ensure accurate time interval results.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Pickups"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}},"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Validation":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Time-out":{"description":"Connection time-out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}}},"paths":{"/time-intervals/find":{"post":{"tags":["Pickups"],"description":"This method retrieves available time intervals for pickups. \nThe algorithm operates based on geographical zones serviced by couriers.\nThese zones are conditional areas on a map defined by logistical features of courier operations.\nDepending on the pickup location, the system identifies the specific courier responsible for that zone and returns the detailed time intervals available for pickup.\n\n**Mandatory Parameters:**\n- `countryCode`: Specifies the country code according to ISO 3166-1 Alpha-2 standard.\n- `type`: Defines the type of pickup. Allowed values are `PickupDayToDay` (same-day pickup) or `PickupNextDay` (next-day pickup).\n\nIf only these two parameters are provided, the method will return general courier working hours for the specified country without detailed intervals for a specific location or zone.\n\n**Recommended Parameters for Accurate Results:**\n- `addressParts`: Provide the full pickup address, including building, street, city, region, and postal code. This ensures precise time intervals are returned for the specified address.\n- `latitude` and `longitude`: Use geographical coordinates if a full address is not available to determine the zone.\n- `divisionId`: Specify the ID of the nearest division if the exact address is unknown. However, note that proximity to a division does not guarantee that the courier servicing the address operates from the same division.\n\n**Additional Parameters:**\n- `weight`: Time intervals may depend on the shipment's weight. This parameter is helpful for large or weight-sensitive shipments.\n\n**Important Notes:**\n1. If only `countryCode` and `type` are provided, the system will return general working hours of couriers without detailed time intervals for a specific address.\n2. For the most accurate time intervals, providing a full address or coordinates is strongly recommended.\n\n**Time Interval Selection Logic:**  \n- If a `PickupDayToDay` configuration exists:\n  - It takes priority over PickupNextDay.\n  - Today is available if:\n    - Not a holiday (`holiday == false`);\n    - A working schedule exists (`from != null`);\n    - Current time < `orderTo`.\n  - Up to 7 calendar days (including today) may be returned if:\n    - Not holidays;\n    - `from` is set;\n    - `orderTo` is only checked for today.\n- If no `PickupDayToDay`, but `PickupNextDay` is configured:\n  - Today is not available.\n  - Up to 7 calendar days (excluding today) may be returned if:\n    - Not holidays;\n    - `from` is set.\n  - `orderTo` applies **only to tomorrow**. If current time > `orderTo`, tomorrow is excluded.\n- If no time interval configuration exists (fallback mode):\n  - Today is not available.\n  - Up to 7 calendar days (excluding today, weekends, holidays) may be returned.\n  - A fixed `orderTo = 17:00` applies only to tomorrow.\n  \n**Note:**\nIf `from` is set but `timeIntervals` is empty, the courier will arrive **sometime during the day** without a fixed slot.\nThis logic applies **to all types** of configurations.\n\n**Validation behavior:**  \n- If the selected day is no longer valid, the system automatically assigns the next available valid day.\n- If the time interval is invalid or empty, the courier will arrive during the full working period.\n\n**Recommendation:**  \nProviding full address details or coordinates is strongly recommended to ensure accurate time interval results.\n","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"Type of time interval. Allowed values are `PickupDayToDay` or `PickupNextDay`.","enum":["PickupDayToDay","PickupNextDay"]},"countryCode":{"type":"string","description":"Country code according to the ISO 3166-1 Alpha-2 standard.","pattern":"^[A-Z]{2}$"},"divisionId":{"type":"integer","description":"Division ID for specific branch identification.","minimum":1,"nullable":true},"latitude":{"type":"number","description":"Latitude for geolocation-based search.","minimum":-90,"maximum":90,"nullable":true},"longitude":{"type":"number","description":"Longitude for geolocation-based search.","minimum":-180,"maximum":180,"nullable":true},"maxWeightPlaceRecipient":{"type":"integer","description":"Weight of the shipment in kilograms. Optional for non-weight-sensitive intervals.","minimum":0,"nullable":true},"addressParts":{"type":"object","description":"Full address details for location-based interval search. If not provided, latitude and longitude will be used.","nullable":true,"properties":{"building":{"type":"string","description":"Building number or identifier.","maxLength":100},"street":{"type":"string","description":"Street name.","maxLength":100},"city":{"type":"string","description":"City name.","maxLength":100},"region":{"type":"string","description":"Region or administrative area.","maxLength":100},"postCode":{"type":"string","description":"Postal code.","maxLength":10},"flat":{"type":"string","description":"Flat or apartment number, if applicable.","maxLength":10,"nullable":true},"note":{"type":"string","description":"Additional notes for location identification.","maxLength":100,"nullable":true}}}},"required":["type","countryCode"]}}}},"responses":{"200":{"description":"Time intervals retrieved successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","description":"Unique identifier for the time interval.","minimum":1},"countryCode":{"type":"string","description":"Country code according to the ISO 3166-1 Alpha-2 standard.","pattern":"^[A-Z]{2}$"},"divisionId":{"type":"integer","description":"Division ID related to the time interval.","minimum":1,"nullable":true},"type":{"type":"string","description":"The type of the time interval.","enum":["PickupDayToDay","PickupNextDay"]},"deliveryPartner":{"type":"string","description":"Partner responsible for the pickup, if applicable.","nullable":true},"ignoreNonWorkingDays":{"type":"boolean","description":"Whether to include non-working days in the search."},"monday":{"type":"object","description":"Time intervals available on Monday.","properties":{"from":{"type":"string","description":"Start time of the interval.","pattern":"^(([0,1][0-9]|(2[0-3]))|([0-9])):[0-5][0-9]$","nullable":true},"to":{"type":"string","description":"End time of the interval.","pattern":"^(([0,1][0-9]|(2[0-3]))|([0-9])):[0-5][0-9]$","nullable":true},"orderTo":{"type":"string","description":"Time until which an order can be placed for the interval.","pattern":"^(([0,1][0-9]|(2[0-3]))|([0-9])):[0-5][0-9]$","nullable":true},"timeIntervals":{"type":"array","items":{"type":"object","properties":{"from":{"type":"string","description":"Start time of the sub-interval.","pattern":"^(([0,1][0-9]|(2[0-3]))|([0-9])):[0-5][0-9]$","nullable":true},"to":{"type":"string","description":"End time of the sub-interval.","pattern":"^(([0,1][0-9]|(2[0-3]))|([0-9])):[0-5][0-9]$","nullable":true},"orderTo":{"type":"string","description":"Time until which an order can be placed for the sub-interval.","pattern":"^(([0,1][0-9]|(2[0-3]))|([0-9])):[0-5][0-9]$","nullable":true}}}}}},"tuesday":{"type":"object","description":"Time intervals available on Tuesday.","properties":{"from":{"type":"string","description":"Start time of the interval.","pattern":"^(([0,1][0-9]|(2[0-3]))|([0-9])):[0-5][0-9]$","nullable":true},"to":{"type":"string","description":"End time of the interval.","pattern":"^(([0,1][0-9]|(2[0-3]))|([0-9])):[0-5][0-9]$","nullable":true},"orderTo":{"type":"string","description":"Time until which an order can be placed for the interval.","pattern":"^(([0,1][0-9]|(2[0-3]))|([0-9])):[0-5][0-9]$","nullable":true},"timeIntervals":{"type":"array","items":{"type":"object","properties":{"from":{"type":"string","description":"Start time of the sub-interval.","pattern":"^(([0,1][0-9]|(2[0-3]))|([0-9])):[0-5][0-9]$","nullable":true},"to":{"type":"string","description":"End time of the sub-interval.","pattern":"^(([0,1][0-9]|(2[0-3]))|([0-9])):[0-5][0-9]$","nullable":true},"orderTo":{"type":"string","description":"Time until which an order can be placed for the sub-interval.","pattern":"^(([0,1][0-9]|(2[0-3]))|([0-9])):[0-5][0-9]$","nullable":true}}}}}},"wednesday":{"type":"object","description":"Time intervals available on Wednesday.","properties":{"from":{"type":"string","description":"Start time of the interval.","pattern":"^(([0,1][0-9]|(2[0-3]))|([0-9])):[0-5][0-9]$","nullable":true},"to":{"type":"string","description":"End time of the interval.","pattern":"^(([0,1][0-9]|(2[0-3]))|([0-9])):[0-5][0-9]$","nullable":true},"orderTo":{"type":"string","description":"Time until which an order can be placed for the interval.","pattern":"^(([0,1][0-9]|(2[0-3]))|([0-9])):[0-5][0-9]$","nullable":true},"timeIntervals":{"type":"array","items":{"type":"object","properties":{"from":{"type":"string","description":"Start time of the sub-interval.","pattern":"^(([0,1][0-9]|(2[0-3]))|([0-9])):[0-5][0-9]$","nullable":true},"to":{"type":"string","description":"End time of the sub-interval.","pattern":"^(([0,1][0-9]|(2[0-3]))|([0-9])):[0-5][0-9]$","nullable":true},"orderTo":{"type":"string","description":"Time until which an order can be placed for the sub-interval.","pattern":"^(([0,1][0-9]|(2[0-3]))|([0-9])):[0-5][0-9]$","nullable":true}}}}}},"thursday":{"type":"object","description":"Time intervals available on Thursday.","properties":{"from":{"type":"string","description":"Start time of the interval.","pattern":"^(([0,1][0-9]|(2[0-3]))|([0-9])):[0-5][0-9]$","nullable":true},"to":{"type":"string","description":"End time of the interval.","pattern":"^(([0,1][0-9]|(2[0-3]))|([0-9])):[0-5][0-9]$","nullable":true},"orderTo":{"type":"string","description":"Time until which an order can be placed for the interval.","pattern":"^(([0,1][0-9]|(2[0-3]))|([0-9])):[0-5][0-9]$","nullable":true},"timeIntervals":{"type":"array","items":{"type":"object","properties":{"from":{"type":"string","description":"Start time of the sub-interval.","pattern":"^(([0,1][0-9]|(2[0-3]))|([0-9])):[0-5][0-9]$","nullable":true},"to":{"type":"string","description":"End time of the sub-interval.","pattern":"^(([0,1][0-9]|(2[0-3]))|([0-9])):[0-5][0-9]$","nullable":true},"orderTo":{"type":"string","description":"Time until which an order can be placed for the sub-interval.","pattern":"^(([0,1][0-9]|(2[0-3]))|([0-9])):[0-5][0-9]$","nullable":true}}}}}},"friday":{"type":"object","description":"Time intervals available on Friday.","properties":{"from":{"type":"string","description":"Start time of the interval.","pattern":"^(([0,1][0-9]|(2[0-3]))|([0-9])):[0-5][0-9]$","nullable":true},"to":{"type":"string","description":"End time of the interval.","pattern":"^(([0,1][0-9]|(2[0-3]))|([0-9])):[0-5][0-9]$","nullable":true},"orderTo":{"type":"string","description":"Time until which an order can be placed for the interval.","pattern":"^(([0,1][0-9]|(2[0-3]))|([0-9])):[0-5][0-9]$","nullable":true},"timeIntervals":{"type":"array","items":{"type":"object","properties":{"from":{"type":"string","description":"Start time of the sub-interval.","pattern":"^(([0,1][0-9]|(2[0-3]))|([0-9])):[0-5][0-9]$","nullable":true},"to":{"type":"string","description":"End time of the sub-interval.","pattern":"^(([0,1][0-9]|(2[0-3]))|([0-9])):[0-5][0-9]$","nullable":true},"orderTo":{"type":"string","description":"Time until which an order can be placed for the sub-interval.","pattern":"^(([0,1][0-9]|(2[0-3]))|([0-9])):[0-5][0-9]$","nullable":true}}}}}},"saturday":{"type":"object","description":"Time intervals available on Saturday.","properties":{"from":{"type":"string","description":"Start time of the interval.","pattern":"^(([0,1][0-9]|(2[0-3]))|([0-9])):[0-5][0-9]$","nullable":true},"to":{"type":"string","description":"End time of the interval.","pattern":"^(([0,1][0-9]|(2[0-3]))|([0-9])):[0-5][0-9]$","nullable":true},"orderTo":{"type":"string","description":"Time until which an order can be placed for the interval.","pattern":"^(([0,1][0-9]|(2[0-3]))|([0-9])):[0-5][0-9]$","nullable":true},"timeIntervals":{"type":"array","items":{"type":"object","properties":{"from":{"type":"string","description":"Start time of the sub-interval.","pattern":"^(([0,1][0-9]|(2[0-3]))|([0-9])):[0-5][0-9]$","nullable":true},"to":{"type":"string","description":"End time of the sub-interval.","pattern":"^(([0,1][0-9]|(2[0-3]))|([0-9])):[0-5][0-9]$","nullable":true},"orderTo":{"type":"string","description":"Time until which an order can be placed for the sub-interval.","pattern":"^(([0,1][0-9]|(2[0-3]))|([0-9])):[0-5][0-9]$","nullable":true}}}}}},"sunday":{"type":"object","description":"Time intervals available on Sunday.","properties":{"from":{"type":"string","description":"Start time of the interval.","pattern":"^(([0,1][0-9]|(2[0-3]))|([0-9])):[0-5][0-9]$","nullable":true},"to":{"type":"string","description":"End time of the interval.","pattern":"^(([0,1][0-9]|(2[0-3]))|([0-9])):[0-5][0-9]$","nullable":true},"orderTo":{"type":"string","description":"Time until which an order can be placed for the interval.","pattern":"^(([0,1][0-9]|(2[0-3]))|([0-9])):[0-5][0-9]$","nullable":true},"timeIntervals":{"type":"array","items":{"type":"object","properties":{"from":{"type":"string","description":"Start time of the sub-interval.","pattern":"^(([0,1][0-9]|(2[0-3]))|([0-9])):[0-5][0-9]$","nullable":true},"to":{"type":"string","description":"End time of the sub-interval.","pattern":"^(([0,1][0-9]|(2[0-3]))|([0-9])):[0-5][0-9]$","nullable":true},"orderTo":{"type":"string","description":"Time until which an order can be placed for the sub-interval.","pattern":"^(([0,1][0-9]|(2[0-3]))|([0-9])):[0-5][0-9]$","nullable":true}}}}}},"createdAt":{"type":"string","format":"date-time","description":"The date-time indicating when the record was initially created.","pattern":"^20[0-9]{2}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{6}Z$"},"updatedAt":{"type":"string","format":"date-time","description":"The date-time indicating when the record was last updated.","pattern":"^20[0-9]{2}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{6}Z$"},"deletedAt":{"type":"string","format":"date-time","description":"The date-time indicating when the record was deleted.","pattern":"^20[0-9]{2}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{6}Z$","nullable":true}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/Validation"},"503":{"$ref":"#/components/responses/Time-out"}},"summary":"Retrieve available pickup time intervals"}}}}
```

## Create a courier pickup request

> This method allows business clients to create a new courier pickup request by specifying essential parameters such as the pickup address, parcel type, and additional details. \
> \
> \*\*Initial Status (\`Draft\`)\*\*: The pickup request is created in the \`Draft\` status, which allows clients to add all necessary shipments to the request. \
> \
> \*\*Transition to \`Created\`\*\*: Once all shipments are added, clients must use the "Update pickup request status" method to change the status to \`Created\`. This indicates that the pickup is finalized and ready for processing by the courier service.\
> \
> \*\*Time Intervals\*\*: To include a specific time interval for the pickup, clients should retrieve available time intervals using the corresponding method. This ensures that the requested pickup time aligns with the courier's schedule and availability.\
> \
> \*\*Additional Service – CourierPickupService\*\*: Clients can optionally provide information about the planned cargo in the \`services\` array using the \`CourierPickupService\` service. This allows the client to specify estimated shipment characteristics such as parcel description, quantity, actual and volumetric weight, and optional dimensions. The service is currently available in Moldova. The information is used during pickup planning and courier processing.\
> \
> This method is available to business clients in EU countries where Nova Post operates.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Pickups"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}},"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Validation":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Time-out":{"description":"Connection time-out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}}},"paths":{"/pickups":{"post":{"tags":["Pickups"],"description":"This method allows business clients to create a new courier pickup request by specifying essential parameters such as the pickup address, parcel type, and additional details. \n\n**Initial Status (`Draft`)**: The pickup request is created in the `Draft` status, which allows clients to add all necessary shipments to the request. \n\n**Transition to `Created`**: Once all shipments are added, clients must use the \"Update pickup request status\" method to change the status to `Created`. This indicates that the pickup is finalized and ready for processing by the courier service.\n\n**Time Intervals**: To include a specific time interval for the pickup, clients should retrieve available time intervals using the corresponding method. This ensures that the requested pickup time aligns with the courier's schedule and availability.\n\n**Additional Service – CourierPickupService**: Clients can optionally provide information about the planned cargo in the `services` array using the `CourierPickupService` service. This allows the client to specify estimated shipment characteristics such as parcel description, quantity, actual and volumetric weight, and optional dimensions. The service is currently available in Moldova. The information is used during pickup planning and courier processing.\n\nThis method is available to business clients in EU countries where Nova Post operates.\n","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"note":{"type":"string","description":"Optional notes or instructions for the courier.","maxLength":255},"services":{"type":"array","nullable":true,"description":"List of additional services associated with the pickup request.\n\nCurrently supported service:\n- `CourierPickupService` — allows the client to provide planned cargo information that will be used during pickup planning and courier processing.\n"},"phone":{"type":"string","description":"The contact phone number of the sender, required to allow the courier to reach out if necessary.","minLength":8,"maxLength":14},"email":{"type":"string","description":"While not mandatory, providing an email is recommended as a backup contact method in case the phone number is incorrect or for additional notifications regarding the pickup.","nullable":true},"fullName":{"type":"string","description":"Full name of the client sending the parcel, essential for identifying the sender and ensuring accurate handling of the pickup.","maxLength":100},"companyTin":{"type":"string","description":"The tax identification number (TIN) of a legal entity.","minLength":2,"maxLength":20},"companyName":{"type":"string","description":"Name of the company requesting the pickup.","minLength":2,"maxLength":255},"countryCode":{"type":"string","description":"ISO Alpha-2 code for the pickup location.","pattern":"^[A-Z]{2}$"},"addressParts":{"type":"object","description":"Detailed address information for the pickup location.","properties":{"city":{"type":"string","description":"The name of the city for the pickup location.","maxLength":100},"region":{"type":"string","description":"The administrative area, state, or region for the pickup.","maxLength":100},"street":{"type":"string","description":"The street name for the pickup location.","maxLength":100},"postCode":{"type":"string","description":"The postal code of the pickup location.","maxLength":10},"building":{"type":"string","description":"The building number or name at the pickup address.","maxLength":100},"flat":{"type":"string","description":"The apartment or office number within the building.","maxLength":10},"block":{"type":"string","description":"The specific block or section within a larger complex, if applicable.","maxLength":100},"note":{"type":"string","description":"Additional instructions for the courier to access the pickup location.","maxLength":100}}},"pickedTimeFrom":{"type":"string","format":"date-time","description":"Start of the pickup time window, selected from available time intervals provided by the method that returns available time slots. If no time slot is specified, the courier will schedule the pickup at their discretion.","pattern":"^20[0-9]{2}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{6}Z$","nullable":true},"pickedTimeTo":{"type":"string","format":"date-time","description":"End of the pickup time window, selected from available time intervals provided by the method that returns available time slots. If no time slot is specified, the courier will schedule the pickup at their discretion.","pattern":"^20[0-9]{2}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{6}Z$","nullable":true}}}}}},"responses":{"201":{"description":"Pickup request created successfully","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","description":"Unique identifier for the pickup request.","minimum":1},"number":{"type":"string","description":"Reference number for the pickup request.","pattern":"^[A-Z]{4}\\d{10}$"},"status":{"type":"string","description":"Current pickup status, representing the different stages in the pickup process.\n\nPossible values include:\n- **Draft**: Initial stage where the pickup request is created but not yet finalized.\n- **Created**: The pickup request has been created and is ready for processing.\n- **AppointedCourier**: A courier has been assigned to the pickup request.\n- **InProgress**: The pickup process is underway.\n- **Done**: The pickup has been successfully completed.\n- **ClientCanceled**: The pickup was canceled by the client.\n- **NotCompleted**: The pickup process could not be completed.\n- **Deleted**: The pickup request has been removed from the system.\n- **ReceivedByCourier**: The parcel has been received by the courier.\n"},"statusDateTime":{"type":"string","format":"date-time","description":"Date and time when the status was last updated.","pattern":"^20[0-9]{2}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{6}Z$"},"source":{"type":"string","description":"Origin of the request, typically \"clientapi\".","maxLength":50},"executor":{"type":"string","description":"Assigned executor for the pickup, if any.","maxLength":50,"nullable":true},"companyTin":{"type":"string","description":"The tax identification number (TIN) of a legal entity.","minLength":2,"maxLength":20},"companyName":{"type":"string","description":"Name of the company.","minLength":2,"maxLength":255},"fullName":{"type":"string","description":"Full name of the requester.","maxLength":100},"phone":{"type":"string","description":"Contact phone number.","minLength":8,"maxLength":14},"email":{"type":"string","description":"Contact email address, if applicable.","nullable":true},"countryCode":{"type":"string","description":"Country code for the pickup location.","pattern":"^[A-Z]{2}$"},"createdByUser":{"type":"string","description":"ID of the user who created the request.","maxLength":50},"deliveryPartner":{"type":"string","description":"Partner responsible for delivery, if any.","nullable":true},"lockVersion":{"type":"integer","description":"Version number for concurrency control.","minimum":1},"divisionId":{"type":"integer","description":"Division ID associated with the pickup, if applicable.","minimum":1,"nullable":true},"settlementId":{"type":"integer","description":"Settlement ID for the pickup location.","minimum":1},"cityDistrict":{"type":"string","description":"City district of the pickup location, if applicable.","maxLength":50,"nullable":true},"address":{"type":"object","description":"Formatted address and geolocation.","nullable":true,"properties":{"string":{"type":"string","description":"Complete address as a formatted string.","maxLength":255},"latitude":{"type":"number","format":"float","description":"Latitude of the pickup location.","minimum":-90,"maximum":90},"longitude":{"type":"number","format":"float","description":"Longitude of the pickup location.","minimum":-180,"maximum":180}}},"addressParts":{"type":"object","description":"Breakdown of address details, specified in request.","nullable":true,"properties":{"postCode":{"type":"string","description":"Postal code of the pickup location.","maxLength":10},"building":{"type":"string","description":"Building number of the pickup location.","maxLength":100},"street":{"type":"string","description":"Street name for the pickup location.","maxLength":100},"city":{"type":"string","description":"City name for the pickup location.","maxLength":100},"region":{"type":"string","description":"Region name for the pickup location.","maxLength":100},"flat":{"type":"string","description":"Flat or apartment number.","maxLength":10},"note":{"type":"string","description":"Additional notes for the address.","maxLength":100},"block":{"type":"string","description":"Block or building section.","maxLength":100,"nullable":true}}},"pickedTimeFrom":{"type":"string","format":"date-time","description":"Start of the pickup time window, specified in request.","nullable":true},"pickedTimeTo":{"type":"string","format":"date-time","description":"End time for the pickup window, specified in request.","nullable":true},"note":{"type":"string","description":"Note or instructions for the courier.","maxLength":255,"nullable":true},"currencyCode":{"type":"string","description":"Currency code of the country used for payment transactions.","pattern":"^[A-Z]{3}$"},"externalId":{"type":"string","description":"Internal data, not for use.","nullable":true},"shipments":{"type":"array","items":{"type":"object"},"description":"List of shipments associated with this pickup request."},"services":{"type":"array","description":"List of services associated with the pickup request.","items":{"type":"object","properties":{"serviceCode":{"type":"string","description":"Service code."},"contractNumber":{"type":"string","description":"Contract number used for service payment."},"amount":{"type":"number","description":"Service amount."},"payerType":{"type":"string","description":"Payer type."},"additionalParameters":{"type":"object","description":"Planned cargo parameters.","properties":{"parcelDescription":{"type":"string"},"parcelsAmount":{"type":"number"},"totalActualWeight":{"type":"number"},"totalVolumetricWeight":{"type":"number"},"length":{"type":"number","nullable":true},"width":{"type":"number","nullable":true},"height":{"type":"number","nullable":true}}}}}},"statuses":{"type":"array","description":"Array of status objects tracking pickup status changes.","items":{"type":"object","properties":{"id":{"type":"integer","description":"Unique status identifier.","minimum":1},"pickupId":{"type":"integer","description":"Pickup request ID.","minimum":1},"status":{"type":"string","description":"Current pickup status, representing the different stages in the pickup process.\n\nPossible values include: `Draft`, `Created`, `AppointedCourier`, `InProgress`, `Done`, `ClientCanceled`, `NotCompleted`, `Deleted`, `ReceivedByCourier`.\n"},"dateTime":{"type":"string","format":"date-time","description":"Date and time of status update.","pattern":"^20[0-9]{2}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{6}Z$"},"note":{"type":"string","description":"Optional notes related to the status.","maxLength":255,"nullable":true},"user":{"type":"string","description":"User ID who changed the status.","maxLength":50},"createdAt":{"type":"string","format":"date-time","description":"Date-time of status creation.","pattern":"^20[0-9]{2}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{6}Z$"},"updatedAt":{"type":"string","format":"date-time","description":"Date-time of the last update.","pattern":"^20[0-9]{2}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{6}Z$"},"deletedAt":{"type":"string","format":"date-time","description":"Date-time of delete.","pattern":"^20[0-9]{2}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{6}Z$","nullable":true}}}},"createdAt":{"type":"string","format":"date-time","description":"Date-time of pickup creation.","pattern":"^20[0-9]{2}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{6}Z$"},"updatedAt":{"type":"string","format":"date-time","description":"Date-time of the last update.","pattern":"^20[0-9]{2}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{6}Z$"},"deletedAt":{"type":"string","format":"date-time","description":"Date-time of delete.","pattern":"^20[0-9]{2}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{6}Z$","nullable":true}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/Validation"},"503":{"$ref":"#/components/responses/Time-out"}},"summary":"Create a courier pickup request"}}}}
```

## Update a courier pickup request

> The method is used to update the details of an already created pickup request. It allows clients to modify information such as the pickup address, contact details, time window and other to ensure accurate and timely parcel collection.\
> This method is available to business clients in EU countries where Nova Post operates.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Pickups"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}},"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Validation":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Time-out":{"description":"Connection time-out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}}},"paths":{"/pickups/{id}":{"put":{"description":"The method is used to update the details of an already created pickup request. It allows clients to modify information such as the pickup address, contact details, time window and other to ensure accurate and timely parcel collection.\nThis method is available to business clients in EU countries where Nova Post operates.\n","tags":["Pickups"],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"integer","minimum":1},"description":"Unique identifier of the pickup request to be updated.\n\n🔹The id can be obtained from the [Create a courier pickup request](https://api-portal.novapost.com/metodi-1/methods/pickups#post-pickups) response or by searching for the pickup by its document number in the [Retrieve list of courier pickup requests](https://api-portal.novapost.com/metodi-1/methods/pickups#get-pickups) method.\n"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"note":{"type":"string","description":"Optional notes or instructions for the courier.","maxLength":255},"services":{"type":"array","items":{"type":"string"},"description":"List of additional services that can be included in the pickup request. This functionality is currently under development.","nullable":true},"phone":{"type":"string","description":"The contact phone number of the sender, required to allow the courier to reach out if necessary.","minLength":8,"maxLength":14},"email":{"type":"string","description":"While not mandatory, providing an email is recommended as a backup contact method in case the phone number is incorrect or for additional notifications regarding the pickup.","nullable":true},"fullName":{"type":"string","description":"Full name of the client sending the parcel, essential for identifying the sender and ensuring accurate handling of the pickup.","maxLength":100},"companyTin":{"type":"string","description":"The tax identification number (TIN) of a legal entity.","minLength":2,"maxLength":20},"companyName":{"type":"string","description":"Name of the company requesting the pickup.","minLength":2,"maxLength":255},"lockVersion":{"type":"integer","description":"Version number for concurrency control to avoid conflicting updates. When using this method and making updates, the value of this parameter must be incremented by 1 for each subsequent change.","minimum":1},"countryCode":{"type":"string","description":"ISO Alpha-2 code for the pickup location.","pattern":"^[A-Z]{2}$"},"addressParts":{"type":"object","description":"Detailed address information for the pickup location.","properties":{"city":{"type":"string","description":"The name of the city for the pickup location.","maxLength":100},"region":{"type":"string","description":"The administrative area, state, or region for the pickup.","maxLength":100},"street":{"type":"string","description":"The street name for the pickup location.","maxLength":100},"postCode":{"type":"string","description":"The postal code of the pickup location.","maxLength":10},"building":{"type":"string","description":"The building number or name at the pickup address.","maxLength":100},"flat":{"type":"string","description":"The apartment or office number within the building.","maxLength":10},"block":{"type":"string","description":"The specific block or section within a larger complex, if applicable.","maxLength":100},"note":{"type":"string","description":"Additional instructions for the courier to access the pickup location.","maxLength":100}}},"pickedTimeFrom":{"type":"string","format":"date-time","description":"Start of the pickup time window, selected from available time intervals provided by the method that returns available time slots.","pattern":"^20[0-9]{2}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{6}Z$","nullable":true},"pickedTimeTo":{"type":"string","format":"date-time","description":"End of the pickup time window, selected from available time intervals provided by the method that returns available time slots.","pattern":"^20[0-9]{2}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{6}Z$","nullable":true}}}}}},"responses":{"200":{"description":"Pickup request updated successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","description":"Unique identifier for the updated pickup request.","minimum":1},"number":{"type":"string","description":"Reference number for the pickup request.","pattern":"^[A-Z]{4}\\d{10}$"},"status":{"type":"string","description":"Current pickup status, representing the different stages in the pickup process.\n\nPossible values include:\n- **Draft**: Initial stage where the pickup request is created but not yet finalized.\n- **Created**: The pickup request has been created and is ready for processing.\n- **AppointedCourier**: A courier has been assigned to the pickup request.\n- **InProgress**: The pickup process is underway.\n- **Done**: The pickup has been successfully completed.\n- **ClientCanceled**: The pickup was canceled by the client.\n- **NotCompleted**: The pickup process could not be completed.\n- **Deleted**: The pickup request has been removed from the system.\n- **ReceivedByCourier**: The parcel has been received by the courier.\n"},"lockVersion":{"type":"integer","description":"Updated version number for concurrency control."},"note":{"type":"string","description":"Updated notes for the courier.","maxLength":255},"pickedTimeFrom":{"type":"string","format":"date-time","description":"Updated start of the pickup time window.","pattern":"^20[0-9]{2}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{6}Z$"},"pickedTimeTo":{"type":"string","format":"date-time","description":"Updated end of the pickup time window.","pattern":"^20[0-9]{2}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{6}Z$"},"addressParts":{"type":"object","description":"Updated address information for the pickup location.","properties":{"city":{"type":"string","description":"The name of the city for the pickup location.","maxLength":100},"region":{"type":"string","description":"The administrative area, state, or region for the pickup.","maxLength":100},"street":{"type":"string","description":"The street name for the pickup location.","maxLength":100},"postCode":{"type":"string","description":"The postal code of the pickup location.","maxLength":10},"building":{"type":"string","description":"The building number or name at the pickup address.","maxLength":100},"flat":{"type":"string","description":"The apartment or office number within the building.","maxLength":10},"block":{"type":"string","description":"The specific block or section within a larger complex, if applicable.","maxLength":100},"note":{"type":"string","description":"Additional instructions for the courier to access the pickup location.","maxLength":100}}},"statuses":{"type":"array","description":"Array of updated status objects tracking pickup status changes.","items":{"type":"object"}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/Validation"},"503":{"$ref":"#/components/responses/Time-out"}},"summary":"Update a courier pickup request"}}}}
```

## Delete a courier pickup request

> This method allows business clients to fully delete an existing courier pickup request. When a pickup request is deleted, it is marked as removed in the system, and the deletion date-time is recorded.\
> This method is available to business clients in EU countries where Nova Post operates.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Pickups"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}},"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Validation":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Time-out":{"description":"Connection time-out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}}},"paths":{"/pickups/{id}":{"delete":{"description":"This method allows business clients to fully delete an existing courier pickup request. When a pickup request is deleted, it is marked as removed in the system, and the deletion date-time is recorded.\nThis method is available to business clients in EU countries where Nova Post operates.\n","tags":["Pickups"],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"integer","minimum":1},"description":"Unique identifier of the pickup request to be deleted.\n\n🔹The id can be obtained from the [Create a courier pickup request](https://api-portal.novapost.com/metodi-1/methods/pickups#post-pickups) response or by searching for the pickup by its document number in the [Retrieve list of courier pickup requests](https://api-portal.novapost.com/metodi-1/methods/pickups#get-pickups) method.\n"}],"responses":{"200":{"description":"Pickup request deleted successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"deletedAt":{"type":"string","format":"date-time","description":"The date-time when the pickup request was marked as deleted.","pattern":"^20[0-9]{2}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{6}Z$"}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/Validation"},"503":{"$ref":"#/components/responses/Time-out"}},"summary":"Delete a courier pickup request"}}}}
```

## Add shipments to a courier pickup request

> This method is used to add already created shipments to an existing courier pickup request. According to the established business process, already created shipments must be added to the courier pickup request after it has been created.\
> This method is available to business clients in EU countries where Nova Post operates.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Pickups"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}},"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Validation":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Time-out":{"description":"Connection time-out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}}},"paths":{"/pickups/{id}/shipments":{"post":{"description":"This method is used to add already created shipments to an existing courier pickup request. According to the established business process, already created shipments must be added to the courier pickup request after it has been created.\nThis method is available to business clients in EU countries where Nova Post operates.\n","tags":["Pickups"],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"integer","minimum":1},"description":"Unique identifier of the pickup request to which shipments are being added.\n\n🔹The id can be obtained from the [Create a courier pickup request](https://api-portal.novapost.com/metodi-1/methods/pickups#post-pickups) response or by searching for the pickup by its document number in the [Retrieve list of courier pickup requests](https://api-portal.novapost.com/metodi-1/methods/pickups#get-pickups) method.\n"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"shipments":{"type":"array","items":{"type":"object","properties":{"shipmentId":{"type":"integer","description":"Unique identifier of the shipment to be added.\n\nThe `shipmentId` corresponds to the shipment `id` returned by the [Create shipments](https://api-portal.novapost.com/metodi-1/methods/shipments/create-shipments) method. It can also be retrieved from the [Find Shipments List](https://api-portal.novapost.com/metodi-1/methods/shipments#get-shipments) method by searching for the shipment using its transport document number.\n","minimum":1}},"required":["shipmentId"]},"description":"List of shipments to be added to the pickup request."}}}}}},"responses":{"200":{"description":"Shipments successfully added to the pickup request.","content":{"application/json":{"schema":{"type":"object","properties":{"shipments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","description":"Unique identifier for the pickup shipment record.","minimum":1},"pickupId":{"type":"integer","description":"Unique identifier of the associated pickup request.","minimum":1},"shipmentId":{"type":"integer","description":"Unique identifier of the added shipment.\n\nThe `shipmentId` corresponds to the shipment `id` returned by the [Create shipments](https://api-portal.novapost.com/metodi-1/methods/shipments/create-shipments) method. It can also be retrieved from the [Find Shipments List](https://api-portal.novapost.com/metodi-1/methods/shipments#get-shipments) method by searching for the shipment using its transport document number.\n","minimum":1},"status":{"type":"string","description":"Indicates the current status of the shipment as part of the pickup request. This value is returned by the system and reflects the state of the shipment. \n\nPossible values: `Accepted`, `NotReady`, `NotPacked`, `ClientCanceled`, `Deleted`, `Added`.\n"},"note":{"type":"string","description":"Additional notes related to the shipment, if applicable.","nullable":true},"deliveryPartners":{"type":"array","description":"List of delivery partners associated with the shipment, if applicable.","items":{"type":"object"}},"createdAt":{"type":"string","format":"date-time","description":"Date-time when the shipment was added.","pattern":"^20[0-9]{2}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{6}Z$"},"updatedAt":{"type":"string","format":"date-time","description":"Date-time when the shipment record was last updated.","pattern":"^20[0-9]{2}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{6}Z$"},"deletedAt":{"type":"string","format":"date-time","description":"Date-time when the shipment record was deleted, if applicable.","nullable":true}}}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/Validation"},"503":{"$ref":"#/components/responses/Time-out"}},"summary":"Add shipments to a courier pickup request"}}}}
```

## Remove shipments from a pickup request

> This endpoint allows removing specific shipments from an existing courier pickup request.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Pickups"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}},"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Validation":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Time-out":{"description":"Connection time-out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}}},"paths":{"/pickups/{id}/shipments":{"delete":{"description":"This endpoint allows removing specific shipments from an existing courier pickup request.\n","tags":["Pickups"],"parameters":[{"name":"id","in":"path","required":true,"description":"The unique identifier of the pickup request.\n\n🔹The id can be obtained from the [Create a courier pickup request](https://api-portal.novapost.com/metodi-1/methods/pickups#post-pickups) response or by searching for the pickup by its document number in the [Retrieve list of courier pickup requests](https://api-portal.novapost.com/metodi-1/methods/pickups#get-pickups) method.\n","schema":{"type":"integer","minimum":1}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"shipments":{"type":"array","description":"A list of shipments to be removed from the pickup request.","items":{"type":"object","properties":{"shipmentId":{"type":"integer","description":"The unique identifier of the shipment to be removed.\n\nThe `shipmentId` corresponds to the shipment `id` returned by the [Create shipments](https://api-portal.novapost.com/metodi-1/methods/shipments/create-shipments) method. It can also be retrieved from the [Find Shipments List](https://api-portal.novapost.com/metodi-1/methods/shipments#get-shipments) method by searching for the shipment using its transport document number.\n","minimum":1}}}}}}}}},"responses":{"200":{"description":"Shipments removed successfully","content":{"application/json":{"schema":{"type":"object","properties":{"shipments":{"type":"array","description":"Details of removed shipments.","items":{"type":"object","properties":{"deletedAt":{"type":"string","format":"date-time","description":"Date-time when the shipment was removed."}}}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/Validation"},"503":{"$ref":"#/components/responses/Time-out"}},"summary":"Remove shipments from a pickup request"}}}}
```

## Update pickup request status

> This method allows updating the status of an existing courier pickup request. It is specifically designed for transitioning a pickup request from \`Draft\` to \`Created\`. \
> \
> While the request is in \`Draft\` status, it remains in a preparatory phase where all necessary shipments can be added. Once the status is updated to \`Created\`, the shipment management system recognizes the pickup as finalized and ready for processing by the courier service.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Pickups"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}},"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Validation":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Time-out":{"description":"Connection time-out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}}},"paths":{"/pickups/{id}/status":{"put":{"description":"This method allows updating the status of an existing courier pickup request. It is specifically designed for transitioning a pickup request from `Draft` to `Created`. \n\nWhile the request is in `Draft` status, it remains in a preparatory phase where all necessary shipments can be added. Once the status is updated to `Created`, the shipment management system recognizes the pickup as finalized and ready for processing by the courier service.\n","tags":["Pickups"],"parameters":[{"name":"id","in":"path","required":true,"description":"The unique identifier of the pickup request.\n\n🔹The id can be obtained from the [Create a courier pickup request](https://api-portal.novapost.com/metodi-1/methods/pickups#post-pickups) response or by searching for the pickup by its document number in the [Retrieve list of courier pickup requests](https://api-portal.novapost.com/metodi-1/methods/pickups#get-pickups) method.\n","schema":{"type":"integer","minimum":1}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","description":"This field is used to update the status of a pickup request to indicate that the pickup request is finalized and ready for processing by the shipment management system.\n\nPossible values include: `Draft`, `Created`, `AppointedCourier`, `InProgress`, `Done`, `ClientCanceled`, `NotCompleted`, `Deleted`, `ReceivedByCourier`.\n","enum":["Created"]},"lockVersion":{"type":"integer","description":"Version number for concurrency control to avoid conflicting updates. When using this method and making updates, the value of this parameter must be incremented by 1 for each subsequent change.","minimum":1},"note":{"type":"string","description":"A required note or comment providing additional information about the reason for the status update. This field must be filled when changing the status to ensure proper tracking and context.","maxLength":255}},"required":["id","status","lockVersion"]}}}},"responses":{"200":{"description":"Status updated successfully","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"Indicates whether the status update was successful."}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/Validation"},"503":{"$ref":"#/components/responses/Time-out"}},"summary":"Update pickup request status"}}}}
```


# Webhooks

## Retrieve all subscriptions

> Retrieve a list of all subscriptions associated with the client.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Webhooks"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}},"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Validation":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Time-out":{"description":"Connection time-out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}}},"paths":{"/tracking-push/subscribers":{"get":{"tags":["Webhooks"],"description":"Retrieve a list of all subscriptions associated with the client.\n","operationId":"getSubscribers","responses":{"200":{"description":"Successful response containing a list of subscriptions.","content":{"application/json":{"schema":{"type":"object","properties":{"current_page":{"type":"integer","description":"The current page of the paginated result set."},"last_page":{"type":"integer","description":"The last page of the paginated result set."},"per_page":{"type":"integer","description":"The number of items per page."},"total":{"type":"integer","description":"The total number of subscription items available."},"items":{"type":"array","description":"The array of subscription items.","items":{"type":"object","properties":{"id":{"type":"string","description":"The public identifier of the subscription."},"type":{"type":"string","description":"The type of subscription. Can be `individual`, `numbers`, `legal`, `recipientLegal` or `creator`."},"url":{"type":"string","format":"uri","description":"The callback URL for the webhook notifications."},"isActive":{"type":"boolean","description":"Indicates if the subscription is currently active."},"is_active":{"type":"boolean","description":"Deprecated. Legacy field kept for backward compatibility. Use `isActive` instead."},"phone":{"type":"string","description":"The phone number associated with the subscription."},"cid":{"type":"string","description":"Unique user identifier"},"eventTypes":{"type":"array","description":"The list of event types the subscription is interested in.","items":{"type":"string"}},"event_types":{"type":"array","description":"Deprecated. Legacy field kept for backward compatibility. Use `eventTypes` instead.","items":{"type":"string"}},"sendWarnings":{"type":"boolean","description":"Indicates whether email warnings are sent for incorrect endpoint operations."},"send_warnings":{"type":"boolean","description":"Deprecated. Legacy field kept for backward compatibility. Use `sendWarnings` instead."},"warningEmail":{"type":"string","format":"email","description":"The email address used for sending warnings."},"warning_email":{"type":"string","format":"email","description":"Deprecated. Legacy field kept for backward compatibility. Use `warningEmail` instead."},"contentType":{"type":"string","description":"Specifies the content type used for webhook request payloads. The default value is `application/json`."},"companyTins":{"type":"array","description":"The list of company tax identification numbers of a legal entity associated with the subscription.","items":{"type":"string"}},"company_tins":{"type":"array","description":"Deprecated. Legacy field kept for backward compatibility. Use `companyTins` instead.","items":{"type":"string"}},"secretToken":{"type":"string","description":"Webhook authorization token used to validate incoming webhook requests.\n\n🔸The token is optional and, if provided, must consist only of alphanumeric characters.\n","minLength":0,"maxLength":600,"pattern":"^[A-Za-z0-9]+$"},"secret_token":{"type":"string","description":"Deprecated. Legacy field kept for backward compatibility. Use `secretToken` instead.","minLength":0,"maxLength":600,"pattern":"^[A-Za-z0-9]+$"},"secretTokenHeaderName":{"type":"string","description":"Header name used to transmit the `secretToken` in webhook requests.\n\nIf `secret_token_header_name` is provided and is not null, its value is used as the header name for transmitting the `secretToken`.</br>\nIf `secret_token_header_name` is not provided or is set to null, the default header name `X-NP-Key` is used.\n\n🔸If provided, the header name must consist only of Latin letters, digits, and hyphens, must not start or end with a hyphen, and must not contain spaces or other special characters.\n"},"secret_token_header_name":{"type":"string","description":"Deprecated. Legacy field kept for backward compatibility. Use `secretTokenHeaderName` instead."},"updatedAt":{"type":"string","format":"datetime","description":"The timestamp when the subscription was last updated."},"updated_at":{"type":"string","format":"datetime","description":"Deprecated. Legacy field kept for backward compatibility. Use `updatedAt` instead."},"createdAt":{"type":"string","format":"datetime","description":"The timestamp when the subscription was created."},"created_at":{"type":"string","format":"datetime","description":"Deprecated. Legacy field kept for backward compatibility. Use `createdAt` instead."},"numbers":{"type":"array","description":"The list of tracking numbers associated with the subscription.","items":{"type":"string"}}}}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/Validation"},"503":{"$ref":"#/components/responses/Time-out"}},"summary":"Retrieve all subscriptions"}}}}
```

## Create a new subscription

> This endpoint is used to create a new subscription for receiving tracking notifications via webhooks.\
> The subscription can be of various types, such as individual or company-based, and is essential for clients who want to receive real-time updates about shipment statuses.\
> \
> Webhook notifications are sent using the \`application/json\` Content-Type by default.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Webhooks"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}},"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Validation":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Time-out":{"description":"Connection time-out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}}},"paths":{"/tracking-push/subscribers":{"post":{"tags":["Webhooks"],"description":"This endpoint is used to create a new subscription for receiving tracking notifications via webhooks.\nThe subscription can be of various types, such as individual or company-based, and is essential for clients who want to receive real-time updates about shipment statuses.\n\nWebhook notifications are sent using the `application/json` Content-Type by default.\n","operationId":"createSubscriber","parameters":[{"in":"query","name":"type","description":"The type of subscription to be created. This is a mandatory field and can take values such as:\n- `individual`: For personal accounts.\n- `numbers`: For tracking specific shipment numbers.\n- `legal`: For business accounts, requiring additional company details.\n- `recipientLegal`: Tracks all shipments addressed to the specified legal recipient.\n- `creator`: To tracking all shipments created by the client, regardless of whether they are specified as the sender.\n","required":true,"schema":{"type":"string","enum":["individual","numbers","legal","recipientLegal","creator"]}},{"in":"query","name":"url","description":"The callback URL where webhook notifications will be sent. \nThis is a mandatory field and must be a valid URL.\nThe URL should be capable of receiving POST requests with JSON payloads.\n","required":true,"schema":{"type":"string","format":"uri","minLength":3}},{"in":"query","name":"isActive","description":"Indicates whether the subscription should be active immediately upon creation. \nIf set to `true`, the webhook will start sending notifications as soon as the subscription is confirmed. \nDefaults to `false` if not provided.\n","schema":{"type":"boolean","default":false},"required":true},{"in":"query","name":"phone","description":"The phone number associated with the subscription.\nThis parameter is required when the subscription type is `individual`.\nThe phone number must be in international format, for example, 380637445555.\n","required":false,"schema":{"type":"string"}},{"in":"query","name":"secretToken","description":"Webhook Authorization Token: Maximum Length 600 Characters\n","required":false,"schema":{"type":"string"}},{"in":"query","name":"secretTokenHeaderName","description":"Specifies the header name used to pass the `secretToken` in webhook requests.","required":false,"schema":{"type":"string"}},{"in":"query","name":"eventTypes","description":"A list of event types that the subscription will listen to. \nThis parameter allows you to specify which events should trigger webhook notifications. \nIf no value is provided, the subscription will be created for all event types by default.\n\nThe list of supported event types includes:\n- `ReadyToShip`: The shipment has been created and is ready for dispatch.\n- `Deleted`: The shipment has been deleted.\n- `ParcelPlaceRemoved`: A parcel has been removed from the shipment.\n- `Received`: The shipment has been received by the recipient.\n- `MoneyTransfer`: A money transfer related to the shipment has been created.\n- `MoneyTransferReceived`: The money transfer related to the shipment has been paid out to the recipient.\n- `Returned`: The shipment is being returned or has been returned to the sender.\n- `Refused`: The recipient has refused to accept the shipment.\n- `Redirecting`: The shipment is being redirected to another address or branch.\n- `Utilization`: The shipment has been disposed of.\n- `Redelivery`: A repeat delivery attempt for the shipment has been scheduled.\n- `UndeliveryReason`: A non-delivery reason has been recorded.\n- `ChangeTime`: The delivery date or time has been changed.\n- `ArrivalSC`: The shipment has arrived at the sorting center.\n- `TransferToPartner`: The shipment has been handed over to a partner for further delivery.\n- `LoadingCourier`: The shipment has been loaded onto the courier’s vehicle.\n- `ArrivalSenderWarehouse`: The shipment has arrived at the sender’s warehouse.\n- `DepartureSenderWarehouse`: The shipment has departed from the sender’s warehouse.\n- `InCityRecipient`: The shipment has arrived in the recipient’s city.\n- `AwaitingOnDivision`: The shipment is waiting at the branch or pickup point.\n\n🔸This field accepts **only** the event types listed above.</br>\nAny values outside of this list are not supported and must not be provided.\n","schema":{"type":"array","items":{"type":"string"},"uniqueItems":true},"required":false},{"in":"query","name":"sendWarnings","description":"Determines if email warnings should be sent in case of issues with the specified webhook URL.\nIf enabled, the system will send notifications about delivery problems or other errors.\nDefaults to `false`.\n","schema":{"type":"boolean","default":false},"required":false},{"in":"query","name":"warningEmail","description":"The email address where warnings about endpoint issues will be sent.\nIt is required if `sendWarnings` is set to `true`.\nThe email address should be valid and active to ensure delivery of warnings.\n","schema":{"type":"string","format":"email"},"required":false},{"in":"query","name":"companyTins","description":"A list of company tax identification numbers relevant to subscriptions of type `legal` or `recipientLegal`.\nThis parameter is required for legal subscriptions and is essential to verify the company's identity.\nEach TIN should be a valid UUID.\n","schema":{"type":"array","items":{"type":"string","format":"uuid"}},"required":false}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["individual","numbers","legal","recipientLegal","creator"],"description":"The type of subscription to be created.\n"},"url":{"type":"string","format":"uri","description":"The callback URL where webhook notifications will be sent."},"isActive":{"type":"boolean","description":"Indicates whether the subscription is active immediately after creation."},"phone":{"type":"string","description":"The phone number associated with the subscription."},"eventTypes":{"type":"array","description":"A list of event types that the subscription will listen to.","items":{"type":"string"},"uniqueItems":true},"sendWarnings":{"type":"boolean","description":"Determines if email warnings should be sent for webhook delivery issues."},"warningEmail":{"type":"string","format":"email","description":"The email address where warnings will be sent."},"companyTins":{"type":"array","description":"A list of company tax identification numbers for legal subscriptions.\n\n- For `legal`, the subscription receives events only for shipments where the value of the `sender.companyTin` field matches one of the values provided in `companyTins`.\n- For `recipientLegal`, the subscription receives events only for shipments where the value of the `recipient.companyTin` field matches one of the values provided in `companyTins`.\n\n**🔸Required when** `type` **is** `legal` **or** `recipientLegal`.\n","items":{"type":"string","format":"uuid"}},"secretToken":{"type":"string","description":"Webhook authorization token used to validate incoming webhook requests.\n\n🔸The token is optional and, if provided, must consist only of alphanumeric characters.\n","minLength":0,"maxLength":600,"pattern":"^[A-Za-z0-9]+$"},"secretTokenHeaderName":{"type":"string","description":"Specifies the name of the HTTP header used to transmit the `secretToken` in webhook requests.\n\nIf `secretTokenHeaderName` is provided and is not null, its value is used as the header name for transmitting the `secretToken`.</br>\nIf `secretTokenHeaderName` is not provided in the request, or is explicitly set to null, the default header name `X-NP-Key` is used.\n\nValidation requirements:\n- Only Latin letters, digits, and hyphens are allowed.\n- Must not start or end with a hyphen.\n- Must not contain spaces or any other special characters.\n\n**🔸This field is optional.**\n","pattern":"A-Za-z0-9"}},"required":["type","url","isActive"]}}}},"responses":{"201":{"description":"Subscription successfully created.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for the created subscription."},"type":{"type":"string","description":"The type of subscription created."},"secretToken":{"type":"string","description":"Webhook authorization token used to validate incoming webhook requests.\n\n🔸The token is optional and, if provided, must consist only of alphanumeric characters.\n","minLength":0,"maxLength":600,"pattern":"^[A-Za-z0-9]+$"},"secret_token":{"type":"string","description":"Deprecated. Legacy field kept for backward compatibility. Use `secretToken` instead.","minLength":0,"maxLength":600,"pattern":"^[A-Za-z0-9]+$"},"secretTokenHeaderName":{"type":"string","description":"Specifies the name of the HTTP header used to transmit the `secretToken` in webhook requests.\n\n🔸If provided, the header name must consist only of Latin letters, digits, and hyphens, must not start or end with a hyphen, and must not contain spaces or other special characters.\n\n**🔸This field is optional.**\n","pattern":"A-Za-z0-9"},"secret_token_header_name":{"type":"string","description":"Deprecated. Legacy field kept for backward compatibility. Use `secretTokenHeaderName` instead.","pattern":"A-Za-z0-9"},"url":{"type":"string","format":"uri","description":"The callback URL for the subscription."},"isActive":{"type":"boolean","description":"Indicates if the subscription is currently active."},"is_active":{"type":"boolean","description":"Deprecated. Legacy field kept for backward compatibility. Use `isActive` instead."},"phone":{"type":"string","description":"The phone number associated with the subscription."},"cid":{"type":"string","description":"Unique user identifier"},"eventTypes":{"type":"array","description":"The list of event types the subscription listens to:\n- `ReadyToShip`: The shipment has been created and is ready for dispatch.\n- `Deleted`: The shipment has been deleted.\n- `ParcelPlaceRemoved`: A parcel has been removed from the shipment.\n- `Received`: The shipment has been received by the recipient.\n- `MoneyTransfer`: A money transfer related to the shipment has been created.\n- `MoneyTransferReceived`: The money transfer related to the shipment has been paid out to the recipient.\n- `Returned`: The shipment is being returned or has been returned to the sender.\n- `Refused`: The recipient has refused to accept the shipment.\n- `Redirecting`: The shipment is being redirected to another address or branch.\n- `Utilization`: The shipment has been disposed of.\n- `Redelivery`: A repeat delivery attempt for the shipment has been scheduled.\n- `UndeliveryReason`: A non‑delivery reason has been recorded.\n- `ChangeTime`: The delivery date or time has been changed.\n- `ArrivalSC`: The shipment has arrived at the sorting center.\n- `TransferToPartner`: The shipment has been handed over to a partner for further delivery.\n- `LoadingCourier`: The shipment has been loaded onto the courier’s vehicle.\n- `ArrivalSenderWarehouse`: The shipment has arrived at the sender’s warehouse.\n- `DepartureSenderWarehouse`: The shipment has departed from the sender’s warehouse.\n- `InCityRecipient`: The shipment has arrived in the recipient’s city.\n- `AwaitingOnDivision`: The shipment is waiting at the branch or pickup point.\n\n🔸This field accepts **only** the event types listed above.</br>Any values outside of this list are not supported and must not be provided.\n","items":{"type":"string"}},"event_types":{"type":"array","description":"Deprecated. Legacy field kept for backward compatibility. Use `eventTypes` instead.","items":{"type":"string"}},"sendWarnings":{"type":"boolean","description":"Indicates whether email warnings are sent for incorrect endpoint operations."},"send_warnings":{"type":"boolean","description":"Deprecated. Legacy field kept for backward compatibility. Use `sendWarnings` instead."},"warningEmail":{"type":"string","format":"email","description":"The email address used for sending warnings."},"warning_email":{"type":"string","format":"email","description":"Deprecated. Legacy field kept for backward compatibility. Use `warningEmail` instead."},"contentType":{"type":"string","description":"Specifies the Content-Type used for webhook request payloads. The default value is `application/json`."},"companyTins":{"type":"array","description":"The list of company tax identification numbers of a legal entity associated with the subscription.","items":{"type":"string"}},"company_tins":{"type":"array","description":"Deprecated. Legacy field kept for backward compatibility. Use `companyTins` instead.","items":{"type":"string"}},"updatedAt":{"type":"string","format":"date-time","description":"The timestamp when the subscription was last updated."},"updated_at":{"type":"string","format":"date-time","description":"Deprecated. Legacy field kept for backward compatibility. Use `updatedAt` instead."},"createdAt":{"type":"string","format":"date-time","description":"The timestamp when the subscription was created."},"created_at":{"type":"string","format":"date-time","description":"Deprecated. Legacy field kept for backward compatibility. Use `createdAt` instead."}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/Validation"},"503":{"$ref":"#/components/responses/Time-out"}},"summary":"Create a new subscription"}}}}
```

## Update an existing subscription

> This endpoint updates an existing subscription's details such as the callback URL, activation status, event types, and more.\
> It is essential for modifying subscription settings for clients who wish to manage how they receive tracking notifications.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Webhooks"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}},"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Validation":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Time-out":{"description":"Connection time-out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}}},"paths":{"/tracking-push/subscribers/{id}":{"put":{"tags":["Webhooks"],"description":"This endpoint updates an existing subscription's details such as the callback URL, activation status, event types, and more.\nIt is essential for modifying subscription settings for clients who wish to manage how they receive tracking notifications.\n","operationId":"updateSubscriber","parameters":[{"name":"id","in":"path","description":"The unique identifier of the subscription you want to update. This is a mandatory path parameter used to specify the subscription to be modified.","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"The payload containing the updated details for the subscription. Each field allows you to modify different aspects of the subscription.","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"The new callback URL for webhook notifications. This URL must be reachable and capable of handling POST requests."},"isActive":{"type":"boolean","description":"Specifies whether the subscription is currently active. Set to `true` to activate the subscription, or `false` to deactivate it."},"type":{"type":"string","description":"The type of subscription created.\n","enum":["individual","numbers","legal","recipientLegal","creator"]},"eventTypes":{"type":"array","description":"A list of event types that the subscription will listen for. You can specify which events should trigger webhook notifications.","items":{"type":"string"}},"sendWarnings":{"type":"boolean","description":"Indicates if the system should send email warnings about issues with the specified webhook URL. Set to `true` to enable warnings."},"warningEmail":{"type":"string","format":"email","description":"The email address for sending warnings. This field is necessary if `sendWarnings` is set to `true`."},"companyTins":{"type":"array","description":"A list of company tax identification numbers relevant to subscriptions of type `legal` or `recipientLegal`.\n\n- For `legal`, the subscription receives events only for shipments where the value of the `sender.companyTin` field matches one of the values provided in `companyTins`.\n- For `recipientLegal`, the subscription receives events only for shipments where the value of the `recipient.companyTin` field matches one of the values provided in `companyTins`.\n","items":{"type":"string","format":"uuid"}},"secretToken":{"type":"string","description":"Webhook authorization token used to validate incoming webhook requests.\n\n🔸The token is optional and, if provided, must consist only of alphanumeric characters.\n","minLength":0,"maxLength":600,"pattern":"^[A-Za-z0-9]+$"},"secretTokenHeaderName":{"type":"string","description":"Specifies the name of the HTTP header used to transmit the `secretToken` in webhook requests.\n\nIf `secretTokenHeaderName` is provided and is not null, its value is used as the header name for transmitting the `secretToken`.</br>\nIf `secretTokenHeaderName` is not provided in the request, or is explicitly set to null, the default header name `X-NP-Key` is used.\n\nValidation requirements:\n- Only Latin letters, digits, and hyphens are allowed.\n- Must not start or end with a hyphen.\n- Must not contain spaces or any other special characters.\n\n**🔸This field is optional.**\n","pattern":"A-Za-z0-9"}},"required":["id","url","isActive"]}}}},"responses":{"200":{"description":"Subscription successfully updated.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for the updated subscription."},"type":{"type":"string","description":"The subscription type, such as `individual`, `numbers`, or `legal`."},"url":{"type":"string","format":"uri","description":"The updated callback URL for the subscription."},"isActive":{"type":"boolean","description":"Indicates if the subscription is currently active."},"is_active":{"type":"boolean","description":"Deprecated. Legacy field kept for backward compatibility. Use `isActive` instead."},"phone":{"type":"string","description":"The phone number associated with the subscription, if applicable."},"cid":{"type":"string","description":"Unique user identifier."},"eventTypes":{"type":"array","description":"A list of event types the subscription listens to.","items":{"type":"string"}},"event_types":{"type":"array","description":"Deprecated. Legacy field kept for backward compatibility. Use `eventTypes` instead.","items":{"type":"string"}},"sendWarnings":{"type":"boolean","description":"Indicates whether email warnings are sent for incorrect endpoint operations."},"send_warnings":{"type":"boolean","description":"Deprecated. Legacy field kept for backward compatibility. Use `sendWarnings` instead."},"warningEmail":{"type":"string","format":"email","description":"The email address used for sending warnings."},"warning_email":{"type":"string","format":"email","description":"Deprecated. Legacy field kept for backward compatibility. Use `warningEmail` instead."},"contentType":{"type":"string","description":"Specifies the Content-Type used for webhook request payloads.\n\nThe default value is `application/json`.\n"},"companyTins":{"type":"array","description":"The list of company tax identification numbers of a legal entity associated with the subscription.\n","items":{"type":"string"}},"company_tins":{"type":"array","description":"Deprecated. Legacy field kept for backward compatibility. Use `companyTins` instead.","items":{"type":"string"}},"secretToken":{"type":"string","description":"Webhook authorization token used to validate incoming webhook requests.\n\n🔸The token is optional and, if provided, must consist only of alphanumeric characters.\n","minLength":0,"maxLength":600,"pattern":"^[A-Za-z0-9]+$"},"secret_token":{"type":"string","description":"Deprecated. Legacy field kept for backward compatibility. Use `secretToken` instead.","minLength":0,"maxLength":600,"pattern":"^[A-Za-z0-9]+$"},"secretTokenHeaderName":{"type":"string","description":"Specifies the name of the HTTP header used to transmit the `secretToken` in webhook requests.\n\n🔸This field is optional and, if provided, must contain only Latin letters, digits, and hyphens, must not start or end with a hyphen, and must not contain spaces or other special characters.\n","pattern":"A-Za-z0-9"},"secret_token_header_name":{"type":"string","description":"Deprecated. Legacy field kept for backward compatibility. Use `secretTokenHeaderName` instead."},"updatedAt":{"type":"string","format":"date-time","description":"The timestamp when the subscription was last updated."},"updated_at":{"type":"string","format":"date-time","description":"Deprecated. Legacy field kept for backward compatibility. Use `updatedAt` instead."},"createdAt":{"type":"string","format":"date-time","description":"The timestamp when the subscription was created."},"created_at":{"type":"string","format":"date-time","description":"Deprecated. Legacy field kept for backward compatibility. Use `createdAt` instead."}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/Validation"},"503":{"$ref":"#/components/responses/Time-out"}},"summary":"Update an existing subscription"}}}}
```

## Delete a subscription

> This endpoint deletes a subscription specified by its unique identifier. Once deleted, the subscription will no longer receive webhook notifications.\
> The deletion is irreversible and should be used with caution.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Webhooks"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}},"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Validation":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Time-out":{"description":"Connection time-out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}}},"paths":{"/tracking-push/subscribers/{id}":{"delete":{"tags":["Webhooks"],"description":"This endpoint deletes a subscription specified by its unique identifier. Once deleted, the subscription will no longer receive webhook notifications.\nThe deletion is irreversible and should be used with caution.\n","operationId":"deleteSubscriber","parameters":[{"name":"id","in":"path","description":"The unique identifier of the subscription to be deleted. This is a required path parameter that identifies the specific subscription you wish to remove.","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Subscription successfully deleted.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"A confirmation message indicating successful deletion of the subscription."}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/Validation"},"503":{"$ref":"#/components/responses/Time-out"}},"summary":"Delete a subscription"}}}}
```

## Add numbers to an existing subscription

> This endpoint allows adding shipment numbers to an existing subscription specified by its unique identifier. The numbers are essential for tracking specific shipments associated with the subscription.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Webhooks"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}},"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Validation":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Time-out":{"description":"Connection time-out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}}},"paths":{"/tracking-push/subscribers/{id}/numbers":{"post":{"summary":"Add numbers to an existing subscription","description":"This endpoint allows adding shipment numbers to an existing subscription specified by its unique identifier. The numbers are essential for tracking specific shipments associated with the subscription.\n","operationId":"addNumbersToSubscriber","tags":["Webhooks"],"parameters":[{"name":"id","in":"path","description":"The unique identifier of the subscription to which shipment numbers will be added. This is a required path parameter.","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"The payload containing the list of shipment numbers to be added to the subscription. The subscription type must be `numbers` for this operation to be valid.","required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"numbers":{"type":"array","description":"A list of shipment numbers to be added to the subscription.","items":{"type":"string"}}}}}}},"responses":{"200":{"description":"Numbers successfully added to the subscription.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"A confirmation message indicating successful addition of numbers."},"addedNumbers":{"type":"array","description":"The list of numbers that were successfully added to the subscription.","items":{"type":"string"}},"missedNumbers":{"type":"array","description":"The list of numbers that could not be added (e.g., invalid or already linked).","items":{"type":"string"}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/Validation"},"503":{"$ref":"#/components/responses/Time-out"}}}}}}
```

## Delete numbers from an existing subscription

> This endpoint allows deleted shipment numbers from an existing subscription specified by its unique identifier.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Webhooks"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}},"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Validation":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Time-out":{"description":"Connection time-out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}}},"paths":{"/tracking-push/subscribers/{id}/numbers":{"delete":{"summary":"Delete numbers from an existing subscription","description":"This endpoint allows deleted shipment numbers from an existing subscription specified by its unique identifier.\n","operationId":"deleteNumbersToSubscriber","tags":["Webhooks"],"parameters":[{"name":"id","in":"path","description":"The unique identifier of the subscription to which shipment numbers will be deleted. This is a required path parameter.","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"The payload containing the list of shipment numbers to be deleted from the subscription. The subscription type must be `numbers` for this operation to be valid.","required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"numbers":{"type":"array","description":"A list of shipment numbers to be deleted to the subscription.","items":{"type":"string"}}}}}}},"responses":{"200":{"description":"Numbers successfully deleted with subscription.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"A confirmation message indicating successful deleted of numbers."}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/Validation"},"503":{"$ref":"#/components/responses/Time-out"}}}}}}
```

## Checking the test webhook

> This endpoint allows you to test the webhook functionality. At least one active subscription is required for a successful response.\
> \
> Webhook requests are sent using the \`application/json\` Content-Type by default.\
> \
> 🔹\*\*Test webhook behavior:\*\*\</br>\
> The method returns a confirmation response indicating that a test webhook request was sent.\
> A webhook event with tracking data is delivered to the subscriber endpoint.\
> \
> 🔹\*\*Webhook payload parameters:\*\*\</br>\
> The webhook request body looks as follows:\
> \`\`\`json\
> {\
> &#x20; "number": "SHPL0000000001",\
> &#x20; "scheduled\_delivery\_date": "2024-11-20T20:03:00.000000Z",\
> &#x20; "history\_tracking": \[\
> &#x20;   {\
> &#x20;     "code": "4",\
> &#x20;     "code\_name": "On the way",\
> &#x20;     "country\_code": "UA",\
> &#x20;     "settlement": "Kyiv",\
> &#x20;     "date": "2024-11-19T09:32:05.000000Z"\
> &#x20;   },\
> &#x20;   {\
> &#x20;     "code": "112",\
> &#x20;     "code\_name": "Change of delivery date",\
> &#x20;     "country\_code": "",\
> &#x20;     "settlement": "",\
> &#x20;     "date": "2024-11-19T09:33:56.000000Z"\
> &#x20;   }\
> &#x20; ]\
> }\
> \`\`\`\
> with the following parameters:\
> \- \`number\` — shipment number.\
> \- \`scheduled\_delivery\_date\` — scheduled delivery date and time in ISO 8601 format.\
> \- \`history\_tracking\` — array of tracking status objects.\
> &#x20; \- \`code\` — tracking status code.\</br>For more details about tracking status codes, see the description of the \`currentStatus.statusCode\` parameter in the response of the \<a href="<https://api-portal.novapost.com/metodi-1/methods/shipments/tracking-shipment#get-shipments-tracking>" target="\_new">\<b>FullTracking\</b>\</a> method.\
> &#x20; \- \`code\_name\` — tracking status name.\
> &#x20; \- \`country\_code\` — country code where the status was recorded.\
> &#x20; \- \`settlement\` — settlement name.\
> &#x20; \- \`date\` — timestamp of the status event.\
> \
> The payload contains at least one tracking status.\</br>\
> Each subsequent webhook delivery includes the newly added status and all previously delivered statuses.<br>

````json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Webhooks"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}},"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Validation":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Time-out":{"description":"Connection time-out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}}},"paths":{"/tracking-push/subscribers/test-webhook":{"post":{"summary":"Checking the test webhook","description":"This endpoint allows you to test the webhook functionality. At least one active subscription is required for a successful response.\n\nWebhook requests are sent using the `application/json` Content-Type by default.\n\n🔹**Test webhook behavior:**</br>\nThe method returns a confirmation response indicating that a test webhook request was sent.\nA webhook event with tracking data is delivered to the subscriber endpoint.\n\n🔹**Webhook payload parameters:**</br>\nThe webhook request body looks as follows:\n```json\n{\n  \"number\": \"SHPL0000000001\",\n  \"scheduled_delivery_date\": \"2024-11-20T20:03:00.000000Z\",\n  \"history_tracking\": [\n    {\n      \"code\": \"4\",\n      \"code_name\": \"On the way\",\n      \"country_code\": \"UA\",\n      \"settlement\": \"Kyiv\",\n      \"date\": \"2024-11-19T09:32:05.000000Z\"\n    },\n    {\n      \"code\": \"112\",\n      \"code_name\": \"Change of delivery date\",\n      \"country_code\": \"\",\n      \"settlement\": \"\",\n      \"date\": \"2024-11-19T09:33:56.000000Z\"\n    }\n  ]\n}\n```\nwith the following parameters:\n- `number` — shipment number.\n- `scheduled_delivery_date` — scheduled delivery date and time in ISO 8601 format.\n- `history_tracking` — array of tracking status objects.\n  - `code` — tracking status code.</br>For more details about tracking status codes, see the description of the `currentStatus.statusCode` parameter in the response of the <a href=\"https://api-portal.novapost.com/metodi-1/methods/shipments/tracking-shipment#get-shipments-tracking\" target=\"_new\"><b>FullTracking</b></a> method.\n  - `code_name` — tracking status name.\n  - `country_code` — country code where the status was recorded.\n  - `settlement` — settlement name.\n  - `date` — timestamp of the status event.\n\nThe payload contains at least one tracking status.</br>\nEach subsequent webhook delivery includes the newly added status and all previously delivered statuses.\n","operationId":"testWebhook","tags":["Webhooks"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"numbers":{"type":"array","description":"Test shipment number always SHPL0000000001.","items":{"type":"string"}},"id":{"type":"string","description":"The unique identifier for the created subscription."},"cid":{"type":"string","description":"Unique user identifier."}}}}}},"responses":{"200":{"description":"Test webhook was sent successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"string","description":"Confirmation message about successful test."}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/Validation"},"503":{"$ref":"#/components/responses/Time-out"}}}}}}
````


# Fullfillment

## Create Goods

> This endpoint is used to create one or more goods records that can be added to an Inbound Plan or an Order.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Fulfillment"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}}},"paths":{"/fulfillment/{countrycode}/v1/goods/multiple":{"post":{"summary":"Create Goods","description":"This endpoint is used to create one or more goods records that can be added to an Inbound Plan or an Order.\n","operationId":"createGoodsMultiple","tags":["Fulfillment"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","maxItems":5000,"description":"Array of goods objects.","items":{"type":"object","additionalProperties":false,"properties":{"sku":{"type":"string","description":"Unique product SKU in the client's information system.\n\nCase-insensitive.\n","minLength":2,"maxLength":72},"goodsUnitName":{"type":"string","description":"Short product name.","minLength":2,"maxLength":255},"goodsUnitFullName":{"type":"string","nullable":true,"description":"Full product name.","minLength":2,"maxLength":255},"price":{"type":"number","format":"float","description":"Price per product unit.","minimum":0.01,"maximum":100000000},"inventExpireDays":{"type":"integer","nullable":true,"description":"Shelf life in days. Enables expiration date control.","minimum":1,"maximum":15000}},"required":["sku","goodsUnitName","price"]}}}}},"responses":{"207":{"description":"Multi-Status. One or more goods were processed.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","description":"Array of successfully created goods.","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"Unique identifier of the product."},"sku":{"type":"string","description":"Product SKU in the client's information system."},"goodsUnitName":{"type":"string","description":"Short product name."},"goodsUnitFullName":{"type":"string","nullable":true,"description":"Full product name."},"price":{"type":"number","format":"float","description":"Price per product unit."},"inventExpireDays":{"type":"integer","nullable":true,"description":"Shelf life in days."},"createdAt":{"type":"string","format":"date-time","description":"Product creation date and time."},"updatedAt":{"type":"string","format":"date-time","description":"Date and time of the last product update."}},"required":["id","sku","goodsUnitName","price","createdAt","updatedAt"]}},"errors":{"type":"object","description":"Validation errors for goods that could not be created."}},"required":["data","errors"]}}}}}}}}}
```

## Update goods' details

> This endpoint allows modifying details of an existing goods.\
> Only the fields that need to be changed should be included in the request body (partial update), for example updating the name, price, or shelf life of a product.\
> \
> 🔸All fields are optional, but at least one field must be provided to perform an update. On success, the API returns the updated goods fields.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Fulfillment"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}}},"paths":{"/fulfillment/{countrycode}/v1/goods/{id}":{"patch":{"summary":"Update goods' details","description":"This endpoint allows modifying details of an existing goods.\nOnly the fields that need to be changed should be included in the request body (partial update), for example updating the name, price, or shelf life of a product.\n\n🔸All fields are optional, but at least one field must be provided to perform an update. On success, the API returns the updated goods fields.\n","operationId":"updateGoods","tags":["Fulfillment"],"parameters":[{"name":"id","in":"path","required":true,"description":"Unique identifier of the goods to be updated.","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"description":"Request body for updating goods.\nOnly the fields that need to be changed should be provided.\nAt least one field must be present.\n","properties":{"goodsUnitName":{"type":"string","description":"Short product name.","minLength":2,"maxLength":255},"goodsUnitFullName":{"type":"string","description":"Full product name.","minLength":2,"maxLength":255},"price":{"type":"number","format":"float","description":"Price per product unit.","minimum":0.01,"maximum":100000000},"inventExpireDays":{"type":"integer","nullable":true,"description":"Shelf life in days. Pass `null` to disable expiration date control.","minimum":1,"maximum":15000}},"minProperties":1}}}},"responses":{"200":{"description":"Request successful. Goods details were updated.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","description":"Updated goods details.","properties":{"id":{"type":"string","format":"uuid","description":"Unique identifier of the goods."},"sku":{"type":"string","description":"Unique product SKU in the client's information system."},"goodsUnitName":{"type":"string","description":"Short product name."},"goodsUnitFullName":{"type":"string","nullable":true,"description":"Full product name."},"price":{"type":"number","format":"float","description":"Price per product unit."},"inventExpireDays":{"type":"integer","nullable":true,"description":"Shelf life in days."},"createdAt":{"type":"string","format":"date-time","description":"Goods creation date and time."},"updatedAt":{"type":"string","format":"date-time","description":"Date and time of the last goods update."}},"required":["id","sku","goodsUnitName","price","createdAt","updatedAt"]}},"required":["data"]}}}}}}}}}
```

## Create Barcode

> This endpoint is used to create one or more barcodes associated with a specific good.\
> The barcode data is provided as an array, allowing multiple barcodes to be created in a single request.\
> \
> On success, the API returns all created barcodes with their unique identifiers and the parameters specified in the request.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Fulfillment"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}}},"paths":{"/fulfillment/{countrycode}/v1/goods/{objectId}/barcodes/multiple":{"post":{"summary":"Create Barcode","description":"This endpoint is used to create one or more barcodes associated with a specific good.\nThe barcode data is provided as an array, allowing multiple barcodes to be created in a single request.\n\nOn success, the API returns all created barcodes with their unique identifiers and the parameters specified in the request.\n","operationId":"createBarcodes","tags":["Fulfillment"],"parameters":[{"name":"objectId","in":"path","required":true,"description":"Unique identifier of the goods for which barcodes are created.","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","maxItems":5000,"items":{"type":"object","additionalProperties":false,"properties":{"barCode":{"type":"string","description":"Barcode value.","minLength":2,"maxLength":72},"weight":{"type":"number","format":"float","description":"Weight in kilograms.","minimum":0.01,"maximum":1000000},"length":{"type":"number","format":"float","description":"Length in centimeters.","minimum":0.01,"maximum":1000000},"height":{"type":"number","format":"float","description":"Height in centimeters.","minimum":0.01,"maximum":1000000},"width":{"type":"number","format":"float","description":"Width in centimeters.","minimum":0.01,"maximum":1000000}},"required":["barCode"]}}}}},"responses":{"207":{"description":"Multi-Status. Barcodes were processed.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","description":"Array of successfully created barcode objects.","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"Unique identifier of the barcode."},"barcode":{"type":"string","description":"Barcode value."},"measureUnitName":{"type":"string","description":"Unit of measurement."},"includes":{"type":"integer","description":"Number of units in the package."},"weight":{"type":"number","format":"float","description":"Weight in kilograms."},"length":{"type":"number","format":"float","description":"Length in centimeters."},"height":{"type":"number","format":"float","description":"Height in centimeters."},"width":{"type":"number","format":"float","description":"Width in centimeters."},"createdAt":{"type":"string","format":"date-time","description":"Barcode creation date and time."},"updatedAt":{"type":"string","format":"date-time","description":"Date and time of the last barcode update."}},"required":["id","barcode","measureUnitName","includes","createdAt","updatedAt"]}},"errors":{"type":"object","description":"Validation errors for barcodes that could not be created."}},"required":["data","errors"]}}}}}}}}}
```

## Update Barcode Details

> This endpoint is used to update the parameters of an existing barcode in the system by its unique identifier.\
> \
> Only the fields that need to be updated should be included in the request body.\
> \
> 🔸All fields are optional, but at least one field must be provided to perform the update. On success, the API returns the updated barcode object.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Fulfillment"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}}},"paths":{"/fulfillment/{countrycode}/v1/barcodes/{id}":{"patch":{"summary":"Update Barcode Details","description":"This endpoint is used to update the parameters of an existing barcode in the system by its unique identifier.\n\nOnly the fields that need to be updated should be included in the request body.\n\n🔸All fields are optional, but at least one field must be provided to perform the update. On success, the API returns the updated barcode object.\n","operationId":"updateBarcode","tags":["Fulfillment"],"parameters":[{"name":"id","in":"path","required":true,"description":"Unique identifier of the barcode to be updated.","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"description":"Request body for updating barcode details.\nOnly the fields that need to be changed should be provided.\nAt least one field must be present.\n","properties":{"weight":{"type":"number","format":"float","description":"Weight in kilograms.","minimum":0.01,"maximum":1000000},"length":{"type":"number","format":"float","description":"Length in centimeters.","minimum":0.01,"maximum":1000000},"height":{"type":"number","format":"float","description":"Height in centimeters.","minimum":0.01,"maximum":1000000},"width":{"type":"number","format":"float","description":"Width in centimeters.","minimum":0.01,"maximum":1000000}},"minProperties":1}}}},"responses":{"200":{"description":"Barcode successfully updated.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","description":"Updated barcode details.","properties":{"id":{"type":"string","format":"uuid","description":"Unique identifier of the barcode."},"barcode":{"type":"string","description":"Barcode value."},"measureUnitName":{"type":"string","description":"Unit of measurement."},"includes":{"type":"integer","description":"Number of units in the package."},"weight":{"type":"number","format":"float","description":"Weight in kilograms."},"length":{"type":"number","format":"float","description":"Length in centimeters."},"height":{"type":"number","format":"float","description":"Height in centimeters."},"width":{"type":"number","format":"float","description":"Width in centimeters."},"createdAt":{"type":"string","format":"date-time","description":"Barcode creation date and time."},"updatedAt":{"type":"string","format":"date-time","description":"Date and time of the last barcode update."}},"required":["id","barcode","measureUnitName","includes","createdAt","updatedAt"]}},"required":["data"]}}}}}}}}}
```

## Create Inbound Plan

> This endpoint allows creating a new inbound plan to receive goods at the specified warehouse.\
> \
> Only one inbound plan can be created per request.\
> A plan may contain one or more goods positions.\
> \
> On success, the API returns the created inbound plan with its unique identifier.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Fulfillment"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}}},"paths":{"/fulfillment/{countrycode}/v1/inbound-plans":{"post":{"summary":"Create Inbound Plan","description":"This endpoint allows creating a new inbound plan to receive goods at the specified warehouse.\n\nOnly one inbound plan can be created per request.\nA plan may contain one or more goods positions.\n\nOn success, the API returns the created inbound plan with its unique identifier.\n","operationId":"createInboundPlan","tags":["Fulfillment"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"description":"Request body for creating an inbound plan.\nAll required fields must be provided.\n","properties":{"externalNumber":{"type":"string","description":"Unique document number in the client's information system.","minLength":2,"maxLength":72},"guid":{"type":"string","description":"Unique document GUID in the client's information system.","minLength":2,"maxLength":72},"destWarehouse":{"type":"string","description":"Destination warehouse code.","minLength":2,"maxLength":255},"deliveryType":{"type":"integer","description":"Delivery type (1 — Supplier delivery, 3 — Nova Post return, 7 — Nova Post delivery).","enum":[1,3,7]},"additionalInfo":{"type":"string","description":"Additional comment.","maxLength":255},"details":{"type":"array","description":"Array of goods items.","minItems":1,"maxItems":1000,"items":{"type":"object","additionalProperties":false,"properties":{"objectId":{"type":"string","format":"uuid","description":"Goods identifier in WMS (Warehouse Management System)."},"quantity":{"type":"integer","description":"Quantity of goods units.","minimum":1,"maximum":1000000}},"required":["objectId","quantity"]}}},"required":["externalNumber","destWarehouse","deliveryType","details"]}}}},"responses":{"201":{"description":"Request successful. Inbound plan was created.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","description":"Created inbound plan.","properties":{"id":{"type":"string","format":"uuid","description":"Unique identifier of the inbound plan."},"externalNumber":{"type":"string","description":"Document number in the client's information system."},"guid":{"type":"string","description":"Unique document GUID in the client's information system."},"destWarehouse":{"type":"string","description":"Destination warehouse code."},"deliveryType":{"type":"integer","description":"Delivery type."},"additionalInfo":{"type":"string","description":"Additional comment."},"createdAt":{"type":"string","format":"date-time","description":"Inbound plan creation date and time."},"updatedAt":{"type":"string","format":"date-time","description":"Date and time of the last inbound plan update."},"details":{"type":"array","description":"Array of goods items included in the inbound plan.","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"Unique identifier of the inbound plan item."},"objectId":{"type":"string","format":"uuid","description":"Goods identifier in WMS (Warehouse Management System)."},"quantity":{"type":"integer","description":"Quantity of goods units."}},"required":["id","objectId","quantity"]}}},"required":["id","externalNumber","destWarehouse","deliveryType","createdAt","updatedAt","details"]}},"required":["data"]}}}}}}}}}
```

## Add Goods to Inbound Plan

> This endpoint is used to add new goods items to an existing inbound plan that is in status \`1\` (\*\*New\*\*).<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Fulfillment"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}}},"paths":{"/fulfillment/{countrycode}/v1/inbound-plans/{id}/details":{"post":{"summary":"Add Goods to Inbound Plan","description":"This endpoint is used to add new goods items to an existing inbound plan that is in status `1` (**New**).\n","operationId":"addGoodsToInboundPlan","tags":["Fulfillment"],"parameters":[{"name":"id","in":"path","required":true,"description":"Unique identifier of the inbound plan.","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","minItems":1,"maxItems":1000,"items":{"type":"object","additionalProperties":false,"properties":{"objectId":{"type":"string","format":"uuid","description":"Goods UUID in WMS (Warehouse Management System)."},"quantity":{"type":"integer","description":"Quantity of goods units.","minimum":1,"maximum":1000000}},"required":["objectId","quantity"]}}}}},"responses":{"201":{"description":"Request successful. Goods were added to the inbound plan.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"Unique identifier of the inbound plan item."},"objectId":{"type":"string","format":"uuid","description":"Goods UUID in WMS (Warehouse Management System)."},"quantity":{"type":"integer","description":"Quantity of goods units."}},"required":["id","objectId","quantity"]}}}}}}}}}}
```

## Update Inbound Plan

> This endpoint is used to update the parameters of an inbound plan that is in status \`1\` (\*\*New\*\*).\
> \
> The endpoint allows updating the destination warehouse, delivery type, additional information, and quantities of existing goods items.\
> \
> 🔸Adding or removing goods items through this endpoint is not supported.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Fulfillment"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}}},"paths":{"/fulfillment/{countrycode}/v1/inbound-plans/{id}":{"patch":{"summary":"Update Inbound Plan","description":"This endpoint is used to update the parameters of an inbound plan that is in status `1` (**New**).\n\nThe endpoint allows updating the destination warehouse, delivery type, additional information, and quantities of existing goods items.\n\n🔸Adding or removing goods items through this endpoint is not supported.\n","operationId":"updateInboundPlan","tags":["Fulfillment"],"parameters":[{"name":"id","in":"path","required":true,"description":"Unique identifier of the inbound plan.","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"description":"Request body for updating an inbound plan.\nOnly the fields that need to be changed should be provided.\nAt least one field must be present.\n","properties":{"destWarehouse":{"type":"string","description":"Destination warehouse code.","minLength":2,"maxLength":255},"deliveryType":{"type":"integer","description":"Delivery type (1 — Supplier delivery, 3 — Nova Post return, 7 — Nova Post delivery).","enum":[1,3,7]},"additionalInfo":{"type":"string","description":"Comment.","maxLength":255},"details":{"type":"array","description":"Array of existing goods items for quantity update.","minItems":1,"maxItems":1000,"items":{"type":"object","additionalProperties":false,"properties":{"objectId":{"type":"string","format":"uuid","description":"Goods UUID in WMS (Warehouse Management System).\n\n🔹Required if `quantity` is specified.\n"},"quantity":{"type":"integer","description":"Quantity of goods units.\n\n🔹Required if `objectId` is specified.\n","minimum":1,"maximum":1000000}},"required":["objectId","quantity"]}}},"minProperties":1}}}},"responses":{"200":{"description":"Request successful. Inbound plan was updated.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","description":"Updated inbound plan.","properties":{"id":{"type":"string","format":"uuid","description":"Unique identifier of the inbound plan."},"externalNumber":{"type":"string","description":"Document number in the client's information system."},"guid":{"type":"string","description":"Document GUID in the client's information system."},"destWarehouse":{"type":"string","description":"Destination warehouse code."},"deliveryType":{"type":"integer","description":"Delivery type."},"additionalInfo":{"type":"string","description":"Comment."},"createdAt":{"type":"string","format":"date-time","description":"Inbound plan creation date and time."},"updatedAt":{"type":"string","format":"date-time","description":"Date and time of the last inbound plan update."},"details":{"type":"array","description":"Array of inbound plan items.","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier of the inbound plan item."},"objectId":{"type":"string","description":"Goods UUID in WMS (Warehouse Management System)."},"quantity":{"type":"integer","description":"Quantity of goods units."}},"required":["id","objectId","quantity"]}}},"required":["id","externalNumber","destWarehouse","deliveryType","createdAt","updatedAt","details"]}},"required":["data"]}}}}}}}}}
```

## Delete Goods from Inbound Plan

> This endpoint is used to remove goods items from an inbound plan that is in status \`1\` (\*\*New\*\*).\
> \
> On success, the API returns only the goods items that remain in the inbound plan.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Fulfillment"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}}},"paths":{"/fulfillment/{countrycode}/v1/inbound-plans/{id}/details/multiple-delete":{"post":{"summary":"Delete Goods from Inbound Plan","description":"This endpoint is used to remove goods items from an inbound plan that is in status `1` (**New**).\n\nOn success, the API returns only the goods items that remain in the inbound plan.\n","operationId":"deleteGoodsFromInboundPlan","tags":["Fulfillment"],"parameters":[{"name":"id","in":"path","required":true,"description":"Unique identifier of the inbound plan.","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","minItems":1,"maxItems":1000,"items":{"type":"object","additionalProperties":false,"properties":{"objectId":{"type":"string","format":"uuid","description":"Goods UUID in WMS (Warehouse Management System)."}},"required":["objectId"]}}}}},"responses":{"200":{"description":"Request successful. Goods items were removed from the inbound plan.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"Unique identifier of the inbound plan item."},"objectId":{"type":"string","format":"uuid","description":"Goods UUID in WMS (Warehouse Management System)."},"quantity":{"type":"integer","description":"Quantity of goods units."}},"required":["id","objectId","quantity"]}}}}}}}}}}
```

## Cancel Inbound Plan

> This endpoint is used to cancel an inbound plan that is in status \`1\` (\*\*New\*\*).\
> \
> On success, the inbound plan is moved to status \`10\` (\*\*Canceled\*\*) and the updated inbound plan is returned.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Fulfillment"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}}},"paths":{"/fulfillment/{countrycode}/v1/inbound-plans/{id}/cancel":{"patch":{"summary":"Cancel Inbound Plan","description":"This endpoint is used to cancel an inbound plan that is in status `1` (**New**).\n\nOn success, the inbound plan is moved to status `10` (**Canceled**) and the updated inbound plan is returned.\n","operationId":"cancelInboundPlan","tags":["Fulfillment"],"parameters":[{"name":"id","in":"path","required":true,"description":"Unique identifier of the inbound plan.","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Request successful. The inbound plan was canceled.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","description":"Canceled inbound plan.","properties":{"id":{"type":"string","format":"uuid","description":"Unique identifier of the inbound plan."},"externalNumber":{"type":"string","description":"Document number in the client's information system."},"guid":{"type":"string","description":"Document GUID in the client's information system."},"destWarehouse":{"type":"string","description":"Destination warehouse code."},"deliveryType":{"type":"integer","description":"Delivery type."},"additionalInfo":{"type":"string","description":"Comment."},"createdAt":{"type":"string","format":"date-time","description":"Inbound plan creation date and time."},"updatedAt":{"type":"string","format":"date-time","description":"Date and time of the last inbound plan update."},"details":{"type":"array","description":"Array of inbound plan items.","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier of the inbound plan item."},"objectId":{"type":"string","description":"Goods UUID in WMS."},"quantity":{"type":"integer","description":"Quantity of goods units."}},"required":["id","objectId","quantity"]}}},"required":["id","externalNumber","destWarehouse","deliveryType","createdAt","updatedAt","details"]}},"required":["data"]}}}}}}}}}
```

## Create Orders

> This endpoint is used to create one or more customer orders for shipping goods from the warehouse in a single request.\
> \
> Two delivery scenarios are supported:\
> \- \*\*Nova Post delivery\*\* — an international express waybill number must be specified. The waybill is validated in AWIS / Oper Module.\
> \- \*\*Customer pickup\*\* — the order is created without specifying an international express waybill.\
> \
> If the request is valid and all requirements are met, each order is created with one of the following statuses:\
> \- \`1\` \*\*(New)\*\* — when all products are available in stock.\
> \- \`13\` \*\*(Incomplete)\*\* — when some products are fully or partially unavailable.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Fulfillment"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}}},"paths":{"/fulfillment/{countrycode}/v1/orders/multiple":{"post":{"summary":"Create Orders","description":"This endpoint is used to create one or more customer orders for shipping goods from the warehouse in a single request.\n\nTwo delivery scenarios are supported:\n- **Nova Post delivery** — an international express waybill number must be specified. The waybill is validated in AWIS / Oper Module.\n- **Customer pickup** — the order is created without specifying an international express waybill.\n\nIf the request is valid and all requirements are met, each order is created with one of the following statuses:\n- `1` **(New)** — when all products are available in stock.\n- `13` **(Incomplete)** — when some products are fully or partially unavailable.\n","operationId":"createOrdersMultiple","tags":["Fulfillment"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","minItems":1,"maxItems":100,"items":{"type":"object","additionalProperties":false,"properties":{"externalNumber":{"type":"string","description":"Customer's internal order number.","minLength":2,"maxLength":72},"destWarehouse":{"type":"string","description":"Warehouse code.","minLength":2,"maxLength":255},"deliveryType":{"type":"integer","description":"Delivery type (`1` — Nova Post shipment, `2` — Customer pickup).","enum":[1,2]},"waybillNumber":{"type":"string","description":"Nova Post waybill number. Required when `deliveryType = 1`."},"additionalInfo":{"type":"string","description":"Additional information or comment.","maxLength":255},"details":{"type":"array","description":"List of product items included in the order.","minItems":1,"maxItems":1000,"items":{"type":"object","additionalProperties":false,"properties":{"objectId":{"type":"string","format":"uuid","description":"Product UUID in WMS."},"quantity":{"type":"integer","description":"Number of product units.","minimum":1,"maximum":1000},"price":{"type":"number","format":"float","description":"Unit price.","minimum":0.01,"maximum":100000000},"sum":{"type":"number","format":"float","description":"Total item amount.","minimum":0.01,"maximum":100000000}},"required":["objectId","quantity"]}}},"required":["externalNumber","destWarehouse","deliveryType","details"]}}}}},"responses":{"207":{"description":"Request processed. Returns the creation result for each order.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","description":"Successfully created orders.","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"Unique order identifier."},"externalNumber":{"type":"string","description":"Customer's internal order number."},"destWarehouse":{"type":"string","description":"Warehouse code."},"deliveryType":{"type":"integer","description":"Delivery type."},"waybillNumber":{"type":"string","nullable":true,"description":"Nova Post waybill number."},"additionalInfo":{"type":"string","description":"Additional information or comment."},"createdAt":{"type":"string","format":"date-time","description":"Order creation date and time."},"updatedAt":{"type":"string","format":"date-time","description":"Order last update date and time."},"details":{"type":"array","description":"Product items included in the order.","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"Unique order item identifier."},"objectId":{"type":"string","format":"uuid","description":"Product UUID in WMS."},"quantity":{"type":"integer","description":"Quantity of the goods."},"price":{"type":"number","format":"float","description":"Unit price."},"sum":{"type":"number","format":"float","description":"Total item amount."}},"required":["id","objectId","quantity"]}}}},"required":["id","externalNumber","destWarehouse","deliveryType","details"]},"errors":{"type":"object","description":"Errors for orders that could not be created."}},"required":["data","errors"]}}}}}}}}}
```

## Add Goods to Order

> This endpoint is used to add new product items to an existing order that is currently in status \`13\` \*\*(Incomplete)\*\*.\
> \
> The response (\`201 Created\`) returns the complete list of product items currently included in the order.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Fulfillment"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}}},"paths":{"/fulfillment/{countrycode}/v1/orders/{id}/details":{"post":{"summary":"Add Goods to Order","description":"This endpoint is used to add new product items to an existing order that is currently in status `13` **(Incomplete)**.\n\nThe response (`201 Created`) returns the complete list of product items currently included in the order.\n","operationId":"addGoodsToClientOrder","tags":["Fulfillment"],"parameters":[{"name":"id","in":"path","required":true,"description":"Unique identifier of the order.","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","description":"Root-level array of product items to be added to the order.\nAt least one product item must be provided.\n","minItems":1,"items":{"type":"object","additionalProperties":false,"properties":{"objectId":{"type":"string","description":"Product identifier."},"quantity":{"type":"integer","description":"Quantity of product.","minimum":1,"maximum":1000},"price":{"type":"number","format":"float","description":"Unit price."},"sum":{"type":"number","format":"float","description":"Total amount for the line item."}},"required":["objectId","quantity"]}}}}},"responses":{"201":{"description":"Complete order item list returned successfully.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"Unique identifier of the order item."},"objectId":{"type":"string","description":"Product identifier."},"quantity":{"type":"integer","description":"Quantity of product."},"price":{"type":"number","format":"float","description":"Unit price."},"sum":{"type":"number","format":"float","description":"Total amount for the line item."}},"required":["id","objectId","quantity"]}}}}}}}}}}
```

## Check Order Status

> This endpoint is used to retrieve the current status of one or more orders, with optional filtering parameters.\
> \
> Filter values within the same parameter are combined using \*\*OR\*\*, while different filter parameters are combined using \*\*AND\*\*.\
> \
> 🔹\*\*If no filter parameters are provided, the response returns the most recent orders.\*\*\
> \
> 🔸This \`GET\` request does not return an error when incorrect, non-existent, or partially invalid filter values are used.\
> In such cases, invalid or empty filters are ignored, and if no orders match the criteria, an empty array is returned.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Fulfillment"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}}},"paths":{"/fulfillment/{countrycode}/v1/orders/status":{"get":{"summary":"Check Order Status","description":"This endpoint is used to retrieve the current status of one or more orders, with optional filtering parameters.\n\nFilter values within the same parameter are combined using **OR**, while different filter parameters are combined using **AND**.\n\n🔹**If no filter parameters are provided, the response returns the most recent orders.**\n\n🔸This `GET` request does not return an error when incorrect, non-existent, or partially invalid filter values are used.\nIn such cases, invalid or empty filters are ignored, and if no orders match the criteria, an empty array is returned.\n","operationId":"checkOrderStatus","tags":["Fulfillment"],"parameters":[{"name":"ids[]","in":"query","required":false,"description":"Array of system order identifiers.","schema":{"type":"array","items":{"type":"string","format":"uuid"}}},{"name":"externalNumbers[]","in":"query","required":false,"description":"Array of external order numbers.","schema":{"type":"array","items":{"type":"string"}}},{"name":"destWarehouses[]","in":"query","required":false,"description":"Array of destination warehouse codes.","schema":{"type":"array","items":{"type":"string"}}},{"name":"startDate","in":"query","required":false,"description":"Start creation date in ISO 8601 format.","schema":{"type":"string","format":"date-time"}},{"name":"endDate","in":"query","required":false,"description":"End creation date in ISO 8601 format.","schema":{"type":"string","format":"date-time"}},{"name":"page","in":"query","required":false,"description":"Pagination page number (up to 25 objects per page).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Request successful.\nReturns a list of orders matching the filtering criteria.\n","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","description":"List of orders.","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier of the order."},"externalNumber":{"type":"string","description":"External order number."},"destWarehouse":{"type":"string","description":"Destination warehouse code."},"status":{"type":"integer","description":"Current order status."},"statusTime":{"type":"string","format":"date-time","nullable":true,"description":"Timestamp of the latest status update."},"waybillNumber":{"type":"string","nullable":true,"description":"Waybill number."}},"required":["id","externalNumber","destWarehouse","status"]}},"links":{"type":"object","description":"Pagination links."},"meta":{"type":"object","description":"Pagination metadata."}},"required":["data","links","meta"]}}}}}}}}}
```

## Cancel Order

> This endpoint is used to cancel a order that is currently in status \`13\` \*\*(Incomplete)\*\*.\
> \
> Once canceled, the order transitions to status \`10\` \*\*(Canceled)\*\*.\
> \
> If a related Nova Post waybill number exists, it is automatically deleted.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Fulfillment"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}}},"paths":{"/fulfillment/{countrycode}/v1/orders/{id}/cancel":{"patch":{"summary":"Cancel Order","description":"This endpoint is used to cancel a order that is currently in status `13` **(Incomplete)**.\n\nOnce canceled, the order transitions to status `10` **(Canceled)**.\n\nIf a related Nova Post waybill number exists, it is automatically deleted.\n","operationId":"cancelClientOrder","tags":["Fulfillment"],"parameters":[{"name":"id","in":"path","required":true,"description":"Unique identifier of the order.","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"The order was successfully canceled.\nReturns the updated order.\n","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"Unique identifier of the order."},"externalNumber":{"type":"string","description":"External order number."},"destWarehouse":{"type":"string","description":"Shipping warehouse code."},"deliveryType":{"type":"integer","description":"Delivery type."},"waybillNumber":{"type":"string","nullable":true,"description":"Waybill number. Returns `null` after cancellation."},"additionalInfo":{"type":"string","description":"Additional information or comment."},"status":{"type":"string","description":"Order status (`10` = Canceled).","enum":["10"]},"createdAt":{"type":"string","format":"date-time","description":"Order creation date and time."},"updatedAt":{"type":"string","format":"date-time","description":"Order last update date and time."},"details":{"type":"array","description":"Order item list.","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"Unique identifier of the order item."},"objectId":{"type":"string","description":"Product identifier."},"quantity":{"type":"integer","description":"Product quantity."},"price":{"type":"number","format":"float","description":"Unit price."},"sum":{"type":"number","format":"float","description":"Total amount for the line item."}},"required":["id","objectId","quantity"]}}},"required":["id","externalNumber","status","details"]}},"required":["data"]}}}}}}}}}
```

## Get Order Details

> This endpoint is used to retrieve the complete details of a specific order by its \*\*id\*\*.\
> \
> The response returns the complete list of order items, including planned and actual quantities, product condition, and serial numbers (if applicable).<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Fulfillment"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}}},"paths":{"/fulfillment/{countrycode}/v1/orders/{id}/details":{"get":{"summary":"Get Order Details","description":"This endpoint is used to retrieve the complete details of a specific order by its **id**.\n\nThe response returns the complete list of order items, including planned and actual quantities, product condition, and serial numbers (if applicable).\n","operationId":"getOrderDetails","tags":["Fulfillment"],"parameters":[{"name":"id","in":"path","required":true,"description":"Unique identifier of the order.","schema":{"type":"string"}}],"responses":{"200":{"description":"Data successfully retrieved.\nReturns the complete details of the order.\n","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier of the order."},"externalNumber":{"type":"string","description":"External order number."},"details":{"type":"array","description":"List of order items.","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"Unique identifier of the order item."},"objectId":{"type":"string","description":"Product identifier."},"sku":{"type":"string","description":"Product SKU."},"measureUnitName":{"type":"string","description":"Unit of measurement."},"plannedQuantity":{"type":"integer","description":"Planned quantity."},"actualQuantity":{"type":"integer","description":"Actual quantity."},"condition":{"type":"integer","description":"Product condition.","enum":[0,1]},"series":{"type":"array","description":"List of serial numbers.","items":{"type":"string"}}},"required":["id","objectId","sku","plannedQuantity","actualQuantity","condition","series"]}}},"required":["id","externalNumber","details"]}}}}}}}}}
```

## Update Order

> This endpoint updates an existing customer order that is currently in status \`13\` \*\*(Incomplete)\*\*.\
> \
> The request allows updating general order parameters, delivery settings, and existing order items. If \*\*Nova Post delivery\*\* is selected, a waybill number must be provided. If the delivery type is changed to \*\*Customer pickup\*\*, the existing waybill is removed from the system.\
> \
> 🔸All fields are optional, but at least one field must be provided to perform the update.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Fulfillment"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}}},"paths":{"/fulfillment/{countrycode}/v1/orders/{id}":{"patch":{"summary":"Update Order","description":"This endpoint updates an existing customer order that is currently in status `13` **(Incomplete)**.\n\nThe request allows updating general order parameters, delivery settings, and existing order items. If **Nova Post delivery** is selected, a waybill number must be provided. If the delivery type is changed to **Customer pickup**, the existing waybill is removed from the system.\n\n🔸All fields are optional, but at least one field must be provided to perform the update.\n","operationId":"updateOrder","tags":["Fulfillment"],"parameters":[{"name":"id","in":"path","required":true,"description":"Unique identifier of the customer order.","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"description":"Request body for updating a customer order.\nOnly the fields that need to be changed should be provided.\nAt least one field must be present.\n","properties":{"destWarehouse":{"type":"string","description":"Warehouse code."},"deliveryType":{"type":"integer","description":"Delivery type (`1` — Nova Post shipment, `2` — Customer pickup).","enum":[1,2]},"waybillNumber":{"type":"string","nullable":true,"description":"Nova Post waybill number. Required when `deliveryType = 1`."},"additionalInfo":{"type":"string","description":"Additional information or comment.","maxLength":255},"details":{"type":"array","description":"Array of existing order items.","minItems":1,"items":{"type":"object","additionalProperties":false,"properties":{"objectId":{"type":"string","format":"uuid","description":"Product UUID in WMS.\n\n🔹Required if `quantity` is specified.\n"},"quantity":{"type":"integer","description":"Quantity of the product.\n\n🔹Required if `objectId` is specified.\n","minimum":1,"maximum":1000},"price":{"type":"number","format":"float","description":"Unit price.","minimum":0.01,"maximum":100000000},"sum":{"type":"number","format":"float","description":"Total amount for the order item.","minimum":0.01,"maximum":100000000}},"required":["objectId","quantity"]}}},"minProperties":1}}}},"responses":{"200":{"description":"The customer order was successfully updated.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"Unique identifier of the customer order."},"externalNumber":{"type":"string","description":"Customer's internal order number."},"destWarehouse":{"type":"string","description":"Warehouse code."},"deliveryType":{"type":"integer","description":"Delivery type."},"waybillNumber":{"type":"string","nullable":true,"description":"Nova Post waybill number."},"additionalInfo":{"type":"string","description":"Additional information or comment."},"createdAt":{"type":"string","format":"date-time","description":"Order creation date and time."},"updatedAt":{"type":"string","format":"date-time","description":"Last update date and time."},"details":{"type":"array","description":"List of order items.","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"Unique identifier of the order item."},"objectId":{"type":"string","format":"uuid","description":"Product UUID in WMS."},"quantity":{"type":"integer","description":"Quantity of the product."},"price":{"type":"number","format":"float","description":"Unit price."},"sum":{"type":"number","format":"float","description":"Total amount for the order item."}},"required":["id","objectId","quantity"]}}},"required":["id","externalNumber","destWarehouse","deliveryType","details"]}},"required":["data"]}}}}}}}}}
```

## Delete Goods from Order

> This endpoint is used to remove one or more product items from a order that is currently in status \`13\` \*\*(Incomplete)\*\*.\
> \
> Removing all product items from the order is allowed. In this case, the order status remains \`13\` \*\*(Incomplete)\*\*.\
> \
> The response (\`200 OK\`) returns only the product items remaining in the order.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Fulfillment"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}}},"paths":{"/fulfillment/{countrycode}/v1/orders/{id}/details/multiple-delete":{"post":{"summary":"Delete Goods from Order","description":"This endpoint is used to remove one or more product items from a order that is currently in status `13` **(Incomplete)**.\n\nRemoving all product items from the order is allowed. In this case, the order status remains `13` **(Incomplete)**.\n\nThe response (`200 OK`) returns only the product items remaining in the order.\n","operationId":"deleteGoodsFromClientOrder","tags":["Fulfillment"],"parameters":[{"name":"id","in":"path","required":true,"description":"Unique identifier of the order.","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","description":"Root-level array of product items to be removed from the order.\nAt least one product item must be provided.\n","minItems":1,"items":{"type":"object","additionalProperties":false,"properties":{"objectId":{"type":"string","description":"Product identifier."}},"required":["objectId"]}}}}},"responses":{"200":{"description":"Product items were successfully removed from the order.\nReturns only the product items remaining in the order.\n","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"Unique identifier of the order item."},"objectId":{"type":"string","description":"Product identifier."},"quantity":{"type":"integer","description":"Quantity of product."},"price":{"type":"number","format":"float","description":"Unit price."},"sum":{"type":"number","format":"float","description":"Total amount for the line item."}},"required":["id","objectId","quantity"]}}}}}}}}}}
```

## Check Stock Remains

> This endpoint is used to retrieve information about stock remains in warehouses with optional filtering.\
> \
> Filter values within the same parameter are combined using \*\*OR\*\*, while different filter parameters are combined using \*\*AND\*\*.\
> \
> Available quantity is calculated using the following formula:\
> \`availableQuantity = quantity - reservedQuantity\` (if the result is less than 0, 0 is returned).\
> \
> 🔹If no product-specific filters (\`objectIds\`, \`objectArts\`, \`objectTitles\`) are provided, only products with \`quantity > 0\`, \`reservedQuantity > 0\`, or \`availableQuantity > 0\` are returned.\
> \
> 🔹If product-specific filters (\`objectIds\`, \`objectArts\`, \`objectTitles\`) are provided, the requested products are always returned, even if all stock values are equal to 0.\
> \
> Stock information is returned regardless of whether a product has a barcode. Stock remains are grouped by \`expiryDate\`.\
> \
> Invalid or unknown filter values are ignored and do not cause errors.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Fulfillment"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}}},"paths":{"/fulfillment/{countrycode}/v1/stock-remains":{"get":{"summary":"Check Stock Remains","description":"This endpoint is used to retrieve information about stock remains in warehouses with optional filtering.\n\nFilter values within the same parameter are combined using **OR**, while different filter parameters are combined using **AND**.\n\nAvailable quantity is calculated using the following formula:\n`availableQuantity = quantity - reservedQuantity` (if the result is less than 0, 0 is returned).\n\n🔹If no product-specific filters (`objectIds`, `objectArts`, `objectTitles`) are provided, only products with `quantity > 0`, `reservedQuantity > 0`, or `availableQuantity > 0` are returned.\n\n🔹If product-specific filters (`objectIds`, `objectArts`, `objectTitles`) are provided, the requested products are always returned, even if all stock values are equal to 0.\n\nStock information is returned regardless of whether a product has a barcode. Stock remains are grouped by `expiryDate`.\n\nInvalid or unknown filter values are ignored and do not cause errors.\n","operationId":"checkStockRemains","tags":["Fulfillment"],"parameters":[{"name":"objectIds[]","in":"query","required":false,"description":"Array of product IDs.","schema":{"type":"array","items":{"type":"string"}}},{"name":"objectArts[]","in":"query","required":false,"description":"Array of product article numbers.","schema":{"type":"array","items":{"type":"string"}}},{"name":"objectTitles[]","in":"query","required":false,"description":"Array of product names.","schema":{"type":"array","items":{"type":"string"}}},{"name":"destWarehouses[]","in":"query","required":false,"description":"Array of warehouse codes.","schema":{"type":"array","items":{"type":"string"}}},{"name":"remainDate","in":"query","required":false,"description":"Stock validity date in YYYY-MM-DD format.","schema":{"type":"string"}},{"name":"condition","in":"query","required":false,"description":"Product condition:\n- `0` — good;\n- `1` — defective.\n","schema":{"type":"integer","enum":[0,1]}},{"name":"page","in":"query","required":false,"description":"Pagination page number (up to 25 records per page).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Data retrieved successfully.\nReturns stock remains with Laravel pagination.\n","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","description":"List of stock remains.","items":{"type":"object","properties":{"objectId":{"type":"string","description":"Product identifier."},"sku":{"type":"string","description":"Product SKU."},"measureUnitName":{"type":"string","nullable":true,"description":"Unit of measurement."},"quantity":{"type":"integer","description":"Total quantity in stock."},"reservedQuantity":{"type":"integer","description":"Reserved quantity."},"availableQuantity":{"type":"integer","description":"Available quantity."},"destWarehouse":{"type":"string","nullable":true,"description":"Warehouse code."},"expiryDate":{"type":"string","nullable":true,"description":"Expiry date."}}}},"links":{"type":"object","description":"Pagination links."},"meta":{"type":"object","description":"Pagination metadata."}},"required":["data","links","meta"]}}}}}}}}}
```


# CMR

## Create New CMR

> This method allows users to create a new CMR document in the EuroGate system with sender, recipient, carrier, vehicle, and Manifest information.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}}},"paths":{"/cmrs":{"post":{"tags":["Customs Integration"],"summary":"Create New CMR","description":"This method allows users to create a new CMR document in the EuroGate system with sender, recipient, carrier, vehicle, and Manifest information.\n","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["senderCompanyTin","senderDivisionId","recipientCompanyTin","recipientDivisionId","loadingDateTime","customsRecipient","carrierTin","vehicleNumber","trailerNumber","sealNumber","dateOfSealing","documents","numberMrn","carnetTir"],"properties":{"partnerNumber":{"type":"string","maxLength":50,"nullable":true,"description":"Unique partner CMR number generated in the partner system.\nIf absent, the parameter does not need to be transferred.\n"},"senderCompanyTin":{"type":"string","maxLength":20,"description":"Sender company TIN code agreed upon with the integration manager.\n"},"senderDivisionId":{"type":"integer","description":"Sender division identifier agreed upon with the integration manager.\n"},"senderCompanyName":{"type":"string","maxLength":200,"nullable":true,"description":"Name of the sender organization.\nFill this field if `senderCompanyTin == null` or the value is not found in the directory.\n"},"senderAddress":{"type":"string","maxLength":255,"nullable":true,"description":"Loading address.\nFill this field if `senderDivisionId == null` or the value is not found in the directory.\n"},"senderCompanyLegalAddress":{"type":"string","maxLength":255,"nullable":true,"description":"Registered address of the sender legal entity.\nFill this field if `senderCompanyTin == null` or the value is not found in the directory.\n"},"senderCountry":{"type":"string","pattern":"^[A-Z]{2}$","nullable":true,"description":"Sender country code according to the Alpha-2 standard.\nFill this field if `senderDivisionId == null` or the value is not found in the directory.\n"},"recipientCompanyTin":{"type":"string","maxLength":20,"description":"Recipient company TIN code agreed upon with the integration manager.\n"},"recipientDivisionId":{"type":"integer","description":"Recipient division identifier agreed upon with the integration manager.\n"},"recipientCompanyName":{"type":"string","maxLength":200,"nullable":true,"description":"Name of the recipient organization.\nFill this field if `recipientCompanyTin == null` or the value is not found in the directory.\n"},"recipientAddress":{"type":"string","maxLength":255,"nullable":true,"description":"Unloading address.\nFill this field if `recipientDivisionId == null` or the value is not found in the directory.\n"},"recipientCompanyLegalAddress":{"type":"string","maxLength":255,"nullable":true,"description":"Registered address of the recipient legal entity.\nFill this field if `recipientCompanyTin == null` or the value is not found in the directory.\n"},"recipientCountry":{"type":"string","pattern":"^[A-Z]{2}$","nullable":true,"description":"Recipient country code according to the Alpha-2 standard.\nFill this field if `recipientDivisionId == null` or the value is not found in the directory.\n"},"loadingDateTime":{"type":"string","format":"date-time","nullable":true,"description":"Date and time of vehicle loading.\n\nIf the vehicle is not loaded yet at the moment of CMR creation, `null` must be transferred and updated later.\n"},"customsRecipient":{"type":"string","maxLength":255,"description":"Recipient customs details agreed upon with the integration manager.\n"},"carrierTin":{"type":"string","maxLength":20,"description":"Carrier company TIN code agreed upon with the integration manager.\n"},"carrierName":{"type":"string","maxLength":200,"nullable":true,"description":"Name of the freight carrier.\nFill this field if `carrierTin == null` or the value is not found in the directory.\n"},"vehicleNumber":{"type":"string","maxLength":20,"description":"Vehicle number.\nLetters must be entered in Latin only.\n"},"trailerNumber":{"type":"string","maxLength":20,"nullable":true,"description":"Trailer number.\nLetters must be entered in Latin only.\n\nIf there is no trailer, the value `null` must be transferred.\n"},"sealNumber":{"type":"string","maxLength":20,"nullable":true,"description":"Seal number.\n\nIf the seal number is not yet known at the moment of creation, `null` must be transferred and updated later.\n"},"dateOfSealing":{"type":"string","format":"date-time","nullable":true,"description":"Date and time of vehicle sealing.\n\nIf sealing information is not yet known at the moment of creation, `null` must be transferred and updated later.\n"},"documents":{"type":"array","description":"Array of pre-created manifests.\n","items":{"type":"object","required":["number","type"],"properties":{"number":{"type":"string","maxLength":50,"description":"Manifest number.\n\nThe parameter may contain either:\n- partner manifest number (`partnerNumber`)\n- unique manifest number in the EuroGate system (`number`)\n"},"type":{"type":"string","enum":["Manifest"],"description":"Document type.\nThe parameter must contain the value `Manifest`.\n"}}}},"numberMrn":{"type":"string","maxLength":20,"nullable":true,"description":"MRN T1 number.\n\nIf shipments are transported under CarnetTIR, the value `null` must be transferred.\n"},"carnetTir":{"type":"string","maxLength":20,"nullable":true,"description":"CarnetTIR number.\n\nIf shipments are transported under T1, the value `null` must be transferred.\n"},"externalNumber":{"type":"string","maxLength":20,"nullable":true,"description":"Optional external number.\n\nThis parameter is not required for current integration scenarios.\n"},"senderNote":{"type":"string","maxLength":50,"nullable":true,"description":"Optional sender note.\n\nThis parameter is not required for current integration scenarios.\n"},"recipientNote":{"type":"string","maxLength":50,"nullable":true,"description":"Optional recipient note.\n\nThis parameter is not required for current integration scenarios.\n"},"carrierNote":{"type":"string","maxLength":200,"nullable":true,"description":"Optional carrier note.\n\nThis parameter is not required for current integration scenarios.\n"}}}}}},"responses":{"200":{"description":"Response to a successful request.","content":{"application/json":{"schema":{"type":"object","properties":{"documents":{"type":"array","description":"Array of processed or generated documents associated with the CMR.","items":{"type":"object","properties":{"id":{"type":"integer","description":"Unique identifier of the document."},"number":{"type":"string","description":"Unique manifest or document number in the system."},"type":{"type":"string","description":"Type of the document (e.g., Manifest)."},"createdAt":{"type":"string","format":"date-time","description":"Timestamp when the document was created."},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp when the document was last updated."},"deletedAt":{"type":"string","format":"date-time","nullable":true,"description":"Timestamp when the document was deleted, if applicable."}}}},"number":{"type":"string","description":"Unique CMR number in the EuroGate system."},"partnerNumber":{"type":"string","description":"The unique partner CMR number generated in the partner system."},"status":{"type":"string","description":"Current operational status of the CMR (e.g., Created)."},"senderCompanyTin":{"type":"string","description":"The sender's company TIN code."},"senderCompanyName":{"type":"string","description":"Full name of the shipper's organization."},"senderCompanyLegalAddress":{"type":"string","description":"The registered legal address of the sender."},"senderCompanyPhone":{"type":"string","nullable":true,"description":"Contact phone number of the sender's company."},"senderCountryCode":{"type":"string","pattern":"^[A-Z]{2}$","description":"Sender's country code (Alpha-2)."},"senderCityCode":{"type":"string","description":"System or postal code for the sender's city."},"senderDivisionId":{"type":"integer","description":"Identifier of the sender's division."},"senderAddress":{"type":"string","description":"Full physical address or loading location for the sender."},"recipientCompanyTin":{"type":"string","description":"The recipient's company TIN code."},"recipientCompanyName":{"type":"string","description":"Full name of the consignee's organization."},"recipientCompanyLegalAddress":{"type":"string","description":"The registered legal address of the recipient."},"recipientCountryCode":{"type":"string","pattern":"^[A-Z]{2}$","description":"Recipient's country code (Alpha-2)."},"recipientCityCode":{"type":"string","description":"System or postal code for the recipient's city."},"recipientDivisionId":{"type":"integer","description":"Identifier of the recipient's division."},"recipientAddress":{"type":"string","description":"Full physical address or unloading location for the recipient."},"loadingDateTime":{"type":"string","format":"date-time","description":"Date and time of vehicle loading."},"customsRecipient":{"type":"string","description":"Recipient customs details and office codes."},"carrierTin":{"type":"string","description":"TIN code of the carrier company."},"carrierName":{"type":"string","nullable":true,"description":"Name of the freight carrier."},"vehicleNumber":{"type":"string","nullable":true,"description":"Main vehicle registration number."},"trailerNumber":{"type":"string","nullable":true,"description":"Trailer registration number."},"sealNumber":{"type":"string","nullable":true,"description":"Number of the applied mechanical seal."},"dateOfSealing":{"type":"string","format":"date-time","nullable":true,"description":"Date and time when the vehicle was sealed."},"userCreate":{"type":"string","format":"uuid","description":"Identifier (UUID) of the user who created the record."},"createdAt":{"type":"string","format":"date-time","description":"Timestamp when the CMR record was created."},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp when the CMR record was last updated."},"deletedAt":{"type":"string","format":"date-time","nullable":true,"description":"Timestamp when the CMR record was deleted."},"externalNumber":{"type":"string","nullable":true,"description":"Optional external reference number."},"numberMrn":{"type":"string","nullable":true,"description":"MRN T1 declaration number."},"rampDestinationTime":{"type":"string","format":"date-time","nullable":true,"description":"Estimated or actual time of arrival at the loading ramp."},"rampDepartureTime":{"type":"string","format":"date-time","nullable":true,"description":"Estimated or actual time of departure from the loading ramp."},"unloadingRampDestinationTime":{"type":"string","format":"date-time","nullable":true,"description":"Estimated or actual time of arrival at the unloading ramp."},"unloadingRampDepartureTime":{"type":"string","format":"date-time","nullable":true,"description":"Estimated or actual time of departure from the unloading ramp."},"actualWeight":{"type":"number","description":"Total actual weight of the cargo in kilograms or grams."},"senderNote":{"type":"string","nullable":true,"description":"Informational notes or comments provided by the sender."},"recipientNote":{"type":"string","nullable":true,"description":"Informational notes or comments provided by the recipient."},"carrierNote":{"type":"string","nullable":true,"description":"Informational notes or comments provided by the carrier."},"carnetTir":{"type":"string","nullable":true,"description":"CarnetTIR transit document number."},"parcelsAmount":{"type":"integer","description":"Total number of parcels included in the CMR."},"shipmentAmount":{"type":"integer","description":"Total number of shipments combined in this document."},"transferOfCustomsData":{"type":"string","nullable":true,"description":"Status or confirmation reference of customs data transmission."}}}}}}}}}}}
```

## Update CMR

> This method allows users to update an existing CMR document in the EuroGate system with sender, recipient, carrier, customs, and transport information.\
> \
> The \`{number}\` path parameter can contain either:\
> \- the partner CMR number (\`partnerNumber\`), or\
> \- the unique CMR number in the EuroGate system (\`number\`).\
> \
> In response to a successful request, the complete object will be received from the EuroGate system.\
> \
> ℹ️ \*\*Information:\*\* \</br>\
> If the vehicle has not yet been loaded or sealed at the moment of updating the CMR, the related parameters may contain the value \`null\`.\
> The data can be updated later after the actual loading or sealing is completed.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}}},"paths":{"/cmrs/{number}":{"put":{"tags":["Customs Integration"],"summary":"Update CMR","description":"This method allows users to update an existing CMR document in the EuroGate system with sender, recipient, carrier, customs, and transport information.\n\nThe `{number}` path parameter can contain either:\n- the partner CMR number (`partnerNumber`), or\n- the unique CMR number in the EuroGate system (`number`).\n\nIn response to a successful request, the complete object will be received from the EuroGate system.\n\nℹ️ **Information:** </br>\nIf the vehicle has not yet been loaded or sealed at the moment of updating the CMR, the related parameters may contain the value `null`.\nThe data can be updated later after the actual loading or sealing is completed.\n","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["senderCompanyTin","senderDivisionId","recipientCompanyTin","recipientDivisionId","loadingDateTime","customsRecipient","carrierTin","vehicleNumber","trailerNumber","sealNumber","dateOfSealing","numberMrn","carnetTir"],"properties":{"senderCompanyTin":{"type":"string","maxLength":20,"description":"The sender company's TIN code agreed upon with the manager responsible for integration.\n"},"senderDivisionId":{"type":"integer","description":"Sender division identifier agreed upon with the manager responsible for integration.\n"},"senderCompanyName":{"type":"string","nullable":true,"maxLength":200,"description":"Name of the shipper organization.\n\nFill in this field if `senderCompanyTin == null` or the value is not found in the directory.\n"},"senderAddress":{"type":"string","nullable":true,"maxLength":255,"description":"Loading address.\n\nFill in this field if `senderDivisionId == null` or the value is not found in the directory.\n"},"senderCompanyLegalAddress":{"type":"string","nullable":true,"maxLength":255,"description":"Registered address of the sender legal entity.\n\nFill in this field if `senderCompanyTin == null` or the value is not found in the directory.\n"},"senderCountry":{"type":"string","nullable":true,"pattern":"^[A-Z]{2}$","description":"Sender country code according to the Alpha-2 standard.\n\nFill in this field if `senderDivisionId == null` or the value is not found in the directory.\n"},"recipientCompanyTin":{"type":"string","maxLength":20,"description":"The recipient company's TIN code agreed upon with the manager responsible for integration.\n"},"recipientDivisionId":{"type":"integer","description":"Recipient division identifier agreed upon with the manager responsible for integration.\n"},"recipientCompanyName":{"type":"string","nullable":true,"maxLength":200,"description":"Name of the consignee organization.\n\nFill in this field if `recipientCompanyTin == null` or the value is missing from the directory.\n"},"recipientAddress":{"type":"string","nullable":true,"maxLength":255,"description":"Unloading address.\n\nFill in this field if `recipientDivisionId == null` or the value is missing from the directory.\n"},"recipientCompanyLegalAddress":{"type":"string","nullable":true,"maxLength":255,"description":"Registered address of the recipient legal entity.\n\nFill in this field if `recipientCompanyTin == null` or the value is missing from the directory.\n"},"recipientCountry":{"type":"string","nullable":true,"pattern":"^[A-Z]{2}$","description":"Recipient country code according to the Alpha-2 standard.\n\nFill in this field if `recipientDivisionId == null` or the value is missing from the directory.\n"},"loadingDateTime":{"type":"string","format":"date-time","nullable":true,"description":"Date and time of vehicle loading.\n\nIf the vehicle has not yet been loaded at the time of updating the CMR, the value `null` must be transferred and updated later after loading.\n"},"customsRecipient":{"type":"string","maxLength":255,"description":"Recipient customs details agreed upon with the manager responsible for integration.\n"},"carrierTin":{"type":"string","maxLength":20,"description":"TIN code of the carrier company agreed upon with the manager responsible for integration.\n"},"carrierName":{"type":"string","nullable":true,"maxLength":200,"description":"Name of the freight carrier.\n\nFill in this field if `carrierTin == null` or the value is not found in the directory.\n"},"vehicleNumber":{"type":"string","maxLength":20,"description":"Vehicle number.\n\nLetters must be entered in Latin only.\n"},"trailerNumber":{"type":"string","nullable":true,"maxLength":20,"description":"Trailer number.\n\nLetters must be entered in Latin only.\n\nIf there is no trailer, the value `null` must be transferred.\n"},"sealNumber":{"type":"string","nullable":true,"maxLength":20,"description":"Seal number.\n\nIf the seal number is not yet known at the time of updating the CMR, the value `null` must be transferred and updated later.\n"},"dateOfSealing":{"type":"string","format":"date-time","nullable":true,"description":"Date and time of vehicle sealing.\n\nIf the seal number and sealing time are not yet known at the time of updating the CMR, the value `null` must be transferred and updated later.\n"},"numberMrn":{"type":"string","nullable":true,"maxLength":20,"description":"MRN T1 number.\n\nIf shipments are transported under CarnetTIR, the value `null` must be transferred.\n"},"carnetTir":{"type":"string","nullable":true,"maxLength":20,"description":"CarnetTIR number.\n\nIf shipments are transported under T1, the value `null` must be transferred.\n"},"externalNumber":{"type":"string","nullable":true,"maxLength":20,"description":"Optional external number.\n\nThis parameter is optional and is not required for the integration.\nThe `null` value is shown in the example only to demonstrate the request structure.\n"},"senderNote":{"type":"string","nullable":true,"maxLength":50,"description":"Optional sender note.\n\nThis parameter is optional and is not required for the integration.\nThe `null` value is shown in the example only to demonstrate the request structure.\n"},"recipientNote":{"type":"string","nullable":true,"maxLength":50,"description":"Optional recipient note.\n\nThis parameter is optional and is not required for the integration.\nThe `null` value is shown in the example only to demonstrate the request structure.\n"},"carrierNote":{"type":"string","nullable":true,"maxLength":200,"description":"Optional carrier note.\n\nThis parameter is optional and is not required for the integration.\nThe `null` value is shown in the example only to demonstrate the request structure.\n"}}}}}},"responses":{"200":{"description":"Successfully updated CMR object returned from the EuroGate system.","content":{"application/json":{"schema":{"type":"object","properties":{"documents":{"type":"array","description":"List of documents linked to the CMR.","items":{"type":"object","properties":{"id":{"type":"integer","description":"Unique document identifier."},"number":{"type":"string","description":"Unique document number."},"type":{"type":"string","description":"Document type."},"createdAt":{"type":"string","format":"date-time","description":"Document creation date and time."},"updatedAt":{"type":"string","format":"date-time","description":"Document update date and time."},"deletedAt":{"type":"string","nullable":true,"description":"Document deletion date and time."}}}},"number":{"type":"string","description":"Unique CMR number in the EuroGate system."},"partnerNumber":{"type":"string","description":"Partner CMR number."},"status":{"type":"string","description":"Current CMR status."},"senderCompanyTin":{"type":"string","description":"Sender company TIN."},"senderCompanyName":{"type":"string","description":"Sender company name."},"senderCompanyLegalAddress":{"type":"string","description":"Sender legal address."},"senderCompanyPhone":{"type":"string","nullable":true,"description":"Sender company phone number."},"senderCountryCode":{"type":"string","description":"Sender country code."},"senderCityCode":{"type":"string","description":"Sender city code."},"senderDivisionId":{"type":"integer","description":"Sender division identifier."},"senderAddress":{"type":"string","description":"Sender address."},"recipientCompanyTin":{"type":"string","description":"Recipient company TIN."},"recipientCompanyName":{"type":"string","description":"Recipient company name."},"recipientCompanyLegalAddress":{"type":"string","description":"Recipient legal address."},"recipientCountryCode":{"type":"string","description":"Recipient country code."},"recipientCityCode":{"type":"string","description":"Recipient city code."},"recipientDivisionId":{"type":"integer","description":"Recipient division identifier."},"recipientAddress":{"type":"string","description":"Recipient address."},"loadingDateTime":{"type":"string","format":"date-time","description":"Vehicle loading date and time."},"customsRecipient":{"type":"string","description":"Customs recipient details."},"carrierTin":{"type":"string","description":"Carrier company TIN."},"carrierName":{"type":"string","nullable":true,"description":"Carrier company name."},"vehicleNumber":{"type":"string","nullable":true,"description":"Vehicle number."},"trailerNumber":{"type":"string","nullable":true,"description":"Trailer number."},"sealNumber":{"type":"string","nullable":true,"description":"Seal number."},"dateOfSealing":{"type":"string","format":"date-time","nullable":true,"description":"Vehicle sealing date and time."},"userCreate":{"type":"string","description":"Identifier of the user who created the CMR."},"createdAt":{"type":"string","format":"date-time","description":"CMR creation date and time."},"updatedAt":{"type":"string","format":"date-time","description":"CMR update date and time."},"deletedAt":{"type":"string","nullable":true,"description":"CMR deletion date and time."},"externalNumber":{"type":"string","nullable":true,"description":"External number."},"numberMrn":{"type":"string","nullable":true,"description":"MRN T1 number."},"rampDestinationTime":{"type":"string","format":"date-time","nullable":true,"description":"Ramp destination time."},"rampDepartureTime":{"type":"string","format":"date-time","nullable":true,"description":"Ramp departure time."},"unloadingRampDestinationTime":{"type":"string","format":"date-time","nullable":true,"description":"Unloading ramp destination time."},"unloadingRampDepartureTime":{"type":"string","format":"date-time","nullable":true,"description":"Unloading ramp departure time."},"actualWeight":{"type":"integer","description":"Actual shipment weight."},"senderNote":{"type":"string","nullable":true,"description":"Sender note."},"recipientNote":{"type":"string","nullable":true,"description":"Recipient note."},"carrierNote":{"type":"string","nullable":true,"description":"Carrier note."},"carnetTir":{"type":"string","nullable":true,"description":"CarnetTIR number."},"parcelsAmount":{"type":"integer","description":"Number of parcels."},"shipmentAmount":{"type":"integer","description":"Number of shipments."},"transferOfCustomsData":{"type":"string","nullable":true,"description":"Customs data transfer status."}}}}}}}}}}}
```

## Delete CMR

> This method allows users to delete a CMR in the EuroGate system, where a successful response contains the deletion timestamp.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}}},"paths":{"/cmrs/{number}":{"delete":{"tags":["Customs Integration"],"summary":"Delete CMR","description":"This method allows users to delete a CMR in the EuroGate system, where a successful response contains the deletion timestamp.\n","parameters":[{"name":"number","in":"path","required":true,"schema":{"type":"string","maxLength":50},"description":"CMR identifier.\n\nThe parameter can contain either:\n- the partner CMR number (`partnerNumber`), or\n- the unique CMR number in the EuroGate system (`number`).\n"}],"responses":{"200":{"description":"CMR successfully deleted.","content":{"application/json":{"schema":{"type":"object","properties":{"deletedAt":{"type":"string","format":"date-time","description":"Date and time when the CMR was deleted."}}}}}}}}}}}
```

## Add additional manifests to CMR

> This method allows users to add additional pre-created manifests to an existing CMR in the EuroGate system.\
> \
> In response to a successful request, the complete object will be received from the EuroGate system.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}}},"paths":{"/cmrs/documents/{number}":{"post":{"tags":["Customs Integration"],"summary":"Add additional manifests to CMR","description":"This method allows users to add additional pre-created manifests to an existing CMR in the EuroGate system.\n\nIn response to a successful request, the complete object will be received from the EuroGate system.\n","parameters":[{"name":"number","in":"path","required":true,"schema":{"type":"string"},"description":"CMR identifier.\n\nThe parameter can contain either:\n- the partner CMR number (`partnerNumber`), or\n- the unique CMR number in the EuroGate system (`number`).\n"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["documents"],"properties":{"documents":{"type":"array","description":"Array of pre-created manifests.\n","items":{"type":"object","required":["number","type"],"properties":{"number":{"type":"string","maxLength":50,"description":"Manifest identifier.\n\nThe parameter can contain either:\n- the partner manifest number (`partnerNumber`), or\n- the unique manifest number in the EuroGate system (`number`).\n"},"type":{"type":"string","enum":["Manifest"],"description":"Manifest type.\n\nThe parameter must always contain the value `Manifest`.\n"}}}}}}}}},"responses":{"200":{"description":"Successfully updated CMR object returned from the EuroGate system.","content":{"application/json":{"schema":{"type":"object","properties":{"documents":{"type":"array","description":"List of documents linked to the CMR.","items":{"type":"object","properties":{"id":{"type":"integer","description":"Unique document identifier."},"number":{"type":"string","description":"Unique document number."},"type":{"type":"string","description":"Document type."},"createdAt":{"type":"string","format":"date-time","description":"Document creation date and time."},"updatedAt":{"type":"string","format":"date-time","description":"Document update date and time."},"deletedAt":{"type":"string","nullable":true,"description":"Document deletion date and time."}}}},"number":{"type":"string","description":"Unique CMR number in the EuroGate system."},"partnerNumber":{"type":"string","description":"Partner CMR number."},"status":{"type":"string","description":"Current CMR status."},"senderCompanyTin":{"type":"string","description":"Sender company TIN."},"senderCompanyName":{"type":"string","description":"Sender company name."},"senderCompanyLegalAddress":{"type":"string","description":"Sender legal address."},"senderCompanyPhone":{"type":"string","nullable":true,"description":"Sender company phone number."},"senderCountryCode":{"type":"string","description":"Sender country code."},"senderCityCode":{"type":"string","description":"Sender city code."},"senderDivisionId":{"type":"integer","description":"Sender division identifier."},"senderAddress":{"type":"string","description":"Sender address."},"recipientCompanyTin":{"type":"string","description":"Recipient company TIN."},"recipientCompanyName":{"type":"string","description":"Recipient company name."},"recipientCompanyLegalAddress":{"type":"string","description":"Recipient legal address."},"recipientCountryCode":{"type":"string","description":"Recipient country code."},"recipientCityCode":{"type":"string","description":"Recipient city code."},"recipientDivisionId":{"type":"integer","description":"Recipient division identifier."},"recipientAddress":{"type":"string","description":"Recipient address."},"loadingDateTime":{"type":"string","format":"date-time","description":"Vehicle loading date and time."},"customsRecipient":{"type":"string","description":"Customs recipient details."},"carrierTin":{"type":"string","description":"Carrier company TIN."},"carrierName":{"type":"string","nullable":true,"description":"Carrier company name."},"vehicleNumber":{"type":"string","nullable":true,"description":"Vehicle number."},"trailerNumber":{"type":"string","nullable":true,"description":"Trailer number."},"sealNumber":{"type":"string","nullable":true,"description":"Seal number."},"dateOfSealing":{"type":"string","format":"date-time","nullable":true,"description":"Vehicle sealing date and time."},"userCreate":{"type":"string","description":"Identifier of the user who created the CMR."},"createdAt":{"type":"string","format":"date-time","description":"CMR creation date and time."},"updatedAt":{"type":"string","format":"date-time","description":"CMR update date and time."},"deletedAt":{"type":"string","nullable":true,"description":"CMR deletion date and time."},"externalNumber":{"type":"string","nullable":true,"description":"External number."},"numberMrn":{"type":"string","nullable":true,"description":"MRN T1 number."},"rampDestinationTime":{"type":"string","format":"date-time","nullable":true,"description":"Ramp destination time."},"rampDepartureTime":{"type":"string","format":"date-time","nullable":true,"description":"Ramp departure time."},"unloadingRampDestinationTime":{"type":"string","format":"date-time","nullable":true,"description":"Unloading ramp destination time."},"unloadingRampDepartureTime":{"type":"string","format":"date-time","nullable":true,"description":"Unloading ramp departure time."},"actualWeight":{"type":"integer","description":"Actual shipment weight."},"senderNote":{"type":"string","nullable":true,"description":"Sender note."},"recipientNote":{"type":"string","nullable":true,"description":"Recipient note."},"carrierNote":{"type":"string","nullable":true,"description":"Carrier note."},"carnetTir":{"type":"string","nullable":true,"description":"CarnetTIR number."},"parcelsAmount":{"type":"integer","description":"Number of parcels."},"shipmentAmount":{"type":"integer","description":"Number of shipments."},"transferOfCustomsData":{"type":"string","nullable":true,"description":"Customs data transfer status."}}}}}}}}}}}
```

## Delete manifests from CMR

> This method allows users to delete manifests linked to an existing CMR in the EuroGate system.\
> \
> In response to a successful request, the complete object will be received from the EuroGate system.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}}},"paths":{"/cmrs/documents/{number}":{"delete":{"tags":["Customs Integration"],"summary":"Delete manifests from CMR","description":"This method allows users to delete manifests linked to an existing CMR in the EuroGate system.\n\nIn response to a successful request, the complete object will be received from the EuroGate system.\n","parameters":[{"name":"number","in":"path","required":true,"schema":{"type":"string"},"description":"CMR identifier.\n\nThe parameter can contain either:\n- the partner CMR number (`partnerNumber`), or\n- the unique CMR number in the EuroGate system (`number`).\n"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["documents"],"properties":{"documents":{"type":"array","description":"Array of pre-created manifests.\n","items":{"type":"object","required":["number","type"],"properties":{"number":{"type":"string","maxLength":50,"description":"Manifest identifier.\n\nThe parameter can contain either:\n- the partner manifest number (`partnerNumber`), or\n- the unique manifest number in the EuroGate system (`number`).\n"},"type":{"type":"string","enum":["Manifest"],"description":"Manifest type.\n\nThe parameter must always contain the value `Manifest`.\n"}}}}}}}}},"responses":{"200":{"description":"Successfully updated CMR object returned from the EuroGate system.","content":{"application/json":{"schema":{"type":"object","properties":{"documents":{"type":"array","description":"List of documents linked to the CMR.","items":{"type":"object","properties":{"id":{"type":"integer","description":"Unique document identifier."},"number":{"type":"string","description":"Unique document number."},"type":{"type":"string","description":"Document type."},"createdAt":{"type":"string","format":"date-time","description":"Document creation date and time."},"updatedAt":{"type":"string","format":"date-time","description":"Document update date and time."},"deletedAt":{"type":"string","nullable":true,"description":"Document deletion date and time."}}}},"number":{"type":"string","description":"Unique CMR number in the EuroGate system."},"partnerNumber":{"type":"string","description":"Partner CMR number."},"status":{"type":"string","description":"Current CMR status."},"senderCompanyTin":{"type":"string","description":"Sender company TIN."},"senderCompanyName":{"type":"string","description":"Sender company name."},"senderCompanyLegalAddress":{"type":"string","description":"Sender legal address."},"senderCompanyPhone":{"type":"string","nullable":true,"description":"Sender company phone number."},"senderCountryCode":{"type":"string","description":"Sender country code."},"senderCityCode":{"type":"string","description":"Sender city code."},"senderDivisionId":{"type":"integer","description":"Sender division identifier."},"senderAddress":{"type":"string","description":"Sender address."},"recipientCompanyTin":{"type":"string","description":"Recipient company TIN."},"recipientCompanyName":{"type":"string","description":"Recipient company name."},"recipientCompanyLegalAddress":{"type":"string","description":"Recipient legal address."},"recipientCountryCode":{"type":"string","description":"Recipient country code."},"recipientCityCode":{"type":"string","description":"Recipient city code."},"recipientDivisionId":{"type":"integer","description":"Recipient division identifier."},"recipientAddress":{"type":"string","description":"Recipient address."},"loadingDateTime":{"type":"string","format":"date-time","description":"Vehicle loading date and time."},"customsRecipient":{"type":"string","description":"Customs recipient details."},"carrierTin":{"type":"string","description":"Carrier company TIN."},"carrierName":{"type":"string","nullable":true,"description":"Carrier company name."},"vehicleNumber":{"type":"string","nullable":true,"description":"Vehicle number."},"trailerNumber":{"type":"string","nullable":true,"description":"Trailer number."},"sealNumber":{"type":"string","nullable":true,"description":"Seal number."},"dateOfSealing":{"type":"string","format":"date-time","nullable":true,"description":"Vehicle sealing date and time."},"userCreate":{"type":"string","description":"Identifier of the user who created the CMR."},"createdAt":{"type":"string","format":"date-time","description":"CMR creation date and time."},"updatedAt":{"type":"string","format":"date-time","description":"CMR update date and time."},"deletedAt":{"type":"string","nullable":true,"description":"CMR deletion date and time."},"externalNumber":{"type":"string","nullable":true,"description":"External number."},"numberMrn":{"type":"string","nullable":true,"description":"MRN T1 number."},"rampDestinationTime":{"type":"string","format":"date-time","nullable":true,"description":"Ramp destination time."},"rampDepartureTime":{"type":"string","format":"date-time","nullable":true,"description":"Ramp departure time."},"unloadingRampDestinationTime":{"type":"string","format":"date-time","nullable":true,"description":"Unloading ramp destination time."},"unloadingRampDepartureTime":{"type":"string","format":"date-time","nullable":true,"description":"Unloading ramp departure time."},"actualWeight":{"type":"integer","description":"Actual shipment weight."},"senderNote":{"type":"string","nullable":true,"description":"Sender note."},"recipientNote":{"type":"string","nullable":true,"description":"Recipient note."},"carrierNote":{"type":"string","nullable":true,"description":"Carrier note."},"carnetTir":{"type":"string","nullable":true,"description":"CarnetTIR number."},"parcelsAmount":{"type":"integer","description":"Number of parcels."},"shipmentAmount":{"type":"integer","description":"Number of shipments."},"transferOfCustomsData":{"type":"string","nullable":true,"description":"Customs data transfer status."}}}}}}}}}}}
```

## Get printed CMR form

> This method allows users to get printed CMR forms generated in the EuroGate system, where one or multiple CMR print forms can be downloaded in \`.pdf\` or \`.docx\` format.\
> \
> The generated file is returned encoded in Base64.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}}},"paths":{"/cmrs/prints":{"get":{"tags":["Customs Integration"],"summary":"Get printed CMR form","description":"This method allows users to get printed CMR forms generated in the EuroGate system, where one or multiple CMR print forms can be downloaded in `.pdf` or `.docx` format.\n\nThe generated file is returned encoded in Base64.\n","parameters":[{"name":"numbers[]","in":"query","required":true,"schema":{"type":"array","items":{"type":"string","maxLength":50}},"description":"List of CMR identifiers.\n\nEach value can contain either:\n- the partner CMR number (`partnerNumber`), or\n- the unique CMR number in the EuroGate system (`number`).\n"},{"name":"format","in":"query","required":true,"schema":{"type":"string","enum":["Pdf","Docx"]},"description":"Output file format of the generated print form.\n"},{"name":"weightPrecision","in":"query","required":false,"schema":{"type":"integer"},"description":"Number of decimal places used for weight values in the printed document.\n\nIf the parameter is not specified, the default precision is `2` decimal places.\n\nIf the value `3` is specified, the print form returns weight values with `3` decimal places.\n"}],"responses":{"200":{"description":"Printed CMR form successfully generated.","content":{"application/json":{"schema":{"type":"object","properties":{"file":{"type":"string","description":"Base64-encoded printed CMR form."},"format":{"type":"string","description":"Generated file format.","enum":["Pdf","Docx"]}}}}}}}}}}}
```

## Create manifests archive file

> This method allows users to create an archive file containing printed manifests linked to the specified CMRs, where the archive can be generated in \`.pdf\` or \`.xlsx\` format.\
> \
> After a successful response returns a \`fileId\` that can be used to check the file generation status in the next request.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}}},"paths":{"/manifests-archive/file":{"post":{"tags":["Customs Integration"],"summary":"Create manifests archive file","description":"This method allows users to create an archive file containing printed manifests linked to the specified CMRs, where the archive can be generated in `.pdf` or `.xlsx` format.\n\nAfter a successful response returns a `fileId` that can be used to check the file generation status in the next request.\n","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["format","cmrsNumbers"],"properties":{"format":{"type":"string","enum":["Pdf","Xlsx"],"description":"Output format of the generated archive file.\n"},"weightPrecision":{"type":"integer","description":"Number of decimal places used for weight values in the generated document.\n\nIf the parameter is not specified, the default precision is `2` decimal places.\n\nIf the value `3` is specified, the print form returns weight values with `3` decimal places.\n"},"cmrsNumbers":{"type":"array","description":"List of CMR identifiers.\n\nEach value can contain either:\n- the partner CMR number (`partnerNumber`), or\n- the unique CMR number in the EuroGate system (`number`).\n","items":{"type":"string","maxLength":50}}}}}}},"responses":{"200":{"description":"Archive generation request successfully created.","content":{"application/json":{"schema":{"type":"object","properties":{"fileId":{"type":"string","description":"Identifier of the generated archive file."}}}}}}}}}}}
```

## Get manifests archive file status

> This method allows users to retrieve the file creation status for previously requested manifests archive files.\
> \
> Once the file status changes to \`Finished\`, the response contains a download URL for the generated file.\
> \
> The generated file remains available until the \`expiredAt\` date and time.\
> After expiration, a new archive generation request must be created.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}}},"paths":{"/manifests-archive/files/status":{"get":{"tags":["Customs Integration"],"summary":"Get manifests archive file status","description":"This method allows users to retrieve the file creation status for previously requested manifests archive files.\n\nOnce the file status changes to `Finished`, the response contains a download URL for the generated file.\n\nThe generated file remains available until the `expiredAt` date and time.\nAfter expiration, a new archive generation request must be created.\n","parameters":[{"name":"ids[]","in":"query","required":true,"schema":{"type":"array","items":{"type":"string"}},"description":"List of archive file identifiers.\n"}],"responses":{"200":{"description":"File status information successfully retrieved.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"File identifier."},"status":{"type":"string","enum":["InProcess","Finished","NotFound"],"description":"File creation status.\n\nAvailable values:\n- `InProcess` — file is being generated.\n- `Finished` — file is ready for download.\n- `NotFound` — file with the specified identifier was not found.\n"},"url":{"type":"string","nullable":true,"description":"Download link for the generated file.\n\nThe field appears only when the file status is `Finished`.\n"},"expiredAt":{"type":"string","format":"date-time","nullable":true,"description":"Date and time when the file will no longer be available for download.\n\nAfter the specified time, a new request must be created to generate printed forms again.\n"}}}}}}}}}}}}
```

## Create “List of Manifests” archive file

> This method allows users to create a printable “List of Manifests” file for the specified CMR, where the file can be generated in \`.pdf\` or \`.xlsx\` format.\
> \
> After a successful response returns a \`fileId\` that can be used to check the file generation status in the next request.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}}},"paths":{"/list-of-manifests-archive/file":{"post":{"tags":["Customs Integration"],"summary":"Create “List of Manifests” archive file","description":"This method allows users to create a printable “List of Manifests” file for the specified CMR, where the file can be generated in `.pdf` or `.xlsx` format.\n\nAfter a successful response returns a `fileId` that can be used to check the file generation status in the next request.\n","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["format","cmrNumberOrPartnerNumber"],"properties":{"format":{"type":"string","enum":["Pdf","Xlsx"],"description":"Output format of the generated file.\n"},"cmrNumberOrPartnerNumber":{"type":"string","maxLength":50,"description":"CMR identifier.\n\nThe parameter can contain either:\n- the partner CMR number (`partnerNumber`), or\n- the unique CMR number in the EuroGate system (`number`).\n"},"weightPrecision":{"type":"integer","description":"Number of decimal places used for weight values in the generated document.\n\nIf the parameter is not specified, the default precision is `2` decimal places.\n\nIf the value `3` is specified, the print form returns weight values with `3` decimal places.\n"}}}}}},"responses":{"200":{"description":"File generation request successfully created.","content":{"application/json":{"schema":{"type":"object","properties":{"fileId":{"type":"string","description":"Identifier of the generated file."}}}}}}}}}}}
```

## Get “List of Manifests” file status

> This method allows users to retrieve the file creation status for previously requested “List of Manifests” files.\
> \
> Once the file status changes to \`Finished\`, the response contains a download URL for the generated file.\
> \
> The generated file remains available until the \`expiredAt\` date and time, after which a new file generation request must be created.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}}},"paths":{"/list-of-manifests-archive/files/status":{"get":{"tags":["Customs Integration"],"summary":"Get “List of Manifests” file status","description":"This method allows users to retrieve the file creation status for previously requested “List of Manifests” files.\n\nOnce the file status changes to `Finished`, the response contains a download URL for the generated file.\n\nThe generated file remains available until the `expiredAt` date and time, after which a new file generation request must be created.\n","parameters":[{"name":"ids[]","in":"query","required":true,"schema":{"type":"array","items":{"type":"string"}},"description":"List of generated file identifiers.\n"}],"responses":{"200":{"description":"File status information successfully retrieved.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"File identifier."},"status":{"type":"string","enum":["InProcess","Finished","NotFound"],"description":"File creation status.\n\nAvailable values:\n- `InProcess` — file is being generated.\n- `Finished` — file is ready for download.\n- `NotFound` — file with the specified identifier was not found.\n"},"url":{"type":"string","nullable":true,"description":"Download link for the generated file.\n\nThe field appears only when the file status is `Finished`.\n"},"expiredAt":{"type":"string","format":"date-time","nullable":true,"description":"Date and time when the file will no longer be available for download.\n\nAfter the specified time, a new request must be created to generate the file again.\n"}}}}}}}}}}}}
```


# Manifests

## Create Manifest with shipments

> This method allows combining previously created shipments into a single Manifest document in the EuroGate system for customs processing and transportation.\
> \
> The \`mainNumbers\` parameter must contain shipment numbers of previously created shipments.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}}},"paths":{"/declaration-groups":{"post":{"tags":["Customs Integration"],"summary":"Create Manifest with shipments","description":"This method allows combining previously created shipments into a single Manifest document in the EuroGate system for customs processing and transportation.\n\nThe `mainNumbers` parameter must contain shipment numbers of previously created shipments.\n","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["deliveryPartner","type","recipientCompanyTin","recipientCountryCode","shipmentType","mainNumbers"],"properties":{"name":{"type":"string","maxLength":255,"description":"Special Manifest name used for personalization purposes.\n\nIf the parameter is absent, it does not need to be transferred.\n"},"partnerNumber":{"type":"string","maxLength":50,"description":"Unique partner Manifest number generated in the partner system.\n\nIf the parameter is absent, it does not need to be transferred.\n"},"deliveryPartner":{"type":"string","nullable":true,"description":"Delivery partner identifier.\n\nSince delivery is initially performed through the Lviv CSS and customs clearance process, the parameter must be transferred with the value `null`.\n"},"type":{"type":"string","enum":["Manifest"],"description":"Document type.\n\nThe parameter must be transferred with the value `Manifest`.\n"},"senderCompanyTin":{"type":"string","maxLength":20,"nullable":true,"description":"Sender company TIN code.\n\nThe value must be agreed upon with the integration manager.\n"},"senderCompanyName":{"type":"string","maxLength":255,"nullable":true,"description":"Name of the sender organization.\n\nFill in this field if `senderCompanyTin == null` or the value is missing from the directory.\n"},"senderAddress":{"type":"string","maxLength":255,"nullable":true,"description":"Loading address.\n\nFill in this field if `senderDivisionTin == null` or the value is missing from the directory.\n"},"senderCountryCode":{"type":"string","nullable":true,"pattern":"^[A-Z]{2}$","description":"Sender country code according to the ISO Alpha-2 standard.\n\nFill in this field if `senderDivisionId == null` or the value is missing from the directory.\n"},"recipientCompanyTin":{"type":"string","maxLength":20,"description":"TIN code of the consignee legal entity according to the Manifest.\n"},"recipientCountryCode":{"type":"string","pattern":"^[A-Z]{2}$","description":"Recipient country code according to the ISO Alpha-2 standard.\n"},"shipmentType":{"type":"string","nullable":true,"description":"Shipment type.\n\nAvailable values:\n- `B2CDeliveryLess150`\n- `B2CDeliveryMoreOrEqual150`\n- `B2BAndC2BDelivery`\n"},"grossWeight":{"type":"integer","description":"Gross weight of the Manifest in grams.\n\nThe gross weight cannot be less than the net weight.\n"},"mainNumbers":{"type":"array","description":"Array of previously created shipment numbers.\n","items":{"type":"string"}}}}}}},"responses":{"200":{"description":"Manifest successfully created.","content":{"application/json":{"schema":{"type":"object","properties":{"documents":{"type":"array","description":"List of Manifest documents and linked shipments.","items":{"type":"object","properties":{"id":{"type":"integer","description":"Internal document identifier."},"declarationGroupNumber":{"type":"string","description":"Unique Manifest number in the EuroGate system."},"declarationNumber":{"type":"string","description":"Declaration number."},"mainNumber":{"type":"string","description":"Shipment number linked to the Manifest."},"declarationStatus":{"type":"string","description":"Declaration status."},"createdAt":{"type":"string","format":"date-time","description":"Document creation date and time."},"updatedAt":{"type":"string","format":"date-time","description":"Last document update date and time."},"deletedAt":{"type":"string","nullable":true,"description":"Document deletion date and time."}}}},"number":{"type":"string","description":"Unique Manifest number in the EuroGate system.\n"},"partnerNumber":{"type":"string","description":"Partner Manifest number."},"deliveryPartner":{"type":"string","description":"Delivery partner."},"status":{"type":"string","description":"Manifest status."},"statusDateTime":{"type":"string","format":"date-time","description":"Date and time of the last status update."},"name":{"type":"string","description":"Manifest name."},"type":{"type":"string","description":"Document type."},"user":{"type":"string","description":"User identifier who created the Manifest."},"divisionId":{"type":"integer","description":"Division identifier."},"countryCode":{"type":"string","description":"Country code."},"recipientCompanyTin":{"type":"string","description":"Recipient company TIN."},"recipientCompanyName":{"type":"string","nullable":true,"description":"Recipient company name."},"recipientCountryCode":{"type":"string","description":"Recipient country code."},"senderCompanyTin":{"type":"string","description":"Sender company TIN."},"senderCompanyName":{"type":"string","nullable":true,"description":"Sender company name."},"senderAddress":{"type":"string","nullable":true,"description":"Sender address."},"senderCountryCode":{"type":"string","description":"Sender country code."},"shipmentType":{"type":"string","description":"Shipment type."},"grossWeight":{"type":"integer","description":"Gross weight in grams."},"parcelsAmount":{"type":"integer","description":"Number of parcels."},"actualWeight":{"type":"integer","description":"Actual weight in grams."},"shipmentAmount":{"type":"integer","description":"Number of shipments."},"totalCost":{"type":"number","description":"Total shipment cost."},"currencyCode":{"type":"string","description":"Currency code."},"createdAt":{"type":"string","format":"date-time","description":"Manifest creation date and time."},"updatedAt":{"type":"string","format":"date-time","description":"Manifest update date and time."},"deletedAt":{"type":"string","nullable":true,"description":"Manifest deletion date and time."}}}}}}}}}}}
```

## Add Manifest gross weight

> This method allows adding or updating the gross weight of the Manifest in the EuroGate system.\
> \
> The gross weight is specified in grams and cannot be less than the net weight of the Manifest.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}}},"paths":{"/declaration-groups/gross-weights/{number}":{"put":{"tags":["Customs Integration"],"summary":"Add Manifest gross weight","description":"This method allows adding or updating the gross weight of the Manifest in the EuroGate system.\n\nThe gross weight is specified in grams and cannot be less than the net weight of the Manifest.\n","parameters":[{"name":"number","in":"path","required":true,"schema":{"type":"string","maxLength":50},"description":"Manifest identifier.\n\nIt can be transmitted as:\n- the partner number (`partnerNumber` value), or\n- the unique Manifest number in the EuroGate system (`number` value).\n"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["grossWeight"],"properties":{"grossWeight":{"type":"integer","description":"Gross weight of the Manifest in grams.\n\nThe gross weight cannot be less than the net weight.\n"}}}}}},"responses":{"200":{"description":"Gross weight successfully updated.","content":{"application/json":{"schema":{"type":"object","description":"Full Manifest object returned from the EuroGate system after successful update."}}}}}}}}}
```

## Add additional shipments to Manifest

> This method allows adding previously created shipments to an existing Manifest in the EuroGate system.\
> \
> The request must contain an array of previously created shipment numbers that need to be added to the Manifest.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}}},"paths":{"/declaration-groups/documents/{number}":{"post":{"tags":["Customs Integration"],"summary":"Add additional shipments to Manifest","description":"This method allows adding previously created shipments to an existing Manifest in the EuroGate system.\n\nThe request must contain an array of previously created shipment numbers that need to be added to the Manifest.\n","parameters":[{"name":"number","in":"path","required":true,"schema":{"type":"string","maxLength":50},"description":"Manifest identifier.\n\nIt can be transmitted as:\n- the partner number (`partnerNumber` value), or\n- the unique Manifest number in the EuroGate system (`number` value).\n"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["mainNumbers"],"properties":{"mainNumbers":{"type":"array","description":"Array of previously created shipment numbers that need to be added to the Manifest.\n","items":{"type":"string"}}}}}}},"responses":{"200":{"description":"Shipments successfully added to the Manifest.","content":{"application/json":{"schema":{"type":"object","description":"Full Manifest object returned from the EuroGate system after successful update."}}}}}}}}}
```

## Delete shipments from Manifest

> This method allows deleting previously created shipments from an existing Manifest in the EuroGate system.\
> \
> The request must contain an array of previously created shipment numbers that need to be deleted from the Manifest.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}}},"paths":{"/declaration-groups/documents/{number}":{"delete":{"tags":["Customs Integration"],"summary":"Delete shipments from Manifest","description":"This method allows deleting previously created shipments from an existing Manifest in the EuroGate system.\n\nThe request must contain an array of previously created shipment numbers that need to be deleted from the Manifest.\n","parameters":[{"name":"number","in":"path","required":true,"schema":{"type":"string","maxLength":50},"description":"Manifest identifier.\n\nIt can be transmitted as:\n- the partner number (`partnerNumber` value), or\n- the unique Manifest number in the EuroGate system (`number` value).\n"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["mainNumbers"],"properties":{"mainNumbers":{"type":"array","description":"Array of previously created shipment numbers that need to be deleted from the Manifest.\n","items":{"type":"string"}}}}}}},"responses":{"200":{"description":"Shipments successfully deleted from the Manifest.","content":{"application/json":{"schema":{"type":"object","description":"Full Manifest object returned from the EuroGate system after successful update."}}}}}}}}}
```

## Delete Manifest

> This method allows deleting a Manifest from the EuroGate system.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}}},"paths":{"/declaration-groups/{number}":{"delete":{"tags":["Customs Integration"],"summary":"Delete Manifest","description":"This method allows deleting a Manifest from the EuroGate system.\n","parameters":[{"name":"number","in":"path","required":true,"schema":{"type":"string","maxLength":50},"description":"Manifest identifier.\n\nIt can be transmitted as:\n- the partner number (`partnerNumber` value), or\n- the unique Manifest number in the EuroGate system (`number` value).\n"}],"responses":{"200":{"description":"Manifest successfully deleted.","content":{"application/json":{"schema":{"type":"object","properties":{"deletedAt":{"type":"string","format":"date-time","description":"Date and time when the Manifest was deleted.\n"}}}}}}}}}}}
```

## Print Manifest sticker

> This method allows receiving a printed version of the Manifest sticker from the EuroGate system.\
> \
> In response to a successful request, a Manifest sticker in \`.pdf\` format encoded in Base64 is returned.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}}},"paths":{"/declaration-groups/prints":{"get":{"tags":["Customs Integration"],"summary":"Print Manifest sticker","description":"This method allows receiving a printed version of the Manifest sticker from the EuroGate system.\n\nIn response to a successful request, a Manifest sticker in `.pdf` format encoded in Base64 is returned.\n","parameters":[{"name":"numbers[]","in":"query","required":true,"schema":{"type":"array","items":{"type":"string","maxLength":50}},"description":"Array of Manifest identifiers.\n\nEach value can be transmitted as:\n- the partner number (`partnerNumber` value), or\n- the unique Manifest number in the EuroGate system (`number` value).\n"}],"responses":{"200":{"description":"Manifest sticker successfully generated.","content":{"application/json":{"schema":{"type":"object","properties":{"file":{"type":"string","description":"Manifest sticker file in `.pdf` format encoded in Base64.\n"}}}}}}}}}}}
```


# Payment for services and goods

Payment for Delivery Services via Nova Post API

### Payment for Delivery Services via Nova Post API

The Nova Post API allows you to configure both cash and non-cash payments for delivery services. The payment process can be customized for various scenarios, as payment methods support payments made by the sender, the recipient, or a third party.

{% hint style="info" %}
The API supports three main types of payers for delivery services:&#x20;

* sender,&#x20;
* recipient,&#x20;
* third party.
  {% endhint %}

| Payment by the Sender                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <p>The available payment methods depend on the customer's status. If the sender is:</p><ul><li>An individual: Payment can be made online through the app, or in cash or by card when handing over the shipment to Nova Post.</li><li>A business client with a contract with Nova Post: Payment can be made via non-cash payment under the terms of the contract with Nova Post, or in cash/card when handing over the shipment.</li></ul><p>This option is available for all delivery destinations.</p> |

| Payment by the Recipient: The availability of the service depends on the direction of delivery                                                                                                                                                                                                                                          |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <ul><li>From Ukraine → to the country of presence. The recipient pays the cost of delivery online through the application before receiving the parcel or upon receipt of the shipment in cash or by card at the branch.</li><li>From the country of presence → to Ukraine / between countries of presence. Under development.</li></ul> |

| Payment by a Third Party                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <p>The payer is a legal entity that has a contract with Nova Post and the appropriate permissions to pay for services as a third party. This payer is neither the sender nor the recipient.</p><p>The third party can be designated as the payer either by the company creating the shipment on behalf of its clients, or by clients who have an agreement with the legal entity to cover delivery costs. This service is convenient for corporate clients, partners, or marketplaces that want to cover delivery costs for their clients or partners.</p><p>To enable this option, clients must contact their Nova Post manager.</p> |

### Field Descriptions for Configuring the Payment Method

<mark style="color:$success;">**`payerType`**</mark> defines who is responsible for paying for delivery services. Possible values:

* <mark style="color:$success;">`Sender:`</mark> The sender pays for the delivery
* <mark style="color:$success;">`Recipient:`</mark> The recipient pays for the delivery
* <mark style="color:$success;">`ThirdPerson:`</mark> A third party pays for the delivery\
  \
  If this option is selected, the payerContractNumber field must be filled in.

payerContractNumber is mandatory:

* When <mark style="color:$success;">`ThirdPerson`</mark> is selected as the payer type. It must contain the payer's contract number. For clients from Ukraine, it is also acceptable to provide the tax identification number (EDRPOU) instead of the contract number.
* When <mark style="color:$success;">`Sender`</mark> or <mark style="color:$success;">`Recipient`</mark> is selected as the payer type, and a non-cash payment method is used. If this information is not provided, the payment method will automatically default to cash.<br>

Ensure that the entered information is accurate, as it is essential for processing the payment correctly. This will allow you to successfully integrate third-party payments into your API requests and provide flexibility in managing delivery payments.

{% hint style="info" %}
Detailed descriptions of these fields are available on the following page: [API Docs](/methods/methods/shipments) → Shipments → Body:&#x20;
{% endhint %}

<figure><img src="/files/eFnvSPagZxAUxoGt8Gw1" alt=""><figcaption></figcaption></figure>

Steps to access[ the API documentation ](https://api-portal.novapost.com/changelog-1/documentation-eng/)on the documentation portal: Shipment Creation → Shipment → Create documents.

### Examples of Requests

<details>

<summary>Example request for payment by the sender</summary>

```
{
  "status": "ReadyToShip",
  "clientOrder": "1234567890",
  "note": "Documents shipment",
  "payerType": "Sender",               // The payer is the sender
  "payerContractNumber": "123456789",  // The sender’s contract number for non-cash payment
  "invoice": {
    "incoterm": "DAP",
    "currencyCode": "EUR",
    "totalCost": 500.00
  }
}
```

Field descriptions:

* <mark style="color:$success;">payerType: "Sender"</mark> — defines that the payer is the sender.
* <mark style="color:$success;">payerContractNumber</mark> — the sender’s contract number for non-cash payment.
* <mark style="color:$success;">invoice</mark> —  An object that contains invoice details, including incoterm and currency.

</details>

<details>

<summary>Example request for payment by the recipient</summary>

```
{
  "status": "ReadyToShip",
  "clientOrder": "0987654321",
  "note": "Books delivery",
  "payerType": "Recipient",            // The payer is the recipient
  "invoice": {
    "incoterm": "DAP",
    "currencyCode": "USD",
    "totalCost": 300.00
  }
}
```

Field descriptions:

* <mark style="color:$success;">payerType: "Recipient"</mark> — defines that the payer is the recipient.
* <mark style="color:$success;">invoice</mark> — an object that contains invoice details for customs clearance.

</details>

<details>

<summary>Example request for payment by a third party</summary>

```
{
  "status": "ReadyToShip",
  "clientOrder": "1122334455",
  "note": "Electronics shipment",
  "payerType": "ThirdPerson",          // The payer is a third party
  "payerContractNumber": "987654321",  // The contract number of the third party for non-cash payment
  "invoice": {
    "incoterm": "DAP",
    "currencyCode": "EUR",
    "totalCost": 1000.00
  }
}
```

Field descriptions:

* <mark style="color:$success;">payerType: "ThirdPerson"</mark> — defines that the payer is a third party.
* <mark style="color:$success;">payerContractNumber</mark> —  The contract number of the third party who will make the payment.\
  \
  This field is mandatory when "ThirdPerson" is selected as the payer type. It must contain the payer’s contract number. For clients from Ukraine, it is also acceptable to provide the tax identification number (EDRPOU) instead of the contract number.

</details>

{% hint style="info" %}
Details about each parameter and additional capabilities can be found [in the API documentation](https://api.novapost.com/developers/index.html#post-/shipments).&#x20;

Integrate the payment features into your systems and provide a convenient service to your customers.
{% endhint %}


# Payment on Delivery

The Cash on Delivery (COD) service allows the recipient to pay for the goods directly upon receiving them, without the need for prepayment. The sender can add this service to the shipment, and the recipient has the option to pay upon delivery, taking into account the payment method restrictions set for specific countries.

{% hint style="warning" %}

### Geographical Restrictions

International directions:

* Poland, Czech Republic, Germany, Slovakia → Ukraine
* Romania → Moldova\*\
  \* In testing mode

Domestic shipments within these countries:

* Czech Republic, Poland, Germany

The service is planned to expand to other countries and delivery directions in the future, both for international shipments and within European countries.
{% endhint %}

#### Available Payment Methods:

* **Poland, Czech Republic, Germany → Ukraine:** only online via the Nova Post mobile app or via the link
* **Local shipments within the Czech Republic, Poland, and Germany:** only online via the app
* **From Romania to Moldova\*:** Cash, card, or bank transfer, and online via the Nova Post mobile app.<br>

#### Key Features of the Cash on Delivery (COD) Service:

* The recipient pays for the parcel upon receipt and has the option to inspect the goods before making the payment.
* The sender can set the payment parameters for the COD service.\
  \
  Payment parameters include the choice of currency, as specified in the contract, automatic conversion, and the party responsible for covering the COD service fee.

#### The payer of the service fee is specified in the contract for all parcels:

* Sender
* Recipient

#### Integration of Cash on Delivery (COD) Service via API

To integrate the COD service through the API, you need to use the "services" block, which contains information about the additional services for the shipment. Below is an example of the settings for COD.

<details>

<summary>Example</summary>

```
"services": [
  {
    "shipmentParcelRowNumber": null,
    "serviceCode": "COD",
    "amount": 10,
    "contractNumber": null,
    "payerType": "Recipient",
    "additionalParameters": {
      "cod": {
        "cash": null,
        "card": null,
        "bankAccount": {
          "amount": 10,
          "currencyCode": "PLN",
          "bankAccountId": "1234567890",
          "bankAccountName": "PL12345678901234567890123456",
          "description": "test S",
          "commissionPayer": "Recipient"
        }
      }
    }
  }
]
```

</details>

#### Description of Fields in the Services Block

* <mark style="color:$success;">serviceCode: "COD"</mark> — the code indicating the Cash on Delivery (COD) service.
* <mark style="color:$success;">amount</mark> — the total amount the recipient must pay under the COD service.
* <mark style="color:$success;">payerType: "Recipient"</mark> — defines the payer for the service; in this case, it's the recipient.
* <mark style="color:$success;">additionalParameters</mark> — additional parameters for configuring COD:
  * <mark style="color:$success;">bankAccount.amount</mark> — the amount that will be transferred to the sender’s account after payment.
  * <mark style="color:$success;">bankAccount.currencyCode</mark> — the currency for the transaction, defined by the sender’s contract.
  * <mark style="color:$success;">bankAccount.bankAccountId</mark> and <mark style="color:$success;">bankAccount.bankAccountName</mark> — unique identifiers of the account and its name where the transfer will be made.
  * <mark style="color:$success;">bankAccount.commissionPayer</mark> — specifies the recipient as the payer of the service commission.

#### **Parameter Logic**

* <mark style="color:$success;">Amount:</mark> Specifies the amount the recipient must pay upon receipt. Automatic currency conversion is possible depending on the sender's or recipient's country.
* <mark style="color:$success;">Currency:</mark> By default, the currency of the sender’s country is used, but it is possible to set the currency manually\*.

#### **Advantages and Limitations**

* **Currency is defined by the contract**

The typical setup is to use the sender’s country currency, but the recipient’s currency can be specified, provided it is included in the contract.

* **Manual correction**

If you want to avoid automatic conversion, the API allows you to specify the recipient’s currency manually.\*

* **Flexible payment parameters**

The API allows configuring payment parameters, including selecting the payment method and setting the amount.

* **Shipment blocking**

The shipment release is blocked until payment is made, but the recipient can inspect the goods before making the payment.


# API errors

This page describes the most common errors returned by the Nova Post API gateway, without reference to a specific method.

**If you receive an error that is not listed here, contact technical support: <servicedesk@novapost.com>**

How to use:

Each HTTP code is placed on a separate table (Error 400, Error 401, … Error 503). The table has two columns:&#x20;

* **Message** - the error text returned by the API.
* **Description** - the cause and what to do.

*In validation messages, the {n} marker is the array element index; in an actual response it is replaced with the element number (for example, parcels.0, parcels.1).*

### Error 400

<table><thead><tr><th width="299.6666259765625">Message</th><th width="445">Description</th></tr></thead><tbody><tr><td>"Invalid JSON format"</td><td>The request body (for POST/PUT/PATCH/DELETE methods) has an invalid JSON format. Check the request body syntax.</td></tr><tr><td>"Internal TypeError error"</td><td>An internal request-processing error on the service side. If it persists, contact support.</td></tr></tbody></table>

### Error 401

<table><thead><tr><th width="299.666748046875">Message</th><th width="445">Description</th></tr></thead><tbody><tr><td>"Unauthenticated."</td><td>The request was sent without authorization: the Authorization header is missing the Bearer token. Add a valid token.</td></tr><tr><td>"Invalid token"</td><td>The authorization token is invalid or corrupted. Obtain a new token and retry.</td></tr><tr><td>"Expired token"</td><td>The authorization token has expired. Obtain a new token and retry.</td></tr><tr><td>"Unauthorized"</td><td>The token failed authorization (access denied). Obtain a new token.</td></tr><tr><td>"Cid profile not found"</td><td>No client profile was found for the provided token. Make sure you authorize under a correct account.</td></tr></tbody></table>

### Error 403

<table><thead><tr><th width="300.3333740234375">Message</th><th width="445">Description</th></tr></thead><tbody><tr><td>"Access denied to this registry"</td><td>You do not have permission to print this registry. Printing is available only to the client who owns the registry (access is verified by company TIN or phone number). Make sure the registry was created under your account.</td></tr></tbody></table>

### Error 404

<table data-search="false"><thead><tr><th width="300.3333740234375">Message</th><th width="445">Description</th></tr></thead><tbody><tr><td>"not_found"</td><td>The requested resource or route was not found. Depending on the method, this means: an unknown API key; a missing print result; the cargo classifier is unavailable; or an invalid identifier in the path (a UUID is expected).</td></tr><tr><td>"Document not found"</td><td>The verification-status method did not find a document for the parameters provided. Check the number or identifier of the international shipment.</td></tr><tr><td>"No shipments found in registry"</td><td>The registry contains no shipments eligible for marking-label printing. Add at least one shipment to the registry before printing.</td></tr><tr><td>"Registry PDF is corrupted."</td><td>The printable registry form was generated, but the resulting PDF file is empty or corrupted. Try printing again later; if the error persists, contact support.</td></tr><tr><td>"Registry not found"</td><td>The registry to print was not found for the specified identifier. Check the registry id and make sure it exists and belongs to you.</td></tr><tr><td>"Registry print not found."</td><td>The printable form for the international (MEN) registry could not be retrieved — the service returned no document content. Try again later.</td></tr><tr><td>"Shipment not found"</td><td>The shipment was not found for the specified number (tracking and marking-label printing methods). Check that the shipment number is correct.</td></tr><tr><td>"Shipments not found"</td><td>No shipments were found for the request parameters for tracking. Check the list of numbers or identifiers.</td></tr><tr><td>"This request cannot be deleted"</td><td>A courier pickup request with the specified identifier was not found among your active requests, so it cannot be deleted. Check the pickup request identifier.</td></tr><tr><td>"This request cannot be updated"</td><td>A courier pickup request with the specified identifier was not found among those available for editing. Only your own pickup requests in the Draft status can be updated.</td></tr><tr><td>"shipment not found"</td><td>The shipment was not found for the specified number while creating a claim or uploading files to it. Check that the shipment number is correct.</td></tr><tr><td>"shipment_not_found"</td><td>The shipment was not found for the specified number while retrieving a claim. Check that the shipment number is correct.</td></tr><tr><td>"shipments not found"</td><td>No shipments were found for the specified parameters for printing. Check the list of numbers or identifiers.</td></tr></tbody></table>

### Error 405

<table><thead><tr><th width="300.3333740234375">Message</th><th width="445">Description</th></tr></thead><tbody><tr><td>"Method Not Allowed"</td><td>The HTTP method is not supported by this route (for example, POST instead of GET). Check the request method.</td></tr></tbody></table>

### Error 422

<table data-search="false"><thead><tr><th width="299.6666259765625">Message</th><th width="445">Description</th></tr></thead><tbody><tr><td>"Cid profile timeout"</td><td>A temporary error occurred while retrieving the client profile during authorization. Try again later.</td></tr><tr><td>"Cid profile not found"</td><td>The client profile could not be retrieved during authorization. Try again later or check the account.</td></tr><tr><td>"&#x3C;error text from the customs-fees service>"</td><td>An error occurred while retrieving customs fees: the source service returned an error, and its text is inserted into the message. The cause depends on the text — most often an invalid country or request parameters.</td></tr><tr><td>"Address not found"</td><td>The address-search method found no option matching your query. Refine or add detail to the search query (for example, add a city or street).</td></tr><tr><td>"Auth user don't have companyTins"</td><td>To create a subscription of the legal (company) type, your profile must have at least one company TIN, but none was found. Make sure the account is linked to a company.</td></tr><tr><td>"CID profile can not be created"</td><td>The test client profile required to issue a test API key could not be created. Try again later or contact support.</td></tr><tr><td>"Cannot save more than 100 shipments"</td><td>A single registry cannot contain more than 100 shipments. Reduce the number of shipments in the request or split them across several registries.</td></tr><tr><td>"CompanyTins not exists in auth user"</td><td>The company TINs (companyTins) passed in the request do not belong to your profile. Use only the TINs registered under your account.</td></tr><tr><td>"Country code '&#x3C;countryCode>' is not allowed."</td><td>Fulfillment is not available for the country code specified in the path (countryCode). Make sure you use a supported country. The actual country code is inserted into the message.</td></tr><tr><td>"Duplicate file names"</td><td>The invoice-file upload request contains at least two files with the same name. File names must be unique within the request.</td></tr><tr><td>"Empty response from tracking service"</td><td>The test webhook call received no response from the tracking service, so the check was not completed. Try again later.</td></tr><tr><td>"File not found"</td><td>The dictionary file (the list of settlements where issuance is prohibited) is currently missing from storage. Try again later.</td></tr><tr><td>"Incorrect params for generate url"</td><td>The link to the divisions dictionary file could not be generated: there is no matching file for the requested export type. Check the request parameters.</td></tr><tr><td>"Invalid customer input format"</td><td>The customerInput value was recognized neither as a shipment number (EU format) nor as a recipient identification code. Check the format of the value provided.</td></tr><tr><td>"Invalid or unsupported countryCode. Supported values: UA, MD"</td><td>The countryCode parameter is missing or has an unsupported value. Only UA and MD are allowed for this method.</td></tr><tr><td>"Invalid response from NovaDoc."</td><td>The printable invoice was generated, but the electronic document-management service did not accept the document for signing (it returned no document identifier). Try again later.</td></tr><tr><td>"Jwt creation is not allowed, api key status is &#x3C;status>"</td><td>A token cannot be issued for this API key because the key is inactive. An active key has the ACTIVE status; the current status is inserted into the message. Contact your manager to activate the key.</td></tr><tr><td>"Missing file data"</td><td>The invoice-file upload request is missing mandatory file data (type or content). Make sure both the metadata and the file content are provided.</td></tr><tr><td>"Operation not available"</td><td>Marking-label printing is not available for the identifier provided: the id list contains a value in UUID format, whereas the method expects a numeric identifier or a shipment number.</td></tr><tr><td>"Parent shipment not found or status not allowed."</td><td>A Light Return cannot be created: the parent (original) shipment was not found, or its status does not allow a return — it has not yet been delivered to the recipient.</td></tr><tr><td>"Phone number must include the country code"</td><td>The phone number was provided without a country code. Provide the number in international format with the country code (for example, +380...).</td></tr><tr><td>"Registry has no shipments"</td><td>Printing is not possible: the registry contains no shipments.</td></tr><tr><td>"Registry not found"</td><td>The registry was not found or does not belong to your profile. Renaming, adding, and removing shipments are available only for your own registries. Check the registry id.</td></tr><tr><td>"Response error"</td><td>Customs fees could not be retrieved: a communication error with the source service or an invalid response from it. Try again later.</td></tr><tr><td>"Shipment not found"</td><td>While verifying access rights for registry printing, one of the registry's shipments was not found. Check the registry contents.</td></tr><tr><td>"System is required"</td><td>The invoice-file upload request does not specify the source system for the upload. Provide the mandatory upload parameters.</td></tr><tr><td>"Test keys are available only for test envs"</td><td>The test API key issuance method works only in test environments and is not available in the production environment.</td></tr><tr><td>"The service is temporarily unavailable"</td><td>The registry could not be created: the operation is temporarily unavailable for the specified sender country. Try again later.</td></tr><tr><td>"The specified document numbers [...] do not belong to the current user and must be excluded from the request."</td><td>Some of the shipment numbers in the request do not belong to your profile. Such numbers are listed in the message text — exclude them from the request and retry.</td></tr><tr><td>"This request cannot be fulfilled"</td><td>The registry operation cannot be performed: the registry was not found, does not belong to you, has not been loaded yet, or contains no shipments for this action. Check the registry id and its contents.</td></tr><tr><td>"This request cannot be saved"</td><td>The request with shipments cannot be saved: invalid identifiers were provided (a UUID is expected) or none of the shipments belong to your profile. Check the list of shipments.</td></tr><tr><td>"This request cannot be updated"</td><td>The courier pickup request cannot be updated: for a country other than Ukraine, an id in UUID format was provided in the path, whereas a different identifier format is expected.</td></tr><tr><td>"Unable to process"</td><td>The invoice file was provided in two modes at once (both as a file and as base64). Use only one method of passing the file.</td></tr><tr><td>"Unsupported file extension in files.{n}.metadata.name"</td><td>The invoice file has an unsupported extension (specified in the files.{n}.metadata.name field). Upload only files of the allowed types.</td></tr><tr><td>"Vip not found in Ukraine"</td><td>The client was not found for the specified API key. Check that the key is correct.</td></tr><tr><td>"change_not_available"</td><td>The invoice files for this shipment cannot be changed because of its current status. The operation is available only while the shipment is in the ReadyToShip or Draft status.</td></tr><tr><td>"deletion not allowed"</td><td>Only the sender can delete a shipment. If you are not the sender, deletion is not available.</td></tr><tr><td>"document_not_belong_to_user"</td><td>A Light Return cannot be created: the specified shipment does not belong to your profile.</td></tr><tr><td>"impossible_create_light_return"</td><td>A Light Return is not available for shipments within Ukraine unless a third party is specified as the payer (payerType = ThirdPerson).</td></tr><tr><td>"impossible_create_return"</td><td>Return creation is not available for shipments sent from Ukraine.</td></tr><tr><td>"no_attachments_found_for_the specified_shipment"</td><td>The specified shipment has no attached files.</td></tr><tr><td>"no_attachments_found_for_this_shipment"</td><td>The requested file (fileId) does not belong to this shipment's attachments. Check the file identifier.</td></tr><tr><td>"not_found"</td><td>No shipment was found for the identification code provided. Check that the code is correct.</td></tr><tr><td>"print fail"</td><td>The printable registry form could not be generated. Try printing again later.</td></tr><tr><td>"shipment_was_deleted"</td><td>This shipment has already been deleted, so it cannot be deleted again.</td></tr><tr><td>"you_are_not_authorized_to_access_this_shipment"</td><td>Access to the shipment is denied: you are neither its sender nor its recipient.</td></tr><tr><td>"address.latitude": "validation.range.not_in_range"</td><td>The coordinate value is out of the allowed range (latitude −90…90, longitude −180…180).</td></tr><tr><td>"address.longitude": "validation.range.not_in_range"</td><td>The coordinate value is out of the allowed range (latitude −90…90, longitude −180…180).</td></tr><tr><td>"barcodes.{n}": "validation.document_number_format"</td><td>Invalid shipment number format.</td></tr><tr><td>"bottomLeftLatitude": "validation.range.not_in_range"</td><td>The coordinate value is out of the allowed range (latitude −90…90, longitude −180…180).</td></tr><tr><td>"bottomLeftLongitude": "validation.range.not_in_range"</td><td>The coordinate value is out of the allowed range (latitude −90…90, longitude −180…180).</td></tr><tr><td>"countryCode": "validation.country_code"</td><td>Invalid country code. Expected ISO 3166-1 alpha-2 format (e.g. UA, PL).</td></tr><tr><td>"countryCodes.{n}": "validation.country_code"</td><td>Invalid country code. Expected ISO 3166-1 alpha-2 format (e.g. UA, PL).</td></tr><tr><td>"customerInput": "validation.customer_input_format"</td><td>Invalid customer identifier format.</td></tr><tr><td>"customerPhone": "validation.phone"</td><td>The phone number does not match the international format (it must include the country code, e.g. +380...).</td></tr><tr><td>"excludeCountryCode": "validation.country_code"</td><td>Invalid country code. Expected ISO 3166-1 alpha-2 format (e.g. UA, PL).</td></tr><tr><td>"id": "validation.not_integer_or_uuid"</td><td>The identifier must be an integer or a valid UUID.</td></tr><tr><td>"invoice.items": "validation.items.*.currency.must_be_same"</td><td>All invoice items must use the same currency.</td></tr><tr><td>"invoice.items.{n}.hsCode": "validation.hsCode.length"</td><td>Invalid length of the UKT ZED (HS) code.</td></tr><tr><td>"latitude": "validation.range.not_in_range"</td><td>The coordinate value is out of the allowed range (latitude −90…90, longitude −180…180).</td></tr><tr><td>"longitude": "validation.range.not_in_range"</td><td>The coordinate value is out of the allowed range (latitude −90…90, longitude −180…180).</td></tr><tr><td>"menNumber": "validation.document_number_format"</td><td>Invalid shipment number format.</td></tr><tr><td>"number": "validation.document_number_format"</td><td>Invalid shipment number format.</td></tr><tr><td>"numbers": "validation.document_number_format"</td><td>Invalid shipment number format.</td></tr><tr><td>"phone": "validation.phone"</td><td>The phone number does not match the international format (it must include the country code, e.g. +380...).</td></tr><tr><td>"recipientPhone": "validation.phone"</td><td>The phone number does not match the international format (it must include the country code, e.g. +380...).</td></tr><tr><td>"senderPhone": "validation.phone"</td><td>The phone number does not match the international format (it must include the country code, e.g. +380...).</td></tr><tr><td>"shipmentNumber": "validation.document_number_format"</td><td>Invalid shipment number format.</td></tr><tr><td>"shipments": "validation.array"</td><td>The value must be an array.</td></tr><tr><td>"topRightLatitude": "validation.range.not_in_range"</td><td>The coordinate value is out of the allowed range (latitude −90…90, longitude −180…180).</td></tr><tr><td>"topRightLongitude": "validation.range.not_in_range"</td><td>The coordinate value is out of the allowed range (latitude −90…90, longitude −180…180).</td></tr><tr><td>"COD": "The c o d field must be true or false."</td><td>The value must be a boolean: true or false.</td></tr><tr><td>"UUIDs": "The UUIDs field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"UUIDs": "The UUIDs field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"UUIDs": "The UUIDs field must have at least 1 items."</td><td>The array must contain at least 1 item(s).</td></tr><tr><td>"UUIDs.{n}": "The UUIDs.{n} field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"UUIDs.{n}": "The UUIDs.{n} field must be a valid UUID."</td><td>The value must be a valid UUID.</td></tr><tr><td>"activeOnDate": "The active on date field must match the format Y-m-d\TH:i:s.u\Z."</td><td>The value must match the ISO 8601 date-time format in UTC, e.g. 2026-07-21T12:00:00.000Z.</td></tr><tr><td>"actualDeliveryDateFrom": "The actual delivery date from field must be a date before or equal to actual delivery date to."</td><td>The value must be a date no later than actual delivery date to.</td></tr><tr><td>"actualDeliveryDateFrom": "The actual delivery date from field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"actualDeliveryDateFrom": "The actual delivery date from field must have a value."</td><td>The field is present but empty — provide a value.</td></tr><tr><td>"actualDeliveryDateTo": "The actual delivery date to field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"actualDeliveryDateTo": "The actual delivery date to field must have a value."</td><td>The field is present but empty — provide a value.</td></tr><tr><td>"additionalParameters": "The additional parameters field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"additionalParameters.marketplaceDelivery": "The additional parameters.marketplace delivery field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"additionalParameters.partnerPaymentData": "The additional parameters.partner payment data field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"additionalParameters.partnerPaymentData.currencyCode": "The additional parameters.partner payment data.currency code field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"additionalParameters.partnerPaymentData.payerType": "The additional parameters.partner payment data.payer type field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"additionalParameters.partnerPaymentData.payerType": "The selected additional parameters.partner payment data.payer type is invalid."</td><td>The value is not among the allowed values for this field.</td></tr><tr><td>"additionalParameters.partnerPaymentData.paymentForm": "The additional parameters.partner payment data.payment form field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"additionalParameters.partnerPaymentData.paymentForm": "The selected additional parameters.partner payment data.payment form is invalid."</td><td>The value is not among the allowed values for this field.</td></tr><tr><td>"additionalParameters.partnerPaymentData.totalCost": "The additional parameters.partner payment data.total cost field must be a number."</td><td>The value must be a number (decimals allowed).</td></tr><tr><td>"additionalParameters.paymentForm": "The additional parameters.payment form field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"additionalParameters.paymentForm": "The selected additional parameters.payment form is invalid."</td><td>The value is not among the allowed values for this field.</td></tr><tr><td>"additionalParameters.recipientAddressLineRaw": "The additional parameters.recipient address line raw field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"additionalParameters.recipientAddressLineRaw": "The additional parameters.recipient address line raw field must not be greater than 255 characters."</td><td>The string must be at most 255 characters long.</td></tr><tr><td>"additionalPhotos": "The additional photos field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"additionalPhotos.{n}": "The additionalPhotos.{n} field must be a file of type: jpeg, jpg, bmp, png, gif, svg, pdf, doc, docx, xlsx, pptx, csv, xlsb, xltx, xls, xlt, xml."</td><td>The file must be one of the following types: jpeg, jpg, bmp, png, gif, svg, pdf, doc, docx, xlsx, pptx, csv, xlsb, xltx, xls, xlt, xml.</td></tr><tr><td>"additionalPhotos.{n}": "The additionalPhotos.{n} field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"additionalPhotos.{n}": "The additionalPhotos.{n} field must not be greater than 4096 kilobytes."</td><td>The file size must not exceed 4096 KB.</td></tr><tr><td>"address": "The address field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"address": "The address field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"address": "The address field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"address": "The address field must be at least 2 characters."</td><td>The string must be at least 2 characters long.</td></tr><tr><td>"address": "The address field must not be greater than 255 characters."</td><td>The string must be at most 255 characters long.</td></tr><tr><td>"address.latitude": "The address.latitude field is required when address is present."</td><td>Required when address is provided.</td></tr><tr><td>"address.latitude": "The address.latitude field must be a number."</td><td>The value must be a number (decimals allowed).</td></tr><tr><td>"address.longitude": "The address.longitude field is required when address is present."</td><td>Required when address is provided.</td></tr><tr><td>"address.longitude": "The address.longitude field must be a number."</td><td>The value must be a number (decimals allowed).</td></tr><tr><td>"address.string": "The address.string field is required when address is present."</td><td>Required when address is provided.</td></tr><tr><td>"address.string": "The address.string field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"address.string": "The address.string field must not be greater than 255 characters."</td><td>The string must be at most 255 characters long.</td></tr><tr><td>"addressParts": "The address parts field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"addressParts.block": "The address parts.block field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"addressParts.block": "The address parts.block field must not be greater than 100 characters."</td><td>The string must be at most 100 characters long.</td></tr><tr><td>"addressParts.building": "The address parts.building field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"addressParts.building": "The address parts.building field must not be greater than 100 characters."</td><td>The string must be at most 100 characters long.</td></tr><tr><td>"addressParts.building": "The addressParts.building field is required when addressParts is !null."</td><td>Required when addressParts is provided.</td></tr><tr><td>"addressParts.building": "The addressParts.building field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"addressParts.building": "The addressParts.building field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"addressParts.building": "The addressParts.building field must not be greater than 100 characters."</td><td>The string must be at most 100 characters long.</td></tr><tr><td>"addressParts.city": "The address parts.city field is required when address parts is present."</td><td>Required when addressParts is provided.</td></tr><tr><td>"addressParts.city": "The address parts.city field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"addressParts.city": "The address parts.city field must not be greater than 100 characters."</td><td>The string must be at most 100 characters long.</td></tr><tr><td>"addressParts.city": "The addressParts.city field is required when addressParts is !null."</td><td>Required when addressParts is provided.</td></tr><tr><td>"addressParts.city": "The addressParts.city field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"addressParts.city": "The addressParts.city field must not be greater than 100 characters."</td><td>The string must be at most 100 characters long.</td></tr><tr><td>"addressParts.flat": "The address parts.flat field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"addressParts.flat": "The address parts.flat field must not be greater than 50 characters."</td><td>The string must be at most 50 characters long.</td></tr><tr><td>"addressParts.flat": "The addressParts.flat field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"addressParts.flat": "The addressParts.flat field must not be greater than 10 characters."</td><td>The string must be at most 10 characters long.</td></tr><tr><td>"addressParts.note": "The address parts.note field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"addressParts.note": "The address parts.note field must not be greater than 255 characters."</td><td>The string must be at most 255 characters long.</td></tr><tr><td>"addressParts.note": "The addressParts.note field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"addressParts.note": "The addressParts.note field must not be greater than 100 characters."</td><td>The string must be at most 100 characters long.</td></tr><tr><td>"addressParts.postCode": "The address parts.post code field is required when address parts is present."</td><td>Required when addressParts is provided.</td></tr><tr><td>"addressParts.postCode": "The address parts.post code field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"addressParts.postCode": "The address parts.post code field must not be greater than 10 characters."</td><td>The string must be at most 10 characters long.</td></tr><tr><td>"addressParts.postCode": "The addressParts.postCode field is required when addressParts is !null."</td><td>Required when addressParts is provided.</td></tr><tr><td>"addressParts.postCode": "The addressParts.postCode field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"addressParts.postCode": "The addressParts.postCode field must not be greater than 10 characters."</td><td>The string must be at most 10 characters long.</td></tr><tr><td>"addressParts.region": "The address parts.region field is required when address parts is present."</td><td>Required when addressParts is provided.</td></tr><tr><td>"addressParts.region": "The address parts.region field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"addressParts.region": "The address parts.region field must not be greater than 100 characters."</td><td>The string must be at most 100 characters long.</td></tr><tr><td>"addressParts.region": "The addressParts.region field is required when addressParts is !null."</td><td>Required when addressParts is provided.</td></tr><tr><td>"addressParts.region": "The addressParts.region field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"addressParts.region": "The addressParts.region field must not be greater than 100 characters."</td><td>The string must be at most 100 characters long.</td></tr><tr><td>"addressParts.street": "The address parts.street field is required when address parts is present."</td><td>Required when addressParts is provided.</td></tr><tr><td>"addressParts.street": "The address parts.street field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"addressParts.street": "The address parts.street field must not be greater than 100 characters."</td><td>The string must be at most 100 characters long.</td></tr><tr><td>"addressParts.street": "The addressParts.street field is required when addressParts is !null."</td><td>Required when addressParts is provided.</td></tr><tr><td>"addressParts.street": "The addressParts.street field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"addressParts.street": "The addressParts.street field must not be greater than 100 characters."</td><td>The string must be at most 100 characters long.</td></tr><tr><td>"afterpayment": "The afterpayment field must be true or false."</td><td>The value must be a boolean: true or false.</td></tr><tr><td>"amount": "The amount field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"amount": "The amount field must be a number."</td><td>The value must be a number (decimals allowed).</td></tr><tr><td>"apiKey": "The api key field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"apiKey": "The api key field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"apiKey": "The api key field must be at least 32 characters."</td><td>The string must be at least 32 characters long.</td></tr><tr><td>"apiKey": "The api key field must not be greater than 40 characters."</td><td>The string must be at most 40 characters long.</td></tr><tr><td>"appealReason": "The appeal reason field must be 3 digits."</td><td>The value must contain exactly 3 digits.</td></tr><tr><td>"archive": "The archive field must be true or false."</td><td>The value must be a boolean: true or false.</td></tr><tr><td>"attachedDocumentTypeId": "The attached document type id field must be an integer."</td><td>The value must be an integer.</td></tr><tr><td>"attributes": "The attributes field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"attributes.{n}": "The attributes.{n} field has a duplicate value."</td><td>The value is duplicated within the array — items must be unique.</td></tr><tr><td>"attributes.{n}": "The attributes.{n} field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"attributes.{n}": "The selected attributes.{n} is invalid."</td><td>The value is not among the allowed values for this field.</td></tr><tr><td>"barcodes": "The barcodes field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"barcodes": "The barcodes field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"barcodes.{n}": "The barcodes.{n} field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"blocked": "The blocked field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"blocked": "The blocked field must be true or false."</td><td>The value must be a boolean: true or false.</td></tr><tr><td>"bottomLeftLatitude": "The bottom left latitude field is required when bottomLeftLongitude / topRightLatitude / topRightLongitude is present."</td><td>Required when any of the following fields is provided: bottomLeftLongitude, topRightLatitude, topRightLongitude.</td></tr><tr><td>"bottomLeftLongitude": "The bottom left longitude field is required when bottomLeftLatitude / topRightLatitude / topRightLongitude is present."</td><td>Required when any of the following fields is provided: bottomLeftLatitude, topRightLatitude, topRightLongitude.</td></tr><tr><td>"boxId": "The box id field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"boxId": "The box id field must be an integer."</td><td>The value must be an integer.</td></tr><tr><td>"canSelectRecipientAsPayer": "The can select recipient as payer field must be true or false."</td><td>The value must be a boolean: true or false.</td></tr><tr><td>"category": "The category field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"category": "The category field must not be greater than 255 characters."</td><td>The string must be at most 255 characters long.</td></tr><tr><td>"changeTime": "The change time field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"changeTime": "The change time field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"changeTime": "The change time field must not be greater than 255 characters."</td><td>The string must be at most 255 characters long.</td></tr><tr><td>"cid": "The cid field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"cid": "The cid field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"cid": "The cid field must be a valid UUID."</td><td>The value must be a valid UUID.</td></tr><tr><td>"cids": "The cids field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"cids.{n}": "The cids.{n} field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"claim.accountNumber": "The claim.account number field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"claim.bankAccountNumber": "The claim.bank account number field is required when claim.routing number is present."</td><td>Required when claim.routing number is provided.</td></tr><tr><td>"claim.bankAccountNumber": "The claim.bank account number field must have at least 8 digits."</td><td>The value must contain at least 8 digits.</td></tr><tr><td>"claim.bankAccountNumber": "The claim.bank account number field must not have more than 17 digits."</td><td>The value must contain at most 17 digits.</td></tr><tr><td>"claim.currencyCode": "The claim.currency code field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"claim.currencyCode": "The claim.currency code field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"claim.currencyCode": "The selected claim.currency code is invalid."</td><td>The value is not among the allowed values for this field.</td></tr><tr><td>"claim.ibanNumber": "The \"claim.ibanNumber\" does not follow the ISO-13616 format."</td><td>The bank account number does not match the IBAN format (ISO 13616 standard).</td></tr><tr><td>"claim.ibanNumber": "The \"claim.ibanNumber\" is invalid. Checksum validation failed."</td><td>The bank account number failed the checksum validation (invalid IBAN).</td></tr><tr><td>"claim.ibanNumber": "The claim.iban number field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"claim.ibanNumber": "The country code \":country\" is not supported."</td><td>The country code in the bank account number (IBAN) is not supported.</td></tr><tr><td>"claim.mfoBank": "The claim.mfo bank field format is invalid."</td><td>The value does not match the expected format of the field.</td></tr><tr><td>"claim.mfoBank": "The claim.mfo bank field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"claim.routingNumber": "The claim.routing number field is required when claim.bank account number is present."</td><td>Required when claim.bank account number is provided.</td></tr><tr><td>"claim.routingNumber": "The claim.routing number field must be 9 digits."</td><td>The value must contain exactly 9 digits.</td></tr><tr><td>"claim.sum": "The claim.sum field must be a number."</td><td>The value must be a number (decimals allowed).</td></tr><tr><td>"claim.type": "The claim.type field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"claim.type": "The claim.type field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"claim.type": "The selected claim.type is invalid."</td><td>The value is not among the allowed values for this field.</td></tr><tr><td>"clientType": "The client type field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"clientType": "The client type field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"closed": "The closed field must be true or false."</td><td>The value must be a boolean: true or false.</td></tr><tr><td>"closingDateFrom": "The closing date from field must be a date before or equal to closing date to."</td><td>The value must be a date no later than closing date to.</td></tr><tr><td>"closingDateFrom": "The closing date from field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"closingDateFrom": "The closing date from field must have a value."</td><td>The field is present but empty — provide a value.</td></tr><tr><td>"closingDateTo": "The closing date to field must be a date after or equal to closing date from."</td><td>The value must be a date no earlier than closing date from.</td></tr><tr><td>"closingDateTo": "The closing date to field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"closingDateTo": "The closing date to field must have a value."</td><td>The field is present but empty — provide a value.</td></tr><tr><td>"code": "The code field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"codes": "The codes field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"codes.{n}": "The codes.{n} field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"codes.{n}": "The codes.{n} field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"codes.{n}": "The codes.{n} field must be at least 3 characters."</td><td>The string must be at least 3 characters long.</td></tr><tr><td>"codes.{n}": "The codes.{n} field must not be greater than 3 characters."</td><td>The string must be at most 3 characters long.</td></tr><tr><td>"companies": "The companies field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"companies.{n}": "The companies.{n} field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"companies.{n}": "The companies.{n} field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"companies.{n}": "The companies.{n} field must be at least 2 characters."</td><td>The string must be at least 2 characters long.</td></tr><tr><td>"companies.{n}": "The companies.{n} field must not be greater than 15 characters."</td><td>The string must be at most 15 characters long.</td></tr><tr><td>"companyName": "The company name field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"companyName": "The company name field must not be greater than 255 characters."</td><td>The string must be at most 255 characters long.</td></tr><tr><td>"companyTin": "Access to the company is forbidden by API key."</td><td>Access to the specified company is forbidden for this API key. Check the key permissions for the sender company.</td></tr><tr><td>"companyTin": "The company tin field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"companyTin": "The company tin field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"companyTins": "The company tins field is required when type is legal."</td><td>Required when type = legal.</td></tr><tr><td>"companyTins": "The company tins field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"companyTins.{n}": "The companyTins.{n} field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"companyTins.{n}": "The companyTins.{n} field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"compensationReason": "The selected compensationReason is invalid."</td><td>The value is not among the allowed values for this field.</td></tr><tr><td>"complaint": "The complaint field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"complaint": "The complaint field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"complaint.description": "The complaint.description field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"complaint.photo": "The complaint.photo field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"complaint.photo.{n}": "The complaint.photo.{n} field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"complaint.type": "The complaint.type field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"complaint.type": "The complaint.type field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"complaintPhotos.{n}": "The complaintPhotos.{n} field must be a file of type: jpeg, jpg, bmp, png, gif, svg, pdf, doc, docx, xlsx, pptx, csv, xlsb, xltx, xls, xlt, xml."</td><td>The file must be one of the following types: jpeg, jpg, bmp, png, gif, svg, pdf, doc, docx, xlsx, pptx, csv, xlsb, xltx, xls, xlt, xml.</td></tr><tr><td>"complaintPhotos.{n}": "The complaintPhotos.{n} field must not be greater than 4096 kilobytes."</td><td>The file size must not exceed 4096 KB.</td></tr><tr><td>"containsServices": "The contains services field must be true or false."</td><td>The value must be a boolean: true or false.</td></tr><tr><td>"contentType": "The selected content type is invalid."</td><td>The value is not among the allowed values for this field.</td></tr><tr><td>"copies": "The copies field must be a number."</td><td>The value must be a number (decimals allowed).</td></tr><tr><td>"copies": "The copies field must be an integer."</td><td>The value must be an integer.</td></tr><tr><td>"copies": "The copies field must be at least 1."</td><td>The value must be at least 1.</td></tr><tr><td>"copies": "The copies field must not be greater than 10."</td><td>The value must be at most 10.</td></tr><tr><td>"cost": "The cost field format is invalid."</td><td>The value does not match the expected format of the field.</td></tr><tr><td>"cost": "The cost field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"count": "The count field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"count": "The count field must be an integer."</td><td>The value must be an integer.</td></tr><tr><td>"count": "The count field must be at least 1."</td><td>The value must be at least 1.</td></tr><tr><td>"count": "The count field must not be greater than 100."</td><td>The value must be at most 100.</td></tr><tr><td>"country": "The country field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"country": "The country field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"country": "The selected country is invalid."</td><td>The value is not among the allowed values for this field.</td></tr><tr><td>"country-code": "The country-code field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"country-code": "The country-code field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"countryCode": "Google search for country is disabled"</td><td>Address search is not available for the specified country.</td></tr><tr><td>"countryCode": "The country code field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"countryCode": "The country code field must be 2 characters."</td><td>The string must be exactly 2 characters long.</td></tr><tr><td>"countryCode": "The country code field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"countryCode": "The country code field must be at least 2 characters."</td><td>The string must be at least 2 characters long.</td></tr><tr><td>"countryCode": "The country code field must not be greater than 2 characters."</td><td>The string must be at most 2 characters long.</td></tr><tr><td>"countryCode": "The selected country code is invalid."</td><td>The value is not among the allowed values for this field.</td></tr><tr><td>"countryCodes": "The country codes field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"countryCodes.{n}": "The country codes.{n} field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"countryCodes.{n}": "The countryCodes.{n} field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"countryCodes.{n}": "The countryCodes.{n} field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"countryCodes.{n}": "The countryCodes.{n} field must be at least 2 characters."</td><td>The string must be at least 2 characters long.</td></tr><tr><td>"countryCodes.{n}": "The countryCodes.{n} field must not be greater than 2 characters."</td><td>The string must be at most 2 characters long.</td></tr><tr><td>"createdAtFrom": "The created at from field format is invalid."</td><td>The value does not match the expected format of the field.</td></tr><tr><td>"createdAtFrom": "The created at from field must be a date before created at to."</td><td>The value must be a date earlier than created at to.</td></tr><tr><td>"createdAtFrom": "The created at from field must be a date before or equal to created at to."</td><td>The value must be a date no later than created at to.</td></tr><tr><td>"createdAtFrom": "The created at from field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"createdAtFrom": "The created at from field must be a valid date."</td><td>The value must be a valid date.</td></tr><tr><td>"createdAtFrom": "The created at from field must have a value."</td><td>The field is present but empty — provide a value.</td></tr><tr><td>"createdAtTo": "The created at to field format is invalid."</td><td>The value does not match the expected format of the field.</td></tr><tr><td>"createdAtTo": "The created at to field must be a date after created at from."</td><td>The value must be a date later than created at from.</td></tr><tr><td>"createdAtTo": "The created at to field must be a date after or equal to created at from."</td><td>The value must be a date no earlier than created at from.</td></tr><tr><td>"createdAtTo": "The created at to field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"createdAtTo": "The created at to field must be a valid date."</td><td>The value must be a valid date.</td></tr><tr><td>"createdAtTo": "The created at to field must have a value."</td><td>The field is present but empty — provide a value.</td></tr><tr><td>"createdBy": "The created by field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"createdByUser": "The created by user field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"createdByUser": "The created by user field must not be greater than 255 characters."</td><td>The string must be at most 255 characters long.</td></tr><tr><td>"cultureInfo": "The culture info field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"cultureInfo": "The culture info field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"cultureInfo": "The culture info field must not be greater than 2 characters."</td><td>The string must be at most 2 characters long.</td></tr><tr><td>"currencyCode": "The currency code field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"currencyCode": "The currency code field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"currency_code": "The currency code field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"currency_code": "The selected currency code is invalid."</td><td>The value is not among the allowed values for this field.</td></tr><tr><td>"cursor": "The cursor field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"customer": "The customer field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"customer": "The customer field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"customer": "The selected customer is invalid."</td><td>The value is not among the allowed values for this field.</td></tr><tr><td>"customerInput": "The customer input field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"customerServiceAvailable": "The customer service available field must be true or false."</td><td>The value must be a boolean: true or false.</td></tr><tr><td>"customerTINPhotos": "The customer t i n photos field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"customerTINPhotos.{n}": "The customerTINPhotos.{n} field must be a file of type: jpeg, jpg, bmp, png, gif, svg, pdf, doc, docx, xlsx, pptx, csv, xlsb, xltx, xls, xlt, xml."</td><td>The file must be one of the following types: jpeg, jpg, bmp, png, gif, svg, pdf, doc, docx, xlsx, pptx, csv, xlsb, xltx, xls, xlt, xml.</td></tr><tr><td>"customerTINPhotos.{n}": "The customerTINPhotos.{n} field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"customerTINPhotos.{n}": "The customerTINPhotos.{n} field must not be greater than 4096 kilobytes."</td><td>The file size must not exceed 4096 KB.</td></tr><tr><td>"customerTin": "The customer tin field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"customerType": "The selected customer type is invalid."</td><td>The value is not among the allowed values for this field.</td></tr><tr><td>"date": "The date field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"date": "The date field must match the format Y-m-d\TH:i:s.u\Z."</td><td>The value must match the ISO 8601 date-time format in UTC, e.g. 2026-07-21T12:00:00.000Z.</td></tr><tr><td>"deleted": "The deleted field must be true or false."</td><td>The value must be a boolean: true or false.</td></tr><tr><td>"deletionMark": "The deletion mark field must be true or false."</td><td>The value must be a boolean: true or false.</td></tr><tr><td>"deletionMark": "The deletion mark field must have a value."</td><td>The field is present but empty — provide a value.</td></tr><tr><td>"deliveryPartner": "The delivery partner field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"deliveryPartner": "The selected delivery partner is invalid."</td><td>The value is not among the allowed values for this field.</td></tr><tr><td>"deliveryType": "The delivery type field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"deliveryType": "The selected delivery type is invalid."</td><td>The value is not among the allowed values for this field.</td></tr><tr><td>"deliveryTypes": "The delivery types field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"deliveryTypes": "The selected delivery types is invalid."</td><td>The value is not among the allowed values for this field.</td></tr><tr><td>"description": "The description field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"description": "The description field must not be greater than 255 characters."</td><td>The string must be at most 255 characters long.</td></tr><tr><td>"divisionCategories": "The division categories field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"divisionCategories.{n}": "The divisionCategories.{n} field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"divisionCategoryIds": "The division category ids field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"divisionCategoryIds.{n}": "The divisionCategoryIds.{n} field must be an integer."</td><td>The value must be an integer.</td></tr><tr><td>"divisionCategoryIds.{n}": "The divisionCategoryIds.{n} field must be greater than 0."</td><td>The value must be greater than 0.</td></tr><tr><td>"divisionId": "The division id field must be an integer."</td><td>The value must be an integer.</td></tr><tr><td>"divisionIds": "The division ids field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"divisionIds.{n}": "The division ids.{n} field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"docNumber": "The doc number field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"docNumber": "The doc number field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"docNumber": "The doc number field must not be greater than 255 characters."</td><td>The string must be at most 255 characters long.</td></tr><tr><td>"documentType": "The document type field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"documentType": "The selected document type is invalid."</td><td>The value is not among the allowed values for this field.</td></tr><tr><td>"email": "The email field must be a valid email address."</td><td>The value must be a valid email address.</td></tr><tr><td>"email": "The email field must not be greater than 255 characters."</td><td>The string must be at most 255 characters long.</td></tr><tr><td>"errorState": "The error state field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"errorState": "The error state field must not be greater than 255 characters."</td><td>The string must be at most 255 characters long.</td></tr><tr><td>"eventTypes": "The event types field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"eventTypes.{n}": "The eventTypes.{n} field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"eventTypes.{n}": "The eventTypes.{n} field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"export": "The export field must be true or false."</td><td>The value must be a boolean: true or false.</td></tr><tr><td>"expressDecision": "The express decision field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"expressDecision": "The selected expressDecision is invalid."</td><td>The value is not among the allowed values for this field.</td></tr><tr><td>"extended": "The extended field must be true or false."</td><td>The value must be a boolean: true or false.</td></tr><tr><td>"externalIds": "The external ids field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"externalIds.{n}": "The externalIds.{n} field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"externalIds.{n}": "The externalIds.{n} field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"externalIds.{n}": "The externalIds.{n} field must be an integer."</td><td>The value must be an integer.</td></tr><tr><td>"externalIds.{n}": "The externalIds.{n} field must be greater than 0."</td><td>The value must be greater than 0.</td></tr><tr><td>"file": "The file field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"file": "The file field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"fileContentType": "The file content type field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"fileId": "The file id field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"fileId": "The file id field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"fileName": "The file name field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"files": "Missing file data"</td><td>Mandatory file data is missing (type or content).</td></tr><tr><td>"files": "Too many files"</td><td>The allowed number of files in the request is exceeded.</td></tr><tr><td>"files.{n}.file": "File is too large to upload"</td><td>The file size exceeds the allowed limit.</td></tr><tr><td>"files.{n}.metadata.typeCode": "Missing file data"</td><td>Mandatory file data is missing (type or content).</td></tr><tr><td>"files.{n}.metadata.typeId": "Missing file data"</td><td>Mandatory file data is missing (type or content).</td></tr><tr><td>"firstName": "The first name field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"firstName": "The first name field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"flowType": "The flow type field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"flowType": "The flow type field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"fullList": "The full list field must be true or false."</td><td>The value must be a boolean: true or false.</td></tr><tr><td>"fullName": "The full name field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"fullName": "The full name field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"fullName": "The full name field must not be greater than 255 characters."</td><td>The string must be at most 255 characters long.</td></tr><tr><td>"fuzzy": "The fuzzy field must be true or false."</td><td>The value must be a boolean: true or false.</td></tr><tr><td>"hasArrival": "The has arrival field must be true or false."</td><td>The value must be a boolean: true or false.</td></tr><tr><td>"hasStorage": "The has storage field must be true or false."</td><td>The value must be a boolean: true or false.</td></tr><tr><td>"iBans": "The i bans field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"iBans.{n}": "The iBans.{n} field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"iBans.{n}": "The iBans.{n} field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"id": "The id field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"id": "The id field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"id": "The id field must be a valid UUID."</td><td>The value must be a valid UUID.</td></tr><tr><td>"id": "The id field must be an integer."</td><td>The value must be an integer.</td></tr><tr><td>"id": "The id field must be at least 1."</td><td>The value must be at least 1.</td></tr><tr><td>"id": "The id must be a valid UUID or integer."</td><td>The identifier must be a valid UUID or an integer.</td></tr><tr><td>"identificationSource": "The identification source field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"identificationSource": "The identification source field must be an integer."</td><td>The value must be an integer.</td></tr><tr><td>"ids": "The ids field is required when none of numbers / trackingDateFrom / trackingDateTo are present."</td><td>Required when none of the following fields are provided: numbers, trackingDateFrom, trackingDateTo.</td></tr><tr><td>"ids": "The ids field is required when numbers is not present."</td><td>Required when numbers is not provided.</td></tr><tr><td>"ids": "The ids field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"ids": "The ids field must have a value."</td><td>The field is present but empty — provide a value.</td></tr><tr><td>"ids": "The ids field must not have more than 100 items."</td><td>The array must contain at most 100 items.</td></tr><tr><td>"ids": "The ids field must not have more than 200 items."</td><td>The array must contain at most 200 items.</td></tr><tr><td>"ids.{n}": "The ids.{n} field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"ids.{n}": "The ids.{n} field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"ids.{n}": "The ids.{n} field must be an integer."</td><td>The value must be an integer.</td></tr><tr><td>"ids.{n}": "The ids.{n} field must be greater than 0."</td><td>The value must be greater than 0.</td></tr><tr><td>"import": "The import field must be true or false."</td><td>The value must be a boolean: true or false.</td></tr><tr><td>"inRegistry": "The in registry field must be true or false."</td><td>The value must be a boolean: true or false.</td></tr><tr><td>"international": "The international field must be true or false."</td><td>The value must be a boolean: true or false.</td></tr><tr><td>"invoice": "The invoice field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"invoice.clientInvoice": "The invoice.client invoice field must be an integer."</td><td>The value must be an integer.</td></tr><tr><td>"invoice.clientInvoice": "The selected invoice.client invoice is invalid."</td><td>The value is not among the allowed values for this field.</td></tr><tr><td>"invoice.cost": "The invoice.cost field format is invalid."</td><td>The value does not match the expected format of the field.</td></tr><tr><td>"invoice.cost": "The invoice.cost field is required when invoice.currency is present."</td><td>Required when invoice.currency is provided.</td></tr><tr><td>"invoice.cost": "The invoice.cost field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"invoice.cost": "The invoice.cost field must be a number."</td><td>The value must be a number (decimals allowed).</td></tr><tr><td>"invoice.cost": "The invoice.cost field must be at least 0."</td><td>The value must be at least 0.</td></tr><tr><td>"invoice.cost": "The invoice.cost field must be greater than or equal to 0."</td><td>The value must be at least 0.</td></tr><tr><td>"invoice.cost": "The invoice.cost field must be less than or equal to 9999999999.99."</td><td>The value must be at most 9999999999.99.</td></tr><tr><td>"invoice.cost": "The invoice.cost field must not be greater than 999999999.99."</td><td>The value must be at most 999999999.99.</td></tr><tr><td>"invoice.currency": "The invoice.currency field format is invalid."</td><td>The value does not match the expected format of the field.</td></tr><tr><td>"invoice.currency": "The invoice.currency field is required when invoice.cost is present."</td><td>Required when invoice.cost is provided.</td></tr><tr><td>"invoice.currency": "The invoice.currency field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"invoice.currency": "The invoice.currency field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"invoice.currency": "The selected invoice.currency is invalid."</td><td>The value is not among the allowed values for this field.</td></tr><tr><td>"invoice.customerCreatedAt": "The invoice.customer created at field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"invoice.customerCreatedAt": "The invoice.customer created at field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"invoice.customerCreatedAt": "The invoice.customer created at field must match the format Y-m-d."</td><td>The value must match the date format YYYY-MM-DD, e.g. 2026-07-21.</td></tr><tr><td>"invoice.customerCreatedAt": "The invoice.customer created at field must match the format Y-m-d\TH:i:s.u\Z."</td><td>The value must match the ISO 8601 date-time format in UTC, e.g. 2026-07-21T12:00:00.000Z.</td></tr><tr><td>"invoice.customerNumber": "Client invoice number required"</td><td>Required field — specify the client invoice number.</td></tr><tr><td>"invoice.customerNumber": "The invoice.customer number field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"invoice.customerNumber": "The invoice.customer number field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"invoice.customerNumber": "The invoice.customer number field must not be greater than 20 characters."</td><td>The string must be at most 20 characters long.</td></tr><tr><td>"invoice.customerNumber": "The invoice.customer number field must not be greater than 50 characters."</td><td>The string must be at most 50 characters long.</td></tr><tr><td>"invoice.exportReason": "The invoice.export reason field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"invoice.exportReason": "The invoice.export reason field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"invoice.exportReason": "The selected invoice.export reason is invalid."</td><td>The value is not among the allowed values for this field.</td></tr><tr><td>"invoice.incoterm": "The invoice.incoterm field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"invoice.incoterm": "The invoice.incoterm field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"invoice.incoterm": "The selected invoice.incoterm is invalid."</td><td>The value is not among the allowed values for this field.</td></tr><tr><td>"invoice.invoiceFile": "Client invoice file required"</td><td>Required field — attach the client invoice file.</td></tr><tr><td>"invoice.invoiceFile": "The invoice.invoice file field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"invoice.invoiceFile.base64Content": "The invoice.invoice file.base64 content field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"invoice.invoiceFile.base64Content": "file is required"</td><td>Required field — provide the file content (base64).</td></tr><tr><td>"invoice.invoiceFile.filename": "The invoice.invoice file.filename field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"invoice.invoiceFile.filename": "filename is required"</td><td>Required field — specify the file name.</td></tr><tr><td>"invoice.invoiceSign": "Client invoice signature required"</td><td>Required field — specify the client invoice signature.</td></tr><tr><td>"invoice.invoiceSign": "The invoice.invoice sign field must be an integer."</td><td>The value must be an integer.</td></tr><tr><td>"invoice.invoiceType": "The invoice.invoice type field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"invoice.invoiceType": "The invoice.invoice type field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"invoice.invoiceType": "The selected invoice.invoice type is invalid."</td><td>The value is not among the allowed values for this field.</td></tr><tr><td>"invoice.iossCode": "IOSSNumber is incorrect"</td><td>Invalid IOSS number.</td></tr><tr><td>"invoice.iossCode": "The invoice.ioss code field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"invoice.iossCode": "The invoice.ioss code field must be at least 8 characters."</td><td>The string must be at least 8 characters long.</td></tr><tr><td>"invoice.iossCode": "The invoice.ioss code field must not be greater than 12 characters."</td><td>The string must be at most 12 characters long.</td></tr><tr><td>"invoice.items": "Invoice item currencies must match."</td><td>All invoice items must use the same currency.</td></tr><tr><td>"invoice.items": "The invoice.items field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"invoice.items": "The invoice.items field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"invoice.items": "The invoice.items field must have at least 1 items."</td><td>The array must contain at least 1 item(s).</td></tr><tr><td>"invoice.items.{n}.actualWeight": "The invoice.items.{n}.actual weight field must be a number."</td><td>The value must be a number (decimals allowed).</td></tr><tr><td>"invoice.items.{n}.actualWeight": "The invoice.items.{n}.actual weight field must be less than or equal to 2147483647."</td><td>The value must be at most 2147483647.</td></tr><tr><td>"invoice.items.{n}.amount": "The invoice.items.{n}.amount field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"invoice.items.{n}.amount": "The invoice.items.{n}.amount field must be an integer."</td><td>The value must be an integer.</td></tr><tr><td>"invoice.items.{n}.amount": "The invoice.items.{n}.amount field must be at least 1."</td><td>The value must be at least 1.</td></tr><tr><td>"invoice.items.{n}.amount": "invoice.items.{n}.amount must be a positive integer"</td><td>The value must be a positive integer.</td></tr><tr><td>"invoice.items.{n}.cost": "The invoice.items.{n}.cost field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"invoice.items.{n}.cost": "The invoice.items.{n}.cost field must be a number."</td><td>The value must be a number (decimals allowed).</td></tr><tr><td>"invoice.items.{n}.cost": "The invoice.items.{n}.cost field must be greater than 0."</td><td>The value must be greater than 0.</td></tr><tr><td>"invoice.items.{n}.currency": "The invoice.items.{n}.currency field format is invalid."</td><td>The value does not match the expected format of the field.</td></tr><tr><td>"invoice.items.{n}.currency": "The invoice.items.{n}.currency field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"invoice.items.{n}.currency": "The selected invoice.items.{n}.currency is invalid."</td><td>The value is not among the allowed values for this field.</td></tr><tr><td>"invoice.items.{n}.hsCode": "HsCode must contain exactly 10 digits"</td><td>The UKT ZED (HS) code must contain exactly 10 digits.</td></tr><tr><td>"invoice.items.{n}.hsCode": "The invoice.items.{n}.hs code field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"invoice.items.{n}.hsCode": "The invoice.items.{n}.hs code field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"invoice.items.{n}.hsCode": "The invoice.items.{n}.hs code field must not be greater than 10 characters."</td><td>The string must be at most 10 characters long.</td></tr><tr><td>"invoice.items.{n}.hsCodeClearance": "Invoice.items.{n}.hsCodeClearance must contain exactly 8 digits"</td><td>The customs-clearance UKT ZED (HS) code must contain exactly 8 digits.</td></tr><tr><td>"invoice.items.{n}.hsCodeClearance": "The invoice.items.{n}.hs code clearance field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"invoice.items.{n}.hsCodeDeclaration": "Invoice.items.{n}.hsCodeDeclaration must contain exactly 8 digits"</td><td>The declaration UKT ZED (HS) code must contain exactly 8 digits.</td></tr><tr><td>"invoice.items.{n}.hsCodeDeclaration": "The invoice.items.{n}.hs code declaration field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"invoice.items.{n}.material": "The invoice.items.{n}.material field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"invoice.items.{n}.material": "The invoice.items.{n}.material field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"invoice.items.{n}.material": "The invoice.items.{n}.material field must not be greater than 255 characters."</td><td>The string must be at most 255 characters long.</td></tr><tr><td>"invoice.items.{n}.measurementCode": "The invoice.items.{n}.measurement code field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"invoice.items.{n}.measurementCode": "The invoice.items.{n}.measurement code field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"invoice.items.{n}.name": "The invoice.items.{n}.name field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"invoice.items.{n}.name": "The invoice.items.{n}.name field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"invoice.items.{n}.name": "The invoice.items.{n}.name field must not be greater than 255 characters."</td><td>The string must be at most 255 characters long.</td></tr><tr><td>"invoice.items.{n}.nameEng": "The invoice.items.{n}.name eng field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"invoice.items.{n}.nameEng": "The invoice.items.{n}.name eng field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"invoice.items.{n}.nameEng": "The invoice.items.{n}.name eng field must not be greater than 255 characters."</td><td>The string must be at most 255 characters long.</td></tr><tr><td>"invoice.items.{n}.packingType": "The invoice.items.{n}.packing type field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"invoice.items.{n}.packingType": "The invoice.items.{n}.packing type field must not be greater than 30 characters."</td><td>The string must be at most 30 characters long.</td></tr><tr><td>"invoice.items.{n}.producerAndModel": "The invoice.items.{n}.producer and model field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"invoice.items.{n}.rowNumber": "invoice.items.{n}.rowNumber must be a positive integer"</td><td>The value must be a positive integer.</td></tr><tr><td>"invoice.items.{n}.weight": "The invoice.items.{n}.weight field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"invoice.items.{n}.weight": "The invoice.items.{n}.weight field must be a number."</td><td>The value must be a number (decimals allowed).</td></tr><tr><td>"invoice.items.{n}.weight": "The invoice.items.{n}.weight field must be greater than 0."</td><td>The value must be greater than 0.</td></tr><tr><td>"invoice.payerChargeCustoms": "The invoice.payer charge customs field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"invoice.payerChargeCustoms": "The selected invoice.payer charge customs is invalid."</td><td>The value is not among the allowed values for this field.</td></tr><tr><td>"invoice.payerFeesCustoms": "The invoice.payer fees customs field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"invoice.payerFeesCustoms": "The invoice.payer fees customs field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"invoice.payerFeesCustoms": "The selected invoice.payer fees customs is invalid."</td><td>The value is not among the allowed values for this field.</td></tr><tr><td>"invoice.type": "The invoice.type field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"isActive": "The is active field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"isActive": "The is active field must be true or false."</td><td>The value must be a boolean: true or false.</td></tr><tr><td>"isEURegistry": "The is e u registry field must be true or false."</td><td>The value must be a boolean: true or false.</td></tr><tr><td>"isThirdPartyPayerContract": "The is third party payer contract field must be true or false."</td><td>The value must be a boolean: true or false.</td></tr><tr><td>"keyword": "The keyword field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"keyword": "The keyword field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"keyword": "The keyword field must be at least 3 characters."</td><td>The string must be at least 3 characters long.</td></tr><tr><td>"keyword": "The keyword field must not be greater than 255 characters."</td><td>The string must be at most 255 characters long.</td></tr><tr><td>"lang": "The lang field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"lang": "The lang field must be at least 2 characters."</td><td>The string must be at least 2 characters long.</td></tr><tr><td>"lang": "The lang field must not be greater than 2 characters."</td><td>The string must be at most 2 characters long.</td></tr><tr><td>"lastName": "The last name field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"lastName": "The last name field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"latitude": "The latitude field is required when longitude is present."</td><td>Required when longitude is provided.</td></tr><tr><td>"latitude": "The latitude field must be a number."</td><td>The value must be a number (decimals allowed).</td></tr><tr><td>"legalAddress": "The legal address field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"limit": "The limit field must be an integer."</td><td>The value must be an integer.</td></tr><tr><td>"limit": "The limit field must be at least 1."</td><td>The value must be at least 1.</td></tr><tr><td>"limit": "The limit field must have a value."</td><td>The field is present but empty — provide a value.</td></tr><tr><td>"limit": "The limit field must not be greater than 100."</td><td>The value must be at most 100.</td></tr><tr><td>"limit": "The limit field must not be greater than 101."</td><td>The value must be at most 101.</td></tr><tr><td>"locale": "The locale field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"locale": "The locale field must be at least 2 characters."</td><td>The string must be at least 2 characters long.</td></tr><tr><td>"locale": "The locale field must not be greater than 2 characters."</td><td>The string must be at most 2 characters long.</td></tr><tr><td>"lockVersion": "The lock version field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"lockVersion": "The lock version field must be an integer."</td><td>The value must be an integer.</td></tr><tr><td>"lockVersion": "The lock version field must be at least 1."</td><td>The value must be at least 1.</td></tr><tr><td>"longitude": "The longitude field is required when latitude is present."</td><td>Required when latitude is provided.</td></tr><tr><td>"longitude": "The longitude field must be a number."</td><td>The value must be a number (decimals allowed).</td></tr><tr><td>"main": "The main field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"main": "The main field must be true or false."</td><td>The value must be a boolean: true or false.</td></tr><tr><td>"mainPayerType": "The main payer type field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"mainPayerType.{n}": "The main payer type.{n} field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"mainPayerType.{n}": "The selected main payer type.{n} is invalid."</td><td>The value is not among the allowed values for this field.</td></tr><tr><td>"maxDeclaredCostPlace": "The max declared cost place field must be a number."</td><td>The value must be a number (decimals allowed).</td></tr><tr><td>"maxDeclaredCostPlace": "The max declared cost place field must be at least 1."</td><td>The value must be at least 1.</td></tr><tr><td>"maxHeightPlaceRecipient": "The max height place recipient field must be an integer."</td><td>The value must be an integer.</td></tr><tr><td>"maxHeightPlaceRecipient": "The max height place recipient field must be at least 1."</td><td>The value must be at least 1.</td></tr><tr><td>"maxHeightPlaceSender": "The max height place sender field must be an integer."</td><td>The value must be an integer.</td></tr><tr><td>"maxHeightPlaceSender": "The max height place sender field must be at least 1."</td><td>The value must be at least 1.</td></tr><tr><td>"maxLengthPlaceRecipient": "The max length place recipient field must be an integer."</td><td>The value must be an integer.</td></tr><tr><td>"maxLengthPlaceRecipient": "The max length place recipient field must be at least 1."</td><td>The value must be at least 1.</td></tr><tr><td>"maxLengthPlaceSender": "The max length place sender field must be an integer."</td><td>The value must be an integer.</td></tr><tr><td>"maxLengthPlaceSender": "The max length place sender field must be at least 1."</td><td>The value must be at least 1.</td></tr><tr><td>"maxWeightPlaceRecipient": "The max weight place recipient field must be an integer."</td><td>The value must be an integer.</td></tr><tr><td>"maxWeightPlaceRecipient": "The max weight place recipient field must be at least 1."</td><td>The value must be at least 1.</td></tr><tr><td>"maxWeightPlaceSender": "The max weight place sender field must be an integer."</td><td>The value must be an integer.</td></tr><tr><td>"maxWeightPlaceSender": "The max weight place sender field must be at least 1."</td><td>The value must be at least 1.</td></tr><tr><td>"maxWidthPlaceRecipient": "The max width place recipient field must be an integer."</td><td>The value must be an integer.</td></tr><tr><td>"maxWidthPlaceRecipient": "The max width place recipient field must be at least 1."</td><td>The value must be at least 1.</td></tr><tr><td>"maxWidthPlaceSender": "The max width place sender field must be an integer."</td><td>The value must be an integer.</td></tr><tr><td>"maxWidthPlaceSender": "The max width place sender field must be at least 1."</td><td>The value must be at least 1.</td></tr><tr><td>"middleName": "The middle name field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"moneyTransfer": "The money transfer field must be true or false."</td><td>The value must be a boolean: true or false.</td></tr><tr><td>"name": "The name field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"name": "The name field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"name": "The name field must be at least 1 characters."</td><td>The string must be at least 1 characters long.</td></tr><tr><td>"name": "The name field must not be greater than 255 characters."</td><td>The string must be at most 255 characters long.</td></tr><tr><td>"needPay": "The need pay field must be true or false."</td><td>The value must be a boolean: true or false.</td></tr><tr><td>"notExistPickup": "The not exist pickup field must be true or false."</td><td>The value must be a boolean: true or false.</td></tr><tr><td>"notOwnerDocumentTypes": "The not owner document types field must be true or false."</td><td>The value must be a boolean: true or false.</td></tr><tr><td>"note": "The note field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"note": "The note field must not be greater than 1000 characters."</td><td>The string must be at most 1000 characters long.</td></tr><tr><td>"note": "The note field must not be greater than 255 characters."</td><td>The string must be at most 255 characters long.</td></tr><tr><td>"number": "The number field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"number": "The number field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"number": "The number field must be at least 1 character."</td><td>The string must be at least 1 characters long.</td></tr><tr><td>"number": "The number field must be at least 2 characters."</td><td>The string must be at least 2 characters long.</td></tr><tr><td>"number": "The number field must not be greater than 255 characters."</td><td>The string must be at most 255 characters long.</td></tr><tr><td>"number": "The number field must not be greater than 50 characters."</td><td>The string must be at most 50 characters long.</td></tr><tr><td>"numbers": "The numbers field is required when ids is not present."</td><td>Required when ids is not provided.</td></tr><tr><td>"numbers": "The numbers field is required when none of ids / trackingDateFrom / trackingDateTo are present."</td><td>Required when none of the following fields are provided: ids, trackingDateFrom, trackingDateTo.</td></tr><tr><td>"numbers": "The numbers field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"numbers": "The numbers field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"numbers": "The numbers field must have a value."</td><td>The field is present but empty — provide a value.</td></tr><tr><td>"numbers": "The numbers field must have at least 1 items."</td><td>The array must contain at least 1 item(s).</td></tr><tr><td>"numbers": "The numbers field must not have more than 100 items."</td><td>The array must contain at most 100 items.</td></tr><tr><td>"numbers": "The numbers field must not have more than 200 items."</td><td>The array must contain at most 200 items.</td></tr><tr><td>"numbers.{n}": "The numbers.{n} field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"numbers.{n}": "The numbers.{n} field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"onlySelfNumber": "The only self number field must be true or false."</td><td>The value must be a boolean: true or false.</td></tr><tr><td>"organizationName": "The organization name field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"page": "The page field must be an integer."</td><td>The value must be an integer.</td></tr><tr><td>"page": "The page field must be at least 1."</td><td>The value must be at least 1.</td></tr><tr><td>"page": "The page field must have a value."</td><td>The field is present but empty — provide a value.</td></tr><tr><td>"parcelNumber": "The parcel number field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"parcels": "The parcels field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"parcels": "The parcels field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"parcels.{n}.actualWeight": "The parcels.{n}.actual weight field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"parcels.{n}.actualWeight": "The parcels.{n}.actual weight field must be a number."</td><td>The value must be a number (decimals allowed).</td></tr><tr><td>"parcels.{n}.actualWeight": "The parcels.{n}.actual weight field must be an integer."</td><td>The value must be an integer.</td></tr><tr><td>"parcels.{n}.actualWeight": "The parcels.{n}.actual weight field must be greater than 0."</td><td>The value must be greater than 0.</td></tr><tr><td>"parcels.{n}.actualWeight": "The parcels.{n}.actual weight field must be less than or equal to 2147483647."</td><td>The value must be at most 2147483647.</td></tr><tr><td>"parcels.{n}.cargoCategory": "The parcels.{n}.cargo category field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"parcels.{n}.cargoCategory": "The parcels.{n}.cargo category field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"parcels.{n}.cargoCategory": "The selected parcels.{n}.cargo category is invalid."</td><td>The value is not among the allowed values for this field.</td></tr><tr><td>"parcels.{n}.clientParcel": "The parcels.{n}.client parcel field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"parcels.{n}.clientParcel.number": "The parcels.{n}.client parcel.number field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"parcels.{n}.height": "The parcels.{n}.height field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"parcels.{n}.height": "The parcels.{n}.height field must be an integer."</td><td>The value must be an integer.</td></tr><tr><td>"parcels.{n}.height": "The parcels.{n}.height field must be greater than 0."</td><td>The value must be greater than 0.</td></tr><tr><td>"parcels.{n}.height": "The parcels.{n}.height field must be less than or equal to 32767."</td><td>The value must be at most 32767.</td></tr><tr><td>"parcels.{n}.insuranceCost": "The parcels.{n}.insurance cost field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"parcels.{n}.insuranceCost": "The parcels.{n}.insurance cost field must be a number."</td><td>The value must be a number (decimals allowed).</td></tr><tr><td>"parcels.{n}.insuranceCost": "The parcels.{n}.insurance cost field must be greater than 0."</td><td>The value must be greater than 0.</td></tr><tr><td>"parcels.{n}.insuranceCost": "parcels.*.insuranceCost is required."</td><td>Required field — specify the parcel insurance value.</td></tr><tr><td>"parcels.{n}.insuranceCost": "parcels.*.insuranceCost should be a valid number."</td><td>The parcel insurance value must be a valid number.</td></tr><tr><td>"parcels.{n}.length": "The parcels.{n}.length field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"parcels.{n}.length": "The parcels.{n}.length field must be an integer."</td><td>The value must be an integer.</td></tr><tr><td>"parcels.{n}.length": "The parcels.{n}.length field must be greater than 0."</td><td>The value must be greater than 0.</td></tr><tr><td>"parcels.{n}.length": "The parcels.{n}.length field must be less than or equal to 32767."</td><td>The value must be at most 32767.</td></tr><tr><td>"parcels.{n}.number": "The parcels.{n}.number field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"parcels.{n}.parcelDescription": "The parcels.{n}.parcel description field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"parcels.{n}.parcelDescription": "The parcels.{n}.parcel description field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"parcels.{n}.parcelDescription": "The parcels.{n}.parcel description field must not be greater than 255 characters."</td><td>The string must be at most 255 characters long.</td></tr><tr><td>"parcels.{n}.parcelDescription": "The parcels.{n}.parcel description field must not be greater than 3000 characters."</td><td>The string must be at most 3000 characters long.</td></tr><tr><td>"parcels.{n}.rowNumber": "The parcels.{n}.row number field has a duplicate value."</td><td>The value is duplicated within the array — items must be unique.</td></tr><tr><td>"parcels.{n}.rowNumber": "The parcels.{n}.row number field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"parcels.{n}.rowNumber": "The parcels.{n}.row number field must be an integer."</td><td>The value must be an integer.</td></tr><tr><td>"parcels.{n}.rowNumber": "The parcels.{n}.row number field must be greater than 0."</td><td>The value must be greater than 0.</td></tr><tr><td>"parcels.{n}.rowNumber": "The selected parcels.{n}.row number is invalid."</td><td>The value is not among the allowed values for this field.</td></tr><tr><td>"parcels.{n}.width": "The parcels.{n}.width field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"parcels.{n}.width": "The parcels.{n}.width field must be an integer."</td><td>The value must be an integer.</td></tr><tr><td>"parcels.{n}.width": "The parcels.{n}.width field must be greater than 0."</td><td>The value must be greater than 0.</td></tr><tr><td>"parcels.{n}.width": "The parcels.{n}.width field must be less than or equal to 32767."</td><td>The value must be at most 32767.</td></tr><tr><td>"parcelsCount": "The parcels count field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"parcelsCount": "The parcels count field must be an integer."</td><td>The value must be an integer.</td></tr><tr><td>"parcelsCount": "The parcels count field must be greater than 0."</td><td>The value must be greater than 0.</td></tr><tr><td>"payerContractNumber": "The payer contract number field is required when payer type is ThirdPerson."</td><td>Required when payerType = ThirdPerson.</td></tr><tr><td>"payerContractNumber": "The payer contract number field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"payerContractNumber": "The payer contract number field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"payerContractNumber": "The payer contract number field must be at least 2 characters."</td><td>The string must be at least 2 characters long.</td></tr><tr><td>"payerContractNumber": "The payer contract number field must not be greater than 20 characters."</td><td>The string must be at most 20 characters long.</td></tr><tr><td>"payerType": "Service 'Receiver pays' is not available for this destination country."</td><td>The 'Receiver pays' service is not available for the destination country.</td></tr><tr><td>"payerType": "The payer type field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"payerType": "The payer type field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"payerType": "The payer type field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"payerType": "The selected payer type is invalid."</td><td>The value is not among the allowed values for this field.</td></tr><tr><td>"payerType.{n}": "The payer type.{n} field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"payerType.{n}": "The selected payer type.{n} is invalid."</td><td>The value is not among the allowed values for this field.</td></tr><tr><td>"paymentStatus": "The payment status field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"paymentStatus": "The payment status field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"paymentStatus": "The payment status field must be true or false."</td><td>The value must be a boolean: true or false.</td></tr><tr><td>"paymentStatus.{n}": "The payment status.{n} field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"paymentStatus.{n}": "The selected payment status.{n} is invalid."</td><td>The value is not among the allowed values for this field.</td></tr><tr><td>"phone": "The phone field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"phone": "The phone field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"pickedTimeFrom": "The picked time from field must be a date before picked time to."</td><td>The value must be a date earlier than picked time to.</td></tr><tr><td>"pickedTimeFrom": "The picked time from field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"pickedTimeFrom": "The picked time from field must be a valid date."</td><td>The value must be a valid date.</td></tr><tr><td>"pickedTimeOnlyNull": "The picked time only null field must be true or false."</td><td>The value must be a boolean: true or false.</td></tr><tr><td>"pickedTimeTo": "The picked time to field must be a date after picked time from."</td><td>The value must be a date later than picked time from.</td></tr><tr><td>"pickedTimeTo": "The picked time to field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"pickedTimeTo": "The picked time to field must be a valid date."</td><td>The value must be a valid date.</td></tr><tr><td>"pickupId": "The pickup id field must be an integer."</td><td>The value must be an integer.</td></tr><tr><td>"pickupShipmentStatuses": "The pickup shipment statuses field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"pickupShipmentStatuses.{n}": "The pickup shipment statuses.{n} field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"pickupsShipmentIds": "The pickups shipment ids field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"pickupsShipmentIds.{n}": "The pickups shipment ids.{n} field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"postCodes": "The post codes field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"postCodes.{n}": "The postCodes.{n} field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"postCodes.{n}": "The postCodes.{n} field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"printSizeType": "The print size type field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"printSizeType": "The selected print size type is invalid."</td><td>The value is not among the allowed values for this field.</td></tr><tr><td>"printed": "The printed field must be true or false."</td><td>The value must be a boolean: true or false.</td></tr><tr><td>"prohibitedIssuance": "The prohibited issuance field must be true or false."</td><td>The value must be a boolean: true or false.</td></tr><tr><td>"prohibitedSending": "The prohibited sending field must be true or false."</td><td>The value must be a boolean: true or false.</td></tr><tr><td>"promoCode": "The promo code field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"promoCode": "The promo code field must be at least 3 characters."</td><td>The string must be at least 3 characters long.</td></tr><tr><td>"recipient": "The recipient field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"recipient": "The recipient field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"recipient.address": "The recipient.address field is required when none of recipient.division id / recipient.address parts / recipient.division number are present."</td><td>Required when none of the following fields are provided: recipient.divisionId, recipient.addressParts, recipient.divisionNumber.</td></tr><tr><td>"recipient.addressParts": "The recipient.address parts field is required when none of recipient.division id / recipient.address / recipient.division number are present."</td><td>Required when none of the following fields are provided: recipient.divisionId, recipient.address, recipient.divisionNumber.</td></tr><tr><td>"recipient.addressParts": "The recipient.address parts field is required when recipient.division id is not present."</td><td>Required when recipient.divisionId is not provided.</td></tr><tr><td>"recipient.addressParts": "The recipient.address parts field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"recipient.addressParts.addressLine1": "The recipient.address parts.address line1 field is required when none of recipient.address parts.street / recipient.address parts.building / recipient.division id / recipient.address / recipient.division number are present."</td><td>Required when none of the following fields are provided: recipient.addressParts.street, recipient.addressParts.building, recipient.divisionId, recipient.address, recipient.divisionNumber.</td></tr><tr><td>"recipient.addressParts.addressLine2": "The recipient.address parts.address line2 field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"recipient.addressParts.addressLine3": "The recipient.address parts.address line3 field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"recipient.addressParts.building": "The recipient.address parts.building field is required when recipient.address parts is present."</td><td>Required when recipient.addressParts is provided.</td></tr><tr><td>"recipient.addressParts.building": "The recipient.address parts.building field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"recipient.addressParts.building": "The recipient.address parts.building field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"recipient.addressParts.building": "The recipient.address parts.building field must not be greater than 50 characters."</td><td>The string must be at most 50 characters long.</td></tr><tr><td>"recipient.addressParts.city": "The recipient.address parts.city field is required when recipient.address parts is present."</td><td>Required when recipient.addressParts is provided.</td></tr><tr><td>"recipient.addressParts.city": "The recipient.address parts.city field is required when recipient.address parts.address line1 is present."</td><td>Required when recipient.addressParts.addressLine1 is provided.</td></tr><tr><td>"recipient.addressParts.city": "The recipient.address parts.city field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"recipient.addressParts.city": "The recipient.address parts.city field must not be greater than 255 characters."</td><td>The string must be at most 255 characters long.</td></tr><tr><td>"recipient.addressParts.postCode": "The recipient.address parts.post code field is required when recipient.address parts is present."</td><td>Required when recipient.addressParts is provided.</td></tr><tr><td>"recipient.addressParts.postCode": "The recipient.address parts.post code field is required when recipient.address parts.address line1 is present."</td><td>Required when recipient.addressParts.addressLine1 is provided.</td></tr><tr><td>"recipient.addressParts.postCode": "The recipient.address parts.post code field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"recipient.addressParts.postCode": "The recipient.address parts.post code field must not be greater than 20 characters."</td><td>The string must be at most 20 characters long.</td></tr><tr><td>"recipient.addressParts.region": "The recipient.address parts.region field is required when recipient.address parts is present."</td><td>Required when recipient.addressParts is provided.</td></tr><tr><td>"recipient.addressParts.region": "The recipient.address parts.region field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"recipient.addressParts.region": "The recipient.address parts.region field must not be greater than 255 characters."</td><td>The string must be at most 255 characters long.</td></tr><tr><td>"recipient.addressParts.street": "The recipient.address parts.street field is required when none of recipient.address parts.address line1 / recipient.division id / recipient.address / recipient.division number are present."</td><td>Required when none of the following fields are provided: recipient.addressParts.addressLine1, recipient.divisionId, recipient.address, recipient.divisionNumber.</td></tr><tr><td>"recipient.addressParts.street": "The recipient.address parts.street field is required when recipient.address parts is present."</td><td>Required when recipient.addressParts is provided.</td></tr><tr><td>"recipient.addressParts.street": "The recipient.address parts.street field is required when recipient.address parts.building is present."</td><td>Required when recipient.addressParts.building is provided.</td></tr><tr><td>"recipient.addressParts.street": "The recipient.address parts.street field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"recipient.addressParts.street": "The recipient.address parts.street field must not be greater than 255 characters."</td><td>The string must be at most 255 characters long.</td></tr><tr><td>"recipient.companyName": "The recipient.company name field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"recipient.companyName": "The recipient.company name field must not be greater than 255 characters."</td><td>The string must be at most 255 characters long.</td></tr><tr><td>"recipient.companyTin": "The recipient.company tin field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"recipient.companyTin": "The recipient.company tin field must not be greater than 20 characters."</td><td>The string must be at most 20 characters long.</td></tr><tr><td>"recipient.countryCode": "The recipient.country code field is required when recipient.address parts.address line1 is present."</td><td>Required when recipient.addressParts.addressLine1 is provided.</td></tr><tr><td>"recipient.countryCode": "The recipient.country code field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"recipient.countryCode": "The recipient.country code field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"recipient.countryCode": "The recipient.country code field must be at least 2 characters."</td><td>The string must be at least 2 characters long.</td></tr><tr><td>"recipient.countryCode": "The recipient.country code field must not be greater than 2 characters."</td><td>The string must be at most 2 characters long.</td></tr><tr><td>"recipient.countryCode": "The selected recipient.country code is invalid."</td><td>The value is not among the allowed values for this field.</td></tr><tr><td>"recipient.divisionId": "The recipient.division id field is required when none of recipient.address parts / recipient.address / recipient.division number are present."</td><td>Required when none of the following fields are provided: recipient.addressParts, recipient.address, recipient.divisionNumber.</td></tr><tr><td>"recipient.divisionId": "The recipient.division id field is required when recipient.address parts is not present."</td><td>Required when recipient.addressParts is not provided.</td></tr><tr><td>"recipient.divisionId": "The recipient.division id field must be an integer."</td><td>The value must be an integer.</td></tr><tr><td>"recipient.divisionId": "The recipient.division id must be a valid division ID (numeric ID or external ID)."</td><td>The value must be a valid division identifier (numeric ID or external ID).</td></tr><tr><td>"recipient.divisionNumber": "The recipient.division number field is required when none of recipient.address parts / recipient.address / recipient.division id are present."</td><td>Required when none of the following fields are provided: recipient.addressParts, recipient.address, recipient.divisionId.</td></tr><tr><td>"recipient.email": "The recipient.email field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"recipient.email": "The recipient.email field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"recipient.email": "The recipient.email field must be a valid email address."</td><td>The value must be a valid email address.</td></tr><tr><td>"recipient.email": "The recipient.email field must not be greater than 255 characters."</td><td>The string must be at most 255 characters long.</td></tr><tr><td>"recipient.eoriCode": "EORI code is incorrect"</td><td>Invalid EORI code.</td></tr><tr><td>"recipient.eoriCode": "The recipient.eori code field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"recipient.eoriCode": "The recipient.eori code field must be at least 3 characters."</td><td>The string must be at least 3 characters long.</td></tr><tr><td>"recipient.eoriCode": "The recipient.eori code field must not be greater than 17 characters."</td><td>The string must be at most 17 characters long.</td></tr><tr><td>"recipient.latin": "The recipient.latin field must be true or false."</td><td>The value must be a boolean: true or false.</td></tr><tr><td>"recipient.name": "The recipient.name field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"recipient.name": "The recipient.name field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"recipient.name": "The recipient.name field must not be greater than 255 characters."</td><td>The string must be at most 255 characters long.</td></tr><tr><td>"recipient.phone": "The recipient.phone field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"recipient.phone": "The recipient.phone field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"recipient.phone": "The recipient.phone field must not be greater than 50 characters."</td><td>The string must be at most 50 characters long.</td></tr><tr><td>"recipient.placeId": "The recipient.place id field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"recipient.registrationAddress": "The recipient.registration address field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"recipient.registrationAddressParts": "The recipient.registration address parts field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"recipient.settlementId": "The recipient.settlement id field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"recipient.settlementId": "The recipient.settlement id field must be an integer."</td><td>The value must be an integer.</td></tr><tr><td>"recipient.settlementId": "The recipient.settlement id field must be greater than 0."</td><td>The value must be greater than 0.</td></tr><tr><td>"recipientArchive": "The recipient archive field must be true or false."</td><td>The value must be a boolean: true or false.</td></tr><tr><td>"recipientCompanyTins": "The recipient company tins field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"recipientCompanyTins.{n}": "The recipient company tins.{n} field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"recipientCountryCode": "The recipient country code field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"recipientCountryCode": "The recipient country code field must be at least 2 characters."</td><td>The string must be at least 2 characters long.</td></tr><tr><td>"recipientCountryCode": "The recipient country code field must not be greater than 2 characters."</td><td>The string must be at most 2 characters long.</td></tr><tr><td>"recipientDivisionCategory": "The recipient division category field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"recipientDivisionCategory.{n}": "The recipient division category.{n} field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"recipientDivisionCategory.{n}": "The selected recipient division category.{n} is invalid."</td><td>The value is not among the allowed values for this field.</td></tr><tr><td>"recipientServiceType": "The recipient service type field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"recipientSettlementExternalId": "The recipient settlement external id field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"recipientSettlementId": "The recipient settlement id field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"refs": "The refs field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"refs": "The refs field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"refs": "The refs field must have at least 1 items."</td><td>The array must contain at least 1 item(s).</td></tr><tr><td>"refs": "The refs field must not have more than 100 items."</td><td>The array must contain at most 100 items.</td></tr><tr><td>"refs.{n}": "The refs.{n} field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"refs.{n}": "The refs.{n} field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"refs.{n}": "The refs.{n} field must be a valid UUID."</td><td>The value must be a valid UUID.</td></tr><tr><td>"regionId": "The region id field must be an integer."</td><td>The value must be an integer.</td></tr><tr><td>"registerNumber": "The register number field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"requestId": "The request id field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"reservationId": "The reservation id field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"reservationId": "The reservation id field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"reservationId": "The reservation id field must not be greater than 255 characters."</td><td>The string must be at most 255 characters long.</td></tr><tr><td>"rmsId": "The rms id field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"rmsId": "The rms id field must not be greater than 8 characters."</td><td>The string must be at most 8 characters long.</td></tr><tr><td>"safePurchase": "The safe purchase field must be an integer."</td><td>The value must be an integer.</td></tr><tr><td>"scheduledDeliveryDateFrom": "The scheduled delivery date from field must be a date before or equal to scheduled delivery date to."</td><td>The value must be a date no later than scheduled delivery date to.</td></tr><tr><td>"scheduledDeliveryDateFrom": "The scheduled delivery date from field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"scheduledDeliveryDateFrom": "The scheduled delivery date from field must have a value."</td><td>The field is present but empty — provide a value.</td></tr><tr><td>"scheduledDeliveryDateTo": "The scheduled delivery date to field must be a date after or equal to scheduled delivery date from."</td><td>The value must be a date no earlier than scheduled delivery date from.</td></tr><tr><td>"scheduledDeliveryDateTo": "The scheduled delivery date to field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"scheduledDeliveryDateTo": "The scheduled delivery date to field must have a value."</td><td>The field is present but empty — provide a value.</td></tr><tr><td>"secretToken": "The secret token field format is invalid."</td><td>The value does not match the expected format of the field.</td></tr><tr><td>"secretToken": "The secret token field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"secretToken": "The secret token field must not be greater than 600 characters."</td><td>The string must be at most 600 characters long.</td></tr><tr><td>"secretTokenHeaderName": "The secret token header name field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"sendWarnings": "The send warnings field must be true or false."</td><td>The value must be a boolean: true or false.</td></tr><tr><td>"sender": "The sender field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"sender": "The sender field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"sender.address": "The sender.address field is required when none of sender.division id / sender.address parts / sender.division number are present."</td><td>Required when none of the following fields are provided: sender.divisionId, sender.addressParts, sender.divisionNumber.</td></tr><tr><td>"sender.addressParts": "The sender.address parts field is required when none of sender.division id / sender.address / sender.division number are present."</td><td>Required when none of the following fields are provided: sender.divisionId, sender.address, sender.divisionNumber.</td></tr><tr><td>"sender.companyName": "The sender.company name field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"sender.companyName": "The sender.company name field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"sender.companyName": "The sender.company name field must not be greater than 255 characters."</td><td>The string must be at most 255 characters long.</td></tr><tr><td>"sender.companyTin": "Access to the company is forbidden by API key."</td><td>Access to the specified company is forbidden for this API key. Check the key permissions for the sender company.</td></tr><tr><td>"sender.companyTin": "The sender.company tin field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"sender.companyTin": "The sender.company tin field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"sender.companyTin": "The sender.company tin field must not be greater than 20 characters."</td><td>The string must be at most 20 characters long.</td></tr><tr><td>"sender.countryCode": "The selected sender.country code is invalid."</td><td>The value is not among the allowed values for this field.</td></tr><tr><td>"sender.countryCode": "The sender.country code field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"sender.countryCode": "The sender.country code field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"sender.countryCode": "The sender.country code field must be at least 2 characters."</td><td>The string must be at least 2 characters long.</td></tr><tr><td>"sender.countryCode": "The sender.country code field must not be greater than 2 characters."</td><td>The string must be at most 2 characters long.</td></tr><tr><td>"sender.divisionId": "The sender.division id field is required when none of sender.address parts / sender.address / sender.division number are present."</td><td>Required when none of the following fields are provided: sender.addressParts, sender.address, sender.divisionNumber.</td></tr><tr><td>"sender.divisionId": "The sender.division id must be a valid division ID (numeric ID or external ID)."</td><td>The value must be a valid division identifier (numeric ID or external ID).</td></tr><tr><td>"sender.divisionNumber": "The sender.division number field is required when none of sender.address parts / sender.address / sender.division id are present."</td><td>Required when none of the following fields are provided: sender.addressParts, sender.address, sender.divisionId.</td></tr><tr><td>"sender.email": "The sender.email field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"sender.email": "The sender.email field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"sender.email": "The sender.email field must be a valid email address."</td><td>The value must be a valid email address.</td></tr><tr><td>"sender.email": "The sender.email field must not be greater than 255 characters."</td><td>The string must be at most 255 characters long.</td></tr><tr><td>"sender.eoriCode": "EORI code is incorrect"</td><td>Invalid EORI code.</td></tr><tr><td>"sender.eoriCode": "The sender.eori code field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"sender.eoriCode": "The sender.eori code field must be at least 3 characters."</td><td>The string must be at least 3 characters long.</td></tr><tr><td>"sender.eoriCode": "The sender.eori code field must not be greater than 17 characters."</td><td>The string must be at most 17 characters long.</td></tr><tr><td>"sender.ioss": "IOSSNumber is incorrect"</td><td>Invalid IOSS number.</td></tr><tr><td>"sender.ioss": "The sender.ioss field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"sender.ioss": "The sender.ioss field must be at least 8 characters."</td><td>The string must be at least 8 characters long.</td></tr><tr><td>"sender.ioss": "The sender.ioss field must not be greater than 12 characters."</td><td>The string must be at most 12 characters long.</td></tr><tr><td>"sender.name": "The sender.name field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"sender.name": "The sender.name field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"sender.name": "The sender.name field must not be greater than 255 characters."</td><td>The string must be at most 255 characters long.</td></tr><tr><td>"sender.phone": "The sender.phone field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"sender.phone": "The sender.phone field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"sender.phone": "The sender.phone field must not be greater than 50 characters."</td><td>The string must be at most 50 characters long.</td></tr><tr><td>"sender.registrationAddress": "The sender.registration address field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"sender.registrationAddressParts": "The sender.registration address parts field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"sender.registrationAddressParts": "The sender.registration address parts field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"sender.registrationAddressParts.block": "The sender.registration address parts.block field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"sender.registrationAddressParts.block": "The sender.registration address parts.block field must not be greater than 50 characters."</td><td>The string must be at most 50 characters long.</td></tr><tr><td>"sender.registrationAddressParts.building": "The sender.registration address parts.building field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"sender.registrationAddressParts.building": "The sender.registration address parts.building field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"sender.registrationAddressParts.building": "The sender.registration address parts.building field must not be greater than 50 characters."</td><td>The string must be at most 50 characters long.</td></tr><tr><td>"sender.registrationAddressParts.city": "The sender.registration address parts.city field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"sender.registrationAddressParts.city": "The sender.registration address parts.city field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"sender.registrationAddressParts.city": "The sender.registration address parts.city field must not be greater than 255 characters."</td><td>The string must be at most 255 characters long.</td></tr><tr><td>"sender.registrationAddressParts.flat": "The sender.registration address parts.flat field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"sender.registrationAddressParts.flat": "The sender.registration address parts.flat field must not be greater than 50 characters."</td><td>The string must be at most 50 characters long.</td></tr><tr><td>"sender.registrationAddressParts.postCode": "The sender.registration address parts.post code field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"sender.registrationAddressParts.postCode": "The sender.registration address parts.post code field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"sender.registrationAddressParts.postCode": "The sender.registration address parts.post code field must not be greater than 20 characters."</td><td>The string must be at most 20 characters long.</td></tr><tr><td>"sender.registrationAddressParts.region": "The sender.registration address parts.region field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"sender.registrationAddressParts.region": "The sender.registration address parts.region field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"sender.registrationAddressParts.region": "The sender.registration address parts.region field must not be greater than 255 characters."</td><td>The string must be at most 255 characters long.</td></tr><tr><td>"sender.registrationAddressParts.street": "The sender.registration address parts.street field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"sender.registrationAddressParts.street": "The sender.registration address parts.street field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"sender.registrationAddressParts.street": "The sender.registration address parts.street field must not be greater than 255 characters."</td><td>The string must be at most 255 characters long.</td></tr><tr><td>"sender.settlementId": "The sender.settlement id field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"sender.settlementId": "The sender.settlement id field must be an integer."</td><td>The value must be an integer.</td></tr><tr><td>"sender.settlementId": "The sender.settlement id field must be greater than 0."</td><td>The value must be greater than 0.</td></tr><tr><td>"senderArchive": "The sender archive field must be true or false."</td><td>The value must be a boolean: true or false.</td></tr><tr><td>"senderCompanyTins": "The sender company tins field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"senderCompanyTins.{n}": "The sender company tins.{n} field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"senderCountryCode": "The sender country code field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"senderCountryCode": "The sender country code field must be at least 2 characters."</td><td>The string must be at least 2 characters long.</td></tr><tr><td>"senderCountryCode": "The sender country code field must not be greater than 2 characters."</td><td>The string must be at most 2 characters long.</td></tr><tr><td>"senderDivisionCategory": "The sender division category field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"senderDivisionCategory.{n}": "The selected sender division category.{n} is invalid."</td><td>The value is not among the allowed values for this field.</td></tr><tr><td>"senderDivisionCategory.{n}": "The sender division category.{n} field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"senderDivisionId": "The sender division id field must be an integer."</td><td>The value must be an integer.</td></tr><tr><td>"senderDivisionId": "The sender division id field must be at least 1."</td><td>The value must be at least 1.</td></tr><tr><td>"senderPhone": "The sender phone field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"senderPhones": "The sender phones field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"senderPhones": "The sender phones field must have at least 1 items."</td><td>The array must contain at least 1 item(s).</td></tr><tr><td>"senderServiceType": "The sender service type field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"senderSettlementExternalId": "The sender settlement external id field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"senderSettlementId": "The sender settlement id field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"serviceAnnullingAmount": "The service annulling amount field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"serviceCodes": "The service codes field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"serviceCodes.{n}": "The service codes.{n} field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"service_id": "The service id field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"service_id": "The service id field must be a valid UUID."</td><td>The value must be a valid UUID.</td></tr><tr><td>"services": "The services field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"services.{n}": "The services.{n} field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"services.{n}": "The services.{n} field must have a value."</td><td>The field is present but empty — provide a value.</td></tr><tr><td>"services.{n}.additionalParameters": "The services.{n}.additional parameters field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"services.{n}.additionalParameters": "The services.{n}.additionalParameters field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"services.{n}.additionalParameters.cod.bankAccount.commissionPayer": "The selected services.{n}.additional parameters.cod.bank account.commission payer is invalid."</td><td>The value is not among the allowed values for this field.</td></tr><tr><td>"services.{n}.additionalParameters.cod.bankAccount.commissionPayer": "The services.{n}.additional parameters.cod.bank account.commission payer field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"services.{n}.additionalParameters.height": "The services.{n}.additionalParameters.height field must be a number."</td><td>The value must be a number (decimals allowed).</td></tr><tr><td>"services.{n}.additionalParameters.length": "The services.{n}.additionalParameters.length field must be a number."</td><td>The value must be a number (decimals allowed).</td></tr><tr><td>"services.{n}.additionalParameters.parcelDescription": "The services.{n}.additionalParameters.parcelDescription field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"services.{n}.additionalParameters.parcelsAmount": "The services.{n}.additionalParameters.parcelsAmount field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"services.{n}.additionalParameters.parcelsAmount": "The services.{n}.additionalParameters.parcelsAmount field must be a number."</td><td>The value must be a number (decimals allowed).</td></tr><tr><td>"services.{n}.additionalParameters.totalActualWeight": "The services.{n}.additionalParameters.totalActualWeight field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"services.{n}.additionalParameters.totalActualWeight": "The services.{n}.additionalParameters.totalActualWeight field must be a number."</td><td>The value must be a number (decimals allowed).</td></tr><tr><td>"services.{n}.additionalParameters.totalVolumetricWeight": "The services.{n}.additionalParameters.totalVolumetricWeight field must be a number."</td><td>The value must be a number (decimals allowed).</td></tr><tr><td>"services.{n}.additionalParameters.width": "The services.{n}.additionalParameters.width field must be a number."</td><td>The value must be a number (decimals allowed).</td></tr><tr><td>"services.{n}.amount": "The services.{n}.amount field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"services.{n}.amount": "The services.{n}.amount field must be a number."</td><td>The value must be a number (decimals allowed).</td></tr><tr><td>"services.{n}.amount": "The services.{n}.amount field must be at least 0."</td><td>The value must be at least 0.</td></tr><tr><td>"services.{n}.amount": "The services.{n}.amount field must be at least 1."</td><td>The value must be at least 1.</td></tr><tr><td>"services.{n}.amount": "The services.{n}.amount field must be greater than 0."</td><td>The value must be greater than 0.</td></tr><tr><td>"services.{n}.contractNumber": "The services.{n}.contract number field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"services.{n}.contractNumber": "The services.{n}.contract number field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"services.{n}.contractNumber": "The services.{n}.contract number field must be at least 2 characters."</td><td>The string must be at least 2 characters long.</td></tr><tr><td>"services.{n}.contractNumber": "The services.{n}.contract number field must not be greater than 20 characters."</td><td>The string must be at most 20 characters long.</td></tr><tr><td>"services.{n}.deliveryDate": "The services.{n}.delivery date field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"services.{n}.deliveryTime": "The services.{n}.delivery time field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"services.{n}.payerType": "The selected services.{n}.payer type is invalid."</td><td>The value is not among the allowed values for this field.</td></tr><tr><td>"services.{n}.payerType": "The services.{n}.payer type field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"services.{n}.payerType": "The services.{n}.payer type field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"services.{n}.serviceCode": "The services.{n}.service code field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"services.{n}.serviceCode": "The services.{n}.service code field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"services.{n}.serviceId": "The services.{n}.service id field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"services.{n}.serviceName": "The services.{n}.service name field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"services.{n}.shipmentParcelRowNumber": "The services.{n}.shipment parcel row number field must be an integer."</td><td>The value must be an integer.</td></tr><tr><td>"services.{n}.shipmentParcelRowNumber": "The services.{n}.shipment parcel row number field must be greater than 0."</td><td>The value must be greater than 0.</td></tr><tr><td>"settlementId": "The settlement id field must be an integer."</td><td>The value must be an integer.</td></tr><tr><td>"settlementIds": "The settlement ids field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"settlementIds.{n}": "The settlement ids.{n} field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"settlementIds.{n}": "The settlementIds.{n} field must be an integer."</td><td>The value must be an integer.</td></tr><tr><td>"settlementIds.{n}": "The settlementIds.{n} field must be greater than 0."</td><td>The value must be greater than 0.</td></tr><tr><td>"shipmentId": "The shipment id field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"shipmentId": "The shipment id field must be an integer."</td><td>The value must be an integer.</td></tr><tr><td>"shipmentId": "The shipment id field must be at least 1."</td><td>The value must be at least 1.</td></tr><tr><td>"shipmentIds": "The shipment ids field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"shipmentIds.{n}": "The shipment ids.{n} field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"shipmentNumber": "The shipment number field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"shipmentNumber": "The shipment number field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"shipmentNumber.{n}": "The shipment number.{n} field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"shipmentTypes": "The selected shipment types is invalid."</td><td>The value is not among the allowed values for this field.</td></tr><tr><td>"shipmentTypes": "The shipment types field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"shipments": "Shipments must be an array."</td><td>The list of shipments must be an array.</td></tr><tr><td>"shipments": "Shipments must be either all IDs or all numbers."</td><td>The list of shipments must contain either only identifiers or only numbers — they cannot be mixed.</td></tr><tr><td>"shipments": "Shipments must not be empty."</td><td>The list of shipments must not be empty.</td></tr><tr><td>"shipments": "The shipments field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"shipments": "The shipments field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"shipments": "The shipments field must have at least 1 item."</td><td>The array must contain at least 1 item(s).</td></tr><tr><td>"shipments": "The shipments field must not have more than 255 items."</td><td>The array must contain at most 255 items.</td></tr><tr><td>"shipments": "unavailable_operation"</td><td>The operation is not available for the current set of shipments.</td></tr><tr><td>"shipments.{n}": "The shipments.{n} field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"shipments.{n}": "The shipments.{n} field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"shipments.{n}.shipmentId": "The shipments.{n}.shipment id field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"shipments.{n}.shipmentId": "The shipments.{n}.shipment id field must be an integer."</td><td>The value must be an integer.</td></tr><tr><td>"shipments.{n}.shipmentId": "The shipments.{n}.shipment id field must be at least 1."</td><td>The value must be at least 1.</td></tr><tr><td>"size": "The size field must be an integer."</td><td>The value must be an integer.</td></tr><tr><td>"size": "The size field must be at least 1."</td><td>The value must be at least 1.</td></tr><tr><td>"sort": "The sort field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"sort": "The sort field must have a value."</td><td>The field is present but empty — provide a value.</td></tr><tr><td>"source": "The source field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"source": "The source field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"sources": "The sources field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"sources.{n}": "The selected sources.{n} is invalid."</td><td>The value is not among the allowed values for this field.</td></tr><tr><td>"sources.{n}": "The sources.{n} field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"state": "The selected state is invalid."</td><td>The value is not among the allowed values for this field.</td></tr><tr><td>"state": "The state field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"state": "The state field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"statements.{n}": "The statements.{n} field must be a file of type: jpeg, jpg, bmp, png, gif, svg, pdf, doc, docx, xlsx, pptx, csv, xlsb, xltx, xls, xlt, xml."</td><td>The file must be one of the following types: jpeg, jpg, bmp, png, gif, svg, pdf, doc, docx, xlsx, pptx, csv, xlsb, xltx, xls, xlt, xml.</td></tr><tr><td>"statements.{n}": "The statements.{n} field must not be greater than 4096 kilobytes."</td><td>The file size must not exceed 4096 KB.</td></tr><tr><td>"status": "The selected status is invalid."</td><td>The value is not among the allowed values for this field.</td></tr><tr><td>"status": "The status field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"status": "The status field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"statuses": "The statuses field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"statuses.{n}": "The selected statuses.{n} is invalid."</td><td>The value is not among the allowed values for this field.</td></tr><tr><td>"statuses.{n}": "The statuses.{n} field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"subcategory": "The subcategory field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"subcategory": "The subcategory field must not be greater than 255 characters."</td><td>The string must be at most 255 characters long.</td></tr><tr><td>"textSearch": "The text search field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"textSearch": "The text search field must be at least 1 characters."</td><td>The string must be at least 1 characters long.</td></tr><tr><td>"textSearch": "The text search field must be at least 3 characters."</td><td>The string must be at least 3 characters long.</td></tr><tr><td>"textSearch": "The text search field must not be greater than 255 characters."</td><td>The string must be at most 255 characters long.</td></tr><tr><td>"thirdPartyPayerCodes": "The third party payer codes field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"thirdPartyPayerCodes.{n}": "The thirdPartyPayerCodes.{n} field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"thirdPartyPayerCodes.{n}": "The thirdPartyPayerCodes.{n} field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"thirdPartyPayerCodesNotEmpty": "The third party payer codes not empty field must be true or false."</td><td>The value must be a boolean: true or false.</td></tr><tr><td>"timeIntervalEnd": "The time interval end field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"timeIntervalStart": "The time interval start field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"topRightLatitude": "The top right latitude field is required when topRightLongitude / bottomLeftLatitude / bottomLeftLongitude is present."</td><td>Required when any of the following fields is provided: topRightLongitude, bottomLeftLatitude, bottomLeftLongitude.</td></tr><tr><td>"topRightLongitude": "The top right longitude field is required when topRightLatitude / bottomLeftLatitude / bottomLeftLongitude is present."</td><td>Required when any of the following fields is provided: topRightLatitude, bottomLeftLatitude, bottomLeftLongitude.</td></tr><tr><td>"totalInsuranceCostFrom": "The total insurance cost from field must be a number."</td><td>The value must be a number (decimals allowed).</td></tr><tr><td>"totalInsuranceCostFrom": "The total insurance cost from field must be at least 0.01."</td><td>The value must be at least 0.01.</td></tr><tr><td>"totalInsuranceCostFrom": "The total insurance cost from field must be less than or equal to total insurance cost to."</td><td>The value must be no greater than total insurance cost to.</td></tr><tr><td>"totalInsuranceCostFrom": "The total insurance cost from field must have a value."</td><td>The field is present but empty — provide a value.</td></tr><tr><td>"totalInsuranceCostFrom": "The total insurance cost from field must not be greater than 10000000."</td><td>The value must be at most 10000000.</td></tr><tr><td>"totalInsuranceCostTo": "The total insurance cost to field must be a number."</td><td>The value must be a number (decimals allowed).</td></tr><tr><td>"totalInsuranceCostTo": "The total insurance cost to field must be at least 0.01."</td><td>The value must be at least 0.01.</td></tr><tr><td>"totalInsuranceCostTo": "The total insurance cost to field must be greater than or equal to total insurance cost from."</td><td>The value must be no less than total insurance cost from.</td></tr><tr><td>"totalInsuranceCostTo": "The total insurance cost to field must have a value."</td><td>The field is present but empty — provide a value.</td></tr><tr><td>"totalInsuranceCostTo": "The total insurance cost to field must not be greater than 10000000."</td><td>The value must be at most 10000000.</td></tr><tr><td>"totalStrategy": "The selected total strategy is invalid."</td><td>The value is not among the allowed values for this field.</td></tr><tr><td>"totalWeightFrom": "The total weight from field must be a number."</td><td>The value must be a number (decimals allowed).</td></tr><tr><td>"totalWeightFrom": "The total weight from field must be at least 0.01."</td><td>The value must be at least 0.01.</td></tr><tr><td>"totalWeightFrom": "The total weight from field must be less than or equal to total weight to."</td><td>The value must be no greater than total weight to.</td></tr><tr><td>"totalWeightFrom": "The total weight from field must have a value."</td><td>The field is present but empty — provide a value.</td></tr><tr><td>"totalWeightFrom": "The total weight from field must not be greater than 100000."</td><td>The value must be at most 100000.</td></tr><tr><td>"totalWeightTo": "The total weight to field must be a number."</td><td>The value must be a number (decimals allowed).</td></tr><tr><td>"totalWeightTo": "The total weight to field must be at least 0.01."</td><td>The value must be at least 0.01.</td></tr><tr><td>"totalWeightTo": "The total weight to field must be greater than or equal to total weight from."</td><td>The value must be no less than total weight from.</td></tr><tr><td>"totalWeightTo": "The total weight to field must have a value."</td><td>The field is present but empty — provide a value.</td></tr><tr><td>"totalWeightTo": "The total weight to field must not be greater than 100000."</td><td>The value must be at most 100000.</td></tr><tr><td>"trackingDateFrom": "The tracking date from field is required when none of ids / numbers are present."</td><td>Required when none of the following fields are provided: ids, numbers.</td></tr><tr><td>"trackingDateFrom": "The tracking date from field must be a valid date."</td><td>The value must be a valid date.</td></tr><tr><td>"trackingDateTo": "The tracking date to field is required when none of ids / numbers are present."</td><td>Required when none of the following fields are provided: ids, numbers.</td></tr><tr><td>"trackingDateTo": "The tracking date to field must be a valid date."</td><td>The value must be a valid date.</td></tr><tr><td>"trackingStatusCode": "The tracking status code field must be an integer."</td><td>The value must be an integer.</td></tr><tr><td>"trackingStatusCode": "The tracking status code field must be at least 1."</td><td>The value must be at least 1.</td></tr><tr><td>"trackingStatusCodes": "The tracking status codes field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"trackingStatusCodes.{n}": "The tracking status codes.{n} field must be an integer."</td><td>The value must be an integer.</td></tr><tr><td>"trackingStatusCodes.{n}": "The tracking status codes.{n} field must be at least 1."</td><td>The value must be at least 1.</td></tr><tr><td>"trackingStatusCodes.{n}": "The tracking status codes.{n} field must have a value."</td><td>The field is present but empty — provide a value.</td></tr><tr><td>"trademarkUrl": "The trademark url field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"type": "The selected type is invalid."</td><td>The value is not among the allowed values for this field.</td></tr><tr><td>"type": "The type field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"type": "The type field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"types": "The selected types is invalid."</td><td>The value is not among the allowed values for this field.</td></tr><tr><td>"types": "The types field must be an array."</td><td>The value must be an array.</td></tr><tr><td>"types.{n}": "The types.{n} field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"types.{n}": "The types.{n} field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"updatePartial": "The update partial field must be true or false."</td><td>The value must be a boolean: true or false.</td></tr><tr><td>"url": "The url field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"url": "The url field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"useModificationsRecipientPhone": "The use modifications recipient phone field must be true or false."</td><td>The value must be a boolean: true or false.</td></tr><tr><td>"uuid": "The uuid field is required."</td><td>Required field — must be present in the request.</td></tr><tr><td>"uuid": "The uuid field must be a valid UUID."</td><td>The value must be a valid UUID.</td></tr><tr><td>"verifiedWithDiia": "The verified with diia field must be true or false."</td><td>The value must be a boolean: true or false.</td></tr><tr><td>"warningEmail": "The warning email field must be a string."</td><td>The value must be a string.</td></tr><tr><td>"withAllParcels": "The with all parcels field must be true or false."</td><td>The value must be a boolean: true or false.</td></tr><tr><td>"withExternalProviders": "The with external providers field must be true or false."</td><td>The value must be a boolean: true or false.</td></tr><tr><td>"withShipmentsInfo": "The with shipments info field must be true or false."</td><td>The value must be a boolean: true or false.</td></tr><tr><td>"shipment_not_found"</td><td>The shipment was not found for the specified number while retrieving a claim. Check that the shipment number is correct.</td></tr><tr><td>"The conditions for creating an international light return are not met"</td><td><p>Possible reasons: </p><ul><li>Light Return is not allowed for the shipment; </li><li>The period for issuing a Light Return has expired; </li><li>A return has already been created for the parent shipment; </li><li>The parent shipment has not been closed yet.</li></ul></td></tr><tr><td>"company": "not_found"</td><td>Company not found or could not be verified using the provided information.</td></tr><tr><td>"App\Dictionary\Domain\Contract\ContractEntity.number": "validation.exists"</td><td>Mentioned cotract number doesn’t exist, please check your data or contact support / your sales manager</td></tr></tbody></table>

### Error 429

<table><thead><tr><th width="299.6666259765625">Message</th><th width="445">Description</th></tr></thead><tbody><tr><td>"Too Many Attempts."</td><td>The per-minute request limit has been exceeded. Reduce the request rate and retry later.</td></tr></tbody></table>

### Error 502

<table><thead><tr><th width="300.3333740234375">Message</th><th width="445">Description</th></tr></thead><tbody><tr><td>"timeout error"</td><td>A temporary unavailability or timeout of an internal service. Try again later.</td></tr></tbody></table>


# Page 1

## Create Shipment

> Create a Shipment Document. test test test This API method is engineered to streamline the process of generating a shipping document for logistics operations through Nova Post. By submitting key data, such as the originating and destination addresses for the shipment, users can effortlessly create a document detailing the transportation of goods. This method includes optional fields for customs authorities, accommodating shipments that cross borders. The API response will provide the unique identifier of the generated document along with other relevant information.\
> \
> \*\*Settlement validation rules\*\*: \</br>\
> For shipments \*\*to or from Moldova and Ukraine\*\*, the settlement (city) must be successfully resolved. \</br>\
> If the provided city value cannot be matched to a settlement, the request will fail with the error: \`validation.condition.recipient\_settlement\_not\_defined\`.\
> \
> Additional requirement:\
> For shipments that require customs clearance (imports), the client invoice must be uploaded as a file through the \[POST /shipments/uploads/{id}]\(<https://api.novapost.com/developers/index.html#post-/shipments/uploads/-id->) method (after shipment creation).\</br>\
> \
> 🔹\*\*Description of control elements:\*\*\
> \
> \*\*SCHEMA\*\*\</br>\
> Displays the full technical structure of the request or response, including field names, data types, required fields, allowed values, and validation rules.\
> \- \*\*Single line description\*\*\</br>\
> &#x20; A description that fits into a single line; any text that does not fit remains hidden.\
> \- \*\*Multiline description\*\*\</br>\
> &#x20; An expanded description that displays more than one line of text.\
> \
> \*\*EXAMPLE\*\*\</br>\
> Shows a ready-made sample JSON with correctly formatted values to demonstrate how a valid request or response should look.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Shipments"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.pl/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}},"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Validation":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Time-out":{"description":"Connection time-out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}}},"paths":{"/shipments":{"post":{"tags":["Shipments"],"description":"Create a Shipment Document. test test test This API method is engineered to streamline the process of generating a shipping document for logistics operations through Nova Post. By submitting key data, such as the originating and destination addresses for the shipment, users can effortlessly create a document detailing the transportation of goods. This method includes optional fields for customs authorities, accommodating shipments that cross borders. The API response will provide the unique identifier of the generated document along with other relevant information.\n\n**Settlement validation rules**: </br>\nFor shipments **to or from Moldova and Ukraine**, the settlement (city) must be successfully resolved. </br>\nIf the provided city value cannot be matched to a settlement, the request will fail with the error: `validation.condition.recipient_settlement_not_defined`.\n\nAdditional requirement:\nFor shipments that require customs clearance (imports), the client invoice must be uploaded as a file through the [POST /shipments/uploads/{id}](https://api.novapost.com/developers/index.html#post-/shipments/uploads/-id-) method (after shipment creation).</br>\n\n🔹**Description of control elements:**\n\n**SCHEMA**</br>\nDisplays the full technical structure of the request or response, including field names, data types, required fields, allowed values, and validation rules.\n- **Single line description**</br>\n  A description that fits into a single line; any text that does not fit remains hidden.\n- **Multiline description**</br>\n  An expanded description that displays more than one line of text.\n\n**EXAMPLE**</br>\nShows a ready-made sample JSON with correctly formatted values to demonstrate how a valid request or response should look.\n","requestBody":{"description":"Optional description in *Markdown*","required":true,"content":{"application/json":{"schema":{"type":"object","required":["sender"],"properties":{"status":{"type":"string","description":"Signifies the current status of the transportation document, tracking its progress through the shipping lifecycle. Statuses detail each critical phase:\n  - Draft: The document is in its preliminary stage, not yet finalized.\n  - Accepted: Reviewed and accepted, the document is ready for the next steps.\n  - Issued: The document has been completed and is ready for shipping.\n  - ReadyToShip: Indicates that the shipment is prepared for transport following the creation of the express waybill. Only this value can be specified when creating a shipment.\n  - Deleted: The document has been deleted from the system.\n  - Returned: The shipment has been returned to its sender.\n  - Utilized: Indicates that the physical goods associated with the transportation document have been disposed of or destroyed and the document is closed.\n","enum":["ReadyToShip"]},"clientOrder":{"type":"string","description":"Represents all potential order identifiers associated with the shipment. These identifiers are set by the customer for internal tracking purposes and are crucial for tracking the shipment throughout its journey. All entered values can be tracked in the shipment's tracking system.","maxLength":50},"note":{"type":"string","description":"Any additional information or special instructions that pertain to the order can be included here. This could encompass delivery instructions, special handling requests, or other pertinent details that facilitate the handling and processing of the shipment.","maxLength":255},"deliveryType":{"type":"string","description":"Defines the tariff type to be applied to the shipment during creation or update. \n\n  - `standard`: Standard international delivery tariff.\n  - `economy`: Economy international delivery tariff.\n  - `express`: Express international delivery tariff.\n\nIf the field is not provided, the tariff type is determined automatically according to current business rules, and the existing shipment creation behaviour remains unchanged.\n\n**🔹This field is optional.**\n"},"payerType*":{"type":"string","description":"Identifies who is responsible for the payment of delivery services. The payer type determines which party bears the cost:\n  - Sender: The party sending the goods pays for the delivery.\n  - Recipient: The party receiving the goods is responsible for the delivery cost.\n  - ThirdPerson: A third party, not the sender or recipient, pays for the delivery services. When selecting 'ThirdPerson', the field 'payerContractNumber' must be populated with the contract number of the paying party. For more detailed information, refer to the article on [Payment for Delivery Services via Nova Post API](https://api-portal.novapost.com/en/api-methods/payment/).\nThis field is also referenced when generating an invoice.\n\n**🔻This field is required**\n","enum":["Sender","Recipient","ThirdPerson"]},"payerContractNumber":{"type":"string","description":"This field is required in the following cases:\n\n- When the `payerType` is set to `ThirdPerson`. It must contain the payer's contract number. For clients from Ukraine, it is also acceptable to provide the tax identification number (EDRPOU) instead of the contract number.\n- When the `payerType` is set to `Sender` or `Recipient` and a non-cash payment method is used.\n\nIf this field is not provided in the cases described above, the payment method will automatically default to cash.\n\nEnsure that the provided information is accurate, as it is essential for correct payment processing.\n\nFor more detailed information, refer to the article on [Payment for Delivery Services via Nova Post API](https://api-portal.novapost.com/en/api-methods/payment/).\n","minLength":2,"maxLength":20,"nullable":true},"services":{"type":"array","description":"Contains information about additional services for the shipment.","properties":{"shipmentParcelRowNumber":{"type":"integer","nullable":true,"description":"Specifies the row number of the parcel to which the service is applied.\nThe value must correspond to the `rowNumber` of an existing parcel in the `parcels` array.\n\nFor services applied to the **entire shipment** (for example, `ExpBackwardGoods`), this field must be set to `null`.\n"},"serviceCode":{"type":"string","description":"The code indicating the service.\n\n**A list of available codes and descriptions of their meanings:**\n \n - `COD` — The Cash on Delivery (COD) service allows the recipient to pay for the goods directly upon receiving them, without the need for prepayment. The sender can add this service to the shipment, and the recipient has the option to pay for the goods upon delivery and inspect them before making the payment, subject to payment method restrictions established for specific countries.\n Available directions:\n\n - Poland → Ukraine\n - Czech Republic → Ukraine\n - Germany → Ukraine\n - Slovakia → Ukraine\n - Czech Republic → Czech Republic\n - Poland → Poland\n - Germany → Germany\n - Romania → Moldova\n\n🔸**The COD service is planned to expand to other countries and delivery directions in the future, both for international shipments and within European countries.**\n\n- `ExpBackwardGoods` — Enables return delivery option for parent shipment\n\n- `ExpBackwardCreditDoc` — Enables return delivery of signed documents for domestic document shipments within Moldova. The service is available only for legal entities and only for shipments with the **Documents** type. The return shipment is created as a separate document delivery (by courier or operator), and the payer is always the Recipient under a non-cash contract. Not available for Parcel Locker and PUDO service channels. In the first iteration, the service is enabled only for selected legal entities.\n\n🔹**This field is required for the `services` group.**\n"},"serviceName":{"type":"string","description":"Name of the service.\n\nAllowed values include:\n- `PaymentControl` — Payment control service.\n- `MoneyTransfer` — Money transfer service.\n- Other service types available within the `services` group.\n\n🔹**This field is required within the `services` group.**\n"},"serviceId":{"type":"string","description":"Unique identifier (reference ID) of the selected service.\n\nThis value must correspond to the service reference returned by the system.\nWhen creating or updating a shipment, the exact `serviceId` provided in the service reference response must be copied and used without modification.\n\n🔹**This field is required within the `services` group.**\n"},"amount":{"type":"number","description":"The total amount the recipient must pay under the COD service.\n\n🔹**This field is required for the `services` group.**\n"},"contractNumber":{"type":"string","nullable":true,"description":"Contract number of the payer responsible for the selected service.\nThis parameter is used to identify the contractual agreement under which the service is paid.\n\nThe field is required when the service payer is a **third party** or when non-cash payment terms are applied. If not provided, the payment may be processed according to default billing rules.\n"},"payerType":{"type":"string","description":"Determines who is responsible for paying for the service. The payer type determines which party bears the costs:\n\n- `Recipient` — The only allowed value for the COD service.\n- `Sender`, `Recipient` — Allowed payer values for the ExpBackwardGoods service.\n- `Sender`, `Recipient`, `ThirdPerson` — Allowed payer values for the BackwardDelGoods service.\n\n**🔻This field is required**\n"},"additionalParameters":{"type":"string","description":"Additional parameters for the service.","properties":{"cod":{"type":"string","description":"Additional parameters for configuring COD.\n\n🔹**These parameters are mandatory and required only for the COD service**\n","properties":{"bankAccount":{"type":"object","description":"Information describing the bank account details to which the funds will be transferred. Includes the transfer amount, transaction currency, account identifiers, and the party responsible for paying the service fee.","properties":{"amount":{"type":"number","description":"The amount that will be transferred to the sender’s account after payment. Specifies the amount the recipient must pay upon receipt. Automatic currency conversion is possible depending on the sender's or recipient's country.\n\n🔹**This field is required for the `services.additionalParameters.cod.bankAccount` field group.**\n"},"currencyCode":{"type":"string","description":"The currency for the transaction, defined by the sender’s contract.\nSpecified according to the ISO 4217 standard.\n\n🔸**By default, the currency of the sender’s country is used, but it is possible to set the currency manually (Feature under development)/**\n**Pattern:** ^[A-Z]{3}$\n"},"bankAccountId":{"type":"string","description":"Tax identification number of an individual or a legal entity, used for its unique identification in the system and for verifying the existence of an active contract and the availability of financial services. The same as the value passed in the `companyTin` field.\n\n🔹**This field is required for the `services.additionalParameters.cod.bankAccount` field group.**\n\n🔸**Must contain the tax identification number or equivalent identifier (EDRPOU, TIN, NIP).**\n"},"bankAccountName":{"type":"string","description":"IBAN\n\n🔹**This field is required for the `services.additionalParameters.cod.bankAccount` field group.**\n\n🔸**Must contain the full account number in IBAN format.**\n"},"description":{"type":"string","description":"Additional description of the payment details.\n"},"commissionPayer":{"type":"string","description":"Specifies the party responsible for paying the commission: \n\n- `Recipient`\n- `Sender`\n\n🔹**This field is required for the `services.additionalParameters.cod.bankAccount` field group.**\n"}}}}},"backwardDelivery":{"type":"array","description":"Additional parameters for configuring return delivery.\n\n🔹**These parameters are mandatory and required only for the ExpBackwardGoods service**\n","items":{"type":"object","properties":{"description":{"type":"string","description":"Description of the goods to be returned.\nThis value is used for informational and operational purposes during the return delivery process.\n"}}}}}}}},"invoice":{"type":"object","description":"This object presents the necessary data for customs authorities to process the consignment efficiently, including the assessment of duties and taxes, and to confirm adherence to import/export regulations. The structured format of the invoice ensures that all pertinent information is easily accessible and clear, facilitating a smoother transit across borders.\n\nUpdated logic for invoice value handling.\nClients must now send only two parameters in the invoice object:\n - `cost` — total declared value of the invoice\n - `currency` — currency code of the invoice\n\n**🔸It encapsulates the invoice details, which are required for international shipments undergoing customs clearance.**\n","properties":{"customerNumber":{"type":"string","description":"Unique identifier/number of the invoice accompanying the goods in the shipment, generated directly by the client. It is used for customs processing (export and import clearance) because it ensures a clear link between the goods in the shipment and their accompanying documentation, including value, origin, and other necessary information for customs clearance.\n\nIf a client invoice exists in the shipment but its information is missing—specifically, its number—the shipment processing in the information system will be halted, the customs clearance period will be extended, and in the worst case, customs authorities may refuse clearance and initiate a return to the country of export.\n","maxLength":50,"nullable":true},"customerCreatedAt":{"type":"string","format":"date-time","description":"You must provide the date specified in the invoice accompanying the shipment.\nIf the date is not present in the client document, the shipment creation date may be used.\n\n**🔹This field is required if the `invoice.customerNumber` field is filled in.**\n","pattern":"^20[0-9]{2}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{6}Z$"},"type":{"type":"string","description":"Type of client invoice accompanying the shipment and used for customs declaration.\nThis field must reflect the actual type of document enclosed in the parcel.\nAvailable values:\n\n- `Invoice` — commercial invoice for shipments of a commercial nature\n- `ProformaInvoice` — proforma invoice for shipments of a non-commercial nature\n\n**🔹This field is required if the `invoice.customerNumber` field is filled in.**\n","enum":["Invoice","ProformaInvoice"]},"incoterm":{"type":"string","description":"Specifies the trade terms for the shipping agreement between the buyer and seller, based on selected standards from the Incoterms® rules. These terms define the allocation of shipping costs, insurance, customs duties, and the distribution of risk. Only a limited subset of Incoterms® is available for use:\n  - DAP (Delivered at Place) - The recipient is responsible for import customs clearance, duties, and taxes.\n  - DDP (Delivered Duty Paid) - The sender is responsible for import customs clearance and for paying all applicable duties and taxes.\n\n  **🔹This field is required for shipments crossing the EU border or going outside the EU.**\n","enum":["DAP","DDP"]},"exportReason":{"type":"string","description":"Specifies the general reason for exporting items, which is required for customs and other regulatory bodies. This classification helps in understanding the type of shipment without getting into specifics. It's used to categorize shipments at a high level for smoother processing through customs. The available options are:\n  - ForPersonalPurposes: Items are for personal use or gifts.\n  - Selling: Items are meant for sale.\n  - Repair: Items being sent for repair.\n  - Return: Items are being returned to the sender or manufacturer.\n  - Other: Any reason not covered by the other options.\n\n**🔹This field is required for shipments crossing the EU border or going outside the EU.**\n","enum":["ForPersonalPurposes","Selling","Repair","Return","Other"]},"cost":{"type":"number","description":"Total declared invoice value in the original currency, which must equal the sum of all invoice items calculated as **(amount × cost)** for each item. Used for customs and shipment declarations.\n\n**🔸If the provided `cost` value does not equal the sum of the `cost` values in the `items` array, it will be automatically recalculated by the system on our side.**\n\n**🔸Values are validated for decimal precision, and digits beyond two decimal places are ignored.**\n\n**🔹This field is required for shipments crossing the EU border or going outside the EU.**\n","minimum":0,"maximum":9999999.99},"currency":{"type":"string","description":"ISO 4217 currency code of the invoice. All items in the invoice must use the same currency.\n\n**🔹This field is required for shipments crossing the EU border or going outside the EU.**\n","pattern":"^[A-Z]{3}$"},"payerFeesCustoms":{"type":"string","description":"Specifies who is responsible for paying for customs services. The parameter determines which party bears the costs:\n\n  - Sender: The party sending the goods pays for the customs duties.\n  - Recipient: The party receiving the goods is responsible for the customs duties costs.\n  - ThirdPerson: A third party can only pay for customs services if this is permitted and the payer for delivery services is also a third party.\n\nThe default value is **\"Recipient\"**.</br>\nThis value will also be applied automatically if the parcel exceeds the maximum allowed value (in the recipient country’s currency) for which the sender is permitted to pay customs duties.\n\n**🔹This parameter is required and valid only for the UA-EU direction.**\n","enum":["Sender","Recipient","ThirdPerson"]},"items":{"type":"array","description":"A detailed list of goods being shipped, including required descriptions and values, essential for customs declarations and assessing duties.\n\n**Logic:** If the items block is provided, the system checks whether the total sum of all (`items.cost` × `items.amount`) matches the `invoice.cost` value. If not — the system updates `invoice.cost` to equal the sum of all items.\n\n**🔸It is required to provide this information for each individual good in the shipment in the form of an array.**\n","items":{"type":"object","properties":{"id":{"type":"string","description":"A unique identifier for each item within the shipment.\n\n**🔹This field is optional.**\n"},"hsCode":{"type":"string","description":"The Harmonized System code for each item, a standardized numerical method of classifying traded products.\n  This field is required for international shipments that pass through customs clearance. You can obtain the valid `hsCode` from the Cargo Classifiers (UKT ZED) dictionary.\n  Validation rules:\n  - **If the sender or recipient country is Moldova (MD) or Canada (CA):**\n    - The `hsCode` must consist of exactly 10 numeric characters.\n    - If the input is longer than 10 digits, it will be **truncated** on the right.\n    - If it contains fewer than 10 digits - validation error.\n  - **For all other countries:**\n    - The `hsCode` must contain **between 8 and 10 numeric characters** (inclusive).\n    - If fewer than 8 digits – validation error.\n  - **All non-digit characters will be stripped automatically before validation.** \n  - **If the value of the `hsCode` field is `210690` or `630900`, the following conditions must be met:**\n    - The `measurementCode` must be set to `kg`.\n    - Each item with this `hsCode` must be unique — the invoice must not contain more than one item with code `210690` or `630900`.\n    - The amount value must not exceed 10.\n\n**🔹This field is required for shipments crossing the EU border or going outside the EU.**\n","maxLength":255,"nullable":true},"name":{"type":"string","description":"Represents the item's name in the local language, offering an accurate description for customs and logistical planning. The name should correspond with terminologies found in the Cargo Classifiers (UKT ZED) dictionary, ensuring compliance with standard classification codes. This detailed description aids in precise item identification during the customs clearance process.\nThis field supports Unicode encoding, permitting the inclusion of special characters and symbols using the \\uXXXX format. This capability allows for precise representation of item names in languages that incorporate non-Latin characters, enhancing clarity and understanding across diverse regulatory environments.\n\n**🔹This field is required for shipments crossing the EU border or going outside the EU.**\n","maxLength":512},"nameEng":{"type":"string","description":"Specifies the item's name in English, critical for ensuring that the product is identifiable and understandable across international trade and logistics channels. The English name simplifies communication and documentation processes when dealing with international partners and authorities, aiding in the seamless facilitation of global shipments.\nSimilar to the 'name' field, this parameter also supports Unicode encoding. Using the \\uXXXX format, it accommodates the accurate rendering of any special characters necessary for the correct representation of the item's name in English.\n\n**🔹This field is required for shipments crossing the EU border or going outside the EU.**\n","maxLength":512},"material":{"type":"string","description":"The primary material from which the item is made, important for customs declarations and potential restrictions.\n\n **🔸If this field is not provided, the default value will be applied.**\n","maxLength":50},"materialEng":{"type":"string","description":"The description of the item's material in English, aiding in the universal understanding of the product's composition.\n\n**🔸If this field is not provided, the default value will be applied.**\n","maxLength":255},"madeInCountryCode":{"type":"string","description":"The ISO 3166-1 alpha-2 code indicating the country of manufacture, essential for determining import duties and compliance with trade agreements.\n\n**🔸This field is not required; however, shipments with this field filled are given priority during customs clearance.**\n","pattern":"^[A-Z]{2}$","nullable":true},"producerAndModel":{"type":"string","description":"The parameter represents the manufacturer and model of the device when creating a shipment. Both values are included in a single parameter. This parameter is mandatory for the following categories:\n  - Electrical appliances\n  - Laptops\n  - Phones\n  - Large and small household appliances\n  - Other similar items\n\n**🔸This field is not required; however, shipments with this field filled are given priority during customs clearance.**\n","maxLength":255,"nullable":true},"actualWeight":{"type":"integer","description":"Actual total weight of all units of the item in grams (g).\n\nSupported precision: 10 grams (0.01 kg).\nValues not divisible by 10 g are rounded down to the nearest lower multiple of 10 g.\n\n**🔸This field is mandatory when the** `invoice.items` **array is present in the request.**</br>\nThe system validates that the sum of `actualWeight` values across **all invoice items** matches the **total shipment weight** (sum of `parcels[].actualWeight`).\n\n⚠️IMPORTANT: Ensure that all invoice item weights are correctly rounded and that their total weight exactly matches the shipment weight to avoid validation errors.\n","minimum":1,"maximum":2147483647,"nullable":true},"measurementCode":{"type":"string","description":"The unit of measurement for the item quantity, such as pieces, kilograms, meters, etc., standardizing the way quantities are reported.\n\n**🔹This field is required for shipments crossing the EU border or going outside the EU.**\n","maxLength":255},"amount":{"type":"number","description":"The quantity of the item being shipped, necessary for inventory and customs documentation. Value in the units of measurement corresponding to the field \"measurementCode\".\n\n**🔹This field is required for shipments crossing the EU border or going outside the EU.**\n","minimum":0,"maximum":9999999.99},"cost":{"type":"number","description":"The value per single unit of the item in the sender's currency, important for insurance and customs valuation.\n\n**🔸Values are validated for decimal precision, and digits beyond two decimal places are ignored.**\n\n**🔹This field is required for shipments crossing the EU border or going outside the EU.**\n","minimum":0,"maximum":9999999.99}}}}}},"parcels*":{"type":"array","description":"Parcels` description block. Array contains objects, each object responsible for information about parcel.\n\n**🔻All fields in this array must be filled.**\n","items":{"type":"object","properties":{"cargoCategory*":{"type":"string","description":"Specifies the type of the shipment, helping to categorize the goods for logistics and customs processing. The category impacts how the shipment is handled, its shipping cost, and the required documentation. Available categories are:\n  - parcel: Small to medium-sized packages, typically for consumer goods and retail items.\n  - documents: Postal shipments containing documents such as letters, contracts, and official papers. This category is specifically for items that weigh no more than 1 kg and have dimensions not exceeding 35 cm in length, 25 cm in width, and 2 cm in height.\n  - pallet: Type of cargo formed as a pallet shipment with fixed dimensions and weight limits, available in the Business Cabinet of Europe for legal entities:\n    - Up to 250 kg, area ~0.48 m², dimensions 80 × 60 × 170 cm\n    - Up to 500 kg, area ~0.96 m², dimensions 120 × 80 × 170 cm\n    - Up to 750 kg, area ~1.2 m², dimensions 120 × 100 × 170 cm\n    - Up to 1000 kg, area ~1.2 m², dimensions 120 × 100 × 170 cm\n","enum":["parcel","documents","pallet"]},"parcelDescription*":{"type":"string","description":"This field requires a concise description of the contents within the shipment, providing essential information on the nature of the items enclosed. This description aids in the logistics process, offering a clear understanding of the package contents for transportation planning and customs clearance. The summary should include details like the type of items, their purpose, and any other relevant information that describes the contents. It’s crucial for ensuring that the shipment complies with shipping regulations and facilitates smooth customs processing.\nAdditionally, this field supports data in Unicode encoding, allowing for the inclusion of special characters and symbols using the \\uXXXX format. This feature is particularly useful for languages that use non-Latin characters, ensuring accurate representation of item descriptions across diverse linguistic contexts.\n","maxLength":255},"insuranceCost*":{"type":"number","format":"float","description":"Represents the declared value of the shipment for insurance coverage, in the currency of the sender's country. This value indicates the maximum compensation amount in the event of damage or loss during transit. Setting this value appropriately is crucial for ensuring adequate insurance protection. It is important to accurately declare this value to match the actual worth of the shipment contents, as underdeclaring can result in insufficient compensation.\n\nThe minimum allowable value depends on the shipment direction:\n  - **UA → EU / UA → International:** the value must be greater than 0 due to mandatory invoice and insurance requirements.\n  - **EU → EU:** a value of 0 is permitted for shipments that do not require insurance coverage and for which no invoice is provided.\n","minimum":1,"exclusiveMinimum":true},"rowNumber*":{"type":"integer","description":"Sequential identifier for each parcel within a shipment, used to organize and track individual packages, especially when multiple items are involved. If the shipment contains only one package, the value should be 1.\n","minimum":1},"width*":{"type":"integer","description":"The parcel's width measured in millimeters, used alongside length and height to compute the total volume for logistical planning.\n","minimum":1},"length*":{"type":"integer","description":"The parcel's length measured in millimeters, used alongside height and width to compute the total volume for logistical planning.\n","minimum":1},"height*":{"type":"integer","description":"The parcel's height measured in millimeters, used alongside length and width to compute the total volume for logistical planning.\n","minimum":1},"actualWeight*":{"type":"integer","description":"Actual item weight in grams (g).\n\nSupported precision: 10 grams (0.01 kg).\nValues not divisible by 10 g are rounded down to the nearest lower multiple of 10 g.\n\n**🔸This field is mandatory when the** `invoice.items` **array is present in the request.**</br>\nThe system validates that the sum of `actualWeight` values across **all invoice items** matches the **total shipment weight** (sum of `parcels[].actualWeight`).\n    \n⚠️IMPORTANT: Ensure that all invoice item weights are correctly rounded and that their total weight exactly matches the shipment weight to avoid validation errors.\n","minimum":1,"maximum":2147483647}}}},"sender*":{"type":"object","description":"Information about the party sending the shipment, including details about an individual or organization responsible for the dispatch.\n\n**🔻This array of fields is required**\n","properties":{"companyTin":{"type":"string","description":"The tax identification number or equivalent identifier (EDRPOU, TIN, NIP, IČO - for Slovakia) of a legal entity.\n\n**🔸The fields are required for a legal entity. If they are not filled in, the sender will be considered an individual**\n","maxLength":20,"nullable":true},"companyName":{"type":"string","description":"The official name of the sender's company. This field is used when the sender is a business entity, helping to identify the sending organization in documentation and records.","maxLength":100,"nullable":true},"eoriCode":{"type":"string","description":"The EORI code (Economic Operators Registration and Identification number) is used by the European Union to identify economic operators engaged in international trade. The sender's EORI code should be included in the invoice to ensure correct customs clearance and taxation when shipping goods to EU countries. The code is not mandatory but strongly recommended for international shipments to the EU, as it facilitates customs processing and helps avoid delays.","minLength":3,"maxLength":17,"nullable":true},"phone*":{"type":"string","description":"The contact phone number of the sender or the sender’s company representative.\nIt is required for shipment-related communication, including pickup coordination and issue resolution.\n**Format:**\nThe phone number must be provided in **international format** according to the **E.164** standard.\nExample: 380XXXXXXXXX, 491234567890, 371XXXXXXXX\n**Restrictions:**\n- The sender's phone number must be valid and reachable in case of delivery issues.\n- If the number is submitted in a local (non-international) format, the system will attempt to **normalize** it, but such logic is limited and may not support all variations across countries.\nWe strongly recommend implementing **front-end validation** to ensure numbers are entered in the correct international format.\n\n**🔻This field is required**\n"},"email":{"type":"string","description":"Email address of the sender, providing an electronic means of contact for updates, inquiries, and important notifications about the shipment.\n\n**🔹This field is required for shipments crossing the EU border or going outside the EU.**\n"},"name*":{"type":"string","description":"The full name of the individual sender or the primary contact person for a company sender. This name is used in all correspondences and documents related to the shipment.\n\n**🔸Important for EU → UA international shipments:**  \nThe sender name **must be provided using Latin characters only**.\nUse of Cyrillic characters (including Ukrainian letters) is **not allowed** and will result in validation or processing errors on the Last Mile partner side.\n\n**🔻This field is required**\n","maxLength":100},"ioss":{"type":"string","description":"The IOSS (Import One-Stop Shop) number is an optional input used to facilitate the VAT declaration process for shipments from non-EU countries with a declared value of up to EUR 150. It is utilized by shippers using the IOSS process to simplify customs procedures for deliveries to private customers in the EU. This field is available for shipments where the sender's country is outside the EU and the destination is within the EU.","maxLength":12,"pattern":"/^[a-zA-Z0-9]*$/u"},"countryCode*":{"type":"string","description":"A two-letter code representing the sender's country, following the ISO 3166-1 Alpha-2 standard, indicating the country of origin for the shipment.\n\n**🔻This field is required**\n","pattern":"^[A-Z]{2}$"},"divisionNumber":{"type":"string","description":"This field is mandatory for parcels that are dispatched from a post office division or parcel locker, requiring the unique identifier of the dispatch location to be specified.\n\n**🔹This field is required if both the `sender.addressParts` group and the `sender.divisionID` field are missing or empty**\n","nullable":true},"divisionID":{"type":"integer","description":"Division ID for specific branch identification.\n\n**🔹This field is required if both the `sender.addressParts` group and the `sender.divisionNumber` field are missing or empty**\n","minimum":1,"nullable":true},"addressParts":{"type":"object","description":"This array of fields is required when shipping directly from an address, detailing the specific components of the location from which the parcel is dispatched. It includes detailed address information, ensuring the accurate identification of the pickup location.\n","properties":{"city":{"type":"string","description":"The name of the city from which the shipment is dispatched. It helps pinpoint the exact urban location for pickup or shipping.\n\n**🔹This field is required if**  `sender.divisionNumber`  **and** `sender.divisionID` **fields are missing or empty.**</br>\n🔸For shipments where the sender country is **Moldova** or **Ukraine**, the sender city is validated against internal settlement directories. If the settlement cannot be resolved due to an invalid or unmapped value, the shipment will not be created.\n","maxLength":100},"region":{"type":"string","description":"Specifies the broader administrative area, like a state or province, encompassing the city, providing additional context for the shipment's origin.\n\n**🔹This field is required for shipments when the sender or recipient country is the USA, Ireland, or Canada.**\n","maxLength":100},"street":{"type":"string","description":"Identifies the specific street address for the sender's location, crucial for accurate pickup or delivery operations.\n\n**🔹This field is required if  `sender.divisionNumber` and `sender.divisionID` fields are missing or empty.**\n","maxLength":100},"postCode":{"type":"string","description":"The postal or ZIP code corresponding to the sender's address. It's essential for sorting and routing the shipment efficiently.\n\n**🔹This field is required if  `sender.divisionNumber` and `sender.divisionID` fields are missing or empty.**\n","maxLength":10},"building":{"type":"string","description":"The building number or name at the specified street address, pinpointing the precise location for shipment collection.\n\n**🔹This field is required if  `sender.divisionNumber` and `sender.divisionID` fields are missing or empty.**\n","maxLength":100},"flat":{"type":"string","description":"If applicable, the apartment or suite number within a building from which the shipment originates, ensuring pickup personnel can locate the sender's exact unit.","maxLength":10},"block":{"type":"string","description":"Indicates a specific block or section within a larger residential area or complex, if relevant, aiding in locating the sender's precise starting point for the shipment.","maxLength":100,"nullable":true},"note":{"type":"string","description":"Allows for the inclusion of additional details or instructions about the sender's address that might facilitate the pickup process, such as gate codes, specific entry points, or preferred contact times.","maxLength":100}}}}},"recipient*":{"type":"object","description":"Information about the party receiving the shipment, detailing either an individual or an organization responsible for receiving the dispatched goods.\n\n **🔻This array of fields is required**\n","properties":{"companyTin":{"type":"string","description":"The tax identification number or equivalent identifier (EDRPOU, TIN, NIP, IČO - for Slovakia) of a legal entity.\n\n**🔸The fields are required for a legal entity. If they are not filled in, the recipient will be considered an individual**\n","maxLength":20,"nullable":true},"companyName":{"type":"string","description":"The formal name of the recipient's company. Utilize this field when the recipient is a business entity, aiding in the identification of the receiving organization in documents and records.","maxLength":100,"nullable":true},"eoriCode":{"type":"string","description":"The recipient's EORI code is important for customs clearance when shipping goods to European Union countries, especially when sending to legal entities. The code is not mandatory but recommended, as it helps ensure smooth customs clearance and minimizes the risk of delays. The requirement for the recipient eoriCode depends on the type of goods being shipped:\n1. Non-excise goods: The EORI code is not mandatory if non-excise goods are being shipped from Ukraine to a legal entity in Europe. If the recipient does not have an EORI code, one will be automatically assigned.\n2. Excise goods: The EORI code is required for shipments of excise goods. The recipient must obtain an EORI code before the goods can be shipped.\n","minLength":3,"maxLength":17,"nullable":true},"phone*":{"type":"string","description":"The contact phone number of the recipient or the recipient’s company representative. Used for delivery notifications and communication with the customer during shipment processing.\n**Format:** The phone number must be provided in **international format** according to the **E.164** standard.\nExample: 380XXXXXXXXX, 491234567890, 371XXXXXXXX\n**Restrictions:**\n- For deliveries to Nova Post branches in Europe, Ukrainian mobile numbers are acceptable.\n- For deliveries to **partner locations** (such as InPost, GLS, Venipak, Cargus, etc.) and **cross-border address deliveries**, the phone number must belong to a mobile operator in the recipient's country. If the phone number is submitted in a local (non-international) format, the system will attempt to **normalize** it to the international format, but the internal algorithm does not cover all possible cases. If your system does not support front-end validation of phone numbers, we recommend informing us about failed phone number cases so we can assess potential improvements to the normalization logic.\n          \n**🔻This field is required**\n"},"email":{"type":"string","description":"The email address of the recipient, serving as a digital contact point for shipment updates, inquiries, and essential notifications.\n\n**🔹This field is required for shipments crossing the EU border or going outside the EU.**\n"},"name*":{"type":"string","description":"The complete name of the individual recipient or the primary contact for a company recipient. This is the name used for all shipping-related correspondence and documentation.\n\n**🔻This field is required**\n","maxLength":100},"countryCode*":{"type":"string","description":"A two-letter code that identifies the recipient's country, adhering to the ISO 3166-1 Alpha-2 standard, which specifies the shipment's destination country.\n\n**🔻This field is required**\n","pattern":"^[A-Z]{2}$"},"divisionNumber":{"type":"string","description":"This field is mandatory for parcels intended to be collected from a post office division or parcel locker, requiring the insertion of the unique identifier for the designated location.\n\n**🔹This field is required if both the `recipient.addressParts` group and the `recipient.divisionID` field are missing or empty**\n","nullable":true},"divisionID":{"type":"integer","description":"Division ID for specific branch identification.\n\n**🔹This field is required if both the `recipient.addressParts` group and the `recipient.divisionNumber` field are missing or empty**\n","minimum":1,"nullable":true},"addressParts":{"type":"object","description":"This array of fields is necessary when the shipment is directed to a specific address, outlining the precise location details to which the parcel is to be delivered. It encompasses comprehensive address information to ensure the exact identification of the delivery location.\n\n**🔸The values in the nested address fields must not duplicate each other. Providing the same address information in multiple inner fields will result in an error.**\n","properties":{"city":{"type":"string","description":"The city to which the shipment is being delivered. This detail ensures the parcel is directed to the correct urban area for the recipient.\n\n**🔹This field is required if** `recipient.divisionNumber` **and** `recipient.divisionID` **fields are missing or empty.**</br>\n🔸For shipments where the recipient country is **Moldova** or **Ukraine**, the recipient city is validated against internal settlement directories. If the settlement cannot be resolved due to an invalid or unmapped value, the request will be rejected with the error:`validation.condition.recipient_settlement_not_defined`.\n","maxLength":100},"region":{"type":"string","description":"Specifies the recipient's state or province within the destination country, crucial for accurate shipment routing and delivery. When sending to the USA, it's essential to include a two-letter state code, such as \"WA\" for Washington or \"DC\" for the District of Columbia, according to the ISO 3166-2:US standard.\n\n**🔹This field is required for shipments when the sender or recipient country is the USA, Ireland, or Canada.**\n","maxLength":100},"street":{"type":"string","description":"The street name of the recipient's address, vital for pinpointing the exact delivery spot.\n\n**🔹This field is required if  `recipient.divisionNumber` and `recipient.divisionID` fields are missing or empty.**\n","maxLength":100},"postCode":{"type":"string","description":"The postal or ZIP code for the recipient's address, critical for the precise sorting and routing of the parcel to its final destination.\n\n**🔹This field is required if  `recipient.divisionNumber` and `recipient.divisionID` fields are missing or empty.**\n","maxLength":10},"building":{"type":"string","description":"Specifies the building number or name at the recipient's address, guiding the delivery to the exact building within a given street.\n\n**🔹This field is required if  `recipient.divisionNumber` and `recipient.divisionID` fields are missing or empty.**\n","maxLength":100},"flat":{"type":"string","description":"The apartment or suite number, if the delivery is to a multi-unit building, ensuring the parcel reaches the specific unit of the recipient.","maxLength":10},"block":{"type":"string","description":"Identifies a block or section within a larger complex or residential area for the recipient, useful in large housing developments to further narrow down the delivery point.","maxLength":100,"nullable":true},"note":{"type":"string","description":"The space for any additional recipient-related address instructions or details that might assist in the delivery process, such as security instructions, specific doors for delivery, or preferred delivery times.","maxLength":100}}},"registrationAddressRecipient":{"type":"object","description":"The registrationAddressRecipient object provides a detailed breakdown of the recipient's registered address and is required when shipping to countries with specific customs requirements, such as Germany, Slovakia, Hungary, and France. This ensures compliance with local regulations and facilitates smooth customs processing. \nThe object allows for a precise and complete representation of the recipient's address, which is especially important for international shipments to countries with strict customs regulations.\n","properties":{"city":{"type":"string","description":"The name of the city where the recipient is registered. It must match the local naming conventions for accurate identification.\n\n**🔹This field is required for shipments to countries with specific customs requirements, including Germany, Slovakia, Hungary, and France.**\n","maxLength":100},"street":{"type":"string","description":"The name of the street in the recipient's address. It must match the local naming conventions for accurate identification.\n\n**🔹This field is required for shipments to countries with specific customs requirements, including Germany, Slovakia, Hungary, and France.**\n","maxLength":100},"zipCode":{"type":"string","description":"The postal code of the recipient's registered address.\n\n**🔹This field is required for shipments to countries with specific customs requirements, including Germany, Slovakia, Hungary, and France.**\n","maxLength":10},"building":{"type":"string","description":"The building number or name where the recipient is registered.\n\n**🔹This field is required for shipments to countries with specific customs requirements, including Germany, Slovakia, Hungary, and France.**\n","maxLength":100},"apartment":{"type":"string","description":"The flat or apartment number within the building.","maxLength":10},"state":{"type":"string","description":"The state or region where the recipient is registered. Required in some countries for detailed geographical identification.","maxLength":100}}}}}}}}}},"responses":{"201":{"description":"Successfully created shipment.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"A unique identifier assigned to each shipment, facilitating internal operations such as modifications, system searches, and deletion of shipments. The 'id' serves as a key reference for administrative and logistical processes within the delivery system, allowing precise access and management of shipment records.\nThe format of the `id` depends on the shipment direction (first/last mile):\n  - For EU shipments, the value is a numeric shipment ID (e.g., `754116`) used for search operations.\n  - For UA shipments, the value is a UUID reference (e.g., `56abe014-451c-11f0-a1d5-48df37b921da`) used for search by `ref`.\n","minimum":1},"number":{"type":"string","description":"The transportation document number provided to clients for tracking purposes and accessing printed forms. It also facilitates shipment searches within the system, offering a customer-friendly way to monitor shipment progress. While 'number' is used externally for tracking and documentation, it can also serve internal needs similar to 'id' for identifying shipments in certain system operations.","pattern":"^[A-Z]{4}\\d{10}$"},"scheduledDeliveryDate":{"type":"string","format":"date-time","description":"Estimated delivery date based on routing and service level, subject to change based on logistics and external factors. Date in ISO 8601 format.","nullable":true},"status":{"type":"string","description":"Current status of the shipment. Initially set to \"ReadyToShip\" upon creation, indicating it's prepared for dispatch."},"cost":{"type":"number","format":"float","description":"Total cost calculated for the delivery services provided, based on shipment size, weight, destination, and service options selected."},"parcelsAmount":{"type":"integer","description":"The total number of parcels included in the shipment. This count helps in logistics planning and tracking.","minimum":1},"createdAt":{"type":"string","format":"date-time","description":"The date-time when the shipment record was created in the system. Date in ISO 8601 format."},"updatedAt":{"type":"string","format":"date-time","description":"The last date-time when the shipment record was updated. Helps in tracking changes and updates made to the shipment details.Date in ISO 8601 format."},"deletedAt":{"type":"string","format":"date-time","description":"The date-time when the shipment was canceled or removed from the system. If not canceled, this field is null.","nullable":true}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/Validation"},"503":{"$ref":"#/components/responses/Time-out"}},"summary":"Create Shipment"}}}}
```


# Page 2

## Nova Post Division selection widget

Add a branch/postomat picker to any web page in minutes — with Google Maps, filters, and TypeScript support.

<p align="center"><a href="https://integration-widget.novapost.com/playground/" class="button primary">Open Playground</a><a href="https://api-portal.novapost.com/methods/page-2/page-2-1#quick-start-umd-via-less-than-script-greater-than" class="button secondary">Quick Start</a><a href="https://api-portal.novapost.com/methods/page-2/page-2-1#configuration-widgetconfig" class="button secondary">API Reference</a></p>

<table data-view="cards"><thead><tr><th></th></tr></thead><tbody><tr><td><h4>Two variants</h4><p>Map view (Google Maps) or Widget view (list with search and filters). Both support the same params and events.</p></td></tr><tr><td><h4>Lazy iframe init</h4><p>The <code>&#x3C;iframe></code> is created only on the first <code>show()</code> call — zero cost before that.</p></td></tr><tr><td><h4>No API key needed</h4><p>All Nova Post API calls go through the proxy server.</p></td></tr></tbody></table>


# Page 2-1

### Quick Start — UMD via \<script>

Works in any HTML page without a build step

```
<!-- 1. Container — must have an explicit height -->
<div id="nova-post-widget" style="width:100%;height:600px"></div>

<!-- 2. Load the SDK -->
<script src="https://integration-widget.novapost.com/sdk.min.js"></script>

<script>
  const widget = new NovaPostWidget.NovaPostWidget({
    container: '#nova-post-widget',
    locale:    'uk',
    variant:   'widget',   // 'map' | 'widget'
    viewMode:  'container', // 'container' | 'popup'
    country:   'UA',
    city:      'Київ',

    onReady: () => console.log('Widget ready'),

    onSelect: (division) => {
      console.log(division.name, division.displayAddress)
      widget.hide()
    },

    onError: (err) => console.error(err.message),
  })

  widget.show()
</script>
```

### Quick Start — ESM (Vite / Webpack)

Import directly into your bundler project

```
import { NovaPostWidget } from './sdk.esm.js'

const widget = new NovaPostWidget({
  container: '#nova-post-widget',
  locale:    'uk',
  country:   'UA',
  onSelect: (division) => console.log(division),
})

widget.show()
```

### Configuration — WidgetConfig

<table data-search="false"><thead><tr><th width="177">PARAM</th><th width="178">TYPE</th><th width="115">REQUIRED</th><th width="108">DEFAULT</th><th>DESCRIPTION</th></tr></thead><tbody><tr><td>container</td><td>string | HTMLElement</td><td>Yes</td><td>—</td><td>CSS selector or DOM element to mount into</td></tr><tr><td>locale</td><td>'uk' | 'en' | 'de' | 'cs'</td><td>—</td><td>'uk'</td><td>UI language</td></tr><tr><td>variant</td><td>'map' | 'widget'</td><td>—</td><td>'map'</td><td>Display mode: map or list with filters</td></tr><tr><td>viewMode</td><td>'container' | 'popup'</td><td>—</td><td>'container'</td><td>Inline embed or modal popup</td></tr><tr><td>country</td><td>string | null</td><td>—</td><td>—</td><td>ISO country code, e.g. 'UA'</td></tr><tr><td>city</td><td>string | null</td><td>—</td><td>—</td><td>City name to pre-select</td></tr><tr><td>senderCountry</td><td>string | null</td><td>—</td><td>—</td><td>Sender ISO country code, e.g. 'UA'; unlocks partner PUDO (UPS) selection for allowed countries [PL, UA]</td></tr><tr><td>divisionId</td><td>number | null</td><td>—</td><td>—</td><td>Pre-select a specific division</td></tr><tr><td>divisionCategories</td><td>DivisionType[]</td><td>—</td><td>—</td><td>Filter by type; all shown if omitted</td></tr><tr><td>autoShow</td><td>boolean</td><td>—</td><td>false</td><td>Call show() automatically after init</td></tr><tr><td>mobileBreakpointPx</td><td>number</td><td>—</td><td>768</td><td>Fullscreen popup below this viewport width</td></tr><tr><td>onSelect</td><td>(division: DivisionItem) => void</td><td>—</td><td>—</td><td>Fires when user confirms a division</td></tr><tr><td>onReady</td><td>() => void</td><td>—</td><td>—</td><td>Fires when iframe is loaded and ready</td></tr><tr><td>onError</td><td>(error: Error) => void</td><td>—</td><td>—</td><td>Fires on runtime error inside iframe</td></tr><tr><td>onClose</td><td>(reason?) => void</td><td>—</td><td>—</td><td>Fires when popup is closed</td></tr></tbody></table>

### API Methods

**widget.show()** Show the widget. First call creates the iframe (lazy init).

In `container` mode — sets `display: block` on the iframe.\
In `popup` mode — opens the overlay.\
On every call (both modes), once the widget is ready, the map automatically recenters on the previously selected division.

**widget.hide()** Hide the widget without destroying the iframe.

In `container` mode — sets `display: none`.\
In `popup` mode — closes the overlay and fires `onClose('manual_close')`.

**widget.updateParams(params)** Update config without recreating the iframe.

Updates `city`, `country`, `senderCountry`, `divisionId`, `divisionCategories`, `locale`.\
Calls before `onReady` are queued and flushed automatically.

**widget.destroy()** Remove iframe, popup elements, and all event listeners.

Call on route change in SPAs or on component unmount (Vue `onUnmounted`, React `useEffect` cleanup).

### Variants & View Modes

<table><thead><tr><th width="124">VARIANT</th><th width="144">VIEWMODE</th><th>RESULT</th></tr></thead><tbody><tr><td>map</td><td>container</td><td>Google Maps embedded inline in your page</td></tr><tr><td>map</td><td>popup</td><td>Trigger button → click opens popup with Google Maps</td></tr><tr><td>widget</td><td>container</td><td>Division list with search embedded inline</td></tr><tr><td>widget</td><td>popup</td><td>Trigger button → click opens popup with division list</td></tr></tbody></table>

### onSelect callback — DivisionItem fields

Full object passed to your handler when user confirms a division

```
onSelect: (division) => {
  division.id               // number  — unique ID
  division.name             // string  — full name
  division.shortName        // string  — short name
  division.displayAddress   // string  — formatted address
  division.divisionCategory // 'PostBranch' | 'CargoBranch' | 'Postomat' | 'PUDO'
  division.source           // 'NPAX' | 'NPUA' | 'InPost' | 'UPS' | ...
  division.latitude         // number | null
  division.longitude        // number | null
  division.maxWeightPlaceRecipient  // number (kg)
  division.maxLengthPlaceRecipient  // number (cm)
  division.addressParts?.region
  division.addressParts?.city
  division.addressParts?.street
  division.addressParts?.postCode
}
```


# Page 2-2

### Changelog

Release history — newest at the top.

#### v0.2.0 (2026-07-06)

**Added**

* `senderCountry` configuration parameter
* UPS division selection for delivery from Poland and Ukraine
* Display of divisions nearest to the selected division

#### v0.1.1 (2026-06-17)

**Added**

* Configurable error and empty state messages in the divisions list

#### v0.1.0 (2026-06-04)

**Added**

* Map and Widget views as separate configurable entry points
* Popup view mode with customizable trigger button
* Division popup with category labels and weight limits
* WidgetTabs and WidgetViewSwitch for navigation between views
* Loading state during settlement and division search
* Error overlay with retry on failed API requests
* PUDO division category support
* `show()` with automatic map centering
* Ukrainian, Czech, and German localization
* Disable selection hint for UPS-source divisions
* Division detail view with schedule and address information
* Server proxy API with JWT authentication

**Fixed**

* Division popup closing not working correctly
* Duplicate divisions appearing in the confirmed list
* Proxy error reporting returning incorrect error format


# Page 3

## Calculate delivery cost

> This API method allows you to calculate the estimated delivery cost and delivery time for your cargo.\
> The delivery cost and delivery time are calculated based on factors such as weight, dimensions, destination, and shipping method.\
> By providing the necessary details of your cargo and shipment, you can obtain an estimated cost for delivering the goods.\
> The response will typically include the calculated cost and the scheduled delivery date based on the provided information.\</br><br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Shipments"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"Authorization JWT-token with a lifetime of 1 hour in header"}},"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Validation":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Time-out":{"description":"Connection time-out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}}},"paths":{"/shipments/calculations":{"post":{"tags":["Shipments"],"description":"This API method allows you to calculate the estimated delivery cost and delivery time for your cargo.\nThe delivery cost and delivery time are calculated based on factors such as weight, dimensions, destination, and shipping method.\nBy providing the necessary details of your cargo and shipment, you can obtain an estimated cost for delivering the goods.\nThe response will typically include the calculated cost and the scheduled delivery date based on the provided information.</br>\n","requestBody":{"description":"Optional description in *Markdown*","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"payerType":{"type":"string","description":"Identifies who is responsible for the payment of delivery services. The payer type determines which party bears the cost:\n- `Sender`: The party sending the goods pays for the delivery.\n- `Recipient`: The party receiving the goods is responsible for the delivery cost.\n- `ThirdPerson`: A third party pays for delivery.\n- For shipments within Europe or from Europe to Ukraine, the field `payerContractNumber` must be provided.\n- For shipments from Ukraine, `payerContractNumber` is not required.\n","enum":["Sender","Recipient","ThirdPerson"]},"payerContractNumber":{"type":"string","description":"Required when `payerType` is `ThirdPerson` for shipments within Europe or from Europe to Ukraine.\nSpecifies the contract number of the third-party payer (e.g., `CNPP-00001797`).\n"},"deliveryTypes":{"type":"array","items":{"type":"string"},"description":"Defines the list of tariff types to be used for shipment cost calculation.\nThe calculation response returns pricing results for each submitted delivery type.\n\n- `standard`: Standard international delivery tariff.\n- `economy`: Economy international delivery tariff.\n- `express`: Express international delivery tariff.\n\n**🔹The** `economy` **tariff is not supported for shipments from Ukraine to the United States.**\n\nIf the field is not provided, the applicable tariff is determined automatically according to current business rules, and the existing calculation behavior remains unchanged.\n\n**🔹This field is optional.**\n","enum":["standard","economy","express"]},"invoice":{"type":"object","description":"Information for calculating shipping costs and customs payments.","properties":{"incoterm":{"type":"string","description":"Type of tax calculation.\n- `DAP` – Delivered At Place\n- `DDP` – Delivered Duty Paid\n","enum":["DAP","DDP"]},"currency":{"type":"string","description":"Currency code in ISO 4217 format (e.g., USD, EUR, GBP)."},"cost":{"type":"number","description":"Total declared invoice value in the original currency, which must equal the sum of all invoice items calculated as **(amount × cost)** for each item.\nDeclared value of the shipment used for customs duty calculation.\nAlso indicates the maximum compensation in case of loss or damage.\nRequired if incoterm = `DDP`.\n","minimum":1},"payerFeesCustoms":{"type":"string","description":"Identifies who is responsible for the customs payments.\nDetermines which party bears the cost: `Sender`, `Recipient`, or `ThirdPerson`.\n","enum":["Sender","Recipient","ThirdPerson"]},"items":{"type":"array","description":"List of invoice items to be declared.\n\nFor international shipments from Ukraine to the United States, when customs duties are paid by the `Sender` or `ThirdPerson`, this field is used to calculate customs duties separately for each HS code.\n\n**🔹Conditionally required.**\n","items":{"type":"object","properties":{"hsCode":{"type":"string","description":"Commodity UCGFEA code. For shipments to the United States, HTSUS codes are also supported.\n\n**🔹Required when** `invoice.items` **is provided.**\n"},"amount":{"type":"number","description":"Quantity of units for the invoice item.\n\n**🔹Required when** `invoice.items` **is provided.**\n"},"cost":{"type":"number","description":"Unit price of the invoice item in the invoice currency.\n\n**🔹Required when** `invoice.items` **is provided.**\n"}},"required":["hsCode","amount","cost"]}}}},"parcels":{"type":"array","description":"An array of parcel objects, each representing a distinct package within the shipment. This parameter is essential for calculating the delivery cost as it includes details about each parcel's dimensions, weight, and other specific attributes. Each object in this array provides the necessary information to accurately assess shipping fees based on the parcel's size, weight, and possibly the type of goods it contains, which may affect the shipping method and pricing.","items":{"type":"object","properties":{"cargoCategory":{"type":"string","description":"Specifies the type of the shipment, helping to categorize the goods for logistics and customs processing. The category impacts how the shipment is handled, its shipping cost, and the required documentation. Available categories are:\n- `parcel`: Small to medium-sized packages, typically for consumer goods and retail items.\n- `documents`: Postal shipments containing documents such as letters, contracts, and official papers. This category is specifically for items that weigh no more than 1 kg and have dimensions not exceeding 35 cm in length, 25 cm in width, and 2 cm in height.\n","enum":["parcel","documents","pallet"]},"insuranceCost":{"type":"number","format":"float","description":"Represents the declared value of the shipment for insurance coverage, in the currency of the sender's country. This value indicates the maximum compensation amount in the event of damage or loss during transit. Setting this value appropriately is crucial for ensuring adequate insurance protection. It is important to accurately declare this value to match the actual worth of the shipment contents, as underdeclaring can result in insufficient compensation.","minimum":0,"exclusiveMinimum":true},"rowNumber":{"type":"integer","description":"Sequential identifier for each parcel within a shipment, used to organize and track individual packages, especially when multiple items are involved. If the shipment contains only one package, the value should be 1.","minimum":1},"width":{"type":"integer","description":"The parcel's width measured in millimeters, used alongside length and height to compute the total volume for logistical planning.","minimum":1},"length":{"type":"integer","description":"The parcel's length measured in millimeters, used alongside height and width to compute the total volume for logistical planning.","minimum":1},"height":{"type":"integer","description":"The parcel's height measured in millimeters, used alongside length and width to compute the total volume for logistical planning.","minimum":1},"actualWeight":{"type":"integer","description":"Actual total weight of all units of the item in grams (g), critical for shipping cost calculations and compliance with carrier weight limits.\n\nExpected unit: grams (g)\n\nOnly precision up to 10 grams (0.01 kg) is supported. Values not divisible by 10 g will be rounded down to the nearest lower multiple of 10 g.\n\n⚠️IMPORTANT: Please round weight values to the nearest 10 g before sending, to avoid unexpected adjustments.\n","minimum":1,"maximum":2147483647},"volumetricWeight":{"type":"integer","description":"Calculated weight based on parcel dimensions, used for billing purposes where volume impacts cost more than actual weight. Represents the dimensional weight of the parcel.","minimum":0,"maximum":2147483647}}}},"sender":{"type":"object","description":"Contains essential information about the party sending the shipment. The information provided here is used to manage the shipment's origin details for logistics planning and affect the calculation of shipping costs based on the sender's location and applicable shipping regulations. If the payer is the Sender and the shipment is from a Legal entity, the parameters `companyTin` and `companyName` are used to apply the counterparty's individual discount. If there's no applicable discount or it doesn't need to be considered, these parameters can be left blank or removed from the request.","properties":{"companyTin":{"type":"string","description":"The tax identification number or equivalent identifier (EDRPOU, TIN, NIP, IČO) of a legal entity. \n\n🔹**Required for legal and customs documentation when the sender is a legal entity.**\n","maxLength":20,"nullable":true},"companyName":{"type":"string","description":"The official name of the sender's company. This field is used when the sender is a business entity, helping to identify the sending organization in documentation and records. Insert `Private person` if the sender is not a company.","maxLength":100,"nullable":true},"countryCode":{"type":"string","description":"A two-letter code representing the sender's country, following the ISO 3166-1 Alpha-2 standard, indicating the country of origin for the shipment.","pattern":"^[A-Z]{2}$"},"divisionNumber":{"type":"string","description":"Optional identifier used to specify the unique number of the post office division or parcel locker from which the shipment is dispatched. It is relevant when the shipment originates from a specific postal division. This field is interchangeable with 'divisionId', and providing one of these identifiers is sufficient when the shipment originates from a division. Leave this field null when shipping from a non-division-specific address.","nullable":true},"divisionId":{"type":"integer","description":"Optional identifier representing the unique code for the post office division from which the shipment originates. This identifier is crucial when the shipment needs specific division handling at the origin. It can be used alternatively to 'divisionNumber'; providing just one of these identifiers is enough for identifying the dispatch division. This field should be left null if the shipment is from a direct address that is not associated with a specific division.","nullable":true},"addressParts":{"type":"object","description":"This array of fields is required when shipping directly from an address, detailing the specific components of the location from which the parcel is dispatched. It includes detailed address information, ensuring the accurate identification of the pickup location.","properties":{"city":{"type":"string","description":"The name of the city from which the shipment is dispatched. It helps pinpoint the exact urban location for pickup or shipping.","maxLength":100},"region":{"type":"string","description":"Specifies the broader administrative area, like a state or province, encompassing the city, providing additional context for the shipment's origin.","maxLength":100},"street":{"type":"string","description":"Identifies the specific street address for the sender's location, crucial for accurate pickup or delivery operations.","maxLength":100},"postCode":{"type":"string","description":"The postal or ZIP code corresponding to the sender's address. It's essential for sorting and routing the shipment efficiently.","maxLength":10},"building":{"type":"string","description":"The building number or name at the specified street address, pinpointing the precise location for shipment collection.","maxLength":100},"flat":{"type":"string","description":"If applicable, the apartment or suite number within a building from which the shipment originates, ensuring pickup personnel can locate the sender's exact unit.","maxLength":10},"block":{"type":"string","description":"Indicates a specific block or section within a larger residential area or complex, if relevant, aiding in locating the sender's precise starting point for the shipment.","maxLength":100,"nullable":true},"note":{"type":"string","description":"Allows for the inclusion of additional details or instructions about the sender's address that might facilitate the pickup process, such as gate codes, specific entry points, or preferred contact times.","maxLength":100}}}}},"recipient":{"type":"object","description":"Information about the party receiving the shipment, detailing either an individual or an organization responsible for receiving the dispatched goods.","properties":{"countryCode":{"type":"string","description":"A two-letter code that identifies the recipient's country, adhering to the ISO 3166-1 Alpha-2 standard, which specifies the shipment's destination country.","pattern":"^[A-Z]{2}$"},"divisionNumber":{"type":"string","description":"Optional identifier used to specify the unique number of the post office division or parcel locker where the shipment is to be collected. It is relevant when the shipment is routed to a specific postal division. This field is interchangeable with 'divisionId', and providing one of these identifiers is sufficient when the shipment is destined for a division. This field should be left null when the shipment is directly addressed to a non-division-specific location.","nullable":true},"divisionId":{"type":"integer","description":"Optional identifier representing the unique code for the post office division where the shipment is to be delivered. Like `recipientDivisionNumber`, this identifier is crucial when the shipment involves specific division handling at the destination. It can be used alternatively to 'divisionNumber'; providing just one of these identifiers is enough for identifying the receiving division. This field should also be left null if the shipment is to a direct address not associated with a specific division.","nullable":true},"addressParts":{"type":"object","description":"This array of fields is necessary when the shipment is directed to a specific address, outlining the precise location details to which the parcel is to be delivered. It encompasses comprehensive address information to ensure the exact identification of the delivery location.","properties":{"city":{"type":"string","description":"The city to which the shipment is being delivered. This detail ensures the parcel is directed to the correct urban area for the recipient.","maxLength":100},"region":{"type":"string","description":"Specifies the recipient's state or province within the destination country, crucial for accurate shipment routing and delivery. When sending to the USA, it's essential to include a two-letter state code, such as `WA` for Washington or `DC` for the District of Columbia, according to the ISO 3166-2:US standard.","maxLength":100},"street":{"type":"string","description":"The street name of the recipient's address, vital for pinpointing the exact delivery spot.","maxLength":100},"postCode":{"type":"string","description":"The postal or ZIP code for the recipient's address, critical for the precise sorting and routing of the parcel to its final destination.","maxLength":10},"building":{"type":"string","description":"Specifies the building number or name at the recipient's address, guiding the delivery to the exact building within a given street.","maxLength":100},"flat":{"type":"string","description":"The apartment or suite number, if the delivery is to a multi-unit building, ensuring the parcel reaches the specific unit of the recipient.","maxLength":10},"block":{"type":"string","description":"Identifies a block or section within a larger complex or residential area for the recipient, useful in large housing developments to further narrow down the delivery point.","maxLength":100,"nullable":true},"note":{"type":"string","description":"The space for any additional recipient-related address instructions or details that might assist in the delivery process, such as security instructions, specific doors for delivery, or preferred delivery times.","maxLength":100}}}}}}}}}},"responses":{"200":{"description":"Successful cost calculation","content":{"application/json":{"schema":{"type":"object","properties":{"scheduledDeliveryDate":{"type":"string","format":"date-time","description":"Estimated delivery date based on routing and service level, subject to change based on logistics and external factors. Date in ISO 8601 format.","nullable":true},"sender":{"type":"object","description":"Provides the sender's basic geographical information as part of the shipment's origin details in the response. This object outlines the sender’s country and may include additional location identifiers like settlement and division IDs if available.","properties":{"countryCode":{"type":"string","description":"A two-letter code representing the sender's country, following the ISO 3166-1 Alpha-2 standard, indicating the country of origin for the shipment.","pattern":"^[A-Z]{2}$"},"settlementId":{"type":"integer","description":"Identifier for the settlement (town or city) from which the shipment originates, if 'divisionId' was specified. If the sender's home address was specified, this field will be null.","nullable":true},"divisionId":{"type":"integer","description":"Unique identifier for the sender's division from which the shipment originates, which was specified. If the sender's home address was specified, this field will be null.","nullable":true}}},"recipient":{"type":"object","description":"Provides the recipient's basic geographical information as part of the shipment's delivery details in the response. This object outlines the recipient’s country and may include additional location identifiers like settlement and division IDs if available.","properties":{"countryCode":{"type":"string","description":"A two-letter code representing the recipient's country, following the ISO 3166-1 Alpha-2 standard, indicating the destination country of the shipment.","pattern":"^[A-Z]{2}$"},"settlementId":{"type":"integer","description":"Identifier for the settlement (town or city) to which the shipment is being sent if 'divisionId' was specified. If the recipient's home address was specified, this field will be null.","nullable":true},"divisionId":{"type":"integer","description":"Unique identifier for the recipient's division or branch, which was specified. If the recipient's home address was specified, this field will be null.","nullable":true}}},"services":{"type":"array","description":"A collection of services associated with the shipment, each entry detailing specific services applied or requested for the shipment. This objects encompasses various service details such as type of service, amount, and contractual details, along with any additional parameters that specify further service-related requirements or conditions.","items":{"type":"object","properties":{"shipmentId":{"type":"integer","description":"Unique identifier for the shipment that this service is part of. It helps in linking the service to the specific shipment within the system. This field may be null or zero if the service is being pre-configured or if the shipment has not yet been created or assigned in the system.","nullable":true},"shipmentParcelRowNumber":{"type":"string","description":"Identifies the parcel within a shipment to which the service is applied, helping in organizing and managing multiple parcels under a single shipment.","nullable":true},"serviceId":{"type":"string","description":"A unique identifier assigned to the specific service being described, essential for service tracking and management."},"serviceType":{"type":"string","description":"Service type.</br>\n**🔹This field is optional.**\n"},"serviceName":{"type":"string","description":"Service name.</br>\n**🔹This field is optional.**\n"},"serviceCode":{"type":"string","description":"Service code.</br>\n**🔹This field is optional.**\n"},"amount":{"type":"number","description":"Represents the total quantity of items or units included in this particular service.","minimum":0},"contractNumber":{"type":"string","description":"If applicable, the contract number under which the service is rendered. This is often used in B2B or B2C contexts where services are governed by specific contractual agreements.","minLength":2,"maxLength":20,"nullable":true},"payer_type":{"type":"string","description":"Indicates who is responsible for paying for the service. Typical values include 'Sender', 'Recipient', or 'Third Party'."},"paymentStatus":{"type":"string","description":"Payment status for the delivery services (e.g. 'Paid', 'NeedPay', 'ContractAfterPayment', 'FreeOfCharge', 'Holded')."},"divisionId":{"type":"string","description":"Unique identifier for the division or branch, if applicable.","nullable":true},"price":{"type":"number","description":"Total delivery cost including customs duties before applying any discounts.","minimum":0},"discount":{"type":"number","description":"Any discount applied to the service, reducing the overall cost.","minimum":0},"cost":{"type":"number","format":"float","description":"Total delivery cost excluding customs duties after applying personal discounts.","minimum":0},"user":{"type":"string","description":"Specifies the type of user interacting with the service. For internal use.","maxLength":50},"shipmentLockVersion":{"type":"integer","description":"Version of the shipment data for concurrency control."},"additional_parameters":{"type":"object","description":"This object holds a variety of supplementary details  that provide critical information for ensuring accurate processing and delivery of the shipment.","properties":{"cod":{"type":"number","description":"Cash on delivery amount, if applicable. This specifies the amount to be collected upon delivery, which is crucial for transactions requiring payment at the time of delivery.","nullable":true},"date":{"type":"integer","description":"The estimated date of delivery, calculated based on the logistics and routing information. If the route's delivery date cannot be calculated due to insufficient data in the chosen direction, this field may hold a zero value.","nullable":true},"from":{"type":"integer","description":"Represents the estimated start time of the delivery window. This field can be zero if there is not enough information to determine a starting time for the delivery.","nullable":true},"to":{"type":"integer","description":"Represents the estimated end time of the delivery window. Similar to the 'from' parameter, this field can also be zero if there is insufficient data to define an ending time for delivery.","nullable":true},"string":{"type":"integer","description":"Represents the cargo category as specified in the cargoCategory parameter. This can include values such as 'Parcel', 'Documents', 'Cargo', or 'Pallet' reflecting the type of items being shipped.","nullable":true},"fullName":{"type":"integer","description":"The full name of the recipient. This is used to ensure that the delivery is addressed to the correct individual, essential for verification upon delivery.","nullable":true},"phone":{"type":"integer","description":"The contact phone number of the recipient or the recipient’s company representative. Used for delivery notifications and communication with the customer during shipment processing.\n\n**Format:** The phone number must be provided in **international format** according to the **E.164** standard.\n\nExample: 380XXXXXXXXX, 491234567890, 371XXXXXXXX\n\n**Restrictions:**\n- For deliveries to Nova Post branches in Europe, Ukrainian mobile numbers are acceptable.\n- For deliveries to **partner locations** (such as InPost, GLS, Venipak, Cargus, etc.) and **cross-border address deliveries**, the phone number must belong to a mobile operator in the recipient's country. If the phone number is submitted in a local (non-international) format, the system will attempt to **normalize** it to the international format, but the internal algorithm does not cover all possible cases. If your system does not support front-end validation of phone numbers, we recommend informing us about failed phone number cases so we can assess potential improvements to the normalization logic.\n","nullable":true}}},"createdAt":{"type":"string","format":"date-time","description":"The date-time indicating when the record was initially created, formatted in ISO 8601 standard."},"updatedAt":{"type":"string","format":"date-time","description":"The date-time indicating the last update made to the record, formatted in ISO 8601 standard."},"deliveryType":{"type":"string","description":"Unique identifier (UUID) of the delivery tariff type used in the calculation result.\nThis value corresponds to the internal reference of the selected tariff.\n"},"deliveryTypeName":{"type":"string","description":"Code of the delivery tariff type applied to the calculation result.\n- `standard`: Standard international delivery tariff.\n- `economy`: Economy international delivery tariff.\n- `express`: Express international delivery tariff.\n"},"recipientPayerFeesCustomsCost":{"type":"number","description":"Amount of customs duties that the recipient would pay if selected as the customs duty payer.","minimum":0},"senderPayerFeesCustomsCost":{"type":"number","description":"Amount of customs duties that the sender or third party would pay if selected as the customs duty payer.","minimum":0}}}},"messageForFeesCustomsCost":{"type":"array","nullable":true,"description":"Warnings returned during customs duty calculation.\n\nIf the customs duty rate cannot be determined for one or more HS codes, the calculation is performed without those codes, and information about them is returned in this field.\n\nIf there are no warnings, an empty string is returned.\n","items":{"type":"object","properties":{"hsCode":{"type":"string","description":"HS code for which customs duties could not be calculated."},"warning":{"type":"string","description":"Warning code describing why the customs duty calculation could not be completed."}}}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/Validation"},"503":{"$ref":"#/components/responses/Time-out"}},"summary":"Calculate delivery cost"}}}}
```

## Розрахунок вартості доставки

> Цей API-метод дозволяє розрахувати орієнтовну вартість доставки та термін доставки для вашого вантажу.\
> Вартість та термін доставки розраховуються на основі таких факторів, як вага, габарити, місце призначення та спосіб доставки.\
> Надавши необхідні дані про вантаж і відправлення, ви можете отримати орієнтовну вартість доставки товарів.\
> Відповідь зазвичай містить розраховану вартість та заплановану дату доставки на основі наданої інформації.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"Shipments"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"security":[{"JWT":[]}],"components":{"securitySchemes":{"JWT":{"type":"apiKey","in":"header","name":"Authorization","description":"JWT-токен авторизації зі строком дії 1 годину у заголовку"}},"responses":{"Unauthorized":{"description":"Неавторизований доступ","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"Вказаний ресурс не знайдено","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Validation":{"description":"Помилка валідації","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Time-out":{"description":"Час очікування з’єднання вичерпано","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"errors":{"type":"object","properties":{"":{"type":"string"}}}}}}},"paths":{"/shipments/calculations":{"post":{"tags":["Shipments"],"description":"Цей API-метод дозволяє розрахувати орієнтовну вартість доставки та термін доставки для вашого вантажу.\nВартість та термін доставки розраховуються на основі таких факторів, як вага, габарити, місце призначення та спосіб доставки.\nНадавши необхідні дані про вантаж і відправлення, ви можете отримати орієнтовну вартість доставки товарів.\nВідповідь зазвичай містить розраховану вартість та заплановану дату доставки на основі наданої інформації.\n","requestBody":{"description":"Optional description in *Markdown*","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"payerType":{"type":"string","description":"Визначає, хто відповідає за оплату послуг доставки. Тип платника визначає, яка сторона несе витрати:\n- `Sender`: Сторона, що відправляє товар, оплачує доставку.\n- `Recipient`: Сторона, що отримує товар, відповідає за оплату доставки.\n- `ThirdPerson`: Третя сторона оплачує доставку.\n- Для відправлень у межах Європи або з Європи в Україну необхідно передати поле `payerContractNumber`.\n- Для відправлень з України `payerContractNumber` не є обов’язковим.\"\n","enum":["Sender","Recipient","ThirdPerson"]},"payerContractNumber":{"type":"string","description":"Обов’язковий, якщо `payerType` = `ThirdPerson` для відправлень у межах Європи або з Європи в Україну.\nВказує номер договору платника-третьої сторони (наприклад, `CNPP-00001797`).\n"},"deliveryTypes":{"type":"array","items":{"type":"string"},"description":"Визначає список тарифних типів, які використовуються для розрахунку вартості доставки.\nУ відповіді розрахунку повертаються результати вартості для кожного переданого типу доставки.\n\n- `standard`: Стандартний тариф міжнародної доставки.\n- `economy`: Економ-тариф міжнародної доставки.\n- `express`: Експрес-тариф міжнародної доставки.\n\n**🔹Для відправлень з України до США тариф** `economy` **не підтримується.**\n\nЯкщо поле не передано, відповідний тариф визначається автоматично згідно з поточними бізнес-правилами, а поведінка розрахунку залишається без змін.\n\n**🔹Це поле є необов’язковим.**\n","enum":["standard","economy","express"]},"invoice":{"type":"object","description":"Інформація для розрахунку вартості доставки та митних платежів.","properties":{"incoterm":{"type":"string","description":"Тип розрахунку податків.\n- `DAP` – Поставка в місце призначення\n- `DDP` – Поставка зі сплатою мита\n","enum":["DAP","DDP"]},"currency":{"type":"string","description":"Код валюти у форматі ISO 4217 (наприклад, USD, EUR, GBP)."},"cost":{"type":"number","description":"Загальна задекларована вартість інвойсу у вихідній валюті, яка повинна дорівнювати сумі всіх позицій інвойсу, розрахованих як **(amount × cost)** для кожної позиції.\nЗадекларована вартість відправлення, що використовується для розрахунку митних платежів.\nТакож визначає максимальну суму компенсації у випадку втрати або пошкодження.\nОбов’язковий параметр, якщо incoterm = `DDP`.\n","minimum":1},"payerFeesCustoms":{"type":"string","description":"Визначає, хто відповідає за оплату митних платежів.\nВизначає сторону, яка несе витрати: `Sender`, `Recipient` або `ThirdPerson`.\n","enum":["Sender","Recipient","ThirdPerson"]},"items":{"type":"array","description":"Список позицій інвойсу, які будуть декларуватися.\n\nДля міжнародних відправлень з України до США, якщо платником митних платежів є `Sender` або `ThirdPerson`, використовується для розрахунку митних платежів за кожним УКТЗЕД (HS) кодом окремо.\n\n**🔹Умовно обов’язковий параметр.**\n","items":{"type":"object","properties":{"hsCode":{"type":"string","description":"Код УКТЗЕД товару. Для відправлень до США також підтримується код HTSUS.\n\n**🔹Обов’язковий, якщо передано** `invoice.items`.\n"},"amount":{"type":"number","description":"Кількість одиниць товару в позиції інвойсу.\n\n**🔹Обов’язковий, якщо передано** `invoice.items`.\n"},"cost":{"type":"number","description":"Вартість однієї одиниці товару у валюті інвойсу.\n\n**🔹Обов’язковий, якщо передано** `invoice.items`.\n"}},"required":["hsCode","amount","cost"]}}}},"parcels":{"type":"array","description":"Масив об’єктів посилок, де кожен об’єкт представляє окрему посилку у відправленні.\nЦей параметр є важливим для розрахунку вартості доставки, оскільки містить інформацію про габарити, вагу та інші характеристики кожної посилки.\nКожен об’єкт у цьому масиві містить необхідну інформацію для точного розрахунку вартості доставки з урахуванням розміру, ваги посилки та, за потреби, типу товару, що може впливати на спосіб доставки та тарифікацію.\n","items":{"type":"object","properties":{"cargoCategory":{"type":"string","description":"Визначає тип відправлення, що допомагає класифікувати товари для логістики та митного оформлення. Категорія впливає на обробку відправлення, його вартість та необхідну документацію. Доступні категорії:\n- `parcel`: Посилки малого та середнього розміру, зазвичай для споживчих товарів.\n- `documents`: Поштові відправлення, що містять документи, такі як листи, договори та офіційні документи. Ця категорія призначена для відправлень вагою не більше 1 кг та з габаритами, що не перевищують 35 см у довжину, 25 см у ширину та 2 см у висоту.\n- `pallet`: Тип вантажу, сформований як палетне відправлення з фіксованими габаритами та обмеженнями по вазі, доступний у Бізнес-кабінеті Європи для юридичних осіб:\n  - До 250 кг, площа ~0.48 м², габарити 80 × 60 × 170 см\n  - До 500 кг, площа ~0.96 м², габарити 120 × 80 × 170 см\n  - До 750 кг, площа ~1.2 м², габарити 120 × 100 × 170 см\n  - До 1000 кг, площа\n","enum":["parcel","documents","pallet"]},"insuranceCost":{"type":"number","format":"float","description":"Задекларована вартість відправлення для страхового покриття у валюті країни відправника. Визначає максимальну суму компенсації у разі втрати або пошкодження. Це значення визначає максимальну суму компенсації у разі пошкодження або втрати під час транспортування. Коректне встановлення цього значення є критично важливим для забезпечення належного страхового покриття. Важливо точно задекларувати цю вартість відповідно до фактичної вартості вмісту відправлення, оскільки її заниження може призвести до недостатньої компенсації.","minimum":0,"exclusiveMinimum":true},"rowNumber":{"type":"integer","description":"Послідовний ідентифікатор кожної посилки у відправленні, що використовується для впорядкування та відстеження окремих місць, особливо у випадку, коли відправлення містить кілька позицій. Якщо відправлення складається з однієї посилки, значення має бути 1.","minimum":1},"width":{"type":"integer","description":"Ширина посилки в міліметрах, що використовується разом із довжиною та висотою для розрахунку загального об’єму з метою логістичного планування.","minimum":1},"length":{"type":"integer","description":"Довжина посилки в міліметрах, що використовується разом із висотою та шириною для розрахунку загального об’єму з метою логістичного планування.","minimum":1},"height":{"type":"integer","description":"Висота посилки в міліметрах, що використовується разом із довжиною та шириною для розрахунку загального об’єму з метою логістичного планування.","minimum":1},"actualWeight":{"type":"integer","description":"Фактична загальна вага всіх одиниць товару в грамах (g), що є критичною для розрахунку вартості доставки та відповідності обмеженням перевізника щодо ваги.\nОчікувана одиниця виміру: грами (g)\nПідтримується точність лише до 10 грамів (0.01 кг). Значення, не кратні 10 г, округлюються вниз до найближчого меншого кратного 10 г.\n\n⚠️ВАЖЛИВО: Рекомендується округлювати значення ваги до найближчих 10 г перед відправкою, щоб уникнути неочікуваних коригувань.\n","minimum":1,"maximum":2147483647},"volumetricWeight":{"type":"integer","description":"Розрахункова вага, визначена на основі габаритів посилки, що використовується для тарифікації у випадках, коли об’єм впливає на вартість більше, ніж фактична вага. Відображає об’ємну (габаритну) вагу посилки.","minimum":0,"maximum":2147483647}}}},"sender":{"type":"object","description":"Містить основну інформацію про сторону, що відправляє вантаж. Надана тут інформація використовується для керування даними про місце відправлення з метою логістичного планування та впливає на розрахунок вартості доставки залежно від місцезнаходження відправника та застосовних правил перевезення. \nЯкщо платником є Відправник і відправлення здійснюється від юридичної особи, параметри \"companyTin\" та \"companyName\" використовуються для застосування індивідуальної знижки контрагента. Якщо знижка не застосовується або її не потрібно враховувати, ці параметри можуть бути порожніми або виключені із запиту.\n","properties":{"companyTin":{"type":"string","description":"Податковий ідентифікаційний номер або еквівалентний ідентифікатор (ЄДРПОУ, TIN, NIP, IČO) юридичної особи.\n\n🔹**Обов’язковий для юридичних та митних документів, якщо відправник є юридичною особою.**\n","maxLength":20,"nullable":true},"companyName":{"type":"string","description":"Офіційна назва компанії відправника. Використовується, якщо відправник є юридичною особою, для ідентифікації організації у документах та облікових записах. Вкажіть `Private person`, якщо відправник не є компанією.","maxLength":100,"nullable":true},"countryCode":{"type":"string","description":"Дволітерний код країни відправника відповідно до стандарту ISO 3166-1 Alpha-2, що визначає країну походження відправлення.","pattern":"^[A-Z]{2}$"},"divisionNumber":{"type":"string","description":"Необов’язковий ідентифікатор, що визначає унікальний номер відділення або поштомата, з якого здійснюється відправлення. Використовується, якщо відправлення здійснюється з конкретного відділення. Поле взаємозамінне з 'divisionId', достатньо передати одне з них. Залишайте null, якщо відправлення здійснюється з адреси без прив’язки до відділення.","nullable":true},"divisionId":{"type":"integer","description":"Необов’язковий ідентифікатор, що представляє унікальний код відділення, з якого здійснюється відправлення. Використовується, коли потрібна обробка через конкретне відділення. Може використовуватись як альтернатива 'divisionNumber', достатньо одного з цих параметрів. Повинен бути null, якщо відправлення здійснюється з адреси без прив’язки до відділення.","nullable":true},"addressParts":{"type":"object","description":"Цей набір полів є обов’язковим при відправленні безпосередньо з адреси та описує місце, з якого відправляється посилка. Він містить детальну адресу, що забезпечує точну ідентифікацію місця забору.","properties":{"city":{"type":"string","description":"Назва міста, з якого здійснюється відправлення. Допомагає точно визначити місце забору або відправлення.","maxLength":100},"region":{"type":"string","description":"Визначає ширшу адміністративну одиницю (наприклад, штат або провінцію), що охоплює місто, надаючи додатковий контекст щодо місця відправлення.","maxLength":100},"street":{"type":"string","description":"Назва вулиці відправника, необхідна для точного визначення місця забору або доставки.","maxLength":100},"postCode":{"type":"string","description":"Поштовий індекс (ZIP-код), що відповідає адресі відправника. Необхідний для ефективного сортування та маршрутизації відправлення.","maxLength":10},"building":{"type":"string","description":"Номер або назва будівлі за вказаною адресою, що дозволяє точно визначити місце забору відправлення.","maxLength":100},"flat":{"type":"string","description":"За наявності - номер квартири або офісу в будівлі, з якої здійснюється відправлення, що дозволяє кур’єру точно знайти потрібне приміщення.","maxLength":10},"block":{"type":"string","description":"Вказує конкретний корпус або секцію в межах великого житлового масиву чи комплексу (за потреби), що допомагає точно визначити місце відправлення вантажу.","maxLength":100,"nullable":true},"note":{"type":"string","description":"Дозволяє вказати додаткову інформацію або інструкції щодо адреси відправника, які можуть полегшити процес забору, такі як коди доступу, конкретні входи або бажаний час для зв’язку.","maxLength":100}}}}},"recipient":{"type":"object","description":"Інформація про отримувача відправлення, що описує фізичну особу або організацію, відповідальну за отримання вантажу.","properties":{"countryCode":{"type":"string","description":"Дволітерний код, що ідентифікує країну отримувача відповідно до стандарту ISO 3166-1 Alpha-2, який визначає країну призначення відправлення.","pattern":"^[A-Z]{2}$"},"divisionNumber":{"type":"string","description":"Необов’язковий ідентифікатор, що використовується для зазначення унікального номера відділення або поштомата, з якого здійснюється отримання відправлення. Актуальний у випадках, коли відправлення спрямоване до конкретного відділення. Це поле є взаємозамінним із 'divisionId', і достатньо передати один із цих ідентифікаторів. Це поле слід залишати null, якщо відправлення адресоване безпосередньо на адресу без прив’язки до відділення.","nullable":true},"divisionId":{"type":"integer","description":"Необов’язковий ідентифікатор, що представляє унікальний код відділення, до якого має бути доставлене відправлення. Як і `recipientDivisionNumber`, цей ідентифікатор є важливим у випадках, коли доставка передбачає обробку через конкретне відділення. Може використовуватися як альтернатива до divisionNumber, достатньо передати один із цих ідентифікаторів для визначення відділення отримання. Це поле слід залишати null, якщо відправлення доставляється на адресу без прив’язки до конкретного відділення.","nullable":true},"addressParts":{"type":"object","description":"Цей набір полів є необхідним, коли відправлення спрямоване на конкретну адресу, і визначає точні деталі місця доставки посилки. Він містить повну адресну інформацію, що забезпечує точну ідентифікацію місця доставки.","properties":{"city":{"type":"string","description":"Місто, до якого здійснюється доставка відправлення. Ця інформація забезпечує спрямування посилки до правильного населеного пункту отримувача.","maxLength":100},"region":{"type":"string","description":"Визначає штат або провінцію отримувача в межах країни призначення, що є критично важливим для коректної маршрутизації та доставки відправлення. При відправленні до США обов’язково слід вказувати дволітерний код штату, наприклад \"WA\" для Вашингтона або \"DC\" для округу Колумбія, відповідно до стандарту ISO 3166-2:US.","maxLength":100},"street":{"type":"string","description":"Назва вулиці за адресою отримувача, необхідна для точного визначення місця доставки.","maxLength":100},"postCode":{"type":"string","description":"Поштовий індекс (ZIP-код) адреси отримувача, критично важливий для точного сортування та маршрутизації посилки до кінцевого пункту призначення.","maxLength":10},"building":{"type":"string","description":"Визначає номер або назву будівлі за адресою отримувача, що дозволяє доставити відправлення до конкретної будівлі на відповідній вулиці.","maxLength":100},"flat":{"type":"string","description":"Номер квартири або офісу (за наявності), якщо доставка здійснюється до будівлі з кількома приміщеннями, що забезпечує доставку посилки до конкретного приміщення отримувача.","maxLength":10},"block":{"type":"string","description":"Визначає корпус або секцію в межах великого житлового масиву чи комплексу для отримувача, що є корисним у великих житлових забудовах для точнішого визначення місця доставки.","maxLength":100,"nullable":true},"note":{"type":"string","description":"Поле для додаткових інструкцій або деталей щодо адреси отримувача, які можуть допомогти під час доставки, таких як умови доступу, конкретні двері для доставки або бажаний час доставки.","maxLength":100}}}}}}}}}},"responses":{"200":{"description":"Successful cost calculation","content":{"application/json":{"schema":{"type":"object","properties":{"scheduledDeliveryDate":{"type":"string","format":"date-time","description":"Орієнтовна дата доставки, розрахована на основі маршрутизації та рівня сервісу. Може змінюватися залежно від логістичних та зовнішніх факторів. Дата у форматі ISO 8601.","nullable":true},"sender":{"type":"object","description":"Надає базову географічну інформацію про відправника як частину даних про місце відправлення у відповіді. Об’єкт містить інформацію про країну відправника та може включати додаткові ідентифікатори місця, такі як `settlementId` та `divisionId`, якщо вони доступні.","properties":{"countryCode":{"type":"string","description":"Дволітерний код країни відправника відповідно до стандарту ISO 3166-1 Alpha-2, що визначає країну походження відправлення.","pattern":"^[A-Z]{2}$"},"settlementId":{"type":"integer","description":"Ідентифікатор населеного пункту (міста або селища), з якого здійснюється відправлення, якщо було вказано `divisionId`. Якщо було вказано домашню адресу відправника, це поле матиме значення null.","nullable":true},"divisionId":{"type":"integer","description":"Унікальний ідентифікатор відділення відправника, з якого здійснюється відправлення, якщо його було вказано. Якщо було вказано домашню адресу відправника, це поле матиме значення null.","nullable":true}}},"recipient":{"type":"object","description":"Надає базову географічну інформацію про отримувача як частину даних про доставку у відповіді. Об’єкт містить інформацію про країну отримувача та може включати додаткові ідентифікатори місця, такі як `settlementId` та `divisionId`, якщо вони доступні.","properties":{"countryCode":{"type":"string","description":"Дволітерний код країни отримувача відповідно до стандарту ISO 3166-1 Alpha-2, що визначає країну призначення відправлення.","pattern":"^[A-Z]{2}$"},"settlementId":{"type":"integer","description":"Ідентифікатор населеного пункту (міста або селища), до якого відправляється відправлення, якщо було вказано `divisionId`. Якщо було вказано домашню адресу отримувача, це поле матиме значення null.","nullable":true},"divisionId":{"type":"integer","description":"Унікальний ідентифікатор відділення або пункту видачі отримувача, якщо його було вказано. Якщо було вказано домашню адресу отримувача, це поле матиме значення null.","nullable":true}}},"services":{"type":"array","description":"Набір сервісів, пов’язаних із відправленням, де кожен елемент описує конкретну послугу, застосовану або запитану для відправлення. Об’єкт містить деталі сервісу, такі як тип послуги, кількість, договірні дані, а також додаткові параметри, що визначають умови або особливості сервісу.","items":{"type":"object","properties":{"shipmentId":{"type":"integer","description":"Унікальний ідентифікатор відправлення, до якого належить ця послуга. Використовується для зв’язування послуги з конкретним відправленням у системі. Це поле може мати значення null або 0, якщо послуга попередньо налаштовується або якщо відправлення ще не створене чи не призначене в системі.","nullable":true},"shipmentParcelRowNumber":{"type":"string","description":"Ідентифікатор місця (посилки) у відправленні, до якого застосовується послуга. Використовується для управління кількома місцями в одному відправленні.","nullable":true},"serviceId":{"type":"string","description":"Унікальний ідентифікатор, призначений конкретній послузі, що описується, необхідний для відстеження та управління послугою."},"serviceType":{"type":"string","description":"Тип послуги.</br>\n**🔹Це поле є необов’язковим.**\n"},"serviceName":{"type":"string","description":"Назва послуги.</br>\n**🔹Це поле є необов’язковим.**\n"},"serviceCode":{"type":"string","description":"Код послуги.</br>\n**🔹Це поле є необов’язковим.**\n"},"amount":{"type":"number","description":"Загальна кількість одиниць або об’єктів, що входять до цієї послуги.","minimum":0},"contractNumber":{"type":"string","description":"Номер договору, в межах якого надається послуга (за наявності). Використовується в B2B або B2C сценаріях.","minLength":2,"maxLength":20,"nullable":true},"payer_type":{"type":"string","description":"Визначає, хто відповідає за оплату послуги. Типові значення: `Sender`, `Recipient` або `ThirdPerson`."},"paymentStatus":{"type":"string","description":"Статус оплати послуг доставки (наприклад, 'Paid', 'NeedPay', 'ContractAfterPayment', 'FreeOfCharge', 'Holded')."},"divisionId":{"type":"string","description":"Унікальний ідентифікатор відділення (за наявності).","nullable":true},"price":{"type":"number","description":"Загальна вартість доставки разом із митними платежами до застосування будь-яких знижок.","minimum":0},"discount":{"type":"number","description":"Будь-яка знижка, застосована до послуги, що зменшує загальну вартість.","minimum":0},"cost":{"type":"number","format":"float","description":"Загальна вартість доставки без урахування митних платежів після застосування персональних знижок.","minimum":0},"user":{"type":"string","description":"Визначає тип користувача, який взаємодіє з послугою. Використовується для внутрішніх потреб.","maxLength":50},"shipmentLockVersion":{"type":"integer","description":"Версія даних відправлення для контролю конкурентного доступу."},"additional_parameters":{"type":"object","description":"Цей об’єкт містить додаткові параметри, що надають критично важливу інформацію для забезпечення коректної обробки та доставки відправлення.","properties":{"cod":{"type":"number","description":"Сума післяплати (COD), якщо застосовується. Визначає суму, яку необхідно стягнути під час доставки, що є критично важливим для операцій, які передбачають оплату при отриманні.","nullable":true},"date":{"type":"integer","description":"Орієнтовна дата доставки, розрахована на основі логістичних даних та інформації про маршрут. Якщо дату доставки неможливо визначити через недостатність даних для обраного напрямку, це поле може містити значення 0.","nullable":true},"from":{"type":"integer","description":"Відображає орієнтовний час початку інтервалу доставки. Це поле може містити значення 0, якщо недостатньо даних для визначення часу початку доставки.","nullable":true},"to":{"type":"integer","description":"Відображає орієнтовний час завершення інтервалу доставки. Аналогічно до параметра from, це поле може містити значення 0, якщо недостатньо даних для визначення часу завершення доставки.","nullable":true},"string":{"type":"integer","description":"Відображає категорію вантажу, визначену в параметрі 'cargoCategory'. Може містити значення, такі як 'Parcel', 'Documents', 'Cargo' або 'Pallet', що відображають тип відправлених товарів.","nullable":true},"fullName":{"type":"integer","description":"Повне ім’я отримувача. Використовується для забезпечення доставки конкретній особі та є необхідним для перевірки під час вручення.","nullable":true},"phone":{"type":"integer","description":"Контактний номер телефону отримувача або представника компанії отримувача. Використовується для сповіщень про доставку та комунікації з клієнтом під час обробки відправлення.\n\n**Формат:** Номер телефону має бути вказаний у **міжнародному форматі** відповідно до стандарту **E.164**.\n\nПриклад: 380XXXXXXXXX, 491234567890, 371XXXXXXXX\n\n**Обмеження:**\n- Для доставки до відділень Nova Post у Європі допускаються українські мобільні номери.\n- Для доставки до **партнерських локацій** (таких як InPost, GLS, Venipak, Cargus тощо) та при **міжнародній адресній доставці**, номер телефону повинен належати мобільному оператору країни отримувача. Якщо номер передано у локальному (не міжнародному) форматі, система намагатиметься нормалізувати його до міжнародного формату, однак внутрішній алгоритм не охоплює всі можливі випадки. Якщо ваша система не підтримує валідацію номерів на стороні інтерфейсу (front-end), рекомендується повідомляти про випадки некоректних номерів для подальшого вдосконалення логіки нормалізації.\n","nullable":true}}},"createdAt":{"type":"string","format":"date-time","description":"Дата та час створення запису, у форматі ISO 8601."},"updatedAt":{"type":"string","format":"date-time","description":"Дата та час останнього оновлення запису, у форматі ISO 8601."},"deliveryType":{"type":"string","description":"Унікальний ідентифікатор (UUID) типу тарифу доставки, використаного в результаті розрахунку.\nЦе значення відповідає внутрішньому ідентифікатору обраного тарифу.\n"},"deliveryTypeName":{"type":"string","description":"Код типу тарифу доставки, застосованого в результаті розрахунку.\n- `standard`: Стандартний тариф на міжнародну доставку.\n- `economy`: Економний тариф на міжнародну доставку.\n- `express`: Експрес-тариф на міжнародну доставку.\n"},"recipientPayerFeesCustomsCost":{"type":"number","description":"Сума митних платежів, яку повинен буде сплатити отримувач, якщо його буде обрано платником митних платежів.","minimum":0},"senderPayerFeesCustomsCost":{"type":"number","description":"Сума митних платежів, яку повинен буде сплатити відправник або третя особа, якщо його буде обрано платником митних платежів.","minimum":0}}}},"messageForFeesCustomsCost":{"type":"array","nullable":true,"description":"Попередження, що повертаються під час розрахунку митних платежів.\n\nЯкщо для одного або кількох УКТЗЕД (HS) кодів не вдалося визначити ставку митних платежів, розрахунок виконується без урахування таких кодів, а інформація про них повертається у цьому полі.\n\nЯкщо попередження відсутні, повертається порожній рядок.\n","items":{"type":"object","properties":{"hsCode":{"type":"string","description":"УКТЗЕД (HS) код, для якого не вдалося виконати розрахунок митних платежів."},"warning":{"type":"string","description":"Код попередження, що описує причину неможливості розрахунку."}}}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/Validation"},"503":{"$ref":"#/components/responses/Time-out"}},"summary":"Розрахунок вартості доставки"}}}}
```


# Page 4

## Створити експрес-накладну до відділення (рядком)

> Метод \*\*save\*\* працює в моделі \*\*InternetDocumentGeneral\*\* та дозволяє створювати (формувати) експрес-накладну (інтернет-документ) до відділення.\
> \
> Після створення інтернет-документа в програмному середовищі API, ЕН з'являється в особистому кабінеті.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.pl/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"paths":{"/json":{"post":{"tags":["InternetDocument"],"summary":"Створити експрес-накладну до відділення (рядком)","description":"Метод **save** працює в моделі **InternetDocumentGeneral** та дозволяє створювати (формувати) експрес-накладну (інтернет-документ) до відділення.\n\nПісля створення інтернет-документа в програмному середовищі API, ЕН з'являється в особистому кабінеті.\n","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["apiKey","modelName","calledMethod","methodProperties"],"properties":{"apiKey":{"type":"string","description":"API ключ."},"modelName":{"type":"string"},"calledMethod":{"type":"string"},"methodProperties":{"type":"object","required":["PayerType","PaymentMethod","DateTime","CargoType","Weight","ServiceType","SeatsAmount","Description","Cost","CitySender","Sender","SenderAddress","ContactSender","SendersPhone","RecipientsPhone","NewAddress","RecipientCityName","RecipientArea","RecipientAreaRegions","RecipientAddressName","RecipientName","RecipientType","SettlementType","EDRPOU"],"properties":{"PayerType":{"type":"string","maxLength":36,"description":"Тип платника (Sender, Recipient, ThirdPerson)"},"PaymentMethod":{"type":"string","maxLength":36,"description":"Форма розрахунку (Cash/NonCash)"},"DateTime":{"type":"string","maxLength":36,"description":"Дата відправки у форматі дд.мм.рррр"},"CargoType":{"type":"string","maxLength":36,"description":"Тип вантажу"},"VolumeGeneral":{"type":"string","maxLength":36,"description":"Загальний об'єм, м.куб (min. 0.0004), обов'язково зазначати, якщо не передається параметр OptionsSeat"},"Weight":{"type":"string","maxLength":36,"description":"Фактична вага, кг (min. 0,1)"},"ServiceType":{"type":"string","maxLength":36,"description":"Технологія доставки (DoorsDoors, DoorsWarehouse, WarehouseWarehouse, WarehouseDoors)"},"SeatsAmount":{"type":"string","maxLength":36,"description":"Кількість місць відправлення, ціле число"},"Description":{"type":"string","maxLength":36,"description":"Текстове поле, вводиться для додаткового опису відправлення"},"Cost":{"type":"string","maxLength":36,"description":"Оціночна вартість, ціле число (якщо не зазначити вартість, то API автоматично проставить мінімальну оціночну вартість — 300.00)"},"CitySender":{"type":"string","maxLength":36,"description":"Ідентифікатор (REF) міста відправника"},"Sender":{"type":"string","maxLength":36,"description":"Ідентифікатор (REF) відправника"},"SenderAddress":{"type":"string","maxLength":36,"description":"Ідентифікатор (REF) адреси відправника. Дані з відповіді методу \"Список адрес контрагента\""},"ContactSender":{"type":"string","maxLength":36,"description":"Ідентифікатор (REF) контактної особи-відправника. Дані з відповіді методу \"Список контактних осіб контрагента\""},"SendersPhone":{"type":"string","maxLength":36,"description":"Телефон відправника у форматі +380660000000, 380660000000, 0660000001"},"RecipientsPhone":{"type":"string","maxLength":36,"description":"Телефон отримувача у форматі +380660000000, 380660000000, 0660000001"},"NewAddress":{"type":"string","maxLength":36,"description":"Використання нового адресного довідника (1 — так, 0 — ні)"},"RecipientCityName":{"type":"string","maxLength":36,"description":"Назва міста отримувача (ЗАЗНАЧАЄТЬСЯ ТЕКСТОМ)"},"RecipientArea":{"type":"string","maxLength":36,"description":"Назва області (ЗАЗНАЧАЄТЬСЯ ТЕКСТОМ)"},"RecipientAreaRegions":{"type":"string","maxLength":36,"description":"Назва району (ЗАЗНАЧАЄТЬСЯ ТЕКСТОМ)"},"RecipientAddressName":{"type":"string","maxLength":36,"description":"Номер відділення"},"RecipientHouse":{"type":"string","maxLength":36,"description":"У разі відправлення на відділення це поле не заповнювати"},"RecipientFlat":{"type":"string","maxLength":36,"description":"У разі відправлення на відділення це поле не заповнювати"},"RecipientName":{"type":"string","description":"ПІБ отримувача (для приватної особи); назва організації отримувача (для організації)","maxLength":255},"RecipientType":{"type":"string","description":"Тип отримувача (Organization/PrivatePerson)\n","enum":["PrivatePerson","Organization"]},"SettlementType":{"type":"string","description":"Тип населеного пункту: значення параметру SettlementTypeDescription з методу getSettlements або значення SettlementTypeCode запиту на онлайн-пошук населених пунктів searchSettlements\n","maxLength":36},"OwnershipForm":{"type":"string","nullable":true,"description":"Ідентифікатор форми власності","maxLength":36},"RecipientContactName":{"type":"string","nullable":true,"description":"ПІБ отримувача","maxLength":255},"EDRPOU":{"type":"string","description":"ЄДРПОУ","maxLength":36}}}}}}}},"responses":{"200":{"description":"Експрес-накладну створено","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"Вказує, чи було запит успішно оброблено."},"data":{"type":"array","description":"Список створених експрес-накладних.","items":{"type":"object","properties":{"Ref":{"type":"string","description":"Ідентифікатор (REF) експрес-накладної","maxLength":36},"CostOnSite":{"type":"string","description":"Вартість доставки","maxLength":36},"EstimatedDeliveryDate":{"type":"string","description":"Прогнозована дата доставки","maxLength":36},"IntDocNumber":{"type":"string","description":"Номер експрес-накладної","maxLength":36},"TypeDocument":{"type":"string","description":"Тип експрес-накладної","maxLength":36}}}}}}}}}}}}}}
```

## Створити експрес-накладну до відділення (XML)

> Метод \*\*save\*\* працює в моделі \*\*InternetDocumentGeneral\*\* та дозволяє створювати (формувати) експрес-накладну (інтернет-документ) до відділення.\
> \
> Після створення інтернет-документа в програмному середовищі API, ЕН з'являється в особистому кабінеті.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.pl/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"paths":{"/xml":{"post":{"tags":["InternetDocument"],"summary":"Створити експрес-накладну до відділення (XML)","description":"Метод **save** працює в моделі **InternetDocumentGeneral** та дозволяє створювати (формувати) експрес-накладну (інтернет-документ) до відділення.\n\nПісля створення інтернет-документа в програмному середовищі API, ЕН з'являється в особистому кабінеті.\n","requestBody":{"required":true,"content":{"application/xml":{"schema":{"type":"object","xml":{"name":"file"},"required":["apiKey","modelName","calledMethod","methodProperties"],"properties":{"apiKey":{"type":"string","description":"API ключ.","xml":{"name":"apiKey"}},"modelName":{"type":"string","xml":{"name":"modelName"}},"calledMethod":{"type":"string","xml":{"name":"calledMethod"}},"methodProperties":{"type":"object","xml":{"name":"methodProperties"},"required":["PayerType","PaymentMethod","DateTime","CargoType","Weight","ServiceType","SeatsAmount","Description","Cost","CitySender","Sender","SenderAddress","ContactSender","SendersPhone","RecipientsPhone","NewAddress","RecipientCityName","RecipientArea","RecipientAreaRegions","RecipientAddressName","RecipientName","RecipientType","SettlementType","EDRPOU"],"properties":{"PayerType":{"type":"string","maxLength":36,"description":"Тип платника (Sender, Recipient, ThirdPerson)","xml":{"name":"PayerType"}},"PaymentMethod":{"type":"string","maxLength":36,"description":"Форма розрахунку (Cash/NonCash)","xml":{"name":"PaymentMethod"}},"DateTime":{"type":"string","maxLength":36,"description":"Дата відправки у форматі дд.мм.рррр","xml":{"name":"DateTime"}},"CargoType":{"type":"string","maxLength":36,"description":"Тип вантажу","xml":{"name":"CargoType"}},"VolumeGeneral":{"type":"string","maxLength":36,"description":"Загальний об'єм, м.куб (min. 0.0004), обов'язково зазначати, якщо не передається параметр OptionsSeat","xml":{"name":"VolumeGeneral"}},"Weight":{"type":"string","maxLength":36,"description":"Фактична вага, кг (min. 0,1)","xml":{"name":"Weight"}},"ServiceType":{"type":"string","maxLength":36,"description":"Технологія доставки (DoorsDoors, DoorsWarehouse, WarehouseWarehouse, WarehouseDoors)","xml":{"name":"ServiceType"}},"SeatsAmount":{"type":"string","maxLength":36,"description":"Кількість місць відправлення, ціле число","xml":{"name":"SeatsAmount"}},"Description":{"type":"string","maxLength":36,"description":"Текстове поле, вводиться для додаткового опису відправлення","xml":{"name":"Description"}},"Cost":{"type":"string","maxLength":36,"description":"Оціночна вартість, ціле число (якщо не зазначити вартість, то API автоматично проставить мінімальну оціночну вартість — 300.00)","xml":{"name":"Cost"}},"CitySender":{"type":"string","maxLength":36,"description":"Ідентифікатор (REF) міста відправника","xml":{"name":"CitySender"}},"Sender":{"type":"string","maxLength":36,"description":"Ідентифікатор (REF) відправника","xml":{"name":"Sender"}},"SenderAddress":{"type":"string","maxLength":36,"description":"Ідентифікатор (REF) адреси відправника. Дані з відповіді методу \"Список адрес контрагента\"","xml":{"name":"SenderAddress"}},"ContactSender":{"type":"string","maxLength":36,"description":"Ідентифікатор (REF) контактної особи-відправника. Дані з відповіді методу \"Список контактних осіб контрагента\"","xml":{"name":"ContactSender"}},"SendersPhone":{"type":"string","maxLength":36,"description":"Телефон відправника у форматі +380660000000, 380660000000, 0660000001","xml":{"name":"SendersPhone"}},"RecipientsPhone":{"type":"string","maxLength":36,"description":"Телефон отримувача у форматі +380660000000, 380660000000, 0660000001","xml":{"name":"RecipientsPhone"}},"NewAddress":{"type":"string","maxLength":36,"description":"Використання нового адресного довідника (1 — так, 0 — ні)","xml":{"name":"NewAddress"}},"RecipientCityName":{"type":"string","maxLength":36,"description":"Назва міста отримувача (ЗАЗНАЧАЄТЬСЯ ТЕКСТОМ)","xml":{"name":"RecipientCityName"}},"RecipientArea":{"type":"string","maxLength":36,"description":"Назва області (ЗАЗНАЧАЄТЬСЯ ТЕКСТОМ)","xml":{"name":"RecipientArea"}},"RecipientAreaRegions":{"type":"string","maxLength":36,"description":"Назва району (ЗАЗНАЧАЄТЬСЯ ТЕКСТОМ)","xml":{"name":"RecipientAreaRegions"}},"RecipientAddressName":{"type":"string","maxLength":36,"description":"Номер відділення","xml":{"name":"RecipientAddressName"}},"RecipientHouse":{"type":"string","maxLength":36,"description":"У разі відправлення на відділення це поле не заповнювати","xml":{"name":"RecipientHouse"}},"RecipientFlat":{"type":"string","maxLength":36,"description":"У разі відправлення на відділення це поле не заповнювати","xml":{"name":"RecipientFlat"}},"RecipientName":{"type":"string","description":"ПІБ отримувача (для приватної особи); назва організації отримувача (для організації)","maxLength":255,"xml":{"name":"RecipientName"}},"RecipientType":{"type":"string","description":"Тип отримувача (Organization/PrivatePerson)\n","enum":["PrivatePerson","Organization"],"xml":{"name":"RecipientType"}},"SettlementType":{"type":"string","description":"Тип населеного пункту: значення параметру SettlementTypeDescription з методу getSettlements або значення SettlementTypeCode запиту на онлайн-пошук населених пунктів searchSettlements\n","maxLength":36,"xml":{"name":"SettlementType"}},"OwnershipForm":{"type":"string","nullable":true,"description":"Ідентифікатор форми власності","maxLength":36,"xml":{"name":"OwnershipForm"}},"RecipientContactName":{"type":"string","nullable":true,"description":"ПІБ отримувача","maxLength":255,"xml":{"name":"RecipientContactName"}},"EDRPOU":{"type":"string","description":"ЄДРПОУ","maxLength":36,"xml":{"name":"EDRPOU"}}}}}}}}},"responses":{"200":{"description":"Експрес-накладну створено","content":{"application/xml":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"Вказує, чи було запит успішно оброблено."},"data":{"type":"array","description":"Список створених експрес-накладних.","items":{"type":"object","properties":{"Ref":{"type":"string","description":"Ідентифікатор (REF) експрес-накладної","maxLength":36},"CostOnSite":{"type":"string","description":"Вартість доставки","maxLength":36},"EstimatedDeliveryDate":{"type":"string","description":"Прогнозована дата доставки","maxLength":36},"IntDocNumber":{"type":"string","description":"Номер експрес-накладної","maxLength":36},"TypeDocument":{"type":"string","description":"Тип експрес-накладної","maxLength":36}}}}}}}}}}}}}}
```

## Створити експрес-накладну зі зворотною доставкою

> Метод \*\*save\*\* працює в моделі \*\*InternetDocument\*\*. Цей метод дозволяє створювати/формувати експрес-накладну (інтернет-документ) із замовленням послуги \*\*"Зворотна доставка"\*\*.\
> \
> \*\*Увага!\*\* Допустимі значення платника: \*\*"Відправник"\*\* або \*\*"Одержувач"\*\*.\
> \
> Можливо сформувати запит із додатковими послугами.\
> \
> \*\*Формування запиту із замовленням послуги "Зворотна доставка документів із різними підтипами"\*\*\
> \
> Щоб замовити послугу \*\*"Зворотна доставка документів із різними підтипами"\*\*, у параметрі \`UserActions\` необхідно передавати значення \`UserCallSender\` ("Перетелефонувати відправнику"). Це потрібно для того, щоб у разі відсутності в одержувача повного пакета документів або неправильно оформлених документів оператор міг зателефонувати відправнику та уточнити подальші дії.\
> \
> \*\*Можливі підтипи документів:\*\*\
> \
> \- \`Attorney\` — довіреність із підписом та печаткою (доступно лише разом), значення \`true\` або \`false\`\
> \- \`IsTakeAttorney\` — забір довіреності, значення \`1\` — так, \`0\` — ні\
> \- \`WaybillNewPostWithStamp\`; \`WaybillNewPostWithoutStamp\` — експрес-накладна (ЕН) ТОВ "Нова пошта" з підписом та печаткою, значення \`true\` або \`false\`\
> \- \`WaybillNewPostWithStamp\` — ЕН ТОВ "Нова пошта" з печаткою, значення \`true\` або \`false\`\
> \- \`WaybillNewPostWithoutStamp\` — ЕН ТОВ "Нова пошта" з підписом, значення \`true\` або \`false\`\
> \- \`WaybillStateNumber1WithStamp\`; \`WaybillStateNumber1WithoutStamp\` — ТТН державного зразка (№1) з підписом та печаткою, значення \`true\` або \`false\`\
> \- \`WaybillStateNumber1WithStamp\` — ТТН державного зразка (№1) з печаткою, значення \`true\` або \`false\`\
> \- \`WaybillStateNumber1WithoutStamp\` — ТТН державного зразка (№1) з підписом, значення \`true\` або \`false\`\
> \- \`CostWaybillWithStamp\`; \`CostWaybillWithoutStamp\` — видаткова накладна з підписом та печаткою, значення \`true\` або \`false\`\
> \- \`CostWaybillWithStamp\` — видаткова накладна з печаткою, значення \`true\` або \`false\`\
> \- \`CostWaybillWithoutStamp\` — видаткова накладна з підписом, значення \`true\` або \`false\`\
> \- \`InternationalWaybill\` — міжнародна накладна з підписом, значення \`true\` або \`false\`\
> \- \`OrderFrom\` — бланк замовлення з підписом, значення \`true\` або \`false\`\
> \- \`AktPPVWithStamp\`; \`AktPPVWithoutStamp\` — акт прийому-передачі з підписом та печаткою, значення \`true\` або \`false\`\
> \
> \*\*Приклад:\*\*\
> \
> \`\`\`json\
> "BackwardDeliveryData":\
> \[\
> &#x20; {\
> &#x20;   "PayerType": "Sender",\
> &#x20;   "CargoType": "Documents",\
> &#x20;   "Services": {\
> &#x20;     "Attorney": true,\
> &#x20;     "WaybillNewPostWithStamp": true,\
> &#x20;     "UserActions": "UserCallSender"\
> &#x20;   }\
> &#x20; }\
> ]\
> \`\`\`\
> \
> \*\*Формування запиту із замовленням послуги "Зворотна доставка грошей"\*\*\
> \
> \*\*Приклад:\*\*\
> \
> \`\`\`json\
> "BackwardDeliveryData":\
> \[\
> &#x20; {\
> &#x20;   "PayerType": "Sender або Recipient",\
> &#x20;   "CargoType": "Money",\
> &#x20;   "RedeliveryString": "4552"\
> &#x20; }\
> ]\
> \`\`\`\
> \
> \*\*Формування запиту із замовленням послуги "Контроль підпису документів"\*\*\
> \
> \*\*Приклад:\*\*\
> \
> \`\`\`json\
> "BackwardDeliveryData":\
> \[\
> &#x20; {\
> &#x20;   "PayerType": "Sender",\
> &#x20;   "CargoType": "SignedDocuments",\
> &#x20;   "RedeliveryString": ""\
> &#x20; }\
> ]\
> \`\`\`\
> \
> \*\*Формування запиту із замовленням послуги "Зворотна доставка піддонів"\*\*\
> \
> \*\*Увага!\*\* Послуга \*\*"Зворотна доставка піддонів"\*\* тимчасово відключена.\
> \
> \*\*Формування запиту із замовленням послуги "Зворотна доставка двох видів"\*\*\
> \
> \*\*Приклад:\*\*\
> \
> \`\`\`json\
> "BackwardDeliveryData":\
> \[\
> &#x20; {\
> &#x20;   "PayerType": "Sender",\
> &#x20;   "CargoType": "Money",\
> &#x20;   "RedeliveryString": "4552"\
> &#x20; },\
> &#x20; {\
> &#x20;   "PayerType": "Sender",\
> &#x20;   "CargoType": "Trays",\
> &#x20;   "RedeliveryString": "Піддоні( тара)",\
> &#x20;   "Trays": \[\
> &#x20;     {\
> &#x20;       "CargoDescription": "d5c36c5c-a29d-11de-a2ca-000c294065a1",\
> &#x20;       "Amount": "5"\
> &#x20;     },\
> &#x20;     {\
> &#x20;       "CargoDescription": "d5c36c5d-a29d-11de-a2ca-000c294065a1",\
> &#x20;       "Amount": "3"\
> &#x20;     }\
> &#x20;   ]\
> &#x20; }\
> ]\
> \`\`\`\
> \
> \*\*Формування запиту із замовленням послуги "Зворотна доставка документів"\*\*\
> \
> \*\*Приклад:\*\*\
> \
> \`\`\`json\
> "BackwardDeliveryData":\
> \[\
> &#x20; {\
> &#x20;   "PayerType": "Sender або Recipient",\
> &#x20;   "CargoType": "Documents",\
> &#x20;   "RedeliveryString": ""\
> &#x20; }\
> ]\
> \`\`\`\
> \
> Після створення інтернет-документа в програмному середовищі API, ЕН з'являється у відповідному списку в особистому кабінеті.<br>

````json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.pl/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"paths":{"/json":{"post":{"tags":["InternetDocument"],"summary":"Створити експрес-накладну зі зворотною доставкою","description":"Метод **save** працює в моделі **InternetDocument**. Цей метод дозволяє створювати/формувати експрес-накладну (інтернет-документ) із замовленням послуги **\"Зворотна доставка\"**.\n\n**Увага!** Допустимі значення платника: **\"Відправник\"** або **\"Одержувач\"**.\n\nМожливо сформувати запит із додатковими послугами.\n\n**Формування запиту із замовленням послуги \"Зворотна доставка документів із різними підтипами\"**\n\nЩоб замовити послугу **\"Зворотна доставка документів із різними підтипами\"**, у параметрі `UserActions` необхідно передавати значення `UserCallSender` (\"Перетелефонувати відправнику\"). Це потрібно для того, щоб у разі відсутності в одержувача повного пакета документів або неправильно оформлених документів оператор міг зателефонувати відправнику та уточнити подальші дії.\n\n**Можливі підтипи документів:**\n\n- `Attorney` — довіреність із підписом та печаткою (доступно лише разом), значення `true` або `false`\n- `IsTakeAttorney` — забір довіреності, значення `1` — так, `0` — ні\n- `WaybillNewPostWithStamp`; `WaybillNewPostWithoutStamp` — експрес-накладна (ЕН) ТОВ \"Нова пошта\" з підписом та печаткою, значення `true` або `false`\n- `WaybillNewPostWithStamp` — ЕН ТОВ \"Нова пошта\" з печаткою, значення `true` або `false`\n- `WaybillNewPostWithoutStamp` — ЕН ТОВ \"Нова пошта\" з підписом, значення `true` або `false`\n- `WaybillStateNumber1WithStamp`; `WaybillStateNumber1WithoutStamp` — ТТН державного зразка (№1) з підписом та печаткою, значення `true` або `false`\n- `WaybillStateNumber1WithStamp` — ТТН державного зразка (№1) з печаткою, значення `true` або `false`\n- `WaybillStateNumber1WithoutStamp` — ТТН державного зразка (№1) з підписом, значення `true` або `false`\n- `CostWaybillWithStamp`; `CostWaybillWithoutStamp` — видаткова накладна з підписом та печаткою, значення `true` або `false`\n- `CostWaybillWithStamp` — видаткова накладна з печаткою, значення `true` або `false`\n- `CostWaybillWithoutStamp` — видаткова накладна з підписом, значення `true` або `false`\n- `InternationalWaybill` — міжнародна накладна з підписом, значення `true` або `false`\n- `OrderFrom` — бланк замовлення з підписом, значення `true` або `false`\n- `AktPPVWithStamp`; `AktPPVWithoutStamp` — акт прийому-передачі з підписом та печаткою, значення `true` або `false`\n\n**Приклад:**\n\n```json\n\"BackwardDeliveryData\":\n[\n  {\n    \"PayerType\": \"Sender\",\n    \"CargoType\": \"Documents\",\n    \"Services\": {\n      \"Attorney\": true,\n      \"WaybillNewPostWithStamp\": true,\n      \"UserActions\": \"UserCallSender\"\n    }\n  }\n]\n```\n\n**Формування запиту із замовленням послуги \"Зворотна доставка грошей\"**\n\n**Приклад:**\n\n```json\n\"BackwardDeliveryData\":\n[\n  {\n    \"PayerType\": \"Sender або Recipient\",\n    \"CargoType\": \"Money\",\n    \"RedeliveryString\": \"4552\"\n  }\n]\n```\n\n**Формування запиту із замовленням послуги \"Контроль підпису документів\"**\n\n**Приклад:**\n\n```json\n\"BackwardDeliveryData\":\n[\n  {\n    \"PayerType\": \"Sender\",\n    \"CargoType\": \"SignedDocuments\",\n    \"RedeliveryString\": \"\"\n  }\n]\n```\n\n**Формування запиту із замовленням послуги \"Зворотна доставка піддонів\"**\n\n**Увага!** Послуга **\"Зворотна доставка піддонів\"** тимчасово відключена.\n\n**Формування запиту із замовленням послуги \"Зворотна доставка двох видів\"**\n\n**Приклад:**\n\n```json\n\"BackwardDeliveryData\":\n[\n  {\n    \"PayerType\": \"Sender\",\n    \"CargoType\": \"Money\",\n    \"RedeliveryString\": \"4552\"\n  },\n  {\n    \"PayerType\": \"Sender\",\n    \"CargoType\": \"Trays\",\n    \"RedeliveryString\": \"Піддоні( тара)\",\n    \"Trays\": [\n      {\n        \"CargoDescription\": \"d5c36c5c-a29d-11de-a2ca-000c294065a1\",\n        \"Amount\": \"5\"\n      },\n      {\n        \"CargoDescription\": \"d5c36c5d-a29d-11de-a2ca-000c294065a1\",\n        \"Amount\": \"3\"\n      }\n    ]\n  }\n]\n```\n\n**Формування запиту із замовленням послуги \"Зворотна доставка документів\"**\n\n**Приклад:**\n\n```json\n\"BackwardDeliveryData\":\n[\n  {\n    \"PayerType\": \"Sender або Recipient\",\n    \"CargoType\": \"Documents\",\n    \"RedeliveryString\": \"\"\n  }\n]\n```\n\nПісля створення інтернет-документа в програмному середовищі API, ЕН з'являється у відповідному списку в особистому кабінеті.\n","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["apiKey","modelName","calledMethod","methodProperties"],"properties":{"apiKey":{"type":"string","description":"API ключ."},"modelName":{"type":"string"},"calledMethod":{"type":"string"},"methodProperties":{"type":"object","required":["PayerType","PaymentMethod","DateTime","CargoType","Weight","ServiceType","SeatsAmount","Description","Cost","CitySender","Sender","SenderAddress","ContactSender","SendersPhone","CityRecipient","Recipient","RecipientAddress","ContactRecipient","RecipientsPhone","NewAddress","OptionsSeat"],"properties":{"PayerType":{"type":"string","maxLength":36,"description":"Тип платника (Sender, Recipient, ThirdPerson)"},"PaymentMethod":{"type":"string","maxLength":36,"description":"Форма розрахунку (Cash/NonCash)"},"DateTime":{"type":"string","maxLength":36,"description":"Дата відправки у форматі дд.мм.рррр"},"CargoType":{"type":"string","maxLength":36,"description":"Тип вантажу"},"Weight":{"type":"string","maxLength":36,"description":"Фактична вага, кг (min. 0,1)"},"ServiceType":{"type":"string","maxLength":36,"description":"Технологія доставки (DoorsDoors, DoorsWarehouse, WarehouseWarehouse, WarehouseDoors)"},"SeatsAmount":{"type":"string","maxLength":36,"description":"Кількість місць відправлення, ціле число"},"Description":{"type":"string","maxLength":36,"description":"Текстове поле, вводиться для додаткового опису відправлення"},"Cost":{"type":"string","maxLength":36,"description":"Оціночна вартість, ціле число (якщо не зазначити вартість, то АРІ автоматично проставить мінімальну оціночну вартість 300.01)"},"CitySender":{"type":"string","maxLength":36,"description":"Ідентифікатор міста відправника"},"Sender":{"type":"string","maxLength":36,"description":"Ідентифікатор відправника"},"SenderAddress":{"type":"string","maxLength":36,"description":"Ідентифікатор адреси відправника (REF). Дані з відповіді методу «Список адрес контрагента»"},"ContactSender":{"type":"string","maxLength":36,"description":"Ідентифікатор контактної особи відправника (REF). Дані з відповіді методу «Список контактних осіб контрагента»"},"SendersPhone":{"type":"string","maxLength":36,"description":"Телефон відправника у форматі: +380660000000, 380660000000, 0660000001\n"},"CityRecipient":{"type":"string","maxLength":36,"description":"Ідентифікатор міста отримувача"},"Recipient":{"type":"string","maxLength":36,"description":"Ідентифікатор отримувача"},"RecipientAddress":{"type":"string","maxLength":36,"description":"Ідентифікатор адреси отримувача"},"ContactRecipient":{"type":"string","maxLength":36,"description":"Ідентифікатор контактної особи"},"RecipientsPhone":{"type":"string","maxLength":36,"description":"Телефон отримувача у форматі: +380660000000, 380660000000, 0660000001\n"},"NewAddress":{"type":"string","maxLength":36,"description":"Використання нового адресного довідника (1 — так, 0 — ні)"},"OptionsSeat":{"type":"array","description":"Параметр вантажу для кожного місця відправлення","items":{"type":"object"}},"BackwardDeliveryData":{"type":"array","description":"Зворотна доставка підтипів документів","items":{"type":"object"}}}}}}}}},"responses":{"200":{"description":"Приклад XML-запиту для створення експрес-накладної зі зворотною доставкою","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"Вказує, чи було запит успішно оброблено."},"data":{"type":"array","description":"Список створених експрес-накладних.","items":{"type":"object","properties":{"Ref":{"type":"string","description":"Ідентифікатор експрес-накладної","maxLength":36},"CostOnSite":{"type":"string","description":"Вартість доставки","maxLength":36},"EstimatedDeliveryDate":{"type":"string","description":"Прогнозована дата доставки","maxLength":36},"IntDocNumber":{"type":"string","description":"Номер експрес-накладної","maxLength":36},"TypeDocument":{"type":"string","description":"Тип експрес-накладної","maxLength":36}}}}}}}}}}}}}}
````

## Створити експрес-накладну зі зворотною доставкою

> Метод \*\*save\*\* працює в моделі \*\*InternetDocument\*\*. Цей метод дозволяє створювати/формувати експрес-накладну (інтернет-документ) із замовленням послуги \*\*"Зворотна доставка"\*\*.\
> \
> \*\*Увага!\*\* Допустимі значення платника: \*\*"Відправник"\*\* або \*\*"Одержувач"\*\*.\
> \
> Можливо сформувати запит із додатковими послугами.\
> \
> \*\*Формування запиту із замовленням послуги "Зворотна доставка документів із різними підтипами"\*\*\
> \
> Щоб замовити послугу \*\*"Зворотна доставка документів із різними підтипами"\*\*, у параметрі \`UserActions\` необхідно передавати значення \`UserCallSender\` ("Перетелефонувати відправнику"). Це потрібно для того, щоб у разі відсутності в одержувача повного пакета документів або неправильно оформлених документів оператор міг зателефонувати відправнику та уточнити подальші дії.\
> \
> \*\*Можливі підтипи документів:\*\*\
> \
> \- \`Attorney\` — довіреність із підписом та печаткою (доступно лише разом), значення \`true\` або \`false\`\
> \- \`IsTakeAttorney\` — забір довіреності, значення \`1\` — так, \`0\` — ні\
> \- \`WaybillNewPostWithStamp\`; \`WaybillNewPostWithoutStamp\` — експрес-накладна (ЕН) ТОВ "Нова пошта" з підписом та печаткою, значення \`true\` або \`false\`\
> \- \`WaybillNewPostWithStamp\` — ЕН ТОВ "Нова пошта" з печаткою, значення \`true\` або \`false\`\
> \- \`WaybillNewPostWithoutStamp\` — ЕН ТОВ "Нова пошта" з підписом, значення \`true\` або \`false\`\
> \- \`WaybillStateNumber1WithStamp\`; \`WaybillStateNumber1WithoutStamp\` — ТТН державного зразка (№1) з підписом та печаткою, значення \`true\` або \`false\`\
> \- \`WaybillStateNumber1WithStamp\` — ТТН державного зразка (№1) з печаткою, значення \`true\` або \`false\`\
> \- \`WaybillStateNumber1WithoutStamp\` — ТТН державного зразка (№1) з підписом, значення \`true\` або \`false\`\
> \- \`CostWaybillWithStamp\`; \`CostWaybillWithoutStamp\` — видаткова накладна з підписом та печаткою, значення \`true\` або \`false\`\
> \- \`CostWaybillWithStamp\` — видаткова накладна з печаткою, значення \`true\` або \`false\`\
> \- \`CostWaybillWithoutStamp\` — видаткова накладна з підписом, значення \`true\` або \`false\`\
> \- \`InternationalWaybill\` — міжнародна накладна з підписом, значення \`true\` або \`false\`\
> \- \`OrderFrom\` — бланк замовлення з підписом, значення \`true\` або \`false\`\
> \- \`AktPPVWithStamp\`; \`AktPPVWithoutStamp\` — акт прийому-передачі з підписом та печаткою, значення \`true\` або \`false\`\
> \
> \*\*Приклад:\*\*\
> \
> \`\`\`json\
> "BackwardDeliveryData":\
> \[\
> &#x20; {\
> &#x20;   "PayerType": "Sender",\
> &#x20;   "CargoType": "Documents",\
> &#x20;   "Services": {\
> &#x20;     "Attorney": true,\
> &#x20;     "WaybillNewPostWithStamp": true,\
> &#x20;     "UserActions": "UserCallSender"\
> &#x20;   }\
> &#x20; }\
> ]\
> \`\`\`\
> \
> \*\*Формування запиту із замовленням послуги "Зворотна доставка грошей"\*\*\
> \
> \*\*Приклад:\*\*\
> \
> \`\`\`json\
> "BackwardDeliveryData":\
> \[\
> &#x20; {\
> &#x20;   "PayerType": "Sender або Recipient",\
> &#x20;   "CargoType": "Money",\
> &#x20;   "RedeliveryString": "4552"\
> &#x20; }\
> ]\
> \`\`\`\
> \
> \*\*Формування запиту із замовленням послуги "Контроль підпису документів"\*\*\
> \
> \*\*Приклад:\*\*\
> \
> \`\`\`json\
> "BackwardDeliveryData":\
> \[\
> &#x20; {\
> &#x20;   "PayerType": "Sender",\
> &#x20;   "CargoType": "SignedDocuments",\
> &#x20;   "RedeliveryString": ""\
> &#x20; }\
> ]\
> \`\`\`\
> \
> \*\*Формування запиту із замовленням послуги "Зворотна доставка піддонів"\*\*\
> \
> \*\*Увага!\*\* Послуга \*\*"Зворотна доставка піддонів"\*\* тимчасово відключена.\
> \
> \*\*Формування запиту із замовленням послуги "Зворотна доставка двох видів"\*\*\
> \
> \*\*Приклад:\*\*\
> \
> \`\`\`json\
> "BackwardDeliveryData":\
> \[\
> &#x20; {\
> &#x20;   "PayerType": "Sender",\
> &#x20;   "CargoType": "Money",\
> &#x20;   "RedeliveryString": "4552"\
> &#x20; },\
> &#x20; {\
> &#x20;   "PayerType": "Sender",\
> &#x20;   "CargoType": "Trays",\
> &#x20;   "RedeliveryString": "Піддоні( тара)",\
> &#x20;   "Trays": \[\
> &#x20;     {\
> &#x20;       "CargoDescription": "d5c36c5c-a29d-11de-a2ca-000c294065a1",\
> &#x20;       "Amount": "5"\
> &#x20;     },\
> &#x20;     {\
> &#x20;       "CargoDescription": "d5c36c5d-a29d-11de-a2ca-000c294065a1",\
> &#x20;       "Amount": "3"\
> &#x20;     }\
> &#x20;   ]\
> &#x20; }\
> ]\
> \`\`\`\
> \
> \*\*Формування запиту із замовленням послуги "Зворотна доставка документів"\*\*\
> \
> \*\*Приклад:\*\*\
> \
> \`\`\`json\
> "BackwardDeliveryData":\
> \[\
> &#x20; {\
> &#x20;   "PayerType": "Sender або Recipient",\
> &#x20;   "CargoType": "Documents",\
> &#x20;   "RedeliveryString": ""\
> &#x20; }\
> ]\
> \`\`\`\
> \
> Після створення інтернет-документа в програмному середовищі API, ЕН з'являється у відповідному списку в особистому кабінеті.<br>

````json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.pl/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"paths":{"/xml":{"post":{"tags":["InternetDocument"],"summary":"Створити експрес-накладну зі зворотною доставкою","description":"Метод **save** працює в моделі **InternetDocument**. Цей метод дозволяє створювати/формувати експрес-накладну (інтернет-документ) із замовленням послуги **\"Зворотна доставка\"**.\n\n**Увага!** Допустимі значення платника: **\"Відправник\"** або **\"Одержувач\"**.\n\nМожливо сформувати запит із додатковими послугами.\n\n**Формування запиту із замовленням послуги \"Зворотна доставка документів із різними підтипами\"**\n\nЩоб замовити послугу **\"Зворотна доставка документів із різними підтипами\"**, у параметрі `UserActions` необхідно передавати значення `UserCallSender` (\"Перетелефонувати відправнику\"). Це потрібно для того, щоб у разі відсутності в одержувача повного пакета документів або неправильно оформлених документів оператор міг зателефонувати відправнику та уточнити подальші дії.\n\n**Можливі підтипи документів:**\n\n- `Attorney` — довіреність із підписом та печаткою (доступно лише разом), значення `true` або `false`\n- `IsTakeAttorney` — забір довіреності, значення `1` — так, `0` — ні\n- `WaybillNewPostWithStamp`; `WaybillNewPostWithoutStamp` — експрес-накладна (ЕН) ТОВ \"Нова пошта\" з підписом та печаткою, значення `true` або `false`\n- `WaybillNewPostWithStamp` — ЕН ТОВ \"Нова пошта\" з печаткою, значення `true` або `false`\n- `WaybillNewPostWithoutStamp` — ЕН ТОВ \"Нова пошта\" з підписом, значення `true` або `false`\n- `WaybillStateNumber1WithStamp`; `WaybillStateNumber1WithoutStamp` — ТТН державного зразка (№1) з підписом та печаткою, значення `true` або `false`\n- `WaybillStateNumber1WithStamp` — ТТН державного зразка (№1) з печаткою, значення `true` або `false`\n- `WaybillStateNumber1WithoutStamp` — ТТН державного зразка (№1) з підписом, значення `true` або `false`\n- `CostWaybillWithStamp`; `CostWaybillWithoutStamp` — видаткова накладна з підписом та печаткою, значення `true` або `false`\n- `CostWaybillWithStamp` — видаткова накладна з печаткою, значення `true` або `false`\n- `CostWaybillWithoutStamp` — видаткова накладна з підписом, значення `true` або `false`\n- `InternationalWaybill` — міжнародна накладна з підписом, значення `true` або `false`\n- `OrderFrom` — бланк замовлення з підписом, значення `true` або `false`\n- `AktPPVWithStamp`; `AktPPVWithoutStamp` — акт прийому-передачі з підписом та печаткою, значення `true` або `false`\n\n**Приклад:**\n\n```json\n\"BackwardDeliveryData\":\n[\n  {\n    \"PayerType\": \"Sender\",\n    \"CargoType\": \"Documents\",\n    \"Services\": {\n      \"Attorney\": true,\n      \"WaybillNewPostWithStamp\": true,\n      \"UserActions\": \"UserCallSender\"\n    }\n  }\n]\n```\n\n**Формування запиту із замовленням послуги \"Зворотна доставка грошей\"**\n\n**Приклад:**\n\n```json\n\"BackwardDeliveryData\":\n[\n  {\n    \"PayerType\": \"Sender або Recipient\",\n    \"CargoType\": \"Money\",\n    \"RedeliveryString\": \"4552\"\n  }\n]\n```\n\n**Формування запиту із замовленням послуги \"Контроль підпису документів\"**\n\n**Приклад:**\n\n```json\n\"BackwardDeliveryData\":\n[\n  {\n    \"PayerType\": \"Sender\",\n    \"CargoType\": \"SignedDocuments\",\n    \"RedeliveryString\": \"\"\n  }\n]\n```\n\n**Формування запиту із замовленням послуги \"Зворотна доставка піддонів\"**\n\n**Увага!** Послуга **\"Зворотна доставка піддонів\"** тимчасово відключена.\n\n**Формування запиту із замовленням послуги \"Зворотна доставка двох видів\"**\n\n**Приклад:**\n\n```json\n\"BackwardDeliveryData\":\n[\n  {\n    \"PayerType\": \"Sender\",\n    \"CargoType\": \"Money\",\n    \"RedeliveryString\": \"4552\"\n  },\n  {\n    \"PayerType\": \"Sender\",\n    \"CargoType\": \"Trays\",\n    \"RedeliveryString\": \"Піддоні( тара)\",\n    \"Trays\": [\n      {\n        \"CargoDescription\": \"d5c36c5c-a29d-11de-a2ca-000c294065a1\",\n        \"Amount\": \"5\"\n      },\n      {\n        \"CargoDescription\": \"d5c36c5d-a29d-11de-a2ca-000c294065a1\",\n        \"Amount\": \"3\"\n      }\n    ]\n  }\n]\n```\n\n**Формування запиту із замовленням послуги \"Зворотна доставка документів\"**\n\n**Приклад:**\n\n```json\n\"BackwardDeliveryData\":\n[\n  {\n    \"PayerType\": \"Sender або Recipient\",\n    \"CargoType\": \"Documents\",\n    \"RedeliveryString\": \"\"\n  }\n]\n```\n\nПісля створення інтернет-документа в програмному середовищі API, ЕН з'являється у відповідному списку в особистому кабінеті.\n","requestBody":{"required":true,"content":{"application/xml":{"schema":{"type":"object","xml":{"name":"file"},"required":["apiKey","modelName","calledMethod","methodProperties"],"properties":{"apiKey":{"type":"string","description":"API ключ.","xml":{"name":"apiKey"}},"modelName":{"type":"string","xml":{"name":"modelName"}},"calledMethod":{"type":"string","xml":{"name":"calledMethod"}},"methodProperties":{"type":"object","xml":{"name":"methodProperties"},"required":["PayerType","PaymentMethod","DateTime","CargoType","Weight","ServiceType","SeatsAmount","Description","Cost","CitySender","Sender","SenderAddress","ContactSender","SendersPhone","CityRecipient","Recipient","RecipientAddress","ContactRecipient","RecipientsPhone","NewAddress","OptionsSeat"],"properties":{"PayerType":{"type":"string","maxLength":36,"description":"Тип платника (Sender, Recipient, ThirdPerson)","xml":{"name":"PayerType"}},"PaymentMethod":{"type":"string","maxLength":36,"description":"Форма розрахунку (Cash/NonCash)","xml":{"name":"PaymentMethod"}},"DateTime":{"type":"string","maxLength":36,"description":"Дата відправки у форматі дд.мм.рррр","xml":{"name":"DateTime"}},"CargoType":{"type":"string","maxLength":36,"description":"Тип вантажу","xml":{"name":"CargoType"}},"Weight":{"type":"string","maxLength":36,"description":"Фактична вага, кг (min. 0,1)","xml":{"name":"Weight"}},"ServiceType":{"type":"string","maxLength":36,"description":"Технологія доставки (DoorsDoors, DoorsWarehouse, WarehouseWarehouse, WarehouseDoors)","xml":{"name":"ServiceType"}},"SeatsAmount":{"type":"string","maxLength":36,"description":"Кількість місць відправлення, ціле число","xml":{"name":"SeatsAmount"}},"Description":{"type":"string","maxLength":36,"description":"Текстове поле, вводиться для додаткового опису відправлення","xml":{"name":"Description"}},"Cost":{"type":"string","maxLength":36,"description":"Оціночна вартість, ціле число (якщо не зазначити вартість, то АРІ автоматично проставить мінімальну оціночну вартість 300.01)","xml":{"name":"Cost"}},"CitySender":{"type":"string","maxLength":36,"description":"Ідентифікатор міста відправника","xml":{"name":"CitySender"}},"Sender":{"type":"string","maxLength":36,"description":"Ідентифікатор відправника","xml":{"name":"Sender"}},"SenderAddress":{"type":"string","maxLength":36,"description":"Ідентифікатор адреси відправника (REF). Дані з відповіді методу «Список адрес контрагента»","xml":{"name":"SenderAddress"}},"ContactSender":{"type":"string","maxLength":36,"description":"Ідентифікатор контактної особи відправника (REF). Дані з відповіді методу «Список контактних осіб контрагента»","xml":{"name":"ContactSender"}},"SendersPhone":{"type":"string","maxLength":36,"description":"Телефон відправника у форматі: +380660000000, 380660000000, 0660000001\n","xml":{"name":"SendersPhone"}},"CityRecipient":{"type":"string","maxLength":36,"description":"Ідентифікатор міста отримувача","xml":{"name":"CityRecipient"}},"Recipient":{"type":"string","maxLength":36,"description":"Ідентифікатор отримувача","xml":{"name":"Recipient"}},"RecipientAddress":{"type":"string","maxLength":36,"description":"Ідентифікатор адреси отримувача","xml":{"name":"RecipientAddress"}},"ContactRecipient":{"type":"string","maxLength":36,"description":"Ідентифікатор контактної особи","xml":{"name":"ContactRecipient"}},"RecipientsPhone":{"type":"string","maxLength":36,"description":"Телефон отримувача у форматі: +380660000000, 380660000000, 0660000001\n","xml":{"name":"RecipientsPhone"}},"NewAddress":{"type":"string","maxLength":36,"description":"Використання нового адресного довідника (1 — так, 0 — ні)","xml":{"name":"NewAddress"}},"OptionsSeat":{"type":"array","description":"Параметр вантажу для кожного місця відправлення","xml":{"name":"OptionsSeat","wrapped":true},"items":{"type":"object","xml":{"name":"item"}}},"BackwardDeliveryData":{"type":"array","description":"Зворотна доставка підтипів документів","xml":{"name":"BackwardDeliveryData","wrapped":true},"items":{"type":"object","xml":{"name":"item"}}}}}}}}}},"responses":{"200":{"description":"Експрес-накладну створено","content":{"application/xml":{"schema":{"type":"object","xml":{"name":"file"},"properties":{"success":{"type":"boolean","description":"Вказує, чи було запит успішно оброблено.","xml":{"name":"success"}},"data":{"type":"array","description":"Список створених експрес-накладних.","xml":{"name":"data","wrapped":true},"items":{"type":"object","xml":{"name":"item"},"properties":{"Ref":{"type":"string","description":"Ідентифікатор експрес-накладної","maxLength":36,"xml":{"name":"Ref"}},"CostOnSite":{"type":"string","description":"Вартість доставки","maxLength":36,"xml":{"name":"CostOnSite"}},"EstimatedDeliveryDate":{"type":"string","description":"Прогнозована дата доставки","maxLength":36,"xml":{"name":"EstimatedDeliveryDate"}},"IntDocNumber":{"type":"string","description":"Номер експрес-накладної","maxLength":36,"xml":{"name":"IntDocNumber"}},"TypeDocument":{"type":"string","description":"Тип експрес-накладної","maxLength":36,"xml":{"name":"TypeDocument"}}}}}}}}}}}}}}}
````


# Subscribe to informing

{% @nova-post-newsletter/subscribe %}


# 2026

In this section you can find all Nova Post API changes for 2026 — new features, updates, and important technical modifications.

We recommend reviewing this section regularly to ensure your integration remains up to date with API changes.

{% hint style="info" %}

* Change types: ANNOUNCED CHANGES / ADDED / UPDATED / REMOVED
* New releases are added at the top (latest first).
* One release = one date and version.
* Change descriptions must be concise and technical.
  {% endhint %}

## ANNOUNCED CHANGES&#x20;

* `UPDATE` \
  **Changes to the shipping cost and customs duties calculator for shipments to the United States.**

  More details are available [here.](https://api-portal.novapost.com/changelog-1/documentation-eng)


# December


# November


# October


# September


# August (1)

11 AUG 2026 **`UPDATED`**

Fulfillment v2.0

<details>

<summary>Details</summary>

The [Fulfillment](https://api-portal.novapost.com/metodi-1/methods/fullfillment) methods have been updated with changes to order management, stock remains, validation rules, and request/response formats. Existing integrations must be updated, as these changes are not backward compatible.

<a href="https://api-portal.novapost.com/changelog-1/documentation-eng/fulfillment-rest-api-change-summary" class="button secondary">More details</a>

</details>


# July (2)

30 JUL 2026 **`ADDED`**

API Error Reference

<details>

<summary>Details</summary>

A new page describing [API errors](https://api-portal.novapost.com/metodi-1/methods/api-errors) has been added to the documentation. It contains explanations of error messages that help identify the cause of an issue and understand how to resolve it.

</details>

09 JUL 2026 **`UPDATED`**

Webhook Subscription Type recipientLegal

<details>

<summary>Details</summary>

The documentation for [creating](https://api-portal.novapost.com/metodi-1/methods/webhooks#post-tracking-push-subscribers), [updating](https://api-portal.novapost.com/metodi-1/methods/webhooks#put-tracking-push-subscribers-id), and [retrieving](https://api-portal.novapost.com/metodi-1/methods/webhooks#get-tracking-push-subscribers) webhook subscriptions has been updated. Support for the `recipientLegal` subscription type has been added, allowing webhook subscriptions to track all shipments addressed to a legal recipient. As with the `legal` subscription type, the `companyTins` field is required.

</details>


# June (3)

25 JUN 2026 **`UPDATED`**

Device Serial Numbers

<details>

<summary>Details</summary>

Shipment invoice items for [international shipments to Ukraine](https://api-portal.novapost.com/metodi-1/methods/shipments/create-shipments/cross-border-shipments-to-ukraine) now support the optional `serialNumber` field. The serial number can be used to identify devices and equipment during the Light Return process.

</details>

16 JUN 2026 **`UPDATED`**

Customs Fees Settings Response Updated

<details>

<summary>Details</summary>

The response structure of the customs fees settings method has been updated. Instead of a single declared parcel value threshold, the method now returns minimum and maximum thresholds.

<a href="https://api-portal.novapost.com/changelog-1/documentation-eng/customs-fees-settings-response-update" class="button secondary">More details</a>

</details>

11 JUN 2026 **`ADDED`**

Settlement and Street Dictionaries

<details>

<summary>Details</summary>

New methods have been added to the documentation for searching and obtaining information about [settlements](https://api-portal.novapost.com/metodi-1/methods/dictionaries#get-dictionary-settlements) and [streets](https://api-portal.novapost.com/metodi-1/methods/dictionaries#get-dictionary-streets). The methods provide access to reference data that can be used during shipment creation, including settlement and street identifiers, names, and other related attributes.

</details>


# May (3)

21 MAY 2026 **`UPDATED`**

Default application/json Content-Type for tracking push webhooks

<details>

<summary>Details</summary>

We've updated our tracking push subscription methods to set the default content type to `application/json` for new webhooks and responses, replacing the previous `text/plain` default. All previously created subscriptions will remain unchanged and continue to use `text/plain`.

</details>

20 MAY 2026 **`ADDED`**

Added shipment registry management methods

<details>

<summary>Details</summary>

Implemented unified registry handling functionality for Client API covering both shipment directions: Ukraine and Europe. The update introduces a single integration approach for registry creation and management across supported regions.

<a href="/spaces/LXGLYgqb2zoukydE2trn/pages/ru3YuWbqP1IDgJb4qG4D" class="button secondary">More details</a>

</details>

13 MAY 2026 **`UPDATED`**&#x20;

Added custom invoice attachments for business shipments

<details>

<summary>Details</summary>

Now, within the `invoice` array, you can:

* specify whether the invoice is client-provided;
* define the invoice type and its attributes;
* attach a scanned invoice file.

This allows the system to automatically determine the correct customs codes and synchronize data between the client, Nova Post systems, and customs authorities.

<a href="/spaces/LXGLYgqb2zoukydE2trn/pages/AOUIDlvQeAlnS7qUvK4Y" class="button secondary">More details</a>

</details>


# April (1)

03 APR 2026 **`UPDATED`** &#x20;

New insuranceCurrencyCode parameter for shipments

<details>

<summary>Details</summary>

We've made it easier to declare the insurance value (insuranceCost) for international shipments.

<a href="/spaces/LXGLYgqb2zoukydE2trn/pages/8TcfsoKPOXcdHyrmS1kQ" class="button secondary">More details</a>

</details>


# March (1)

26 MAR 2026 **`UPDATED`** &#x20;

Returning `doc was deleted` response for repeated deletion of a shipment

<details>

<summary>Details</summary>

To correctly handle repeated shipment deletion requests, an additional shipment status check is performed through Tracking Service. The purpose is to return a unified response shipment\_was\_deleted if the shipment has already been deleted.

<a href="/spaces/LXGLYgqb2zoukydE2trn/pages/uiHJlMpv8HKw3ZCVDAR6" class="button secondary">More details</a>

</details>


# February (2)

26 FEB 2026 **`UPDATED`** &#x20;

AllowedInspection Service (Inspection Allowed) (Moldova)

<details>

<summary>Details</summary>

For domestic shipments within Moldova (MD → MD), an additional client API service `AllowedInspection` is available, allowing the recipient to inspect the shipment before receiving it.

<a href="/spaces/LXGLYgqb2zoukydE2trn" class="button secondary">More details</a>

</details>

***

19 FEB 2026 **`ADDED`**&#x20;

A new Fulfillment section has been added to the Postman collection.

[Download](https://documenter.getpostman.com/view/37226773/2sAYQWLZdh#9cb7ef5c-ebdf-4c94-9c73-ed0b49bf06af)


# January (2)

16 JAN 2026 **`UPDATED`**&#x20;

For shipment create/update methods related to Moldova, the volumetric weight calculation formula has been updated (**divisor changed to 5000**).

<details>

<summary>Details</summary>

The volumetric weight (`volumetricWeight`) calculation logic has been updated for shipment create and update methods in cases related to Moldova.

<a href="/spaces/LXGLYgqb2zoukydE2trn/pages/A2s2Il8mNNKdNYqmWF1S" class="button secondary">More details</a>

</details>

16 JAN 2026 **`UPDATED`**&#x20;

For shipment calculation methods related to Moldova, the volumetric weight calculation formula has been updated (**divisor 5000**).

<details>

<summary>Details</summary>

For endpoint shipments/calculations (`POST`, `/shipments/calculations`), the logic of volumetric weight (`volumetricWeight`) calculation is changed for shipments related to **Moldova**.

<a href="/spaces/LXGLYgqb2zoukydE2trn/pages/1quufeYa3UGcQSEivN7t" class="button secondary">More details</a>

</details>


# 2025

In this section you can find all Nova Post API changes for 2025 — new features, updates, and important technical modifications.

We recommend reviewing this section regularly to ensure your integration remains up to date with API changes.

{% hint style="info" %}

* Change types: ANNOUNCED CHANGES / ADDED / UPDATED / REMOVED
* New releases are added at the top (latest first).
* One release = one date and version.
* Change descriptions must be concise and technical.
  {% endhint %}


# December (3)

8 DEC 2025 **`UPDATED`**&#x20;

For the methods in the Webhooks section (Retrieve all subscriptions, Create a new subscription, Update an existing subscription), response parameters in camelCase have been added for all fields that are also returned in snake\_case.

<a href="https://api-portal.novapost.com/metodi-1/methods/webhooks" class="button secondary">More details</a>

8 DEC 2025 **`UPDATED`**&#x20;

В метод додавання номерів доставок до існуючої підписки додано параметри відповіді "addedNumbers" та "missedNumbers".

<a href="https://api-portal.novapost.com/metodi-1/methods/webhooks" class="button secondary">More details</a>

8 DEC 2025 **`ADDED`**

A method description has been added for retrieving country-specific settings that determine whether a sender from Ukraine can pay customs duties and what the maximum allowed parcel value is for international shipments.

<a href="https://api-portal.novapost.com/metodi-1/methods/dictionaries" class="button secondary">More details</a>


# November (5)

24 NOV 2025 **`ADDED`**

Offline reference guide for clients containing the list of settlements in Ukraine where shipment delivery is restricted.

<details>

<summary>Details</summary>

This API provides a daily-updated manifest of Ukrainian settlements where shipment delivery is prohibited. The manifest includes links to localized, gzipped JSON files with detailed settlement information and prohibition flags.

The files are available in both Ukrainian and English for localization support.

The files are updated each day at 5:00 UTC.

**Features:**

* Returns a JSON manifest with URLs to the updated settlement lists.
* Each list is a gzipped JSON file (`.json.gz`).
* Each file is localized (`locale="uk"` for Ukrainian, `locale="en"` for English).
* Settlement records include administrative region, coordinates, postal codes, alternative names, and prohibition flags.

<a href="/spaces/LXGLYgqb2zoukydE2trn/pages/XSfa1oxs2KyQ7AOWCk05" class="button secondary">More details</a>

</details>

17 NOV 2025 **`ADDED`**

A method description has been added for retrieving country settings to determine whether customs duties can be paid by the sender.

<details>

<summary>Details</summary>

The method for obtaining settings for the possibility of paying customs duties by the sender and the maximum value of the parcel by country

<a href="/spaces/LXGLYgqb2zoukydE2trn" class="button secondary">More details</a>

</details>

12 NOV 2025 **`ADDED`**

GET /registry/print

<details>

<summary>Details</summary>

The method allows users to receive a generated PDF file of a registry for further printing.

**European registers** use only general registry type printing.\
**Ukrainian registers** (UA-World) can print\
\- general registry and\
\- international express waybills (IEW),\
\- markings of international express waybills,\
\- invoices of international express waybills.

<a href="/spaces/LXGLYgqb2zoukydE2trn/pages/Irg7rpDA2ek6YPcjl106" class="button secondary">More details</a>

</details>

12 NOV 2025 **`ADDED`**

The method of calculating the cost of delivery.

<details>

<summary>Details</summary>

The method allows users to receive information about the cost of delivery, the cost of paying for customs services, and the cost of other related services.

<a href="/spaces/LXGLYgqb2zoukydE2trn/pages/CifmmU51GW5O6UhnXZTd" class="button secondary">More details</a>

</details>

6 ЛИС 2025 **`ADDED`**

A new method, `Create Light Return Shipment`, has been added to the Shipments section.

<a href="https://api-portal.novapost.com/metodi-1/methods/shipments/return" class="button secondary">More details</a>


# Changes to the shipping cost and customs duties calculator for shipments to the United States

Changes to the customs duties calculation for shipments from Ukraine to the United States have been introduced at the request of customs authorities. Customs duties are now calculated not based on the total invoice value, but taking into account the UCGFEA (HS codes) of the invoice items, their quantity, and their value.

These changes apply to international shipments where the customs duties payer is the sender or a third party.

**How does it work?**

The client provides invoice item details in the request if they want to receive a calculation not only for the shipping cost but also for customs duties. Customs duties are calculated separately for each code.

**Request**

**POST** `v.1.0/shipments/calculations`

**Applicable route**

Shipments from Ukraine to the United States

**Previous behavior**

```
{
  "payerType": "Sender",
  "deliveryTypes": [
    "standard",
    "express"
  ],
  "invoice": {
    "incoterm": "DDP",
    "currency": "USD",
    "payerFeesCustoms": "Sender",
    "cost": 125
  },
  "parcels": [
    {
      "cargoCategory": "parcel",
      "insuranceCost": 125,
      "rowNumber": 1,
      "width": 500,
      "length": 500,
      "height": 500,
      "actualWeight": 15000,
      "volumetricWeight": 25000
    }
  ],
  "sender": {
    "countryCode": "UA",
    "divisionId": 4438
  },
   "recipient": {
        "countryCode": "US",
        "addressParts": {
            "city": "Tucson",
            "region": "AZ",
            "postCode": "85730-4544",
            "street": "4675 S Harrison Rd Unit 191",
            "building": "1"
        }
    }
}
```

The "economy" tariff is not available for shipments to the United States.

**New behavior**

```
{
  "payerType": "Sender",
  "deliveryTypes": [
    "standard",
    "express"
  ],
  "invoice": {
    "incoterm": "DDP",
    "currency": "USD",
    "payerFeesCustoms": "Sender",
    "cost": 125,
    // new fields //
    "items": [
            {
                "hsCode": "4411149200",
                "amount": 5,
                "cost": 25
            }
      ]
    // ---- //
  },
  "parcels": [
    {
      "cargoCategory": "parcel",
      "insuranceCost": 125,
      "rowNumber": 1,
      "width": 500,
      "length": 500,
      "height": 500,
      "actualWeight": 15000,
      "volumetricWeight": 25000
    }
  ],
  "sender": {
    "countryCode": "UA",
    "divisionId": 4438
  },
   "recipient": {
        "countryCode": "US",
        "addressParts": {
            "city": "Tucson",
            "region": "AZ",
            "postCode": "85730-4544",
            "street": "4675 S Harrison Rd Unit 191",
            "building": "1"
        }
    }
}
```

**New request fields**

| Field                   | Type           | Required    | Description                                            |
| ----------------------- | -------------- | ----------- | ------------------------------------------------------ |
| invoice.items           | array\[object] | Conditional | List of invoice items to be declared                   |
| invoice.items\[].hsCode | string         | Yes\*       | UCGFEA or HTSUS code for the United States             |
| invoice.items\[].amount | number         | Yes\*       | Quantity of units for the invoice item                 |
| invoice.items\[].cost   | number         | Yes\*       | Unit value of the invoice item in the invoice currency |

General contract description <https://api-portal.novapost.com/methods/methods/shipments/delivery-cost>.

**Response changes**

The following new fields have been added to the response:

* `recipientPayerFeesCustomsCost` - The value of this field indicates the amount of customs duties that the recipient will be required to pay if they are selected as the customs duties payer.
* `senderPayerFeesCustomsCost` - The value of this field indicates the amount of customs duties that the sender (third party) will be required to pay if they are selected as the customs duties payer.

These fields allow the sender or a third party to compare the customs duties amounts depending on who is selected as the customs duties payer. The service cost is returned in the currency of the shipment's origin country.

The total shipping cost excluding customs duties, including personal discounts, is returned in the `cost` field.

The total shipping cost including customs duties, excluding discounts, is returned in the `price` field.

Successful response

```
{
    "scheduledDeliveryDate": null,
    "sender": {
        "countryCode": "UA",
        "settlementId": 115801,
        "divisionId": 4438
    },
    "recipient": {
        "countryCode": "US",
        "settlementId": null,
        "divisionId": null
    },
    "services": [
        {
            "shipmentId": null,
            "shipmentParcelRowNumber": null,
            "serviceId": null,
            "serviceType": null,
            "serviceName": null,
            "serviceCode": null,
            "amount": 1,
            "contractNumber": null,
            "payerType": "Sender",
            "paymentStatus": "NeedPay",
            "divisionId": null,
            "price": 11259,
            "discount": 0,
            "cost": 11220,
            "user": "",
            "shipmentLockVersion": null,
            "additionalParameters": null,
            "currencyCode": "UAH",
            "createdAt": "2026-08-25T13:07:32.551228Z",
            "updatedAt": "0001-01-01T00:00:00.000000Z",
            "deliveryType": "fe0a07b5-a212-11eb-94e4-b8830365bd14",
            "deliveryTypeName": "standard",
            "recipientPayerFeesCustomsCost": 710,
            "senderPayerFeesCustomsCost": 39
        },
        {
            "shipmentId": null,
            "shipmentParcelRowNumber": null,
            "serviceId": null,
            "serviceType": null,
            "serviceName": null,
            "serviceCode": null,
            "amount": 1,
            "contractNumber": null,
            "payerType": "Sender",
            "paymentStatus": "NeedPay",
            "divisionId": null,
            "price": 11259,
            "discount": 0,
            "cost": 11220,
            "user": "",
            "shipmentLockVersion": null,
            "additionalParameters": null,
            "currencyCode": "UAH",
            "createdAt": "2026-08-25T13:07:32.551252Z",
            "updatedAt": "0001-01-01T00:00:00.000000Z",
            "deliveryType": "aebf0991-ec73-11f0-9dff-8c8474c74d21",
            "deliveryTypeName": "express",
            "recipientPayerFeesCustomsCost": 710,
            "senderPayerFeesCustomsCost": 39
        }
    ],
    "messageForFeesCustomsCost": ""
}
```

Error response (invalid HS code).&#x20;

{% hint style="warning" %}
If you provide an invalid code or we are unable to determine the applicable duty rate, you will receive a warning in the `messageForFeesCustomsCost.warning` field. The calculation will be returned without that code. However, before or during shipment creation, the correct UCGFEA (or HTSUS) code must be specified, and the customs duties amount will be recalculated. We recommend verifying the code in advance or contacting support or your account manager to verify or add the code.
{% endhint %}

```
{
    "scheduledDeliveryDate": null,
    "sender": {
        "countryCode": "UA",
        "settlementId": 115801,
        "divisionId": 4438
    },
    "recipient": {
        "countryCode": "US",
        "settlementId": null,
        "divisionId": null
    },
    "services": [
        {
            "shipmentId": null,
            "shipmentParcelRowNumber": null,
            "serviceId": null,
            "serviceType": null,
            "serviceName": null,
            "serviceCode": null,
            "amount": 1,
            "contractNumber": null,
            "payerType": "Sender",
            "paymentStatus": "NeedPay",
            "divisionId": null,
            "price": 11220,
            "discount": 0,
            "cost": 11220,
            "user": "",
            "shipmentLockVersion": null,
            "additionalParameters": null,
            "currencyCode": "UAH",
            "createdAt": "2026-08-25T13:08:13.391287Z",
            "updatedAt": "0001-01-01T00:00:00.000000Z",
            "deliveryType": "fe0a07b5-a212-11eb-94e4-b8830365bd14",
            "deliveryTypeName": "standard",
            "recipientPayerFeesCustomsCost": 671,
            "senderPayerFeesCustomsCost": 0
        },
        {
            "shipmentId": null,
            "shipmentParcelRowNumber": null,
            "serviceId": null,
            "serviceType": null,
            "serviceName": null,
            "serviceCode": null,
            "amount": 1,
            "contractNumber": null,
            "payerType": "Sender",
            "paymentStatus": "NeedPay",
            "divisionId": null,
            "price": 11220,
            "discount": 0,
            "cost": 11220,
            "user": "",
            "shipmentLockVersion": null,
            "additionalParameters": null,
            "currencyCode": "UAH",
            "createdAt": "2026-08-25T13:08:13.391321Z",
            "updatedAt": "0001-01-01T00:00:00.000000Z",
            "deliveryType": "aebf0991-ec73-11f0-9dff-8c8474c74d21",
            "deliveryTypeName": "express",
            "recipientPayerFeesCustomsCost": 671,
            "senderPayerFeesCustomsCost": 0
        }
    ],
    "messageForFeesCustomsCost": [
        {
            "hsCode": "4411100000",
            "warning": "no_ddc_converted"
        }
    ]
}
```


# Fulfillment REST API Change Summary

### 1. Integration Update Recommendations (Mandatory Adaptation)

As the implemented changes update the API contract specifications, clients must update their integration solutions according to the changes described below to ensure stable operation.&#x20;

**Please note:** these changes are **not backward compatible**.

* **Order endpoint restructuring:** Single order creation via `/orders` has been removed. Batch order creation via `/orders/multiple` has been added.
* **Identifier standardization (id / ids):** A global identifier standardization has been implemented. The API no longer uses prefixed identifiers (`documentId`, `objectBarcodeId`, `documentIds`, `warehouseIds`). Instead, the unified `id` is used for individual objects and path parameters, while `ids` and `destWarehouses` are used for arrays/lists and warehouse identifiers.
* **Delivery type mapping changes (Delivery Type Enums):** In all order endpoints, `1` now represents **Nova Post Shipment**, and `2` represents **Pickup**. Code `2` has changed its business meaning (it now represents **Pickup** instead of **Nova Post Shipment**), and the previous code `5` is no longer supported.
* **Typographical error fix:** The parameter name has been corrected from `waybilNumber` to `waybillNumber` (with two **l** characters).
* **Migration to warehouse business codes:** `destWarehouses` has been introduced instead of `warehouseIds`. It accepts warehouse business codes as strings (for example, `"Boyarka"`).
* **Status field data type change in responses:** In the order status endpoint, the `status` field type has been changed from `string` to `integer` (returns the status ID).
* **Goods barcode creation:** Units of measurement are no longer required when generating or creating a goods barcode.

### 2. Functional Logic Changes (Stock Remains)

* **Barcode independence:** Product information is returned regardless of whether a product has a barcode.
* **Differentiated stock remains logic:** Without product-specific filters (`ids`, `objectArts`, `objectTitles`), the system returns **only** products with actual stock available (`> 0`). When product-specific filters are provided, the requested products are returned **regardless** of whether their stock quantities are zero.

### 3. Validation and Data Normalization Updates

* **Automatic normalization (Trimming):** All incoming string values are trimmed of leading and trailing whitespace, and empty strings are converted to `null`.
* **Strict JSON payload validation:** If a request body contains additional or undocumented properties, the system returns **422 Unprocessable Entity**.
* **Data consistency:** GUID uniqueness is validated within a single request. Conditional field requirements have been introduced (for example, `quantity` is required when `objectId` is provided).

### 4. Changes to JSON Payload and Query Parameter Formats

* **Root-level Array:** Arrays for batch operations must be passed directly as a root-level array (`[...]`) without an enclosing object.
* **Query parameters in GET requests:** Comma-separated array values are no longer supported in GET requests. Array parameters must be specified by repeating the parameter name, for example: `?ids[]=val1&ids[]=val2`.


# Customs Fees Settings Response Update

The response structure of the [method that returns recipient country settings](https://api-portal.novapost.com/metodi-1/methods/dictionaries#get-dictionary-customs-fees-code) used to determine whether customs duties can be paid by the sender has been updated.

**Before**

```json
{
  "customFeeActive": true,
  "declaredCost": 100
}
```

**After**

```json
{
  "customsFeesActive": true,
  "maxDeclaredCost": 500,
  "minDeclaredCost": 10
}
```

**What has changed**

Previously, the method returned only a single declared parcel value threshold.

The method now returns separately:

* the minimum declared value threshold (`minDeclaredCost`);
* the maximum declared value threshold (`maxDeclaredCost`).

This allows a more precise determination of the declared parcel value range within which the option for customs-duty payment by the sender is available. If the declared parcel value is lower than `minDeclaredCost`, customs duties are not applied to the parcel.


# SDK for PHP

The Novapost API SDK is the official PHP SDK (Software Development Kit) for integration with the Nova Post API. With this package, you can quickly and conveniently connect such Nova Post features to your PHP application as shipment creation, parcel tracking, and other services.

**Features/Advantages:**

* **Official Nova Post support** — guaranteed relevance, stability, and developer assistance.
* **Compliance with modern PHP standards** — compatibility with modern frameworks and libraries.
* **Flexibility and extensibility** — replace logger, HTTP client, token storage.
* **Easy integration** — installation via Composer, example usage included.

**Useful Links:**

* [Packagist — Official Package](https://packagist.org/packages/novadigital/novapost-api-sdk)
* [GitHub Repository](https://github.com/NovaDigitalHub/novapost-api-sdk)
* [Issue Tracker (Support & Feedback)](https://github.com/NovaDigitalHub/novapost-api-sdk/issues)

### Requirements

* **Requires** — Runtime dependencies (required for production use):
  * `php >= 8.0` — the package requires PHP 8.0+.
  * `guzzlehttp/guzzle ^7.0` — HTTP client for making requests.
  * `psr/container ^2.0` — compatibility with PSR dependency containers.
  * `psr/log ^3.0` — PSR-compliant logging interfaces.
* **Requires (Dev)** — Dev dependencies (needed only for development/CI):
  * `phpstan/phpstan ^2.1` — static analysis.
  * `phpunit/phpunit ^9.6` — unit tests.
  * `squizlabs/php_codesniffer ^3.13` — code style/linting.
  * `vlucas/phpdotenv ^5.6` — loading environment variables from `.env`.
* **Suggests:** None
* **Provides:** None
* **Conflicts:** None
* **Replaces:** None

### Installation

To get started, install the SDK via [Composer](https://getcomposer.org/) by running the following command:

```
composer require novadigital/novapost-api-sdk
```

### Working with the SDK

#### Client Initialization

After installing the SDK, initialize the client using `NovaPostApiFactory`.\
This allows you to quickly create a client for interacting with the Nova Post API.\
Add the following example to your code:

```
 use NovaDigital\NovaPost\NovaPostApiFactory; use NovaDigital\NovaPost\Exception\ApiException; use NovaDigital\NovaPost\Resources\Division;
$apiKey = 'YOUR_API_KEY';
try {
  $novaPostApi = (new NovaPostApiFactory())($apiKey);
  $searchParams = [
    'textSearch' => 'berlin',
    'divisionCategories' => [Division::DIVISION_CATEGORY_POSTOMAT]
  ];
  $divisions = $novaPostApi->divisions()->get($searchParams);
} catch (ApiException $e) {
    echo "API Error: " . $e->getMessage();
} 
```

#### SDK Method Example

SDK methods have the same names and parameters as the corresponding client API methods.\
To calculate shipment cost, use this example:

```
 try {
  $shipmentData = [
    // shipment calculation data
]; $calculationResult = $novaPostApi->shipments()->calculate($shipmentData); } catch (ApiException $e) {
  echo "API Error: " . $e->getMessage();
} 
```

### Advanced Features

The SDK allows you to replace standard services (logger, HTTP client, token storage, etc.) with your own implementations using the `ContainerBuilder` dependency container.

This is useful if you need to:

* Integrate the SDK with your framework’s logging system.
* Configure an HTTP client with custom parameters or middleware.
* Use your own storage mechanism for JWT tokens.

To do this, pass your custom services to the client factory through `ContainerBuilder`.

#### Using ContainerBuilder

For more flexible configuration, you can use `NovaDigital\NovaPost\DI\ContainerBuilder` to customize different aspects of the client.

```
 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 {
  $containerBuilder = (new ContainerBuilder())
    ->bind(LoggerInterface::class, MyLogger::class)
    ->bind(JwtTokenStorageInterface::class, DbJwtTokenStorageProvider::class);
$novaPostApi = (new NovaPostApiFactory())(
apiKey: $apiKey,
containerBuilder: $containerBuilder
);
$payload = [
// calculation parameters
];
$response = $novaPostApi->shipments()->calculate($payload);
} catch (ApiException $e) {
echo 'API Error => ' . $e->getMessage() . ' (Code => ' . $e->getCode() . ')';
} 
```

#### Available Service Overrides

With `ContainerBuilder`, you can override the following services:

<table><thead><tr><th width="469">Service</th><th>Purpose</th></tr></thead><tbody><tr><td>Psr\Log\LoggerInterface</td><td>Custom logging</td></tr><tr><td>Psr\Http\Client\ClientInterface</td><td>Custom HTTP client configuration</td></tr><tr><td>NovaDigital\NovaPost\Storage\JwtTokenStorageInterface</td><td>Custom JWT token storage</td></tr><tr><td>NovaDigital\NovaPost\Http\ResponseHandlerInterface</td><td>Custom response processing</td></tr><tr><td>NovaDigital\NovaPost\Http\RetryHandlerInterface</td><td>Custom retry logic</td></tr></tbody></table>

#### PSR Compliance

The **NovaPost API SDK** complies with the following PSR standards, ensuring compatibility, modern design, and high code quality:

<table data-search="false"><thead><tr><th width="362">Standard</th><th>Purpose</th></tr></thead><tbody><tr><td><strong>PSR-4: Autoloader</strong></td><td>For class autoloading</td></tr><tr><td><strong>PSR-11: Container Interface</strong></td><td>For a flexible dependency container</td></tr><tr><td><strong>PSR-3: Logger Interface</strong></td><td>Allows using any compatible logger</td></tr><tr><td><strong>PSR-7: HTTP Message Interface</strong></td><td>Used for all API requests and responses</td></tr><tr><td><strong>PSR-18: HTTP Client</strong></td><td>For sending HTTP requests</td></tr><tr><td><strong>PSR-17: HTTP Factories</strong></td><td>For creating PSR-7 messages</td></tr><tr><td><strong>PSR-12: Extended Coding Standard</strong></td><td>For coding style</td></tr></tbody></table>

Following these standards makes the SDK reliable, predictable, and easy to integrate into any modern PHP application.


# The method of calculating the cost of delivery

### General Information <a href="#general-information" id="general-information"></a>

| **Method name**  | The method of calculating the cost of delivery                                                                                                                                                                                                                                                                 |
| ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Direction**    | UA-EU (US)                                                                                                                                                                                                                                                                                                     |
| **HTTP Method**  | POST                                                                                                                                                                                                                                                                                                           |
| **Route(s)**     | <p><code>.../ui/v.1.0/shipments/calculations</code></p><p><code>.../v.1.0/shipments/calculations</code></p><p><code>.../ui/site/v.1.0/shipments/delivery-calculations</code></p><p><code>.../ui/v.1.0/shipments/delivery-calculations</code></p><p><code>.../mobileapp/v.1.1/shipments/calculations</code></p> |
| **Autorization** | `Authorization: Bearer jwt-token…`                                                                                                                                                                                                                                                                             |
| **Related Task** | [APIGW-1256: \[API GW\] Розрахунок вартості оплати митних платежів відправником (DDP) // -->PayerFeesCustoms Done](https://novaposhta.atlassian.net/browse/APIGW-1256)                                                                                                                                         |

### Description <a href="#description" id="description"></a>

The method allows users to receive information about the cost of delivery, the cost of paying for customs services, and the cost of other related services.

### Request and response parameters <a href="#request-and-response-parameters" id="request-and-response-parameters"></a>

Request .../v.1.0/shipments/calculationsResponse .../v.1.0/shipments/calculations

### Changes in the method <a href="#changes-in-the-method" id="changes-in-the-method"></a>

**Previous version**

`{     "payerType": "Sender",     "currency": "USD",     "incoterm": "DDP",     "cost": 90,     "invoice": {} -- not used ///`

**Current version**

`{payerType": "Sender",     "invoice": { "incoterm": "DDP", "currency": "USD", "payerFeesCustoms": "Sender", "cost": 101 /// } ///`

&#x20;

If you want to use parameter “incoterm” = “DDP”, you need to specify parameters "currency", "cost". Otherwise, “incoterm” = “DDP” will be ignored.

### Chema  <a href="#chema" id="chema"></a>

| **Field**               | **Type**        | **Description**                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |                                                                                                        |
| ----------------------- | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ |
| **status**              | enum            | <p>Status of shipment</p><p><strong>Allowed</strong>: ReadyToShip</p>                                                                                                                                                                                                                                                                                                                                                                                                           |                                                                                                        |
| **payerType**           | enum            | <p>Identifies who is responsible for the payment of delivery services. Determines which party bears the cost: Sender, Recipient, or ThirdPerson. Required payerContractNumber for shipments within Europe or from Europe to Ukraine.</p><p><strong>Allowed</strong>: Sender┃Recipient┃ThirdPerson</p><p><em>\* for route</em> <code>/shipments/delivery-calculations</code> <em>- the request response will always return</em> <code>payerType</code> = <code>Sender</code></p> |                                                                                                        |
| **payerContractNumber** | string          | Required when payerType is ThirdPerson for shipments within Europe or from Europe to Ukraine. Specifies the contract number of the third-party payer (e.g., CNPP-00001797).                                                                                                                                                                                                                                                                                                     |                                                                                                        |
| **invoice**             | object          | Informatoin for calculating shipping costs and customs payments                                                                                                                                                                                                                                                                                                                                                                                                                 |                                                                                                        |
| **incoterm**            | enum            | <p>Type of tax calculation.</p><p><strong>Example</strong>: DAP                                                                                                                                                                                                                                                                                                                                                                                                                 | DDP.</p><ul><li><em>DAP - Delivered At Place</em></li><li><em>DDP - Delivered Duty Paid</em></li></ul> |
| **currency**            | enum            | Сurrency code                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |                                                                                                        |
| **cost**                | number          | <p>Declared value of shipment for customs duty deduction. Also indicates maximum compensation in case of loss/damage.</p><p>Requiered if <strong>incoterm</strong> = “DDP”</p><p><strong>Limit</strong>: Min. 1</p>                                                                                                                                                                                                                                                             |                                                                                                        |
| **payerFeesCustoms**    | enum            | <p>Identifies who is responsible for the customs payments. Determines which party bears the cost: Sender, Recipient, or ThirdPerson.</p><p><strong>Allowed</strong>: Sender┃Recipient┃ThirdPerson</p>                                                                                                                                                                                                                                                                           |                                                                                                        |
| **parcels**             | array of object | An array of parcel objects representing distinct packages within the shipment, including dimensions, weight, and details for delivery cost calculation.                                                                                                                                                                                                                                                                                                                         |                                                                                                        |
| **cargoCategory**       | enum            | <p>Specifies the type of shipment. Categories: parcel, documents, cargo. Affects shipping method, cost, and documentation.</p><p><strong>Allowed</strong>: parcel┃documents┃cargo</p>                                                                                                                                                                                                                                                                                           |                                                                                                        |
| **insuranceCost**       | number          | <p>Declared value of shipment for insurance coverage. Indicates maximum compensation in case of loss/damage.</p><p><strong>Constraints</strong>: Min 1</p>                                                                                                                                                                                                                                                                                                                      |                                                                                                        |
| **rowNumber**           | integer         | <p>Sequential identifier for each parcel in the shipment.</p><p>If only one parcel, value = 1.</p><p><strong>Constraints</strong>: Min 1</p>                                                                                                                                                                                                                                                                                                                                    |                                                                                                        |
| **width**               | integer         | <p>Parcel width in millimeters. Used to calculate volume.</p><p><strong>Constraints</strong>: Min 1</p>                                                                                                                                                                                                                                                                                                                                                                         |                                                                                                        |
| **length**              | integer         | <p>Parcel length in millimeters. Used to calculate volume.</p><p><strong>Constraints</strong>: Min 1</p>                                                                                                                                                                                                                                                                                                                                                                        |                                                                                                        |
| **height**              | integer         | <p>Parcel height in millimeters. Used to calculate volume.</p><p><strong>Constraints</strong>: Min 1</p>                                                                                                                                                                                                                                                                                                                                                                        |                                                                                                        |
| **actualWeight**        | integer         | <p>Real parcel weight in grams. Round to nearest 10 g before sending.</p><p><strong>Constraints</strong>: Min 1┃Max 2147483647</p>                                                                                                                                                                                                                                                                                                                                              |                                                                                                        |
| **sender**              | object          | Information about the sender. Includes origin details, affects logistics and cost calculations.                                                                                                                                                                                                                                                                                                                                                                                 |                                                                                                        |
| **divisionNumber**      | string┃null     | Optional sender post office division number. Interchangeable with divisionId/ postCode                                                                                                                                                                                                                                                                                                                                                                                          |                                                                                                        |
| **divisionId**          | integer┃null    | Optional sender division code. Interchangeable with divisionNumber / postCode                                                                                                                                                                                                                                                                                                                                                                                                   |                                                                                                        |
| **addressParts**        | object          | Required when shipping from an address. Contains detailed address components.                                                                                                                                                                                                                                                                                                                                                                                                   |                                                                                                        |
| **postCode**            | string          | <p>Postal/ZIP code of sender.</p><p><strong>Constraints</strong>: Max 10 chars</p>                                                                                                                                                                                                                                                                                                                                                                                              |                                                                                                        |
| **recipient**           | object          | Information about the party receiving the shipment.                                                                                                                                                                                                                                                                                                                                                                                                                             |                                                                                                        |
| **countryCode**         | string          | <p>ISO 3166-1 Alpha-2 code for recipient’s country.</p><p><strong>Pattern</strong>: ^\[A-Z]{2}$</p>                                                                                                                                                                                                                                                                                                                                                                             |                                                                                                        |
| **divisionNumber**      | string┃null     | Optional recipient post office division number. Interchangeable with divisionId / postCode                                                                                                                                                                                                                                                                                                                                                                                      |                                                                                                        |
| **divisionId**          | integer┃null    | Optional recipient division code. Interchangeable with divisionNumber / postCode                                                                                                                                                                                                                                                                                                                                                                                                |                                                                                                        |
| **addressParts**        | object          | Required when delivering to a specific address. Contains detailed address fields.                                                                                                                                                                                                                                                                                                                                                                                               |                                                                                                        |
| **postCode**            | string          | <p>Postal/ZIP code for recipient.</p><p><strong>Constraints</strong>: Max 10 chars</p>                                                                                                                                                                                                                                                                                                                                                                                          |                                                                                                        |

### Acceptable HTTP status codes response <a href="#acceptable-http-status-codes-response" id="acceptable-http-status-codes-response"></a>

| **HTTP-code** | **Status**           | **Description**                                                                |
| ------------- | -------------------- | ------------------------------------------------------------------------------ |
| 200           | OK                   | Request successful. The server has responded as required.                      |
| 422           | Unprocessable entity | The request was well-formed but had semantic errors + the reason for the error |

{% @nova-post-newsletter/subscribe %}


# Added shipment registry management methods

## Registers in Europe <a href="#id-2.-registers-in-europe" id="id-2.-registers-in-europe"></a>

**Restrictions:**

* are created only for shipments that are in ReadyToShip status;
* there is only one shipping point for all shipments in the registry;
* the user performing operations with the registry is associated with the sender organization (for legal entities) or is the sender in the shipments;
* the maximum number of shipments in the registry is 100.

### Creating a new registry with shipment <a href="#id-2.1-creating-a-new-registry-with-shipment" id="id-2.1-creating-a-new-registry-with-shipment"></a>

This method is used to create a client registry for shipments from Europe.

#### Request <a href="#request" id="request"></a>

The Method `POST v.1.0/registry`

```
{
  "description": "My_new_registry",
  "shipments": [
     "SHPL0462195188"
  ]
}
```

#### Response <a href="#response" id="response"></a>

The state`200 OK Request successful. The server responded as required.`

```
{
    "id": "948086",
    "number": "CRPL0000041723",
    "versionTracking": null,
    "status": "Open",
    "createdAt": "2026-05-19T14:46:28.232180Z",
    "updatedAt": "2026-05-19T14:46:28.232180Z",
    "deletedAt": null,
    "posted": null,
    "printed": null,
    "scannedBarcodesAmount": 1,
    "forScanBarcodesAmount": 0,
    "description": "My_new_registry",
    "senderCompanyId": null,
    "senderCompanyTin": "",
    "senderPhone": "48512345678",
    "senderCountryCode": "PL",
    "senderSettlementId": "22326",
    "senderSettlementExternalId": null,
    "senderSettlementName": "Warsaw",
    "senderDivisionId": "1888318",
    "senderDivisionExternalId": null,
    "senderDivisionName": "Post branch 11",
    "senderAddress": "02-495, Polska, Województwo mazowieckie, Warszawa County, Warszawa, Stanisława Wojciechowskiego, 39 lok.1, , , ",
    "senderAddressParts": {
        "city": "Warszawa",
        "region": "Warszawa County",
        "street": "Stanisława Wojciechowskiego",
        "streetId": null,
        "postCode": "02-495",
        "building": "39 lok.1",
        "flat": "",
        "block": "",
        "latitude": 52.1947201268,
        "longitude": 20.8706685393,
        "note": "",
        "addressId": null
    },
    "shipments": [
        {
            "shipmentId": "1401932",
            "shipmentNumber": "SHPL0462195188",
            "destinationDivision": {
                "name": "WARSZAWA 11",
                "id": 1888318,
                "number": "02/11"
            }
        }
    ]
}
```

#### Errors <a href="#errors" id="errors"></a>

| **Error** | **Meaning**         |
| --------- | ------------------- |
| 401       | Unauthorized        |
| 422       | Validation error    |
| 503       | Connection time-out |

### Adding a shipment to an existing registry <a href="#id-2.2-adding-a-shipment-to-an-existing-registry" id="id-2.2-adding-a-shipment-to-an-existing-registry"></a>

#### Description <a href="#description.1" id="description.1"></a>

This method is used to add a shipment to an existing client registry.

#### Query Parameter <a href="#query-parameter" id="query-parameter"></a>

{id} - unique identifier of the registry

#### Request  <a href="#request.1" id="request.1"></a>

The method`POST v.1.0/registry/{id}/shipments`

```
{
  "shipments": [
     "SHPL8187197311"
  ]
}
```

#### Response <a href="#response.1" id="response.1"></a>

The state `200 OK Request successful. The server has responded as required.`

```
{
    "id": "948086",
    "number": "CRPL0000041723",
    "versionTracking": null,
    "status": "Open",
    "createdAt": "2026-05-19T14:46:28.232000Z",
    "updatedAt": "2026-05-19T14:46:28.574000Z",
    "deletedAt": null,
    "posted": false,
    "printed": false,
    "scannedBarcodesAmount": 2,
    "description": "My_new_registry",
    "senderCompanyId": null,
    "senderCompanyTin": "",
    "senderPhone": "48512345678",
    "senderCountryCode": "PL",
    "senderSettlementId": "22326",
    "senderSettlementExternalId": null,
    "senderSettlementName": "Warsaw",
    "senderDivisionId": "1888318",
    "senderDivisionExternalId": null,
    "senderDivisionName": "Post branch 11",
    "senderAddress": "02-495, Polska, Województwo mazowieckie, Warszawa County, Warszawa, Stanisława Wojciechowskiego, 39 lok.1, , , ",
    "senderAddressParts": {
        "city": "Warszawa",
        "region": "Warszawa County",
        "street": "Stanisława Wojciechowskiego",
        "streetId": null,
        "postCode": "02-495",
        "building": "39 lok.1",
        "flat": "",
        "block": "",
        "latitude": 52.1947201268,
        "longitude": 20.8706685393,
        "note": null,
        "addressId": null
    },
    "shipments": [
        {
            "shipmentId": "3168550",
            "shipmentNumber": "SHPL0462195188"
        },
        {
            "shipmentId": "3168827",
            "shipmentNumber": "SHPL8187197311"
        }
    ]
}
```

#### Errors <a href="#errors.1" id="errors.1"></a>

| **Error** | **Meaning**         |
| --------- | ------------------- |
| 401       | Unauthorized        |
| 422       | Validation error    |
| 503       | Connection time-out |

### Removing a shipment from the registry <a href="#id-2.3-removing-a-shipment-from-the-registry" id="id-2.3-removing-a-shipment-from-the-registry"></a>

#### Description <a href="#description.2" id="description.2"></a>

This method removes a shipment from an existing client registry.

#### Query Parameter <a href="#query-parameter.1" id="query-parameter.1"></a>

{id} - unique identifier of the registry

#### Request  <a href="#request.2" id="request.2"></a>

The method`DELETE v.1.0/registry/{id}/shipments`

```
{
  "shipments": [
     "SHPL8187197311"
  ]
}
```

#### Response <a href="#response.2" id="response.2"></a>

The state `200 OK Request successful. The server has responded as required.`

```
{
    "id": "948086",
    "number": "CRPL0000041723",
    "versionTracking": null,
    "status": "Open",
    "createdAt": "2026-05-19T14:46:28.232000Z",
    "updatedAt": "2026-05-19T14:46:28.574000Z",
    "deletedAt": null,
    "posted": false,
    "printed": false,
    "scannedBarcodesAmount": 2,
    "description": "My_new_registry",
    "senderCompanyId": null,
    "senderCompanyTin": "",
    "senderPhone": "48512345678",
    "senderCountryCode": "PL",
    "senderSettlementId": "22326",
    "senderSettlementExternalId": null,
    "senderSettlementName": "Warsaw",
    "senderDivisionId": "1888318",
    "senderDivisionExternalId": null,
    "senderDivisionName": "Post branch 11",
    "senderAddress": "02-495, Polska, Województwo mazowieckie, Warszawa County, Warszawa, Stanisława Wojciechowskiego, 39 lok.1, , , ",
    "senderAddressParts": {
        "city": "Warszawa",
        "region": "Warszawa County",
        "street": "Stanisława Wojciechowskiego",
        "streetId": null,
        "postCode": "02-495",
        "building": "39 lok.1",
        "flat": "",
        "block": "",
        "latitude": 52.1947201268,
        "longitude": 20.8706685393,
        "note": null,
        "addressId": null
    },
    "shipments": [
        {
            "shipmentId": "3168550",
            "shipmentNumber": "SHPL0462195188"
        }
    ]
}
```

#### Errors <a href="#errors.2" id="errors.2"></a>

| **Error** | **Meaning**         |
| --------- | ------------------- |
| 401       | Unauthorized        |
| 422       | Validation error    |
| 503       | Connection time-out |

### Deleting the registry <a href="#id-2.4-deleting-the-registry" id="id-2.4-deleting-the-registry"></a>

#### Description <a href="#description.3" id="description.3"></a>

This method completely deletes the client registry, but first you need to delete all shipments.

#### Query Parameter <a href="#query-parameter.2" id="query-parameter.2"></a>

{id} - unique identifier of the registry

#### Request  <a href="#request.3" id="request.3"></a>

The method`DELETE v.1.0/registry/{id}`

#### Response <a href="#response.3" id="response.3"></a>

```
{
    "success": true
}
```

#### Errors <a href="#errors.3" id="errors.3"></a>

| **Error** | **Meaning**         |
| --------- | ------------------- |
| 401       | Unauthorized        |
| 422       | Validation error    |
| 503       | Connection time-out |

### Renaming the registry <a href="#id-2.5-renaming-the-registry" id="id-2.5-renaming-the-registry"></a>

#### Description <a href="#description.4" id="description.4"></a>

This method renames an existing client registry.

#### Query Parameter <a href="#query-parameter.3" id="query-parameter.3"></a>

{id} - unique identifier of the registry

#### Request  <a href="#request.4" id="request.4"></a>

The method`PUT v.1.0/registry/{id}/rename`

```
{
   "description": "new name"
}
```

#### Response <a href="#response.4" id="response.4"></a>

The state `200 OK Request successful. The server has responded as required.`

```
{
    "id": "948086",
    "number": "CRPL0000041723",
    "versionTracking": null,
    "status": "Open",
    "createdAt": "2026-05-19T14:46:28.232000Z",
    "updatedAt": "2026-05-19T14:46:28.574000Z",
    "deletedAt": null,
    "posted": false,
    "printed": false,
    "scannedBarcodesAmount": 1,
    "description": "new name",
    "senderCompanyId": null,
    "senderCompanyTin": "",
    "senderPhone": "48512345678",
    "senderCountryCode": "PL",
    "senderSettlementId": "22326",
    "senderSettlementExternalId": null,
    "senderSettlementName": "Warsaw",
    "senderDivisionId": "1888318",
    "senderDivisionExternalId": null,
    "senderDivisionName": "Post branch 11",
    "senderAddress": "02-495, Polska, Województwo mazowieckie, Warszawa County, Warszawa, Stanisława Wojciechowskiego, 39 lok.1, , , ",
    "senderAddressParts": {
        "city": "Warszawa",
        "region": "Warszawa County",
        "street": "Stanisława Wojciechowskiego",
        "streetId": null,
        "postCode": "02-495",
        "building": "39 lok.1",
        "flat": "",
        "block": "",
        "latitude": 52.1947201268,
        "longitude": 20.8706685393,
        "note": null,
        "addressId": null
    },
    "shipments": [
        {
            "shipmentId": "3168550",
            "shipmentNumber": "SHPL0462195188"
        }
    ]
}
```

#### Errors <a href="#errors.4" id="errors.4"></a>

| **Error** | **Meaning**         |
| --------- | ------------------- |
| 401       | Unauthorized        |
| 422       | Validation error    |
| 503       | Connection time-out |

### Printing the registry <a href="#id-2.6-printing-the-registry" id="id-2.6-printing-the-registry"></a>

#### Description <a href="#description.5" id="description.5"></a>

This method returns a file for printing the client registry

#### Query Parameter <a href="#query-parameter.4" id="query-parameter.4"></a>

{id} - unique identifier of the registry

#### Request  <a href="#request.5" id="request.5"></a>

The method`GET v.1.0/registry/print?id=948086`

#### Response <a href="#response.5" id="response.5"></a>

The state `200 OK Request successful. The server has responded as required.`

```
file
```

#### Errors <a href="#errors.5" id="errors.5"></a>

| **Error** | **Meaning**         |
| --------- | ------------------- |
| 401       | Unauthorized        |
| 422       | Validation error    |
| 503       | Connection time-out |

### Requesting a list of registries <a href="#id-2.7-requesting-a-list-of-registries" id="id-2.7-requesting-a-list-of-registries"></a>

#### Description <a href="#description.6" id="description.6"></a>

Цей метод повертає список реєстрів по заданим користувачем фільтрам.

#### Query Parameter <a href="#query-parameter.5" id="query-parameter.5"></a>

| **Field**         | **Type** | **Possible Value**          | **Description**                                                                                                                                                                                                                                                                                                                        |
| ----------------- | -------- | --------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| isEURegistry      | boolean  | true                        | Mandatory parameter for European registers.                                                                                                                                                                                                                                                                                            |
| ids\[]            | string   | **Example:** 948086         | Unique registry identifiers for which information should be obtained.                                                                                                                                                                                                                                                                  |
| numbers\[]        | string   | **Example:** CRPL0000041723 | Unique registry number for which information should be obtained.                                                                                                                                                                                                                                                                       |
| settlementIds\[]  | string   | **Example:** 22326          | Unique identifier of the settlement.                                                                                                                                                                                                                                                                                                   |
| withShipmentsInfo | boolean  | **Example:** true           | When this parameter is specified, the shipment information array will include the shipment ID, shipment number, total weight, total value, invoice currency (if available), and invoice availability. If the parameter is not specified or is set to false, the shipments block will contain only the shipment ID and shipment number. |
| createdAtFrom     | date     | **Example:** 01.05.2026     | Start date of the registry filtering period. Used to retrieve records created from this date inclusive. The field `createdAtFrom` must be a date earlier than `createdAtTo`                                                                                                                                                            |
| createdAtTo       | date     | **Example:** 20.05.2026     | End date of the registry filtering period. Used to retrieve records created before this date (exclusive).                                                                                                                                                                                                                              |
| page              | integer  | **Example:** 1              | Page number to return.                                                                                                                                                                                                                                                                                                                 |
| limit             | integer  | **Example:** 5              | Maximum number of items to return per page.                                                                                                                                                                                                                                                                                            |

#### Request <a href="#request.6" id="request.6"></a>

The method`GET v.1.0/registry`

```
{
    "current_page": 1,
    "last_page": 1,
    "per_page": 15,
    "total": 1,
    "items": [
        {
            "id": "948086",
            "number": "CRPL0000041723",
            "createdAt": "2026-05-19T14:46:28.232000Z",
            "updatedAt": "2026-05-20T07:01:01.787000Z",
            "deletedAt": null,
            "posted": false,
            "printed": false,
            "description": "new name",
            "status": "Open",
            "type": "Client",
            "createdByUser": "255ea89d-8c1f-47ec-8f2e-64486bd24f5f",
            "scannedBarcodesAmount": 0,
            "source": "clientapi",
            "companyId": null,
            "companyTin": "",
            "companyName": "Private person",
            "fullName": "Oksana Hrechaniuk",
            "phone": "48512345678",
            "countryCode": "PL",
            "country": "Poland",
            "settlementId": "22326",
            "settlementName": "Warsaw",
            "divisionId": "1888318",
            "divisionName": "Post branch 11",
            "address": "02-495, Polska, Województwo mazowieckie, Warszawa County, Warszawa, Stanisława Wojciechowskiego, 39 lok.1, , , ",
            "addressParts": {
                "city": "Warszawa",
                "region": "Warszawa County",
                "street": "Stanisława Wojciechowskiego",
                "streetId": null,
                "postCode": "02-495",
                "building": "39 lok.1",
                "flat": "",
                "block": "",
                "latitude": 52.1947201268,
                "longitude": 20.8706685393,
                "note": null,
                "addressId": null
            },
            "currencyCode": "PLN",
            "shipmentsInfo": [
                {
                    "id": "3168550",
                    "number": "SHPL0462195188",
                    "totalWeight": 2000,
                    "totalCost": 65,
                    "currencyCode": "PLN",
                    "invoice": true
                }
            ]
        }
    ]
}
```


# Added custom invoice attachments for business shipments

**Endpoint:**

POST v.1.0/shipments

PUT v.1.0/shipments/{id}

In accordance with customs requirements, starting from April 15, corporate clients will be able to additionally upload their own invoice form with a physical signature or a completed, signed, and scanned invoice template to the international express waybill in order to ensure proper cargo documentation support.

What’s new?

Previously, clients could attach their own invoice forms, but customs officers identified them only after the physical inspection of the cargo.

There was also a risk of incorrect invoice type identification (commercial invoice or invoice issued free of charge), which could cause delays in customs clearance processing.

Now, within the `invoice` array, you can:

* specify whether the invoice is client-provided;
* define the invoice type and its attributes;
* attach a scanned invoice file.

This allows the system to automatically determine the correct customs codes and synchronize data between the client, Nova Post systems, and customs authorities.

Additionally, in this scenario, the client must provide a flag confirming that the invoice has been physically signed.

How it works:

New fields for attaching a client invoice have been added to the request for creating or updating an international express waybill.

The system identifies the presence of a client invoice and transfers this information to the customs broker.

Please note that this functionality is available both for:

* creating an international express waybill;
* updating an international express waybill.

| Field name          | Type     | Description                                                                                                                                                                |
| ------------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `clientInvoice`     | int      | <p>Indicates whose invoice is used.</p><p><code>1</code> — client invoice</p><p><code>0</code> — Nova Post template</p><p>Default value: <code>0</code></p>                |
| `invoiceType`       | enum     | <p>Invoice type:</p><p><code>Invoice</code> — commercial invoice</p><p><code>ProformaInvoice</code> — free-of-charge invoice</p><p>Default value: <code>Invoice</code></p> |
| `customerNumber`    | string   | <p>Client invoice number (for client invoice).</p><p>Required if <code>clientInvoice = 1</code></p>                                                                        |
| `customerCreatedAt` | datetime | <p>Client invoice date (for client invoice).</p><p>Default value: current date</p>                                                                                         |
| `invoiceSign`       | int      | <p>Indicates that the client signed the invoice file.</p><p>Required if <code>clientInvoice = 1</code></p>                                                                 |
| `invoiceFile`       | object   | Object for transferring client invoice file data                                                                                                                           |
| `base64Content`     | string   | <p>File content in Base64 format.</p><p>Required if <code>clientInvoice = 1</code></p>                                                                                     |
| `filename`          | string   | <p>Client-defined file name.</p><p>Required if <code>clientInvoice = 1</code></p>                                                                                          |

Example of filling in:

```
"invoice": {
        "incoterm": "DAP",
        "payerFeesCustoms": "Recipient",
        "cost": 1478,
        "currency": "UAH",
        "exportReasonNote": "",
        "exportReasonNoteEng": "",
        "exportReason": "Selling",
        // --- нові поля --- //
        "clientInvoice": 1,
        "invoiceType": "Invoice", 
        "invoiceSign": 1,
        "customerNumber": "1234",
        "customerCreatedAt": null,
        "invoiceFile": {
            "base64Content": "base64....",
            "filename": "інвойс.pdf"
        }
        // --- *** --- //
```

After creating the international express waybill, you will be able to add additional accompanying documents, retrieve the list of already uploaded documents, or download a file for verification.


# New insuranceCurrencyCode parameter for shipments

**Endpoint:** POST / PUT v.1.0/shipments

We've made it easier to declare the insurance value (insuranceCost) for international shipments.

**What's new?**

Previously, insuranceCost had to be provided strictly in the currency of the sender's country. This meant that clients shipping from Europe or other regions had to manually convert the declared value before submitting the request.

Now, a new optional parameter insuranceCurrencyCode is available in the parcels array. It allows you to specify the currency of the declared value directly — and our system will handle the conversion automatically.

**How it works:**

* If insuranceCurrencyCode is **not provided** — everything works as before. The system expects insuranceCost in the sender's country currency.
* If insuranceCurrencyCode **is provided** — the system automatically converts the declared value to the sender's country currency using the current exchange rate. No extra steps required on your side.

**Benefits:**

* No need to implement currency conversion logic on your side.
* Declare values in the currency that is natural for your business (EUR, USD, CZK, etc.).
* Fewer integration errors caused by currency mismatches.

**Example:**

Shipment from Moldova (MD) with insurance value declared in US Dollars:

```
{
  "parcels": [
    {
      "cargoCategory": "parcel",
      "parcelDescription": "Electronics accessories",
      "insuranceCost": 25.50,
      "insuranceCurrencyCode": "USD",
      "rowNumber": 1,
      "width": 300,
      "length": 400,
      "height": 150,
      "actualWeight": 1500
    }
  ],
  "invoice": {
    "incoterm": "DAP",
    "currency": "USD",
    "exportReason": "Selling",
    "cost": 25.50,
    "items": [
      {
        "id": "1",
        "hsCode": "85177900",
        "name": "Phone case",
        "nameEng": "Phone case",
        "material": "plastic",
        "materialEng": "plastic",
        "measurementCode": "pieces",
        "amount": 1,
        "cost": 25.50,
        "actualWeight": 1500
      }
    ]
  }
}
```

In this example, the system will automatically convert 25.50 USD to Moldovan Leu (MDL) before processing. The client does not need to know or calculate the exchange rate.

> **Note:** If insuranceCurrencyCode is used, all parcels in the request must specify the same currency code.

***


# The method for obtaining a link to the online payment form

| **Method name**  | The method for obtaining a link to the online payment form |
| ---------------- | ---------------------------------------------------------- |
| **Direction**    | UA-World                                                   |
| **HTTP Method**  | POST - to receive a payment link                           |
| **Route(s)**     | POST `…/mobileapp/v.1.1/payments/{number}`                 |
| **Autorization** | `Authorization: Bearer id-token…`                          |

### Description <a href="#description" id="description"></a>

The method allows the user to receive a link to an online payment form for services related to the parcel.

### Path parameters <a href="#path-parameters" id="path-parameters"></a>

| **Name** | **Type** | **Description**      |
| -------- | -------- | -------------------- |
| number   | string   | Unique parcel number |

### Request and response parameters <a href="#request-and-response-parameters" id="request-and-response-parameters"></a>

Request .../mobileapp/v.1.1/payments/{number}Response .../mobileapp/v.1.1/payments/{number}

### Sсhema <a href="#sshema" id="sshema"></a>

| **Field**  | **Type** | **Description**        |
| ---------- | -------- | ---------------------- |
| paymentUrl | string   | Unique link to payment |
| sessionId  | string   | Unique session number  |

### Acceptable HTTP status codes response <a href="#acceptable-http-status-codes-response" id="acceptable-http-status-codes-response"></a>

| **HTTP-code** | **Status**           | **Description**                                           |
| ------------- | -------------------- | --------------------------------------------------------- |
| 200           | OK                   | Request successful. The server has responded as required. |
| 422           | Unprocessable entity | ErrorMessage: "Action\_not\_available"                    |

### &#x20;Schema of connection <a href="#schema-of-connection" id="schema-of-connection"></a>

&#x20;

### Логіка розрахунку для посилок де Sender.Country = UA <a href="#logika-rozrakhunku-dlya-posilok-de-sender.country-ua" id="logika-rozrakhunku-dlya-posilok-de-sender.country-ua"></a>

1. Після отримання масиву даних з трекінг сервісу (sub-request на TS) вибираються всі operation\_type зі статусом “NeedPay”

```
"services": [
				{
					"id": null,
					"shipment_parcel_row_number": 1,
					"service_id": "115772d3-2f2e-4a03-b207-99a95f93c531",
					"service_type": "",
					"service_name": "Доставка посилок по Україні",
					"service_code": "",
					"parcel_number": "59001504113479",
					"payer_type": "Recipient",
					"payment_status": "NeedPay",
					"amount": 2,
					"price": 110,
					"discount": 16.5,
					"cost": 93.5,
					"cost_before_check": null,
					"paid": 0,
					"currency_code": "UAH",
					"additional_parameters": {
						"operation_type": "PaymentForParcel"
					}
				},
				{
					"id": null,
					"shipment_parcel_row_number": 1,
					"service_id": "a50b6f22-57c5-40bb-a015-052c21f00292",
					"service_type": "",
					"service_name": "Пакування відправлення",
					"service_code": "",
					"parcel_number": "59001504113479",
					"payer_type": "Recipient",
					"payment_status": "NeedPay",
					"amount": 1,
					"price": 30,
					"discount": 0,
					"cost": 30,
					"cost_before_check": null,
					"paid": 0,
					"currency_code": "UAH",
					"additional_parameters": {
						"operation_type": "PaymentForAdditionalServices"
					}
				},
			/*цей блок враховуватися не буде*/	
               {
					"id": null,
					"shipment_parcel_row_number": 1,
					"service_id": "3ab6e3b4-dcd7-11e8-ad0d-005056b24375",
					"service_type": "",
					"service_name": "Коробка (5 кг) з наповнювачем",
					"service_code": "",
					"parcel_number": "59001504113479",
					"payer_type": "Recipient",
					"payment_status": "",
					"amount": 1,
					"price": 0,
					"discount": 0,
					"cost": 0,
					"cost_before_check": null,
					"paid": 0,
					"currency_code": "UAH",
					"additional_parameters": null
				}
			],

```

1. operation\_type групуються (сума по **cost** складається в рамках operation\_type)
2. Формується json наступного вигляду і передається на api Nova Pay (...novapay.ua/v1/init)

```
{
	"client_first_name": "Олександра",
	"client_last_name": "Олександренко",
	"client_patronymic": "Олександрівна",
	"client_phone": "+380501231212",
	"client_email": null,
	"metadata": {
		"payer_type": "Recipient",
		"source": "mobile",
		"client_verified": "1",
		"client_npuid": "302264134C4EFD85-7AEBC02383A3048B68C3F17779416A2F6C0C2BB6",
		"ref_settlement_recipient": "db5c88ea-391c-11dd-90d9-001a92567626",
		"ref_settlement_sender": "db5c88f0-391c-11dd-90d9-001a92567626"
	},
	"delivery_metadata": {
		"ref_id": "5af75fb4-c528-11f0-92ca-48df37b91f4a",
		"express_waybill": "51212173237380",
		"medium": "parsel_machine",
		"created_at": "2025-11-19"
	},
	"recipients": [
		{
			"type": "legal",
			"amount": 105, -- сума по cost складається в рамках operation_type
			"payment_type": "PaymentForParcel", -- operation_type
			"use_hold": true, -- ознака чи буде сума заморожена
			"identifier": "31316718" -- код ЄРДПОУ на чий рахунок впадуть кошти  
		},
		{
			"type": "legal",
			"amount": 10,
			"payment_type": "PaymentForAdditionalServices",
			"use_hold": true,
			"identifier": "31316718"
		}
	]
}
```

### Список всіх можливих операцій <a href="#spisok-vsikh-mozhlivikh-operacii" id="spisok-vsikh-mozhlivikh-operacii"></a>

| **operation\_type(TS)/payment\_type** | **use\_hold** | **identifier** |
| ------------------------------------- | ------------- | -------------- |

| **operation\_type(TS)/payment\_type** | **use\_hold** | **identifier** |
| ------------------------------------- | ------------- | -------------- |
| PaymentForInternationalDelivery       | false         | `38130410`     |
| PaymentForAdditionalServices          | true          | `31316718`     |
| PaymentForServices                    | true          | `31316718`     |
| PaymentForParcel                      | true          | `31316718`     |
| PaymentForAfterPayment                | true          | `31316718`     |
| PaymentForCommissionBroker            | true          | `31316718`     |
| PaymentForCustomsPayments             | true          | `31316718`     |
| PaymentForRedirecting                 | true          | `31316718`     |
| PaymentForReturn                      | true          | `31316718`     |
| PaymentForStorage                     | true          | `31316718`     |
| PaymentForInternationalDeliveryNPU    | true          | `31316718`     |
| PaymentForLinehaul                    | true          | `31316718`     |
| MoneyTransfer                         | true          | `31316718`     |
| PaymentForAfterPayment                | true          | `31316718`     |
| InternationalDeliveryNPUVAT0          | true          | `31316718`     |
| InternationalAdditionalServices       | true          | `31316718`     |

&#x20;


# Returning doc was deleted response for repeated deletion of a shipment

### General Information

| **Method Name**   | Delete document                                                                                                                                                                                          |
| ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **HTTP Method**   | DELETE                                                                                                                                                                                                   |
| **Route**         | <p>DELETE /ui/v.1.0/shipments/{id}</p><p>DELETE /v.1.0/shipments/{id}</p><p>DELETE /mobileapp/v.1.1/shipments/{id}</p><p>DELETE /cbc/v.1.0/shipments/{id}</p><p>DELETE /internal/awis/shipments/{id}</p> |
| **Change Type**   | existing endpoint update                                                                                                                                                                                 |
| **Authorization** | Authorization: Bearer jwt-token…                                                                                                                                                                         |
| **Related Task**  | <https://novaposhta.atlassian.net/browse/APIGW-149>                                                                                                                                                      |
| **Product**       | API Gateway                                                                                                                                                                                              |

### Description

To correctly handle repeated shipment deletion requests, an additional shipment status check is performed through Tracking Service.\
The purpose is to return a unified response shipment\_was\_deleted if the shipment has already been deleted.

### Processing logic

When executing a **Delete Shipment** request, API additionally sends a GET request to Tracking Service using the following parameter:

```
withDeleted=1
```

This parameter allows retrieving data for previously deleted shipments.

The response is then analyzed based on the field:

```
deleted_at
```

* if deleted\_at ≠ null → the shipment was previously deleted;\
  API returns:

```
{
  "errors": {
    "errorMessage": "shipment_was_deleted"
  }
}
```

**HTTP status:** 422 Unprocessable Entity

* if deleted\_at = null or the field is missing → shipment is not found;\
  current behavior remains unchanged and API returns:

```
{
  "errors": {
    "errorMessage": "shipment_not_found"
  }
}
```

**HTTP status:** 404 Not Found

### Request example

```
DELETE /shipments/{id}
```

### Successful response

```
{
  "success": true
}
```

**HTTP status:** 200 OK


# POST /shipments/calculations

### General Information <a href="#general-information" id="general-information"></a>

| **Method Name**   | Shipment calculation                                                                                                                                                                                                                                                                   |
| ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **HTTP Method**   | POST                                                                                                                                                                                                                                                                                   |
| **Route**         | <p><code>/v.1.0/shipments/calculations</code><br><code>/mobileapp/v.1.1/shipments/calculations</code><br><code>/ui/v.1.0/shipments/calculations</code> <br><br><code>ui/v.1.0/shipments/delivery-calculations</code><br><code>ui/site/v.1.0/shipments/delivery-calculations</code></p> |
| **Change Type**   | Changes to existing endpoint                                                                                                                                                                                                                                                           |
| **Authorization** | `Authorization: Bearer jwt-token…`                                                                                                                                                                                                                                                     |
| **Related Task**  | [APIGW-1769: \[APIGW\] Розрахунок об'ємної ваги \[дільник на 5000\], зміна формули для POST /shipments/calculationsDone](https://novaposhta.atlassian.net/browse/APIGW-1769)                                                                                                           |
| **Product**       | API Gateway                                                                                                                                                                                                                                                                            |
| **Data Source**   |                                                                                                                                                                                                                                                                                        |
| **System/module** | client-api, Мobile App, UI *(*`/ui/` `/mobileapp/` `/v.1.0/`)                                                                                                                                                                                                                          |

### Description <a href="#description" id="description"></a>

For endpoint shipments/calculations (`POST`, `/shipments/calculations`), the logic of volumetric weight (`volumetricWeight`) calculation is changed for shipments related to **Moldova**.

#### Essence of the change <a href="#essence-of-the-change" id="essence-of-the-change"></a>

* **BEFORE:**\
  For all countries volumetric weight was calculated as:\
  `volumetricWeight = length * width * height / 4000`
* **AFTER:**
  * For **shipments related to Moldova**, volumetric weight must be calculated as:\
    `volumetricWeight = length * width * height / 5000`. See rules below.
  * For **all other shipments** the formula with divisor **4000** remains unchanged.

`volumetricWeight` is calculated on API Gateway side even if `parcels[].volumetricWeight` is not sent in the request or is sent as `null`.

&#x20;

#### Rules when divisor 5000 must be applied (Moldova) <a href="#rules-when-divisor-5000-must-be-applied-moldova" id="rules-when-divisor-5000-must-be-applied-moldova"></a>

The formula with divisor **5000** is used if at least one of the following cases is true:

1. Domestic shipments within Moldova
   * Sender and recipient are in Moldova
   * `sender.countryCode = "MD"`
   * `recipient.countryCode = "MD"`
2. Shipments from Moldova and payer = sender or third person with a Moldovan contract
   * `sender.countryCode = "MD"`
   * Payer of the shipment:
     * `payerType = "Sender"` **OR**
     * `payerType = "ThirdPerson"` and the payer’s contract is **Moldovan**
3. Shipments to Moldova and payer = recipient or third person with a Moldovan contract
   * `recipient.countryCode = "MD"`
   * Payer of the shipment:
     * `payerType = "Recipient"` **OR**
     * `payerType = "ThirdPerson"` and the payer’s contract is **Moldovan**

&#x20;

#### Determining a “Moldovan” contract for ThirdPerson <a href="#determining-a-moldovan-contract-for-thirdperson" id="determining-a-moldovan-contract-for-thirdperson"></a>

If `payerType = "ThirdPerson"`, to determine that the payer is a third party under a **Moldovan** contract:

1. Take contract number from `payerContractNumber` in `/shipments` request.
2. Call `/api/contracts/` with:
   * `numbers[] = {payerContractNumber}`
   * `countryCodes[] = MD`
3. If the response for filter `countryCodes[] = MD` contains a contract with this number – the contract is considered Moldovan.\
   If not – the contract is **not** Moldovan and the formula with divisor 5000 **must not** be applied.

Example:

`GET /api/contracts/?numbers[]=GNPMD-00020861&countryCodes[]=MD`


# POST, PUT /shipments

### General Information <a href="#general-information" id="general-information"></a>

| **Method Name**   | <p>Shipment creation<br>Shipment update</p>                                                                                                                                                                                                                       |
| ----------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **HTTP Method**   | <p>POST<br>PUT</p>                                                                                                                                                                                                                                                |
| **Route**         | <p>POST:<br><code>/v.1.0/shipments</code><br><code>/ui/v.1.0/shipments</code><br><code>/mobileapp/v.1.1/shipments</code></p><p>PUT:<br><code>/v.1.0/shipments/{id}</code><br><code>/ui/v.1.0/shipments/{id}</code><br><code>/mobileapp/v.1.1/shipments</code></p> |
| **Change Type**   | Changes to existing endpoint                                                                                                                                                                                                                                      |
| **Authorization** | `Authorization: Bearer jwt-token…`                                                                                                                                                                                                                                |
| **System/module** | client-api, Мobile App, UI *(*`/ui/` `/mobileapp/` `/v.1.0/`)                                                                                                                                                                                                     |

### Description <a href="#description" id="description"></a>

For endpoints 1) shipment create and 2) shipment update (`POST`, `PUT /shipments`), the logic of volumetric weight (`volumetricWeight`) calculation is changed for shipments related to **Moldova**.

#### Essence of the change <a href="#essence-of-the-change" id="essence-of-the-change"></a>

* **BEFORE:**\
  For all countries volumetric weight was calculated as:\
  `volumetricWeight = length * width * height / 4000`
* **AFTER:**
  * For **shipments related to Moldova**, volumetric weight must be calculated as:\
    `volumetricWeight = length * width * height / 5000`. See rules below.
  * For **all other shipments** the formula with divisor **4000** remains unchanged.

`volumetricWeight` is calculated on API Gateway side even if `parcels[].volumetricWeight` is not sent in the request or is sent as `null`.

&#x20;

#### Rules when divisor 5000 must be applied (Moldova) <a href="#rules-when-divisor-5000-must-be-applied-moldova" id="rules-when-divisor-5000-must-be-applied-moldova"></a>

The formula with divisor **5000** is used if at least one of the following cases is true:

1. Domestic shipments within Moldova
   * Sender and recipient are in Moldova
   * `sender.countryCode = "MD"`
   * `recipient.countryCode = "MD"`
2. Shipments from Moldova and payer = sender or third person with a Moldovan contract
   * `sender.countryCode = "MD"`
   * Payer of the shipment:
     * `payerType = "Sender"` **OR**
     * `payerType = "ThirdPerson"` and the payer’s contract is **Moldovan**
3. Shipments to Moldova and payer = recipient or third person with a Moldovan contract
   * `recipient.countryCode = "MD"`
   * Payer of the shipment:
     * `payerType = "Recipient"` **OR**
     * `payerType = "ThirdPerson"` and the payer’s contract is **Moldovan**

&#x20;

#### Determining a “Moldovan” contract for ThirdPerson <a href="#determining-a-moldovan-contract-for-thirdperson" id="determining-a-moldovan-contract-for-thirdperson"></a>

If `payerType = "ThirdPerson"`, to determine that the payer is a third party under a **Moldovan** contract:

1. Take contract number from `payerContractNumber` in `/shipments` request.
2. Call `/api/contracts/` with:
   * `numbers[] = {payerContractNumber}`
   * `countryCodes[] = MD`
3. If the response for filter `countryCodes[] = MD` contains a contract with this number – the contract is considered Moldovan.\
   If not – the contract is **not** Moldovan and the formula with divisor 5000 **must not** be applied.

Example:

`GET /api/contracts/?numbers[]=GNPMD-00020861&countryCodes[]=MD`

&#x20;


# Offline reference guide for clients containing the list of settlements in Ukraine where shipment del

| **Method name**  | Settlement Prohibited Issuance Dictionary                                                                                 |
| ---------------- | ------------------------------------------------------------------------------------------------------------------------- |
| **HTTP Method**  | Returns a manifest with links to offline files containing settlements where shipment is prohibited to deliver in Ukraine. |
| **Route**        | GET `/api.novapost.pl/v.1.0/dictionary/settlements/prohibited-issuance`                                                   |
| **Autorization** | `Authorization: JWT`                                                                                                      |

#### Description <a href="#description" id="description"></a>

This API provides a daily-updated manifest of Ukrainian settlements where shipment delivery is prohibited. The manifest includes links to localized, gzipped JSON files with detailed settlement information and prohibition flags.

The files are available in both Ukrainian and English for localization support.

The files are updated each day at 5:00 UTC.

**Features:**

* Returns a JSON manifest with URLs to the updated settlement lists.
* Each list is a gzipped JSON file (`.json.gz`).
* Each file is localized (`locale="uk"` for Ukrainian, `locale="en"` for English).
* Settlement records include administrative region, coordinates, postal codes, alternative names, and prohibition flags.

#### Request headers <a href="#request-headers" id="request-headers"></a>

| Header        | Type   | Required | Description                                 |
| ------------- | ------ | -------- | ------------------------------------------- |
| Authorization | string | Yes      | `Bearer <token>`. Auth token of the client. |

#### Response Example  <a href="#response-example" id="response-example"></a>

<https://api.novapost.pl/v.1.0/dictionary/settlements/prohibited-issuance>

```
{
    "unix_time": 1766120417,
    "urls": [
        "https://api-cdn.novapost.com/dictionary/settlements/prohibited-issuance/en/settlements.json.gz",
        "https://api-cdn.novapost.com/dictionary/settlements/prohibited-issuance/uk/settlements.json.gz"
    ]
}
```

Use the URLs provided in the manifest to download the latest settlement lists for each supported locale.

#### Example of settlement structure in JSON (`en` locale) <a href="#example-of-settlement-structure-in-json-en-locale" id="example-of-settlement-structure-in-json-en-locale"></a>

```
[
  {
    "id": 108335,
    "name": "urban villagе Abrykosivka",
    "country": {
      "code": "UA",
      "name": "Ukraine"
    },
    "region": {
      "id": 964,
      "name": "Oleshkivskyi raion",
      "parent": {
        "id": 417,
        "name": "Khersonska oblast"
      }
    },
    "latitude": 46.488153,
    "longitude": 33.071226,
    "postCode1": "75134",
    "postCode2": "75134",
    "alternativeNames": [
      "abrykosivka",
      "селище абрикосівка",
      "selishche abrikosivka",
      "поселок абрикосовка",
      "poselok abrikosovka",
      "urban villagе abrykosivka",
      "urban village abrykosivka"
    ],
    "externalId": "0ddee0f8-4b3a-11e4-ab6d-005056801329",
    "prohibitedSending": false,
    "prohibitedIssuance": true
  }
  ]
```

#### Schema <a href="#schema" id="schema"></a>

Settlement Object Schema

#### Acceptable HTTP status codes response <a href="#acceptable-http-status-codes-response" id="acceptable-http-status-codes-response"></a>

| **HTTP-code** | **Status** | **Description**                                           |
| ------------- | ---------- | --------------------------------------------------------- |
| 200           | OK         | Request successful. The server has responded as required. |
| 404           | Not Found  | ErrorMessage: "Action\_not\_available"                    |

#### cURL <a href="#curl" id="curl"></a>

```
curl --location 'https://api-stage.novapost.pl/v.1.0/dictionary/settlements/prohibited-issuance' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6InByaXZhdGU6MmU1OWI1ZjEtYzIwYS00MWFlLTk3N2ItYzU5MWJiZmY2ODA5IiwidHlwIjoiSldUIn0.eyJhdF9oYXNoIjoiRG9SNVU5MmNaakRQT0dUbDJuWU94QSIsImF1ZCI6WyJmZWU5dVlpYUFoVzBvcG9vLmF1dGguYXBwcy5ub3ZhcG9zdC5jb20iXSwiYXV0aF90aW1lIjoxNzY2NDkxMTg3LCJjb3VudHJ5X2NvZGUiOiJVQSIsImVtYWlsIjoiIiwiZXhwIjoxNzY3MDk2MDI5LCJpYXQiOjE3NjY0OTEyMjksImlzcyI6Imh0dHBzOi8vYXV0aC1zdGFnZS5ub3ZhcG9zdC5jb20vIiwianRpIjoiZDVkOWZiNmItYmNlNy00YWYyLTgyMGYtYWQ5MGMxODQwMTI3IiwibmFtZSI6ItCQ0LzQsdGA0L7RgSDQnNCw0YDRltCw0L3QvdCwINCS0ZbQtNGB0YPRgtC90ZQiLCJwYXJ0bmVySW5mbyI6eyJjb3VudHJ5Q29kZSI6IiIsImRpdmlzaW9uSWQiOjAsInJvbGVzIjpudWxsfSwicGhvbmUiOiIzODA5MzkxNTM3OTkiLCJyYXQiOjE3NjY0OTExNjQsInJlZ2lvbl9jb2RlIjoiVUEiLCJzaWQiOiIxNGRjN2JmOC01YTUwLTRhM2MtYWE3My03ZjhkYjdkNjAwOTgiLCJzdWIiOiJlZjA0ZDZlZS0xNjE0LTQ5YzAtYmFiYS01NmY1NzQ2OThjNWEifQ.H5DNONyaiiA4kM7mkLK_AEFCCptJmjUg-8VcSm-eEsQ-ijt-PC3UXljlcyKpc1RF12ZtJhBPls1qiwh26PnFC8_cabE1N-XR-U6NpAlxC20hc0Ik5EFI9YMmfuJTQhVH1TwlFTo4TFmDO6Bf-UG5hrfwiw3dDRs-rs-Ql8SXKGvLx6_h8421rCaNKUoX--D4drMJjHljR82FyKnrSfdeu8E9MFHp5KeIEm6cwYasTPNEaHTK_njorlqvPFjvdIGHc9XpQv8naHQtDJJdb08LM2jbFApm86ceHRlmOUvEe2vZuWQgbcdhDUQYtLUlxboltlq6WGxq7IaooEXprt_ihRMkwHMvNyoqo4Wv7ZTUv2vi0zT7rtqlGHRsjPTMTtvH1lVMJEIsMy1nQL1aAr8gfKzU2Bt_B4zyBahu58TLtWhs1y27dZCmuXye8tdwnjAA5kwTxgNYXryZSwxepGyyH4m-mP_gUdY5rxgSbFQwIUyOsK9lr0avqob17860LqTHnUtLNykH6S9-95h1HWzJ8L4HE1ml_a2OtwGPo_dkkq4kt1AfSZF_sCCovHNoS4BlVVHuVK6WWD-SVc01WauNG4dwm5L3jxIyb79QuI52G93zqEy_h4LBBVf22jnTVjRzOCywcWAKVO0zDPkkK-KuNinqVvlVkWiffBNtDnK-fwY'
```


# GET v.1.0/dictionary/customs-fees/

### General Information <a href="#general-information" id="general-information"></a>

| **Method name**  | The method for obtaining settings for the possibility of paying customs duties by the sender and the maximum value of the parcel by country |
| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| **Direction**    | UA-EU                                                                                                                                       |
| **HTTP Method**  | GET                                                                                                                                         |
| **Route(s)**     | `.../v.1.0/dictionary/customs-fees/{code}`                                                                                                  |
| **Autorization** | `Authorization: Bearer jwt-token…`                                                                                                          |

### Description <a href="#description" id="description"></a>

The method allows users to obtain country-specific settings to determine whether a sender from Ukraine will be able to pay customs duties and the maximum allowable value of the parcel in case of sending a parcel abroad.

### Path parameters <a href="#path-parameters" id="path-parameters"></a>

| **Name** | **Type** | **Description**                                                                        |
| -------- | -------- | -------------------------------------------------------------------------------------- |
| code     | string   | <p>Alpha-code of country</p><p><strong>Example:</strong> PL - alpha-code of Poland</p> |

### Request and response parameters <a href="#request-and-response-parameters" id="request-and-response-parameters"></a>

Request .../v.1.0/dictionary/customs-fees/{code}Response .../v.1.0/dictionary/customs-fees/{code}

### Shema <a href="#shema" id="shema"></a>

| **Field**       | **Type** | **Description**                                                                                                                                                                                                 |
| --------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| customFeeActive | boolean  | <p>Indication of the possibility of payment of customs duties by the sender.</p><p>Possible values</p><p><strong>true</strong> - payment is possible</p><p><strong>false</strong> - payment is not possible</p> |
| declaredCost    | number   | The maximum amount of the parcel value in the currency of the recipient's country for which the sender can pay customs duties.                                                                                  |

### Acceptable HTTP status codes response <a href="#acceptable-http-status-codes-response" id="acceptable-http-status-codes-response"></a>

| **HTTP-code** | **Status**           | **Description**                                           |
| ------------- | -------------------- | --------------------------------------------------------- |
| 200           | OK                   | Request successful. The server has responded as required. |
| 422           | Unprocessable entity | ErrorMessage: "The selected country is invalid."          |


# GET /registry/print

### General Information <a href="#general-information" id="general-information"></a>

| **Method name**  | The method of printing parcel registers |
| ---------------- | --------------------------------------- |
| **Direction**    | EU, UA                                  |
| **HTTP Method**  | GET                                     |
| **Route(s)**     | `/v.1.0/registry/print/?id={id}`        |
| **Autorization** | `Authorization: Bearer jwt-token…`      |

### Description <a href="#description" id="description"></a>

The method allows users to receive a generated PDF file of a registry for further printing.

**European registers** use only general registry type printing.\
**Ukrainian registers** (UA-World) can print\
\- general registry and\
\- international express waybills (IEW),\
\- markings of international express waybills,\
\- invoices of international express waybills.\ <br>

### Path parameters <a href="#path-parameters" id="path-parameters"></a>

| **Name**        | **Type** | **Value**                                                                                              | **Description**                                                                                  |
| --------------- | -------- | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ |
| id              | number   |                                                                                                        | Registry identifier in the OM system (mandatory)                                                 |
| type\*          | string   | <ul><li><code>international</code></li><li><code>invoice</code></li><li><code>marking</code></li></ul> | type of printed format (optional)                                                                |
| printSizeType\* | string   | <ul><li><code>size\_100\_100</code></li></ul>                                                          | <p>size of printed marking, mandatory for<br><code>type</code>= <code>marking</code><br><br></p> |
| copies\*\*      | number   |                                                                                                        | <p>Number of copies of printed document (optional)<br>Default value: 1</p>                       |

\* - applicable only for registers in direction Ukraine - World\
\*\* - applicable only for registers **excluding** direction Ukraine-World and Ukraine-Ukraine

### Request and response parameters <a href="#request-and-response-parameters" id="request-and-response-parameters"></a>

Request .../v.1.0/registry/print/?id={id}Response .../v.1.0/registry/print/?id={id}

### Acceptable HTTP status code  <a href="#acceptable-http-status-codes-response" id="acceptable-http-status-codes-response"></a>

| **HTTP-code** | **Status**            | **Description**                                                         |
| ------------- | --------------------- | ----------------------------------------------------------------------- |
| 200           | OK                    | Request successful. The server has responded as required.               |
| 422           | Unprocessable entity  | ErrorMessage: "The id field must be a number".                          |
| 500           | Internal Server Error | The specified registry was not found. ErrorMessage:"validation.invalid" |

&#x20;


# The method of calculating the cost of delivery

### General Information <a href="#general-information" id="general-information"></a>

| **Method name**  | The method of calculating the cost of delivery                                                                                                                                                                                                                                                                 |
| ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Direction**    | UA-EU (US)                                                                                                                                                                                                                                                                                                     |
| **HTTP Method**  | POST                                                                                                                                                                                                                                                                                                           |
| **Route(s)**     | <p><code>.../ui/v.1.0/shipments/calculations</code></p><p><code>.../v.1.0/shipments/calculations</code></p><p><code>.../ui/site/v.1.0/shipments/delivery-calculations</code></p><p><code>.../ui/v.1.0/shipments/delivery-calculations</code></p><p><code>.../mobileapp/v.1.1/shipments/calculations</code></p> |
| **Autorization** | `Authorization: Bearer jwt-token…`                                                                                                                                                                                                                                                                             |
| **Related Task** | [APIGW-1256: \[API GW\] Розрахунок вартості оплати митних платежів відправником (DDP) // -->PayerFeesCustoms Done](https://novaposhta.atlassian.net/browse/APIGW-1256)                                                                                                                                         |

### Description <a href="#description" id="description"></a>

The method allows users to receive information about the cost of delivery, the cost of paying for customs services, and the cost of other related services.

### Request and response parameters <a href="#request-and-response-parameters" id="request-and-response-parameters"></a>

Request .../v.1.0/shipments/calculationsResponse .../v.1.0/shipments/calculations

### Changes in the method <a href="#changes-in-the-method" id="changes-in-the-method"></a>

**Previous version**

`{     "payerType": "Sender",     "currency": "USD",     "incoterm": "DDP",     "cost": 90,     "invoice": {} -- not used ///`

**Current version**

`{payerType": "Sender",     "invoice": { "incoterm": "DDP", "currency": "USD", "payerFeesCustoms": "Sender", "cost": 101 /// } ///`

&#x20;

If you want to use parameter “incoterm” = “DDP”, you need to specify parameters "currency", "cost". Otherwise, “incoterm” = “DDP” will be ignored.

### Chema  <a href="#chema" id="chema"></a>

| **Field**               | **Type**        | **Description**                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |                                                                                                        |
| ----------------------- | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ |
| **status**              | enum            | <p>Status of shipment</p><p><strong>Allowed</strong>: ReadyToShip</p>                                                                                                                                                                                                                                                                                                                                                                                                           |                                                                                                        |
| **payerType**           | enum            | <p>Identifies who is responsible for the payment of delivery services. Determines which party bears the cost: Sender, Recipient, or ThirdPerson. Required payerContractNumber for shipments within Europe or from Europe to Ukraine.</p><p><strong>Allowed</strong>: Sender┃Recipient┃ThirdPerson</p><p><em>\* for route</em> <code>/shipments/delivery-calculations</code> <em>- the request response will always return</em> <code>payerType</code> = <code>Sender</code></p> |                                                                                                        |
| **payerContractNumber** | string          | Required when payerType is ThirdPerson for shipments within Europe or from Europe to Ukraine. Specifies the contract number of the third-party payer (e.g., CNPP-00001797).                                                                                                                                                                                                                                                                                                     |                                                                                                        |
| **invoice**             | object          | Informatoin for calculating shipping costs and customs payments                                                                                                                                                                                                                                                                                                                                                                                                                 |                                                                                                        |
| **incoterm**            | enum            | <p>Type of tax calculation.</p><p><strong>Example</strong>: DAP                                                                                                                                                                                                                                                                                                                                                                                                                 | DDP.</p><ul><li><em>DAP - Delivered At Place</em></li><li><em>DDP - Delivered Duty Paid</em></li></ul> |
| **currency**            | enum            | Сurrency code                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |                                                                                                        |
| **cost**                | number          | <p>Declared value of shipment for customs duty deduction. Also indicates maximum compensation in case of loss/damage.</p><p>Requiered if <strong>incoterm</strong> = “DDP”</p><p><strong>Limit</strong>: Min. 1</p>                                                                                                                                                                                                                                                             |                                                                                                        |
| **payerFeesCustoms**    | enum            | <p>Identifies who is responsible for the customs payments. Determines which party bears the cost: Sender, Recipient, or ThirdPerson.</p><p><strong>Allowed</strong>: Sender┃Recipient┃ThirdPerson</p>                                                                                                                                                                                                                                                                           |                                                                                                        |
| **parcels**             | array of object | An array of parcel objects representing distinct packages within the shipment, including dimensions, weight, and details for delivery cost calculation.                                                                                                                                                                                                                                                                                                                         |                                                                                                        |
| **cargoCategory**       | enum            | <p>Specifies the type of shipment. Categories: parcel, documents, cargo. Affects shipping method, cost, and documentation.</p><p><strong>Allowed</strong>: parcel┃documents┃cargo</p>                                                                                                                                                                                                                                                                                           |                                                                                                        |
| **insuranceCost**       | number          | <p>Declared value of shipment for insurance coverage. Indicates maximum compensation in case of loss/damage.</p><p><strong>Constraints</strong>: Min 1</p>                                                                                                                                                                                                                                                                                                                      |                                                                                                        |
| **rowNumber**           | integer         | <p>Sequential identifier for each parcel in the shipment.</p><p>If only one parcel, value = 1.</p><p><strong>Constraints</strong>: Min 1</p>                                                                                                                                                                                                                                                                                                                                    |                                                                                                        |
| **width**               | integer         | <p>Parcel width in millimeters. Used to calculate volume.</p><p><strong>Constraints</strong>: Min 1</p>                                                                                                                                                                                                                                                                                                                                                                         |                                                                                                        |
| **length**              | integer         | <p>Parcel length in millimeters. Used to calculate volume.</p><p><strong>Constraints</strong>: Min 1</p>                                                                                                                                                                                                                                                                                                                                                                        |                                                                                                        |
| **height**              | integer         | <p>Parcel height in millimeters. Used to calculate volume.</p><p><strong>Constraints</strong>: Min 1</p>                                                                                                                                                                                                                                                                                                                                                                        |                                                                                                        |
| **actualWeight**        | integer         | <p>Real parcel weight in grams. Round to nearest 10 g before sending.</p><p><strong>Constraints</strong>: Min 1┃Max 2147483647</p>                                                                                                                                                                                                                                                                                                                                              |                                                                                                        |
| **sender**              | object          | Information about the sender. Includes origin details, affects logistics and cost calculations.                                                                                                                                                                                                                                                                                                                                                                                 |                                                                                                        |
| **divisionNumber**      | string┃null     | Optional sender post office division number. Interchangeable with divisionId/ postCode                                                                                                                                                                                                                                                                                                                                                                                          |                                                                                                        |
| **divisionId**          | integer┃null    | Optional sender division code. Interchangeable with divisionNumber / postCode                                                                                                                                                                                                                                                                                                                                                                                                   |                                                                                                        |
| **addressParts**        | object          | Required when shipping from an address. Contains detailed address components.                                                                                                                                                                                                                                                                                                                                                                                                   |                                                                                                        |
| **postCode**            | string          | <p>Postal/ZIP code of sender.</p><p><strong>Constraints</strong>: Max 10 chars</p>                                                                                                                                                                                                                                                                                                                                                                                              |                                                                                                        |
| **recipient**           | object          | Information about the party receiving the shipment.                                                                                                                                                                                                                                                                                                                                                                                                                             |                                                                                                        |
| **countryCode**         | string          | <p>ISO 3166-1 Alpha-2 code for recipient’s country.</p><p><strong>Pattern</strong>: ^\[A-Z]{2}$</p>                                                                                                                                                                                                                                                                                                                                                                             |                                                                                                        |
| **divisionNumber**      | string┃null     | Optional recipient post office division number. Interchangeable with divisionId / postCode                                                                                                                                                                                                                                                                                                                                                                                      |                                                                                                        |
| **divisionId**          | integer┃null    | Optional recipient division code. Interchangeable with divisionNumber / postCode                                                                                                                                                                                                                                                                                                                                                                                                |                                                                                                        |
| **addressParts**        | object          | Required when delivering to a specific address. Contains detailed address fields.                                                                                                                                                                                                                                                                                                                                                                                               |                                                                                                        |
| **postCode**            | string          | <p>Postal/ZIP code for recipient.</p><p><strong>Constraints</strong>: Max 10 chars</p>                                                                                                                                                                                                                                                                                                                                                                                          |                                                                                                        |

### Acceptable HTTP status codes response <a href="#acceptable-http-status-codes-response" id="acceptable-http-status-codes-response"></a>

| **HTTP-code** | **Status**           | **Description**                                                                |
| ------------- | -------------------- | ------------------------------------------------------------------------------ |
| 200           | OK                   | Request successful. The server has responded as required.                      |
| 422           | Unprocessable entity | The request was well-formed but had semantic errors + the reason for the error |


# Popular integration

Ready-made Nova Post integrations allow you to quickly connect delivery services to popular e-commerce platforms without the need to develop a full API integration from scratch.

Use ready solutions for automatic shipment creation, order data transfer, and delivery status tracking.

#### Available Integrations

#### [BaseLinker](https://login.baselinker.com/)

Integration for centralized order management from marketplaces, CRM systems, and e-commerce platforms. Allows creating Nova Post shipments directly from the BaseLinker interface.

#### [Shopify](https://apps.shopify.com/nova-post-1?search_id=7bc00069-e4d9-4fb6-8e9e-6b17223ad373\&surface_detail=Nova+post\&surface_inter_position=1\&surface_intra_position=5\&surface_type=search)

Integration for online stores built on Shopify. It enables automatic shipment creation, order data transfer, and delivery status tracking within store business processes.

#### [Woocomerce](https://uk.wordpress.org/plugins/nova-post-for-woocommerce/)

The official Nova Post plugin for WooCommerce to handle your online store deliveries to 16+ countries. Create orders for address or branch delivery, automatically generate and print waybills, manage statuses, and send tracking numbers to buyers directly from the WooCommerce dashboard.

<br>


# Base (Baselinker)

Arrange delivery to your store's customers directly through the order management section in Base (Baselinker).

**Create shipments for your store customers directly through the order management section in BaseLinker.**

* Allow customers to select a Nova Post branch or address delivery during checkout.
* Automatically generate shipping and export documents.
* Process orders with cash on delivery.
* Arrange delivery of your orders to customers within your country, across Europe, and to Ukraine directly from the Shopify admin panel.
* Access shipment tracking and notify customers about delivery status updates.

#### Integration steps

1. Sign service agreements with Nova Post for logistics services.\
   If you sell internationally, two agreements are required:

* one for domestic delivery within your country
* one for international delivery to other countries

To sign an agreement, contact the sales department in your country.

2. Sign an additional agreement for the **Cash on Delivery** service.\*

{% hint style="info" %}
\*Тільки для продавців з Польщі, Чехії, Німеччини
{% endhint %}

3. Register in **My Nova Post** in your country using the contact details specified in the service agreement for the authorized representative.
4. Obtain a API key from Nova Post. **How to create an API key for a European client**

   To configure the module, you need:

   * an active service contract with Nova Post
   * an API key issued to an authorized representative specified in the contract

{% hint style="warning" %}
To configure the module, you need an active service contract with Nova Post and an API key issued to an authorized representative specified in the contract.
{% endhint %}

### How to Configure the Nova Post Module on Base (Baselinker) <a href="#settings" id="settings"></a>

1. Locate the Nova Post module on Base (Baselinker). Go to the Integrations menu → Select Add Integration.

<figure><img src="/files/pltSIf5Q4iqJwWhZBkOl" alt=""><figcaption></figcaption></figure>

2. Navigate to the "Courier Services" Section: In the search bar, type Nova Post → Click on the Nova Post module icon.

<figure><img src="/files/5t1awxqbOnqzkOKKAc4J" alt=""><figcaption></figcaption></figure>

3. Complete the Settings: Fill in all the required fields in the settings section and click Save.

<figure><img src="/files/cybQ4bWw782pnTnueGxU" alt=""><figcaption></figcaption></figure>

#### Field descriptions for configuring the Nova Post module in Base (Baselinker) <a href="#description" id="description"></a>

<details>

<summary><strong>Basic fields:</strong> this information is used later when placing an order, so you don't need to enter it every time.</summary>

| Field Name                | Description                                                                                                                                                                                                                                                                                                                 |
| ------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Account name              | Display name for the account in the Base (Baselinker) panel.                                                                                                                                                                                                                                                                |
| API key                   | <p>Nova Post API key<br><br><a href="https://api-portal-stage.novapost.com/en/api-nova-post/start/api-keys">How to get the API key</a><a href="https://api-portal-stage.novapost.com/en/api-nova-post/start/api-keys"> </a><img src="https://site-assets.novapost.com/66d56a6f-0ada-4130-96ea-2d79f1054e04.svg" alt=""></p> |
| Shipper VAT Number        | <p>Tax identification number of the sender's company<br><br>API Nova Post parameter: companyTin</p>                                                                                                                                                                                                                         |
| Sender - company name     | Name of the sender’s company                                                                                                                                                                                                                                                                                                |
| Sender - phone number     | Sender's phone number                                                                                                                                                                                                                                                                                                       |
| Sender - e-mail           | Sender's email address                                                                                                                                                                                                                                                                                                      |
| Sender - country          | Country from where parcels are shipped (select from a list)                                                                                                                                                                                                                                                                 |
| Sender - street           | Sender's street address                                                                                                                                                                                                                                                                                                     |
| Sender - house number     | Sender's house number                                                                                                                                                                                                                                                                                                       |
| Sender - apartment number | Sender's apartment number                                                                                                                                                                                                                                                                                                   |
| Sender - postal code      | Sender's postal code                                                                                                                                                                                                                                                                                                        |
| Sender - city             | Sender's city                                                                                                                                                                                                                                                                                                               |
| Sender - name             | First name of the sender                                                                                                                                                                                                                                                                                                    |
| Sender - surname          | Last name of the sender                                                                                                                                                                                                                                                                                                     |
| Client number             | <p>Contract ID with Nova Post<br><br>API Nova Post parameter: payerContractNumber</p>                                                                                                                                                                                                                                       |

</details>

<details>

<summary><strong>Cash-on-Delivery (COD) Fields</strong></summary>

| Account number for COD (IBAN) | IBAN listed in the contract for COD payments          |
| ----------------------------- | ----------------------------------------------------- |
| Bank account owner            | Tax identification number of the sender's companyника |

</details>

<details>

<summary><strong>Weight Settings</strong></summary>

| Default Package Weight Settings                                                  |                                                                                                                                                                        |
| -------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| How to calculate the fixed weight of a cardboard                                 | <ul><li>Percentage value adds a percentage of the parcel weight for packaging.</li><li>Fixed value adds a defined fixed weight for packaging to all parcels.</li></ul> |
| If shipping small parcels, set this to 0 to avoid inflating the parcel's weight. |                                                                                                                                                                        |
| How to calculate the fixed weight of a cardboard                                 | fixed value                                                                                                                                                            |
| Value of the fixed weight of the cardboard                                       | 0                                                                                                                                                                      |

</details>

### How to arrange parcel delivery using the Nova Post module in Base (Baselinker) <a href="#delivery" id="delivery"></a>

#### Delivery to an Address

1. Complete all fields in the Delivery Address section as shown in the example

<figure><img src="/files/lui0Ex5wob5wcH0GcKzy" alt=""><figcaption></figcaption></figure>

2. Enter shipment details in the Shipments Section and click Send package Nova Post

<figure><img src="/files/6tSasYY8PAZcyy7zFQL5" alt=""><figcaption></figcaption></figure>

How to correctly fill in the Address field

* Do NOT duplicate the following fields in the Address field: Postal code, City, State, Country.
* Order of writing:
  * Street name → House number → Apartment number (if applicable)
  * House number → Street name → Apartment number (if applicable)
* The Pickup at point block must remain empty.
* For Delivery to Ukraine:
  * All words should be written in Latin characters without translation. For example: Budynok 10, Kvartyra 25, vul. Shevchenka, Kyi
  * English abbreviations are allowed.

| Full name | Abbreviations |
| --------- | ------------- |
| Street    | St            |
| Avenue    | Ave           |
| Boulevard | Blvd          |
| Road      | Rd            |
| Lane      | Ln            |
| Apartment | Apt           |

{% hint style="warning" %}
![](https://site-assets.novapost.com/2ce00c3a-6442-4f1a-ab0d-b44e4721a5ed.svg) Strictly follow the rules for structured address entry to ensure delivery accuracy, minimize the risk of errors, and avoid delays in delivery.

The Nova Post API expects to receive a structured recipient address. A structured address is a set of data formatted in a specific way and sequence.

During integration, Base (Baselinker) transmits the recipient's address as a single line. On Nova Post's side, this line is processed by an automated parsing algorithm that separates it into individual elements to create the shipment.

If the address is entered incorrectly, the algorithm will be unable to process the shipment automatically. In such cases, order processing will be delayed due to the need for manual intervention by staff or there may be a risk of incorrect delivery to the wrong address.
{% endhint %}

#### Delivery to a Branch or Parcel Locker

For this delivery type, a specific branch or parcel locker must be specified. Baselinker does not integrate with the Nova Post branch directory, so customers cannot select a branch or locker during the order process. However, the Nova Post module can transmit these details through the Pick up at point section.

Ways to provide Branch or Parcel Locker data for delivery:

* Integrate Nova Post API with your online store or CRM. Enable users to select the desired branch or locker for delivery during the ordering process. The selected data will be automatically transferred to Baselinker. [More details on the method](https://api-portal-stage.novapost.com/en/api-methods/branch-directory)[ ](https://api-portal-stage.novapost.com/en/api-methods/branch-directory)![](https://site-assets.novapost.com/66d56a6f-0ada-4130-96ea-2d79f1054e04.svg)
* Upload the current Branch and Locker directory to your order management platform. Customers can select the desired branch or locker for delivery. However, this directory will not update automatically. To display up-to-date delivery locations on the website, you will need to update the directory periodically. [More details](https://api-portal-stage.novapost.com/en/api-methods/branch-directory)[ ](https://api-portal-stage.novapost.com/en/api-methods/branch-directory)![](https://site-assets.novapost.com/66d56a6f-0ada-4130-96ea-2d79f1054e04.svg)
* Manually on Base (Baselinker). Enter the delivery location details in the Pick up at point section based on the customer-provided Delivery address data:

1. **Navigate to the branch map: select the country and delivery city.** Choose the desired delivery location: by branch or locker number, if provided by the customer. Enter the address provided in the Delivery address and select the nearest branch or locker.

   <figure><img src="/files/25eU1OabARvKoWBx8j84" alt=""><figcaption></figcaption></figure>

2. **Access the branch or locker details:** Click Copy to copy the information.

<figure><img src="/files/MPTAKUpvL4WdJxKTw4RC" alt=""><figcaption></figcaption></figure>

3. **Return to the order card on Base (Baselinker):** Open the Pick up at point section, paste the copied information into the ID field, and save the changes.

   Complete the Shipment Details. Fill in the required shipment details in the Shipments section and click Send Package Nova Post.

<figure><img src="/files/Mc8HNUJorwHaSxPQOiY1" alt=""><figcaption></figcaption></figure>

#### How to fill in parcel details <a href="#shipments" id="shipments"></a>

1. 1Scroll down to the Shipments section in the order card and click Nova Post to open the parcel creation form.
2. 2Complete all mandatory fields in the form. Once finished, click Send package Nova Post. [Detailed Field Descriptions](https://api-portal-stage.novapost.com/en/integrations/other-platforms/base#parcel-fields) ![](https://site-assets.novapost.com/66d56a6f-0ada-4130-96ea-2d79f1054e04.svg)

An example of filling in parcel data:

<figure><img src="/files/CwyfgKB3CJMonMcScxXr" alt=""><figcaption></figcaption></figure>

### Description of the fields in the parcel creation form <a href="#parcel-fields" id="parcel-fields"></a>

| Field Name                    | What to Enter                                                                                                                                                                                                                                                             |
| ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Insurance                     | Declared value of the parcel                                                                                                                                                                                                                                              |
| Content description           | <p>Description of the shipment\*<br><br>\*To ensure the automatic completion of parcel descriptions, select one of the settings in the Default settings of shipment and printouts section: Product list (Quantity, Name) or Product list (Quantity, SKU, Name, Price)</p> |
| Cash on delivery              | <p>COD amount\*. If the field is left blank, the parcel will be delivered without COD.<br><br>\*To process COD, the Account number for COD (IBAN) and Bank account owner fields must be completed in the module settings.</p>                                             |
| Weight, Length, Width, Height | Parcel dimensions: weight, length, width, height                                                                                                                                                                                                                          |

### How to print a Label for a parcel from Base (Baselinker) <a href="#lable" id="lable"></a>

1. Label for a single parcel in each order

<figure><img src="/files/dJG8J7cotWajC5f43GJr" alt=""><figcaption></figcaption></figure>

2. Print labeling for multiple parcels or a single parcel

<figure><img src="/files/Hwc45KplYWiUPxuWo4ww" alt=""><figcaption></figcaption></figure>

### How to track parcels in Baselinker <a href="#tracking" id="tracking"></a>

**Package number –** this is the express waybill number. Clicking on it allows you to track the parcel.

<figure><img src="/files/P309cwn34hauQw8Bc15B" alt=""><figcaption></figcaption></figure>


# Shopify

The app is available regardless of whether you have Shopify Checkout Plus in your subscription. The app supports all rate types: manual, flat, carrier-calculated.

### Key features of the Nova Post app for Shopify

The integration allows customers to select a branch before checkout and automates the creation of waybills, including for international delivery across the entire EU and to Ukraine.

* Selecting a Nova Post branch or addressed delivery by the buyer when placing an order.
* Arranging your orders to be delivered to customers in your country, across Europe, and to Ukraine directly from your Shopify account.
* Automatically creating shipping and export documents.
* Accessing delivery tracking and notifying buyers about changes in delivery status.

### Steps to integrate Nova Post with Shopify

1. Sign logistics agreements with Nova Post. If you sell abroad, you will need two agreements: one for domestic shipping within your country and another for international shipping to other countries. To sign an agreement, contact the sales department of your country. [Sales Department Contacts](https://api-portal.novapost.com/help-center/)
2. Sign an additional agreement [for the Payment upon Receipt\* service](https://api-portal-stage.novapost.com/en/integrations/other-platforms/shopify)

{% hint style="info" %}
\*Available for sellers based in Poland, Czechia, and Germany
{% endhint %}

3. After signing the agreements, complete your registration with My Nova Post in your country using the contact details of the authorized representative specified therein
4. Get your Nova Post API key. [The guide on how to create a key for a European customer](https://api-portal-stage.novapost.com/en/api-nova-post/start/api-keys)

#### How to install and configure the Nova Post app on Shopify

[Video guide](https://www.youtube.com/watch?v=jBClvR-F6pU\&t=3s)

1. API key
2. The numbers of your local and international agreements.\
   \
   After signing the contracts, our manager will send these numbers to your email. You can also find them [in My Nova Post account](https://my.novapost.com/#).

What you need before setup:

#### Basic settings

1. Install the app. Log in to your Shopify store >> Go to Shopify App Store >> Search for Nova Post >> Click Install >> Click Install or use [a direct link](https://apps.shopify.com/nova-post-1?search_id=7bc00069-e4d9-4fb6-8e9e-6b17223ad373\&surface_detail=Nova+post\&surface_inter_position=1\&surface_intra_position=5\&surface_type=search).
2. Configure your Nova Post account:
   * Enter your API key
   * Specify your local and international agreement numbers
   * Change the app language if necessary. Available in English and Ukrainian
   * Specify the countries you will deliver to
   * Set the sender's address:
     * Delivery by courier: Your store or warehouse address
     * Delivery from branch: Address of the Nova Post branch<br>
3. Set up Carrier-Calculated Shipping (CCS): Optional\
   \
   This feature allows customers to see calculated shipping costs at order checkout. The app can function without it.\
   \
   CCS (Carrier-Calculated Shipping) is included with Shopify Plus, Shopify Advanced, and annual Shopify Grow plans. It can be activated for monthly Shopify Grow plans for an additional $20/month.\
   \
   If CCS is available, you can configure the following options:
   1. A.Delivery types that will be available for CCS. Here you can also set a minimum order amount for free delivery.
   2. B.Phone number requirement\
      \
      A phone number is mandatory for Nova Post shipments. Enabling this option forces the user to enter his/her phone number before proceeding with the order, even if he/she has already entered it in previous steps
   3. C.Additional packaging fee
4. Select available delivery types for buyers:
   * To the branch
   * To the address
   * To the parcel locker
   * To the pickup point
5. Specify package parameters:
   * If all orders are packed in standard boxes, define the box dimensions
   * If package size depends on the product, select calculation based on product parameters
   * Shipment parameters to be applied to the order if the dimensions are not specified in the product card
6. Specify details to activate Cash on Delivery: Optional\
   \
   To offer payment upon receipt to your customers, provide the following details in this section:
   * Agreement number
   * Account details for crediting funds

<details>

<summary><strong>How to enable Cash on Delivery?</strong></summary>

![](https://site-assets.novapost.com/2ce00c3a-6442-4f1a-ab0d-b44e4721a5ed.svg) For Poland, Czechia, and Germany only

In your Shopify admin, go to Settings > Payments > Create custom payment method. Name this method "Cash on Delivery (COD)" and indicate the number of the Cash on Delivery Service Agreement with Nova Post. You must enter this exact name in the Nova Post app for the feature to work correctly.

</details>

7. Specify a default HS code: Optional\
   \
   Specify a code that will be used automatically for all products lacking this parameter in the product card.\
   \
   It is worth setting this parameter if you are sending goods abroad.<br>
8. Configure label printing rules\
   \
   You can set up automatic label printing. The label will be printed immediately after a waybill is created.

### Enable the widget to be displayed to buyers

{% hint style="info" %}
On Basic and Grow plans, you must use the widget. For Advance and Plus plans, the branch selection will be automatically integrated into the checkout.
{% endhint %}

<details>

<summary><strong>How to enable the Nova Post widget on the cart page</strong></summary>

To enable the Nova Post widget on the cart page, you need to add it to your layout. To add it, go to Shopify admin > Online Store > Themes > Customize > Cart.

</details>

<details>

<summary><strong>How to enable the Nova Post widget on the checkout page *For Shopify Plus only</strong></summary>

You can add the Nova Post widget to the checkout page using the checkout editor. Go to Shopify admin > Settings > Checkout > Customize.

</details>

The widget will automatically pull a branch from the Nova Post API (GET /divisions). If a buyer selects a delivery country you do not ship to, the widget will still appear, but the buyer will not be able to select a branch.

### How to arrange and ship an order

<details>

<summary><strong>Test shipment</strong></summary>

To test the integration, you can create a test shipment.

1. Add a test product to the cart.
2. Check the following:
   1. The country selection works correctly.
   2. The list of branches loads properly.
   3. The selected point is recorded in the order note or cart attributes<br>
3. Go to Shopify Admin → Orders → and verify that the selected branch is displayed correctly.
4. Generate a test waybill. Check if the following is loaded correctly:
   * Recipient's full name
   * Contacts
   * Branch
   * Product information (HS code, weight, value, dimension

</details>

1. **Create a waybill**
   1. Go to the specific order.
   2. In the Nova Post section, you will see an active Create Shipment button. Click it.
   3. Review details and click Create.
   4. Once the shipment is created, you can print the waybill and other necessary documents.
2. **Print documents:** label and invoice (for international shipments)\
   \
   Go to the specific order in Shopify admin > click Print > select Nova Post > choose the required document.
3. **Pack the order according to the Nova Post's packaging standards and send the shipment.**

{% hint style="info" %}
![](https://site-assets.novapost.com/2ce00c3a-6442-4f1a-ab0d-b44e4721a5ed.svg) When the order is sent, the customer will receive a waybill number via email, specified during the order process.
{% endhint %}


# Чекліст


# COD (cash on delivery)

Чекліст допомагає самостійно перевірити, чи коректно налаштована передача параметрів COD в API.

**COD / Оплата при отриманні** — це послуга, яка дозволяє оплачувати товар під час отримання відправлення. Через API послуга додається як додатковий сервіс до відправлення у блоці <mark style="color:$success;">`services`</mark> з кодом <mark style="color:$success;">`serviceCode: "COD".`</mark>

Перед запуском інтеграції потрібно підписати договір з NovaPost на використання послуги COD.

#### Для використання сервісу треба заповнити наступні обов’язкові поля:

<table><thead><tr><th width="265.800048828125">Назва</th><th>Опис поля</th></tr></thead><tbody><tr><td>serviceCode</td><td><p>Код сервісу, що вказує на наявність послуги «Оплата при отриманні». </p><p>Завжди "COD" для даного типу оплати. </p></td></tr><tr><td>amount</td><td><p>Загальна сума, яку одержувач має сплатити в межах послуги COD.  Зазначається двічі:</p><ul><li>у блоці <code>services</code> — як загальна сума COD;</li><li>у блоці <code>bankAccount</code> — як сума для перерахування на рахунок.</li></ul></td></tr><tr><td>contractNumber</td><td>Якщо існує кілька договорів, необхідно вказати той що потрібно. </td></tr><tr><td>payerType</td><td>Визначає платника послуги, у прикладі це одержувач.</td></tr><tr><td>currencyCode</td><td>Валюта транзакції. Визначається за договором відправника.</td></tr><tr><td>bankAccountId</td><td>Ідентифікаційний податковий номер або еквівалентний ідентифікатор (ЄДРПОУ, ІПН, NIP, IČO). Значення поля CompanyTin відправника юридичної особи. </td></tr><tr><td>bankAccountName</td><td>IBAN</td></tr><tr><td>commissionPayer</td><td>Визначає платника комісії COD: Одержувач/Відправник.</td></tr></tbody></table>

#### Приклад:

```
"services": [
  {
    "shipmentParcelRowNumber": null,
    "serviceCode": "COD",
    "amount": 10,
    "contractNumber": null,
    "payerType": "Recipient",
    "additionalParameters": {
      "cod": {
        "cash": null,
        "card": null,
        "bankAccount": {
          "amount": 10,
          "currencyCode": "PLN",
          "bankAccountId": "1234567890",
          "bankAccountName": "PL12345678901234567890123456",
          "description": "test S",
          "commissionPayer": "Recipient"
        }
      }
    }
  }
]
```


# Безготівкова оплата

Чекліст допомагає самостійно перевірити, чи коректно налаштована передача параметрів для безготівкової оплати послуг доставки в API.

**Безготівковий розрахунок -** це спосіб оплати вартості доставки за логістичним договором клієнта з Nova Post. Для використання такого способу оплати клієнт має мати підписаний логістичний договір, у якому передбачено безготівковий розрахунок.

Через API безготівкова оплата налаштовується під час створення відправлення за допомогою двох полів:

| Назва               | Опис поля                                                                                                                  |
| ------------------- | -------------------------------------------------------------------------------------------------------------------------- |
| payerType           | <p>Визначає платника послуг доставки. Доступні значення: </p><p> - Sender, </p><p> - Recipient, </p><p> - ThirdPerson.</p> |
| payerContractNumber | Номер договору платника для безготівкового розрахунку.                                                                     |

#### Приклад:

```

{
 "status": "ReadyToShip",
  "clientOrder": "",
  "note": "",
  "payerType": "Sender",
  "payerContractNumber": "CNPMD-12345678"
  "invoice": null,
  "services": [],
  "parcels": [],
  "sender": {},
  "recipient": {}
}

```

<br>


# Відправка на адресу


# Відправка на поштомат


# WooCommerce

Use the official Nova Post plugin to ensure all services work correctly.

<a href="https://uk.wordpress.org/plugins/nova-post-for-woocommerce/" class="button primary">Install</a>

### How to set up the plugin to get started

{% hint style="warning" %}
To ensure the plugin works correctly, you need a business client agreement with Nova Post. If you need to find your agreement number or sign an agreement, [email the sales department in your country.](https://api-portal.novapost.com/uk/help-center)
{% endhint %}

<details>

<summary><strong>Nova Post Settings tab</strong></summary>

1. Get an API key. Generate a key [for the production](https://api-portal.novapost.com/uk/api-nova-post/start/api-keys) or [test environment](https://api-portal.novapost.com/uk/test-api-keys).&#x20;
2. Install the Nova Post plugin
3. From the sidebar menu, go to the plugin settings: WooCommerce → Nova Post Settings and complete the following sections.

</details>

<details>

<summary><strong>API Configuration section</strong></summary>

Enter the received API key.

{% hint style="warning" %}
If you need to set up the plugin for testing, check the Testing API checkbox and enter the test key. You can test creating shipments without generating actual shipping labels.
{% endhint %}

</details>

<details>

<summary><strong>Contract Numbers section</strong></summary>

* In the Domestic Contract Number field, enter the agreement number for domestic shipments within the country of origin\*.
* In the International Contract Number field, specify the contract number for international delivery (for delivery to EU or non-EU countries).

\*Country of shipment – the country of business registration and concluding the agreement with Nova Post.

</details>

<details>

<summary><strong>Sender Data section</strong></summary>

{% hint style="warning" %}
This data will be used for the generation of shipping labels; specify the information exactly as it is stated in your Nova Post agreement.
{% endhint %}

Fill in the following fields:

* Last name
* First name
* Email
* Phone number
* Tax ID\*
* EORI\*\*

\*Optional, however, it is required to be completed to use the Cash on Delivery service

\*\*Optional; however, it is required to be completed for international delivery

#### Provide the information in the Shipment Departure Method subsection

This section allows you to configure the methods for shipment departure.

This section contains two tabs: Address and Branch. Provide the information in these tabs according to your preferred method of sending parcels: from a branch or from an address.

{% hint style="warning" %}
The “Settlement” field must contain only the name of the city or locality, without including the names of the district or region, and without any commas. Note that "Riga" and "Rīga" are treated as two distinct entries within the system.
{% endhint %}

</details>

<details>

<summary><strong>Product Information section</strong></summary>

The information specified in this section will be utilized for the generation of shipping labels by default if the corresponding details have not been provided within the product card.

* Default weight, kg
* Length, width, height, cm
* HS Code – an identifier utilized for the classification of goods in international trade

</details>

<details>

<summary><strong>Packaging Settings section</strong></summary>

Specify the packaging type that will be added to the generated shipping labels:

* Use Nova Post boxes – Nova Post packaging sizes will be used during the generation of shipping labels. Packaging sizes will be determined automatically based on the size of the items in the parcel.
* One box per order – if a single packaging type is used, its size will be automatically applied to each order.
* Use custom boxes – if multiple box options are used for packaging. The packaging size will be automatically selected based on the size of the products in the order.

When selecting either One box per order or Use custom boxes, specify the packaging sizes.

</details>

<details>

<summary><strong>Carrier shipping calculation section</strong></summary>

This section allows you to specify the shipping cost for the buyer:

* according to Nova Post rates
* other cost from the seller
* free shipping (for all orders or for orders above a certain amount

</details>

<details>

<summary><strong>Cash on Delivery section</strong></summary>

If you want to enable Cash on Delivery, you must sign an additional agreement with Nova Post.

In the section, specify information as stated in the agreement:

* Payer of the fee for the Cash on Delivery service
* Bank Account ID
* Account for crediting funds

For correct service operation, specify the data stated in the agreement with Nova Post.

</details>

<details>

<summary><strong>Order Workflow section</strong></summary>

In the section, you can configure automatic notification for the buyer about the order shipment. If you check the box next to Auto-complete orders, after creating the shipping label, we will automatically send the buyer an email with parcel tracking information, and the order will change to Completed status.

</details>

<details>

<summary><strong>Divisions Filters section</strong></summary>

Leave the checkboxes checked for the shipping methods you want to keep available for the buyer during checkout.

</details>

<details>

<summary><strong>Settings tab</strong></summary>

**General options section**

Go to Settings – General options

1. Selling location(s) settings:

* Select Sell to specific countries
* Specify the countries where you plan to sell.

Specify only the countries where Nova Post branches are located.

Countries with Nova Post presence:

* &#x20;Ukraine&#x20;
* Moldova&#x20;
* Poland&#x20;
* Lithuania&#x20;
* Czech Republic&#x20;
* Romania&#x20;
* Germany&#x20;
* Slovakia&#x20;
* Estonia&#x20;
* Latvia&#x20;
* Hungary&#x20;
* Italy&#x20;
* United Kingdom&#x20;
* Spain&#x20;
* France&#x20;
* Austria&#x20;
* Netherlands&#x20;
* USA&#x20;

2. Currency settings

For example: if shipments are made from Romania — select the Romanian leu (RON).

Change the currency if necessary and save the changes.

{% hint style="warning" %}
If the store currency matches the agreement currency, you will avoid exchange rate differences and payment discrepancies. If there are currency differences, Nova Post will perform the necessary conversion.
{% endhint %}

***Shipping zones section***

Go to: Settings — Shipping

This section allows you to set the available shipping methods depending on the country.

1. Click Add zone
2. Enter the zone name
3. Add countries that will be included in this zone.
4. Click Add shipping method
5. Select which shipping method will be available for this zone: delivery to an address (Nova Post Address) or delivery to a branch (Nova Post Division).

To make both shipping options available, create the same zone with the second shipping method. Save the data.

***Specifics of filling out product data for delivery outside the EU or to the EU zone from other countries***

To correctly complete customs documents, enter the following data into the corresponding fields in the product cards:

* Product name – the name of the product in English
* HS code – the product classification code

The HS code must consist of 8-10 numeric characters:

* If your HS code is shorter than 8 characters, add zeros to it.
* If your HS code is longer than 10 characters, remove the last ones.

### How to create a shipment and print documents

{% hint style="warning" %}
If an error occurs during shipping label creation that you cannot resolve, write a request to <servicedesk@novapost.com>.&#x20;
{% endhint %}

1. Open the Orders section
2. Click the Create waybill button (1)
3. A preview window of the generated shipping label will open; at the very bottom, click the Create waybill button
4. After the shipping label is created, the label number will be displayed in the orders section, and the option to print documents will appear (2). For shipping within the country or within the EU, only a label with a barcode and parcel data will be generated, while for international shipping, both a label and an invoice will be generated.

{% hint style="warning" %}
If you want to create several shipping labels at once:

* select the required parcels using checkboxes (3)
* in Bulk Actions select the Nova Post: Create Shipments option
* click the Apply button
  {% endhint %}

5. To print a document, click its icon (2) and confirm printing in the preview window.

<img src="/files/defXgb2dzdn8VMCyXyBY" alt="" height="272" width="602">

</details>

#### How to send parcels by courier

Create a courier pickup and send up to 15 parcels at a time from your own address without visiting a branch.

{% hint style="warning" %}
To ensure that pickups are created correctly, please make sure you have filled in the shipping addres Shipment Departure Method section.
{% endhint %}

1. Open the Orders section
2. Select the parcels you want to send from an address.

{% hint style="warning" %}
You can only add parcels to a pickup for which a Waybill or International Waybill has already been created, and which are in the "Ready for shipment" status, for which a Waybill has been created.
{% endhint %}

3. In the Bulk Actions dropdown menu, select the Create Pickup Request option and click Apply.
4. A modal window will appear. Select the date and available time slot for the courier pickup.
5. Click Confirm to confirm the request and view the result.

{% hint style="info" %}
**Important details!**

* Do not change the sender's address for a courier pickup if you already have created parcels. The sender's address must remain unchanged throughout the entire pickup request creation process. If you need to change the address, delete all waybills that have been created but not yet sent, then create them again.&#x20;
* You can add 15 parcels to a request. If your selection contains more, the rest of the orders will be automatically skipped and displayed in the Warnings block of the report.
  {% endhint %}

#### Results of the courier pickup request report

| Success | The request has been created. All or some of the selected parcels have been successfully added to the request.                     |
| ------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| Warning | Some parcels were automatically skipped. The report displays a list indicating the reason for each.                                |
| Error   | One or more parcels failed validation. The report displays a list of problematic orders with a detailed description of the errors. |

All status types can be displayed simultaneously in a single report, depending on the selected parcels and the results of their validation.

### **How to track the courier pickup status**

The created request number and its current status are displayed:

* in the Nova Post block on the individual order details page.
* on the order list page in the "Shipping Status" column within the corresponding Pickup icon.

The request status is updated automatically every time you open or reload the pages.

How to edit or cancel a courier pickup

Editing the time slot, adding or removing shipments, and deleting the request is available exclusively in your Nova Post business account.

### **How to track a parcel for the seller and the buyer**

**Tracking by the seller**

* In the Orders section, the Shipping Status column (1) will display data on the current parcel delivery status.
* In the Nova Post Shipment column, the waybill number is displayed (2). This is an active link; click it to go to the parcel tracking with route details.

<img src="/files/YO6glnKyXn00mrDcJKGT" alt="" height="236" width="602">

\
**Tracking by the buyer**

The buyer can track the parcel's movement through the NovaPost app or directly on the NovaPost website. The buyer needs the parcel number for tracking.

Send the parcel tracking data to the buyer after the waybill has been created:

1. Check the box next to the required orders.
2. In Bulk actions select Change status to Completed
3. Click Apply

After this, an email containing the parcel number and a link to the tracking page will be automatically sent to the email address provided by the buyer during checkout.

### How the buyer journey looks: from order to receipt

After the buyer has added products to the cart and proceeded to checkout, they need to:<br>

1. Enter an email address
2. Fill in the delivery address data:

* Country
* First Name
* Last Name
* Street and house number
* Apartment number\*
* City
* Region\*
* Postal code
* Phone number

3. Fill in the billing address data: can be entered manually or use the delivery address data
4. Select a shipping method from the list available for the delivery country:

* By courier to the address
* To a pickup point

In case of delivery to a service point, you must select the type: branch or parcel locker, and then specify the required one from the list.

5. Select a payment method:
6. On the website
7. Upon receipt (if the corresponding service is enabled by the seller)
8. Add a comment to the order (optional)
9. Click the order creation button.
10. After the waybill for order delivery is created, the seller can send a notification email with the parcel number for tracking.
11. When the parcel arrives at the destination, a notification regarding the parcel's arrival or the courier's visit time will be sent to the email address provided during the order.


# COD (cash on delivery)

The checklist helps you independently verify whether COD parameter transmission in the API is configured correctly.

COD / Cash on Delivery is a service that allows payment for goods at the time of shipment delivery. Through the API, this service is added as an additional shipment service within the <mark style="color:green;">`services`</mark> block using <mark style="color:$success;">`serviceCode: "COD"`</mark><mark style="color:$success;">.</mark>

Before starting the integration, it is necessary to sign an agreement with NovaPost for using the COD service.\\

#### To use the service, the following required fields must be completed:

<table><thead><tr><th width="192.39996337890625">Field name</th><th>Description</th></tr></thead><tbody><tr><td>serviceCode</td><td>Service code indicating that the shipment includes the Cash on Delivery service.<br>Always <code>"COD"</code> for this payment type.</td></tr><tr><td>amount</td><td><p>The total amount that the recipient must pay within the COD service. It is specified twice:</p><ul><li>in the <code>services</code> block — as the total COD amount;</li><li>in the <code>bankAccount</code> block — as the amount to be transferred to the account.</li></ul></td></tr><tr><td>contractNumber</td><td>If multiple contracts exist, the required one must be specified.</td></tr><tr><td>payerType</td><td>Defines the payer of the service; in this example, it is the recipient.</td></tr><tr><td>currencyCode</td><td>Transaction currency. It is determined according to the sender's contract.</td></tr><tr><td>bankAccountId</td><td>Tax identification number or equivalent identifier (EDRPOU, TIN, NIP, IČO).<br>The value corresponds to the sender company's <code>companyTin</code> field.</td></tr><tr><td>bankAccountName</td><td>IBAN</td></tr><tr><td>commissionPayer</td><td>Defines the COD commission payer: Recipient / Sender.</td></tr></tbody></table>

#### Example:

```
"services": [
  {
    "shipmentParcelRowNumber": null,
    "serviceCode": "COD",
    "amount": 10,
    "contractNumber": null,
    "payerType": "Recipient",
    "additionalParameters": {
      "cod": {
        "cash": null,
        "card": null,
        "bankAccount": {
          "amount": 10,
          "currencyCode": "PLN",
          "bankAccountId": "1234567890",
          "bankAccountName": "PL12345678901234567890123456",
          "description": "test S",
          "commissionPayer": "Recipient"
        }
      }
    }
  }
]
```


# Non-cash payment

The checklist helps you independently verify whether the parameters for non-cash payment of delivery services are configured correctly in the API.

**Non-cash payment** is a method of paying delivery charges under the client’s logistics agreement with Nova Post. To use this payment method, the client must have a signed logistics agreement that includes cashless payment terms.

#### **Through the API, cashless payment is configured during shipment creation using two fields:**

| Field name          | Description                                                                                                                    |
| ------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| payerType           | <p>Defines the payer of delivery services. Available values:</p><ul><li>Sender</li><li>Recipient</li><li>ThirdPerson</li></ul> |
| payerContractNumber | Contract number of the payer for non-cash payment.                                                                             |

#### Example:

```

{
 "status": "ReadyToShip",
  "clientOrder": "",
  "note": "",
  "payerType": "Sender",
  "payerContractNumber": "CNPMD-12345678"
  "invoice": null,
  "services": [],
  "parcels": [],
  "sender": {},
  "recipient": {}
}

```


# Help Center

## Support & Resources

{% columns %}
{% column valign="bottom" %}
**👨‍💻 Technical Support**

For API integration questions, request errors, or technical issues, please use our ticketing system.\
<servicedesk@novapost.com>
{% endcolumn %}

{% column valign="middle" %}
🧩 **Business Support**

Assistance with integrating Nova Post services into your business processes and консультації щодо API connectivity.\
<api.consult@novapost.com>
{% endcolumn %}
{% endcolumns %}

#### &#x20;Sales Contacts

Select your country or region to get in touch with the local Nova Post sales team.

{% hint style="info" %}
Can’t find your country? Please contact our general sales support at <sales@novapost.com>
{% endhint %}

### Sales department contacts

<details>

<summary>🌍 Europe</summary>

<table><thead><tr><th width="164">Region</th><th>Number</th><th>Email</th></tr></thead><tbody><tr><td>Poland</td><td>+48 532 697 974</td><td><a href="mailto:wspolpraca@novapost.pl">wspolpraca@novapost.pl</a></td></tr><tr><td>Czech Republic</td><td>+420 776 060 379</td><td><a href="mailto:sale_cz@novapost.com">sale_cz@novapost.com</a></td></tr><tr><td>Germany</td><td>+49 170 731 6517</td><td><a href="mailto:sale_de@novapost.com">sale_de@novapost.com</a></td></tr><tr><td>Hungary</td><td>+36 96 800 609</td><td><a href="mailto:support_hu@novapost.com">support_hu@novapost.com</a></td></tr><tr><td>Italy</td><td>+39 029 994 0609</td><td><a href="mailto:support_it@novapost.com">support_it@novapost.com</a></td></tr><tr><td>Spain</td><td>+34 930 474 609</td><td><a href="mailto:support_es@novapost.com">support_es@novapost.com</a></td></tr><tr><td>Romania</td><td>+40 373 785 207</td><td><a href="mailto:support_ro@novapost.com">support_ro@novapost.com</a></td></tr><tr><td>Slovakia</td><td>+421 552 302 609</td><td><a href="mailto:support_sk@novapost.com">support_sk@novapost.com</a></td></tr><tr><td>France</td><td>+33 159 420 609</td><td><a href="mailto:support_fr@novapost.com">support_fr@novapost.com</a></td></tr><tr><td>Netherlands</td><td>+31 203 695 606</td><td><a href="mailto:support_nl@novapost.com">support_nl@novapost.com</a></td></tr><tr><td>Great Britain</td><td>+44 180 330 0609</td><td><a href="http://%D1%96khmelevskyi.b@novapost.com/">іkhmelevskyi.b@novapost.com</a></td></tr><tr><td>Austria</td><td>-</td><td><a href="mailto:support_at@novapost.com">support_at@novapost.com</a></td></tr></tbody></table>

</details>

<details>

<summary>🌐 Baltic region</summary>

<table><thead><tr><th width="168">Region</th><th>Number</th><th>Email</th></tr></thead><tbody><tr><td>Baltic region</td><td>+37 123 557 979</td><td><a href="mailto:balticsales@novapost.com">balticsales@novapost.com</a></td></tr></tbody></table>

</details>

<details>

<summary>🤝 Partnership Requests</summary>

<table><thead><tr><th width="186.20001220703125">Request Type</th><th>Number</th></tr></thead><tbody><tr><td>Partnership Requests</td><td> <a href="mailto:partner_np_europa@novaposhta.ua">partner_np_europa@novaposhta.ua</a></td></tr></tbody></table>

</details>

#### ❓FAQ

<details>

<summary><strong>How can I get access to the Nova Post API?</strong></summary>

To access the Nova Post API, you must sign a contract with Nova Post.\
After the agreement is completed, the designated responsible person will be able to generate an API key in the personal account.

</details>

<details>

<summary><strong>How can I obtain an API key?</strong></summary>

The API key can be generated in your personal account once API access has been activated.\
The key is used to generate a JWT token for request authorization.

</details>

<details>

<summary><strong>How does authorization work?</strong></summary>

Authorization is performed using a JWT token.\
The JWT token is generated using your API key and must be included in the request header:

```
Authorization: Bearer {JWT_TOKEN}
```

Authorization: Bearer {JWT\_TOKEN}

</details>

<details>

<summary><strong>Is a test environment (sandbox) available?</strong></summary>

Yes, a sandbox environment is available for testing and validating your integration before moving to production.

</details>

<details>

<summary><strong>What request format is used?</strong></summary>

The API uses JSON format for both requests and responses.

```
Content-Type: application/json
```

</details>

<details>

<summary><strong>Where can I find the list of available methods?</strong></summary>

The full list of available methods is provided in the **API Methods** section, where you can find request parameters, examples, and possible responses.

</details>

<details>

<summary><strong>Where can I obtain system values (branches, currencies, etc.)?</strong></summary>

System values are available in the **Dictionaries** section.\
It is recommended to use them to ensure correct and valid API requests.

</details>

<details>

<summary><strong>What should I do if a request returns an error?</strong></summary>

Please verify the following:

* The validity of the JWT token
* The format of the submitted data
* The required parameters

If the issue persists, please contact the **Help Center** or technical support.

</details>

<details>

<summary><strong>How to generate a JWT token</strong></summary>

How to generate a JWT token

```
GET /clients/authorization
```

Pass the API key in the request. A temporary JWT token will be returned in the response.

The token must be included in the header of every subsequent request:

```
Authorization: Bearer {JWT_TOKEN}
```

</details>

<details>

<summary><strong>How long is a JWT token valid?</strong></summary>

The JWT token has a limited validity period.\
It is recommended to implement an automatic token refresh mechanism before the token expires.

</details>


