Skip to content

Translation. Original: faktury/sesje/sesja-sprawdzenie-stanu-i-pobranie-upo.md

Сесія – перевірка стану та отримання УПО

20.04.2026

Цей документ описує операції, що служать для моніторингу стану сесії (інтерактивної або пакетної) та отримання УПО для рахунків-фактур і всієї сесії.

Діаграми станів

Інтерактивна сесія

діаграма станів

Пакетна сесія

діаграма станів

1. Отримання списку сесій

Повертає список сесій, що відповідають заданим критеріям пошуку.

GET sessions

Повертає поточний статус сесії разом із зведеними даними про кількість надісланих, успішно та неуспішно оброблених рахунків-фактур; після закриття сесії додатково надає список посилань на зведене УПО.

Приклад мовою C#: KSeF.Client.Tests.Core/E2E/Sessions/SessionStatusE2ETests.cs

csharp
// Отримання пакетних сесій
 List<Session> sessions = new List<Session>();
 const int pageSize = 20;
 string? continuationToken = null;
 do
 {
     SessionsListResponse response = await ksefClient.GetSessionsAsync(SessionType.Batch, accessToken, pageSize, continuationToken, sessionsFilter, cancellationToken).ConfigureAwait(false);
     continuationToken = response.ContinuationToken;
     sessions.AddRange(response.Sessions);
 } while (!string.IsNullOrEmpty(continuationToken));

// Отримання інтерактивних сесій
 List<Session> sessions = new List<Session>();
 const int pageSize = 20;
 string? continuationToken = null;
 do
 {
     SessionsListResponse response = await ksefClient.GetSessionsAsync(SessionType.Online, accessToken, pageSize, continuationToken, sessionsFilter, cancellationToken).ConfigureAwait(false);
     continuationToken = response.ContinuationToken;
     sessions.AddRange(response.Sessions);
 } while (!string.IsNullOrEmpty(continuationToken));

sessionsFilter — це об'єкт фільтрів, що знаходиться тут: KSeF.Client.Core/Models/Sessions/SessionsFilter.cs

Приклад мовою Java: SessionIntegrationTest.java

java
SessionsQueryRequest request = new SessionsQueryRequest();
request.setSessionType(SessionType.ONLINE);
request.setStatuses(List.of(CommonSessionStatus.INPROGRESS));

SessionsQueryResponse sessionsQueryResponse = ksefClient.getSessions(request, pageSize, continuationToken, accessToken();

while (Strings.isNotBlank(activeSessions.getContinuationToken())) {
        sessionsQueryResponse = ksefClient.getSessions(pageSize, sessionsQueryResponse.getContinuationToken(), accessToken);
}

2. Перевірка стану сесії

Перевіряє поточний стан сесії.

GET sessions/{referenceNumber}

Повертає поточний статус сесії разом із зведеними даними про кількість надісланих, успішно та неуспішно оброблених рахунків-фактур; після закриття сесії додатково надає список посилань на зведене УПО.

Приклад мовою C#: KSeF.Client.Tests.Core/E2E/OnlineSession/OnlineSessionE2ETests.cs

csharp
SessionStatusResponse openSessionResult = await kSeFClient.GetSessionStatusAsync(referenceNumber, accessToken, cancellationToken).ConfigureAwait(false);

int documentCount = openSessionResult.InvoiceCount;
int successfulInvoiceCount = openSessionResult.SuccessfulInvoiceCount;
int failedInvoiceCount = openSessionResult.FailedInvoiceCount;

Приклад мовою Java: OnlineSessionIntegrationTest.java

java
SessionStatusResponse statusResponse = ksefClient.getSessionStatus(referenceNumber, accessToken);

3. Отримання інформації про надіслані рахунки-фактури

GET sessions/{referenceNumber}/invoices

Повертає список метаданих усіх надісланих рахунків-фактур разом із їхніми статусами та загальною кількістю цих рахунків-фактур у сесії.

Приклад мовою C#:

csharp
const int pageSize = 50;
string continuationtoken = null;

do
{
    SessionInvoicesResponse sessionInvoices = await ksefClient
                                .GetSessionInvoicesAsync(
                                referenceNumber,
                                accessToken,
                                pageOffset,
                                pageSize,
                                cancellationToken)
                                ConfigureAwait(false);

    foreach (SessionInvoice sessionInvoice in sessionInvoices.Invoices)
    {
        Console.WriteLine($"#{sessionInvoice.InvoiceNumber}. Status: {sessionInvoice.Status.Code}");
    }

    continuationtoken = sessionInvoices.ContinuationToken;
}
while (continuationtoken != null);

Приклад мовою Java: OnlineSessionIntegrationTest.java

java
SessionInvoicesResponse sessionInvoices = ksefClient.getSessionInvoices(referenceNumber,continuationtoken, pageSize, authToken);

while (Strings.isNotBlank(sessionInvoices.getContinuationToken())) {
    sessionInvoices = ksefClient.getSessions(pageSize, sessionInvoices.getContinuationToken(), accessToken);
}

4. Отримання інформації про окремий рахунок-фактуру

Дозволяє отримати детальну інформацію про окремий рахунок-фактуру в сесії, включаючи його статус і метадані.

Необхідно вказати референційний номер сесії referenceNumber та референційний номер рахунку-фактури invoiceReferenceNumber.

GET sessions/{referenceNumber}/invoices/{invoiceReferenceNumber}

Приклад мовою C#:

csharp
SessionInvoice invoice = await ksefClient
                .GetSessionInvoiceAsync(
                referenceNumber,
                invoiceReferenceNumber,
                accessToken,
                cancellationToken);

Приклад мовою Java: QueryInvoiceIntegrationTest.java

java
SessionInvoiceStatusResponse statusResponse = ksefClient.getSessionInvoiceStatus(sessionReferenceNumber, invoiceReferenceNumber, accessToken);

5. Отримання УПО для рахунку-фактури

Дозволяє отримати УПО для окремого, коректно прийнятого рахунку-фактури.

5.1 На основі референційного номера рахунку-фактури

GET sessions/{referenceNumber}/invoices/{invoiceReferenceNumber}/upo

Приклад мовою C#:

csharp
string upo = await ksefClient
                .GetSessionInvoiceUpoByReferenceNumberAsync(
                referenceNumber,
                invoiceReferenceNumber,
                accessToken,
                cancellationToken)

Приклад мовою Java: OnlineSessionIntegrationTest.java

java
byte[] upoResponse = ksefClient.getSessionInvoiceUpoByReferenceNumber(sessionReferenceNumber, invoiceReferenceNumber, accessToken);

5.2 На основі номера KSeF рахунку-фактури

GET sessions/{referenceNumber}/invoices/ksef/{ksefNumber}/upo

Приклад мовою C#:

csharp
var upo = await ksefClient
                .GetSessionInvoiceUpoByKsefNumberAsync(
                referenceNumber,
                ksefNumber,
                accessToken,
                cancellationToken)

Приклад мовою Java: OnlineSessionIntegrationTest.java

java
byte[] upoResponse = ksefClient.getSessionInvoiceUpoByKsefNumber(sessionReferenceNumber, ksefNumber, accessToken);

Отриманий XML-документ є:

  • підписаним у форматі XADES Міністерством фінансів
  • відповідним схемі XSD.

6. Отримання списку некоректно прийнятих рахунків-фактур

GET sessions/{referenceNumber}/invoices/failed

Повертає загальну кількість відхилених рахунків-фактур у сесії та детальну інформацію (статус і деталі помилок) для кожного некоректно обробленого рахунку-фактури.

Приклад мовою C#:

csharp
const int pageSize = 50;
string continuationToken = "";

do
{
    List<SessionInvoicesResponse> sessionInvoices = await ksefClient
                                .GetSessionFailedInvoicesAsync(
                                referenceNumber,
                                accessToken,
                                pageSize,
                                continuationToken,
                                cancellationToken);

    continuationToken = failedResult.Invoices.ContinuationToken

}
while (!string.IsNullOrEmpty(continuationToken));

Приклад мовою Java: DuplicateInvoiceIntegrationTest.java

java
List<SessionInvoiceStatusResponse> failedInvoicesList = new ArrayList<>();
SessionInvoicesResponse failedInvoices = ksefClient.getSessionFailedInvoices(sessionRef, null, 10, accessToken);
if (failedInvoices.getInvoices() != null && !failedInvoices.getInvoices().isEmpty()) {
    failedInvoicesList.addAll(failedInvoices.getInvoices());
}
while (Strings.isNotBlank(failedInvoices.getContinuationToken())) {
    failedInvoices = ksefClient.getSessionFailedInvoices(sessionRef, failedInvoices.getContinuationToken(), 10, accessToken);
    if (failedInvoices.getInvoices() != null && !failedInvoices.getInvoices().isEmpty()) {
        failedInvoicesList.addAll(failedInvoices.getInvoices());
    }
}

Endpoint дозволяє вибірково отримати лише відхилені рахунки-фактури, що полегшує аналіз помилок у сесіях із великою кількістю рахунків-фактур.

7. Отримання УПО сесії

УПО сесії є зведеним підтвердженням прийняття всіх рахунків-фактур, коректно надісланих у рамках даної сесії.

Після закриття сесії у відповідь на перевірку її стану (крок 2 – Перевірка стану сесії) повертаються не лише дані про кількість коректно та некоректно оброблених рахунків-фактур, а й список посилань на зведені УПО.

Кожен елемент масиву upo.pages[] містить референційний номер УПО (referenceNumber) та посилання (downloadUrl) для його завантаження:

json
"upo": {
    "pages": [
        {
            "referenceNumber": "20250901-EU-47FDBE3000-5961A5D232-BF",
            "downloadUrl": "/api/v2/sessions/20250901-SB-47FA636000-5960B49115-9D/upo/20250901-EU-47FDBE3000-5961A5D232-BF"
        },
        {
            "referenceNumber": "20250901-EU-48D8488000-59667BB54C-C8",
            "downloadUrl": "/api/v2/sessions/20250901-SB-47FA636000-5960B49115-9D/upo/20250901-EU-48D8488000-59667BB54C-C8"
        }        
    ]
}

Маючи цей список, клієнт API може завантажувати УПО по одному, викликаючи endpoint, вказаний у полі downloadUrl, тобто
GET /sessions/{referenceNumber}/upo/{upoReferenceNumber}

Отриманий XML-документ відповідає схемі XSD і може містити максимум 10 000 позицій рахунків-фактур.

Приклад мовою C#:

csharp
 string upo = await ksefClient.GetSessionUpoAsync(
            sessionReferenceNumber,
            upoReferenceNumber,
            accessToken,
            cancellationToken
        );

Приклад мовою Java: OnlineSessionIntegrationTest.java

java
byte[] sessionUpo = ksefClient.getSessionUpo(sessionReferenceNumber, upoReferenceNumber, accessToken);

Пов'язані документи