diff --git a/doc/KSeF/README.md b/doc/KSeF/README.md
index 7857517..7a17c9f 100644
--- a/doc/KSeF/README.md
+++ b/doc/KSeF/README.md
@@ -174,6 +174,7 @@ The implementation uses `PluginException` for error handling with two error type
- [XML Invoice Example](https://github.com/CIRFMF/ksef-docs/blob/main/faktury/weryfikacja-faktury.md)
- [Github Discussions](https://github.com/CIRFMF/ksef-docs/issues/351#issuecomment-3538013805)
+- [Github Discussions](https://github.com/CIRFMF/ksef-docs/issues/399)
# Validate XML
diff --git a/doc/KSeF/openapi.json b/doc/KSeF/openapi.json
new file mode 100644
index 0000000..433ed09
--- /dev/null
+++ b/doc/KSeF/openapi.json
@@ -0,0 +1,11183 @@
+{
+ "openapi": "3.0.4",
+ "info": {
+ "title": "KSeF API TE",
+ "description": "**Wersja API:** 2.0.0 (build 2.0.0-rc5.7-te-20251127.1+390ad3e147d90ab086bf22c3fcd354002449bf11)
\n**Klucze publiczne** Ministerstwa Finansów (dla danego środowiska): [Pobierz klucze](#tag/Certyfikaty-klucza-publicznego)
\n**Historia zmian:** [Changelog](https://github.com/CIRFMF/ksef-docs/blob/main/api-changelog.md)
\n**Rozszerzona dokumentacja API:** [ksef-docs](https://github.com/CIRFMF/ksef-docs/tree/main)\n",
+ "version": "v2"
+ },
+ "paths": {
+ "/api/v2/auth/sessions": {
+ "get": {
+ "tags": [
+ "Aktywne sesje"
+ ],
+ "summary": "Pobranie listy aktywnych sesji",
+ "description": "Zwraca listę aktywnych sesji uwierzytelnienia.\n\n**Sortowanie:**\n\n- startDate (Desc)\n\n",
+ "parameters": [
+ {
+ "name": "x-continuation-token",
+ "in": "header",
+ "description": "Token służący do pobrania kolejnej strony wyników.",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "pageSize",
+ "in": "query",
+ "description": "Rozmiar strony wyników.",
+ "schema": {
+ "maximum": 100,
+ "exclusiveMaximum": false,
+ "minimum": 10,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "format": "int32",
+ "default": 10
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/AuthenticationListResponse"
+ },
+ "example": {"continuationToken":"W3siY29tcG9zaXRlVG9rZW4iOnsidG9rZW4iOm51bGwsInJhbmdlIjp7Im1pbiI6IjA1QzFFMCIsIm1heCI6IkZGIn19LCJyZXN1bWVWYWx1ZXMiOlsiMjAyNS0xMC0wM1QxMjoxODo0OS4zNDY2ODQ3WiJdLCJyaWQiOiIzeHd0QVBJWDVRRlVoZ0FBQUFBQUJBPT0iLCJza2lwQ291bnQiOjF9XQ==","items":[{"referenceNumber":"20251010-AU-19F5E39000-39B5B182BA-B8","isCurrent":false,"startDate":"2025-10-11T12:23:56.0154302+00:00","authenticationMethod":"QualifiedSeal","status":{"code":200,"description":"Uwierzytelnianie zakończone sukcesem"},"isTokenRedeemed":true,"refreshTokenValidUntil":"2025-11-28T09:22:13.388+00:00"}]}
+ }
+ }
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details | \n|---------------------|-----------------------------------------------------|-------------------------------------------------------------|\n| 21418 | Przekazany token kontynuacji ma nieprawidłowy format. | |\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ],
+ "x-sort": [
+ {
+ "field": "startDate",
+ "direction": "Desc"
+ }
+ ]
+ }
+ },
+ "/api/v2/auth/sessions/current": {
+ "delete": {
+ "tags": [
+ "Aktywne sesje"
+ ],
+ "summary": "Unieważnienie aktualnej sesji uwierzytelnienia",
+ "description": "Unieważnia sesję powiązaną z tokenem użytym do wywołania tej operacji.\n\nUnieważnienie sesji sprawia, że powiązany z nią refresh token przestaje działać i nie można już za jego pomocą uzyskać kolejnych access tokenów.\n**Aktywne access tokeny działają do czasu minięcia ich termin ważności.**\n\nSposób uwierzytelnienia: `RefreshToken` lub `AccessToken`.",
+ "responses": {
+ "204": {
+ "description": "No Content"
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details |\n|-|-|-|\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ]
+ }
+ },
+ "/api/v2/auth/sessions/{referenceNumber}": {
+ "delete": {
+ "tags": [
+ "Aktywne sesje"
+ ],
+ "summary": "Unieważnienie sesji uwierzytelnienia",
+ "description": "Unieważnia sesję o podanym numerze referencyjnym.\n\nUnieważnienie sesji sprawia, że powiązany z nią refresh token przestaje działać i nie można już za jego pomocą uzyskać kolejnych access tokenów.\n**Aktywne access tokeny działają do czasu minięcia ich termin ważności.**",
+ "parameters": [
+ {
+ "name": "referenceNumber",
+ "in": "path",
+ "description": "Numer referencyjny sesji uwierzytelnienia.",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/ReferenceNumber"
+ }
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "No Content"
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details |\n|-|-|-|\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ]
+ }
+ },
+ "/api/v2/certificates/limits": {
+ "get": {
+ "tags": [
+ "Certyfikaty"
+ ],
+ "summary": "Pobranie danych o limitach certyfikatów",
+ "description": "Zwraca informacje o limitach certyfikatów oraz informacje czy użytkownik może zawnioskować o certyfikat KSeF.",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/CertificateLimitsResponse"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ]
+ }
+ },
+ "/api/v2/certificates/enrollments/data": {
+ "get": {
+ "tags": [
+ "Certyfikaty"
+ ],
+ "summary": "Pobranie danych do wniosku certyfikacyjnego",
+ "description": "Zwraca dane wymagane do przygotowania wniosku certyfikacyjnego PKCS#10.\n\nDane te są zwracane na podstawie certyfikatu użytego w procesie uwierzytelnienia i identyfikują podmiot, który składa wniosek o certyfikat.\n\n\n> Więcej informacji:\n> - [Pobranie danych do wniosku certyfikacyjnego](https://github.com/CIRFMF/ksef-docs/blob/main/certyfikaty-KSeF.md#2-pobranie-danych-do-wniosku-certyfikacyjnego)\n> - [Przygotowanie wniosku](https://github.com/CIRFMF/ksef-docs/blob/main/certyfikaty-KSeF.md#3-przygotowanie-csr-certificate-signing-request)",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/CertificateEnrollmentDataResponse"
+ },
+ "example": {"commonName":"Firma Kowalski Certyfikat","countryName":"PL","serialNumber":"ABC123456789","uniqueIdentifier":"d9d22724-4696-460c-9e5e-b9e3aafb0af3","organizationName":"Firma Kowalski Sp. z o.o.","organizationIdentifier":"7762811692"}
+ }
+ }
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details |\n|---------------------|-------------------------------------------------------------------------------------------|---------|\n| 25001 | Brak możliwości pobrania danych do CSR dla wykorzystanego sposobu uwierzytelnienia. | |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ]
+ }
+ },
+ "/api/v2/certificates/enrollments": {
+ "post": {
+ "tags": [
+ "Certyfikaty"
+ ],
+ "summary": "Wysyłka wniosku certyfikacyjnego",
+ "description": "Przyjmuje wniosek certyfikacyjny i rozpoczyna jego przetwarzanie.\n\nDozwolone typy kluczy prywatnych:\n- RSA (OID: 1.2.840.113549.1.1.1), długość klucza równa 2048 bitów,\n- EC (klucze oparte na krzywych eliptycznych, OID: 1.2.840.10045.2.1), krzywa NIST P-256 (secp256r1)\n\nZalecane jest stosowanie kluczy EC.\n\nDozwolone algorytmy podpisu:\n- RSA PKCS#1 v1.5,\n- RSA PSS,\n- ECDSA (format podpisu zgodny z RFC 3279)\n\nDozwolone funkcje skrótu użyte do podpisu CSR:\n- SHA1,\n- SHA256,\n- SHA384,\n- SHA512\n\n> Więcej informacji:\n> - [Wysłanie wniosku certyfikacyjnego](https://github.com/CIRFMF/ksef-docs/blob/main/certyfikaty-KSeF.md#4-wys%C5%82anie-wniosku-certyfikacyjnego)",
+ "requestBody": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "required": [
+ "certificateName",
+ "certificateType",
+ "csr"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/EnrollCertificateRequest"
+ }
+ ]
+ },
+ "example": {"certificateName":"Certyfikat-Auth-004","certificateType":"Authentication","csr":"MIIDJjCCAd4CAQAwgbAxIjAgBgNVBAMMGUZpcm1hIEtvd2Fsc2tpIENlcnR5ZmlrYXQxIjAgBgNVBAoMGUZpcm1hIEtvd2Fsc2tpIFNwLiB6IG8uby4xEzARBgNVBGEMCjc3NjI4MTE2OTIxCzAJBgNVBAYTAlBMMRUwEwYDVQQFEwxBQkMxMjM0NTY3ODkxLTArBgNVBC0MJGQ5ZDIyNzI0LTQ2OTYtNDYwYy05ZTVlLWI5ZTNhYWZiMGFmMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANZC1hJiB4ZBsxGy/a4yvtOUP0HQxDt7EUZrfKO78+cmI7KCO9aW96yr6O0R928/Y9vmymbgh6KvMUTzZZj24uyxar849O1laor5t8Wv63RDx/I4+9Rt7w+QPPofmpenOokJH+Fm+FDQwo2l07o8SppGfaZpvMak+cDSrh+73wfM37fvPImr9p4ckzzxA9q6f4uoqGqcGSDlSwRjfLQKzWZaEklpZBpY4jeCh54uN3+YLsMQYKdcIbW0Jart1UbwMd/wbHfzFhVmPGOAMMpwVEBw6E4A0CTWIiAX3Alqbx4+IkuqC+gEs3ETTec7eOqhxe9V9cywi7WR+Mz6JO6DJcUCAwEAAaAAMD0GCSqGSIb3DQEBCjAwoA0wCwYJYIZIAWUDBAIBoRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCAaIDAgEgA4IBAQCJhtF2/2E+JmkWitE/BGbm3NU4fIxr1Z+w0UnHsP+F8n9UDwAnuncG1GH5wZFervldEMooegzEDnYaqxnEUnbZ4wxeAHqpbTZjOOfqrk7o0r66+mXUs5NnyD4M3j3ig98GcvhEdbcNH+RsIwi7FaLNXnOE4SLYL9KvW0geriywWjS+5MmA0Gcn1e4vCD6FeEls8EHzkhrWE+rUsoM5zT2a0OPNXG3fScyOqOZe+OdjT4Y7ScRGy711u3v2X9RoTqQUDfCJ3cob/KRcrzvs1TQVazGZPfcIa6an6SigUvZ7XAMHlUTyOeM4AwKqiEqQ0qfe/HhlDylgZSwulb9u0utT","validFrom":"2025-08-28T09:22:13.388+00:00"}
+ }
+ }
+ },
+ "responses": {
+ "202": {
+ "description": "Accepted",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/EnrollCertificateResponse"
+ },
+ "example": {"referenceNumber":"20251010-EH-1B6C9EB000-4B15D3AEB9-89","timestamp":"2025-10-11T12:23:56.0154302+00:00"}
+ }
+ }
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details |\n|---------------------|------------------------------------------------------------------------------------------------|---------|\n| 25002 | Brak możliwości złożenia wniosku certyfikacyjnego dla wykorzystanego sposobu uwierzytelnienia. | |\n| 25003 | Dane w CSR nie zgadzają się z danymi w użytym wektorze uwierzytelniającym. | |\n| 25004 | Niepoprawny format CSR lub niepoprawny podpis CSR. | |\n| 25006 | Osiągnięto limit możliwych do złożenia wniosków certyfikacyjnych. | |\n| 25007 | Osiągnięto limit dopuszczalnej liczby posiadanych certyfikatów. | |\n| 25010 | Nieprawidłowy typ lub długość klucza. | |\n| 25011 | Nieprawidłowy algorytm podpisu CSR. | |\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ]
+ }
+ },
+ "/api/v2/certificates/enrollments/{referenceNumber}": {
+ "get": {
+ "tags": [
+ "Certyfikaty"
+ ],
+ "summary": "Pobranie statusu przetwarzania wniosku certyfikacyjnego",
+ "description": "Zwraca informacje o statusie wniosku certyfikacyjnego.",
+ "parameters": [
+ {
+ "name": "referenceNumber",
+ "in": "path",
+ "description": "Numer referencyjny wniosku certyfikacyjnego",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/ReferenceNumber"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/CertificateEnrollmentStatusResponse"
+ },
+ "example": {"requestDate":"2025-10-11T12:23:56.0154302+00:00","status":{"code":100,"description":"Wniosek przyjęty do realizacji"}}
+ }
+ }
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details |\n|---------------------|------------------------------------------------------------------------------------------------|---------|\n| 25005 | Wniosek certyfikacyjny o podanym numerze referencyjnym nie istnieje. | |\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ]
+ }
+ },
+ "/api/v2/certificates/retrieve": {
+ "post": {
+ "tags": [
+ "Certyfikaty"
+ ],
+ "summary": "Pobranie certyfikatu lub listy certyfikatów",
+ "description": "Zwraca certyfikaty o podanych numerach seryjnych w formacie DER zakodowanym w Base64.",
+ "requestBody": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "required": [
+ "certificateSerialNumbers"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/RetrieveCertificatesRequest"
+ }
+ ]
+ },
+ "example": {"certificateSerialNumbers":["0321C82DA41B4362","0321F21DA462A362"]}
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/RetrieveCertificatesResponse"
+ },
+ "example": {"certificates":[{"certificate":"AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/wABAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR4fICEiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5/gIGCg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqusra6vsLGys7S1tre4ubq7vL2+v8DBwsPExcbHyMnKy8zNzs/Q0dLT1NXW19jZ2tvc3d7f4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb3+Pn6+/z9/v8AAQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+f4CBgoOEhYaHiImKi4yNjo+QkZKTlJWWl5iZmpucnZ6foKGio6SlpqeoqaqrrK2ur7CxsrO0tba3uLm6u7y9vr/AwcLDxMXGx8jJysvMzc7P0NHS09TV1tfY2drb3N3e3+Dh4uPk5ebn6Onq6+zt7u/w8fLz9PX29/j5+vv8/f7/AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/w==","certificateName":"Cert 00023","certificateSerialNumber":"0321C82DA41B4362","certificateType":"Authentication"}]}
+ }
+ }
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details |\n|-|-|-|\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ]
+ }
+ },
+ "/api/v2/certificates/{certificateSerialNumber}/revoke": {
+ "post": {
+ "tags": [
+ "Certyfikaty"
+ ],
+ "summary": "Unieważnienie certyfikatu",
+ "description": "Unieważnia certyfikat o podanym numerze seryjnym.",
+ "parameters": [
+ {
+ "name": "certificateSerialNumber",
+ "in": "path",
+ "description": "Numer seryjny certyfikatu (w formacie szesnastkowym).",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/RevokeCertificateRequest"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "responses": {
+ "204": {
+ "description": "No Content"
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details |\n|---------------------|------------------------------------------------------------------------------------------------|---------|\n| 25008 | Certyfikat o podanym numerze seryjnym nie istnieje. | |\n| 25009 | Nie można odwołać wskazanego certyfikatu, ponieważ jest już odwołany, zablokowany lub nieważny.| |\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ]
+ }
+ },
+ "/api/v2/certificates/query": {
+ "post": {
+ "tags": [
+ "Certyfikaty"
+ ],
+ "summary": "Pobranie listy metadanych certyfikatów",
+ "description": "Zwraca listę certyfikatów spełniających podane kryteria wyszukiwania.\nW przypadku braku podania kryteriów wyszukiwania zwrócona zostanie nieprzefiltrowana lista.\n\n**Sortowanie:**\n\n- requestDate (Desc)\n\n",
+ "parameters": [
+ {
+ "name": "pageSize",
+ "in": "query",
+ "description": "Rozmiar strony wyników",
+ "schema": {
+ "maximum": 50,
+ "exclusiveMaximum": false,
+ "minimum": 10,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "format": "int32",
+ "default": 10
+ }
+ },
+ {
+ "name": "pageOffset",
+ "in": "query",
+ "description": "Numer strony wyników",
+ "schema": {
+ "minimum": 0,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "format": "int32",
+ "default": 0
+ }
+ }
+ ],
+ "requestBody": {
+ "description": "Kryteria filtrowania",
+ "content": {
+ "application/json": {
+ "schema": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/QueryCertificatesRequest"
+ }
+ ]
+ },
+ "example": {"type":"Offline","status":"Active"}
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/QueryCertificatesResponse"
+ },
+ "example": {"certificates":[{"certificateSerialNumber":"018209160C631F1E","name":"Certyfikat 1","type":"Authentication","commonName":"Jan Kowalski","status":"Active","subjectIdentifier":{"type":"Nip","value":"1234445678"},"validFrom":"2025-08-24T14:15:22+00:00","validTo":"2027-08-24T14:15:22+00:00","lastUseDate":"2025-08-25T14:15:22+00:00","requestDate":"2025-08-24T14:15:22+00:00"}],"hasMore":false}
+ }
+ }
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details |\n|-|-|-|\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ],
+ "x-sort": [
+ {
+ "field": "requestDate",
+ "direction": "Desc"
+ }
+ ]
+ }
+ },
+ "/api/v2/security/public-key-certificates": {
+ "get": {
+ "tags": [
+ "Certyfikaty klucza publicznego"
+ ],
+ "summary": "Pobranie certyfikatów",
+ "description": "Zwraca informacje o kluczach publicznych używanych do szyfrowania danych przesyłanych do systemu KSeF.",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/PublicKeyCertificate"
+ }
+ },
+ "example": [{"certificate":"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwocTwdNgt2+PXJ2fcB7k1kn5eFUTXBeep9pH...","validFrom":"2024-07-11T12:23:56.0154302+00:00","validTo":"2028-07-11T12:23:56.0154302+00:00","usage":["KsefTokenEncryption","SymmetricKeyEncryption"]}]
+ }
+ }
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ }
+ }
+ }
+ },
+ "/api/v2/testdata/subject": {
+ "post": {
+ "tags": [
+ "Dane testowe"
+ ],
+ "summary": "Utworzenie podmiotu",
+ "description": "Tworzenie nowego podmiotu testowego. W przypadku grupy VAT i JST istnieje możliwość stworzenia jednostek podrzędnych. W wyniku takiego działania w systemie powstanie powiązanie między tymi podmiotami.",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "required": [
+ "subjectNip",
+ "subjectType",
+ "description"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/SubjectCreateRequest"
+ }
+ ]
+ },
+ "example": {"subjectNip":"7762811692","subjectType":"EnforcementAuthority","description":"Centrala","createdDate":"2025-08-25T14:15:22+00:00"}
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details |\n|---------------------|------------------------------------------------------------|---------|\n| 30001 | Podmiot lub uprawnienie już istnieje. | |\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ }
+ }
+ }
+ },
+ "/api/v2/testdata/subject/remove": {
+ "post": {
+ "tags": [
+ "Dane testowe"
+ ],
+ "summary": "Usunięcie podmiotu",
+ "description": "Usuwanie podmiotu testowego. W przypadku grupy VAT i JST usunięte zostaną również jednostki podrzędne.",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "required": [
+ "subjectNip"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/SubjectRemoveRequest"
+ }
+ ]
+ },
+ "example": {"subjectNip":"7762811692"}
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details |\n|-|-|-|\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ }
+ }
+ }
+ },
+ "/api/v2/testdata/person": {
+ "post": {
+ "tags": [
+ "Dane testowe"
+ ],
+ "summary": "Utworzenie osoby fizycznej",
+ "description": "Tworzenie nowej osoby fizycznej, której system nadaje uprawnienia właścicielskie. Można również określić, czy osoba ta jest komornikiem – wówczas otrzyma odpowiednie uprawnienie egzekucyjne.",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "required": [
+ "nip",
+ "pesel",
+ "isBailiff",
+ "description"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PersonCreateRequest"
+ }
+ ]
+ },
+ "example": {"nip":"7762811692","pesel":"15062788702","isBailiff":true,"description":"TestPerson_01","isDeceased":false,"createdDate":"2025-08-25T14:15:22+00:00"}
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details |\n|---------------------|------------------------------------------------------------|---------|\n| 30001 | Podmiot lub uprawnienie już istnieje. | |\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ }
+ }
+ }
+ },
+ "/api/v2/testdata/person/remove": {
+ "post": {
+ "tags": [
+ "Dane testowe"
+ ],
+ "summary": "Usunięcie osoby fizycznej",
+ "description": "Usuwanie testowej osoby fizycznej. System automatycznie odbierze jej wszystkie uprawnienia.",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "required": [
+ "nip"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PersonRemoveRequest"
+ }
+ ]
+ },
+ "example": {"nip":"7762811692"}
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details |\n|-|-|-|\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ }
+ }
+ }
+ },
+ "/api/v2/testdata/permissions": {
+ "post": {
+ "tags": [
+ "Dane testowe"
+ ],
+ "summary": "Nadanie uprawnień testowemu podmiotowi/osobie fizycznej",
+ "description": "Nadawanie uprawnień testowemu podmiotowi lub osobie fizycznej, a także w ich kontekście.",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "required": [
+ "contextIdentifier",
+ "authorizedIdentifier",
+ "permissions"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/TestDataPermissionsGrantRequest"
+ }
+ ]
+ },
+ "example": {"contextIdentifier":{"type":"Nip","value":"7762811692"},"authorizedIdentifier":{"type":"Nip","value":"7762811692"},"permissions":[{"description":"Opis testowy","permissionType":"InvoiceRead"}]}
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details |\n|-|-|-|\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ }
+ }
+ }
+ },
+ "/api/v2/testdata/permissions/revoke": {
+ "post": {
+ "tags": [
+ "Dane testowe"
+ ],
+ "summary": "Odebranie uprawnień testowemu podmiotowi/osobie fizycznej",
+ "description": "Odbieranie uprawnień nadanych testowemu podmiotowi lub osobie fizycznej, a także w ich kontekście.",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "required": [
+ "contextIdentifier",
+ "authorizedIdentifier"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/TestDataPermissionsRevokeRequest"
+ }
+ ]
+ },
+ "example": {"contextIdentifier":{"type":"Nip","value":"5265877635"},"authorizedIdentifier":{"type":"Nip","value":"7762811692"}}
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details |\n|-|-|-|\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ }
+ }
+ }
+ },
+ "/api/v2/testdata/attachment": {
+ "post": {
+ "tags": [
+ "Dane testowe"
+ ],
+ "summary": "Umożliwienie wysyłania faktur z załącznikiem",
+ "description": "Dodaje możliwość wysyłania faktur z załącznikiem przez wskazany podmiot",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "required": [
+ "nip"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/AttachmentPermissionGrantRequest"
+ }
+ ]
+ },
+ "example": {"nip":"7762811692"}
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details |\n|-|-|-|\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ }
+ }
+ }
+ },
+ "/api/v2/testdata/attachment/revoke": {
+ "post": {
+ "tags": [
+ "Dane testowe"
+ ],
+ "summary": "Odebranie możliwości wysyłania faktur z załącznikiem",
+ "description": "Odbiera możliwość wysyłania faktur z załącznikiem przez wskazany podmiot",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "required": [
+ "nip"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/AttachmentPermissionRevokeRequest"
+ }
+ ]
+ },
+ "example": {"nip":"7762811692"}
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details |\n|-|-|-|\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ }
+ }
+ }
+ },
+ "/api/v2/limits/context": {
+ "get": {
+ "tags": [
+ "Limity i ograniczenia"
+ ],
+ "summary": "Pobranie limitów dla bieżącego kontekstu",
+ "description": "Zwraca wartości aktualnie obowiązujących limitów dla bieżącego kontekstu.",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/EffectiveContextLimits"
+ },
+ "example": {"onlineSession":{"maxInvoiceSizeInMB":1,"maxInvoiceWithAttachmentSizeInMB":3,"maxInvoices":10000},"batchSession":{"maxInvoiceSizeInMB":1,"maxInvoiceWithAttachmentSizeInMB":3,"maxInvoices":10000}}
+ }
+ }
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ]
+ }
+ },
+ "/api/v2/limits/subject": {
+ "get": {
+ "tags": [
+ "Limity i ograniczenia"
+ ],
+ "summary": "Pobranie limitów dla bieżącego podmiotu",
+ "description": "Zwraca wartoście aktualnie obowiązujących limitów dla bieżącego podmiotu.",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/EffectiveSubjectLimits"
+ },
+ "example": {"enrollment":{"maxEnrollments":6},"certificate":{"maxCertificates":2}}
+ }
+ }
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ]
+ }
+ },
+ "/api/v2/rate-limits": {
+ "get": {
+ "tags": [
+ "Limity i ograniczenia"
+ ],
+ "summary": "Pobranie aktualnie obowiązujących limitów API",
+ "description": "Zwraca wartości aktualnie obowiązujących limitów ilości żądań przesyłanych do API.",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/EffectiveApiRateLimits"
+ },
+ "example": {"onlineSession":{"perSecond":10,"perMinute":30,"perHour":120},"batchSession":{"perSecond":10,"perMinute":20,"perHour":120},"invoiceSend":{"perSecond":10,"perMinute":30,"perHour":180},"invoiceStatus":{"perSecond":30,"perMinute":120,"perHour":720},"sessionList":{"perSecond":5,"perMinute":10,"perHour":60},"sessionInvoiceList":{"perSecond":10,"perMinute":20,"perHour":200},"sessionMisc":{"perSecond":10,"perMinute":120,"perHour":720},"invoiceMetadata":{"perSecond":8,"perMinute":16,"perHour":20},"invoiceExport":{"perSecond":4,"perMinute":8,"perHour":20},"invoiceDownload":{"perSecond":8,"perMinute":16,"perHour":64},"other":{"perSecond":10,"perMinute":30,"perHour":120}}
+ }
+ }
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ]
+ }
+ },
+ "/api/v2/testdata/limits/context/session": {
+ "post": {
+ "tags": [
+ "Limity i ograniczenia"
+ ],
+ "summary": "Zmiana limitów sesji dla bieżącego kontekstu",
+ "description": "Zmienia wartości aktualnie obowiązujących limitów sesji dla bieżącego kontekstu. **Tylko na środowiskach testowych.**",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "required": [
+ "onlineSession",
+ "batchSession"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/SetSessionLimitsRequest"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details |\n|-|-|-|\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ]
+ },
+ "delete": {
+ "tags": [
+ "Limity i ograniczenia"
+ ],
+ "summary": "Przywrócenie domyślnych wartości limitów sesji dla bieżącego kontekstu",
+ "description": "Przywraca wartości aktualnie obowiązujących limitów sesji dla bieżącego kontekstu do wartości domyślnych. **Tylko na środowiskach testowych.**",
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ]
+ }
+ },
+ "/api/v2/testdata/limits/subject/certificate": {
+ "post": {
+ "tags": [
+ "Limity i ograniczenia"
+ ],
+ "summary": "Zmiana limitów certyfikatów dla bieżącego podmiotu",
+ "description": "Zmienia wartości aktualnie obowiązujących limitów certyfikatów dla bieżącego podmiotu. **Tylko na środowiskach testowych.**",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/SetSubjectLimitsRequest"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details |\n|-|-|-|\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ]
+ },
+ "delete": {
+ "tags": [
+ "Limity i ograniczenia"
+ ],
+ "summary": "Przywrócenie domyślnych wartości limitów certyfikatów dla bieżącego podmiotu",
+ "description": "Przywraca wartości aktualnie obowiązujących limitów certyfikatów dla bieżącego podmiotu do wartości domyślnych. **Tylko na środowiskach testowych.**",
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ]
+ }
+ },
+ "/api/v2/testdata/rate-limits": {
+ "post": {
+ "tags": [
+ "Limity i ograniczenia"
+ ],
+ "summary": "Zmiana limitów API dla bieżącego kontekstu",
+ "description": "Zmienia wartości aktualnie obowiązujących limitów żądań przesyłąnych do API dla bieżącego kontekstu. **Tylko na środowiskach testowych.**",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "required": [
+ "rateLimits"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/SetRateLimitsRequest"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details |\n|-|-|-|\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ]
+ },
+ "delete": {
+ "tags": [
+ "Limity i ograniczenia"
+ ],
+ "summary": "Przywrócenie domyślnych wartości limitów API dla bieżącego kontekstu",
+ "description": "Przywraca wartości aktualnie obowiązujących limitów żądań przesyłąnych do API dla bieżącego kontekstu do wartości domyślnych. **Tylko na środowiskach testowych.**",
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ]
+ }
+ },
+ "/api/v2/permissions/persons/grants": {
+ "post": {
+ "tags": [
+ "Nadawanie uprawnień"
+ ],
+ "summary": "Nadanie osobom fizycznym uprawnień do pracy w KSeF",
+ "description": "Metoda pozwala na nadanie osobie wskazanej w żądaniu uprawnień do pracy w KSeF \nw kontekście bieżącym.\n \nW żądaniu określane są nadawane uprawnienia ze zbioru: \n- **InvoiceWrite** – wystawianie faktur, \n- **InvoiceRead** – przeglądanie faktur, \n- **CredentialsManage** – zarządzanie uprawnieniami, \n- **CredentialsRead** – przeglądanie uprawnień, \n- **Introspection** – przeglądanie historii sesji i generowanie UPO, \n- **SubunitManage** – zarządzanie jednostkami podrzędnymi, \n- **EnforcementOperations** – wykonywanie operacji egzekucyjnych.\n \nMetoda pozwala na wybór dowolnej kombinacji powyższych uprawnień. \nUprawnienie **EnforcementOperations** może być nadane wyłącznie wtedy, \ngdy podmiot kontekstu ma rolę **EnforcementAuthority** (organ egzekucyjny) \nlub **CourtBailiff** (komornik sądowy).\n\n> Więcej informacji:\n> - [Nadawanie uprawnień](https://github.com/CIRFMF/ksef-docs/blob/main/uprawnienia.md#nadawanie-uprawnie%C5%84-osobom-fizycznym-do-pracy-w-ksef)\n\n**Wymagane uprawnienia**: `CredentialsManage`.",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "required": [
+ "subjectIdentifier",
+ "permissions",
+ "description"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PersonPermissionsGrantRequest"
+ }
+ ]
+ },
+ "example": {"subjectIdentifier":{"type":"Pesel","value":"15062788702"},"permissions":["InvoiceRead","InvoiceWrite","Introspection","CredentialsRead"],"description":"Opis uprawnienia"}
+ }
+ }
+ },
+ "responses": {
+ "202": {
+ "description": "Accepted",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/PermissionsOperationResponse"
+ },
+ "example": {"referenceNumber":"20250626-EG-333C814000-C529F710D8-D2"}
+ }
+ }
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details |\n|-|-|-|\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "403": {
+ "description": "Forbidden"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ],
+ "x-required-permissions": [
+ "CredentialsManage"
+ ]
+ }
+ },
+ "/api/v2/permissions/entities/grants": {
+ "post": {
+ "tags": [
+ "Nadawanie uprawnień"
+ ],
+ "summary": "Nadanie podmiotom uprawnień do obsługi faktur",
+ "description": "Metoda pozwala na nadanie podmiotowi wskazanemu w żądaniu uprawnień do obsługi faktur podmiotu kontekstu. \nW żądaniu określane są nadawane uprawnienia ze zbioru: \n- **InvoiceWrite** – wystawianie faktur \n- **InvoiceRead** – przeglądanie faktur \n \nMetoda pozwala na wybór dowolnej kombinacji powyższych uprawnień. \nDla każdego uprawnienia może być ustawiona flaga **canDelegate**, mówiąca o możliwości jego dalszego przekazywania poprzez nadawanie w sposób pośredni.\n\n> Więcej informacji:\n> - [Nadawanie uprawnień](https://github.com/CIRFMF/ksef-docs/blob/main/uprawnienia.md#nadanie-podmiotom-uprawnie%C5%84-do-obs%C5%82ugi-faktur)\n\n**Wymagane uprawnienia**: `CredentialsManage`.",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "required": [
+ "subjectIdentifier",
+ "permissions",
+ "description"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/EntityPermissionsGrantRequest"
+ }
+ ]
+ },
+ "example": {"subjectIdentifier":{"type":"Nip","value":"7762811692"},"permissions":[{"type":"InvoiceRead","canDelegate":true},{"type":"InvoiceWrite","canDelegate":true}],"description":"Opis uprawnienia"}
+ }
+ }
+ },
+ "responses": {
+ "202": {
+ "description": "Accepted",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/PermissionsOperationResponse"
+ },
+ "example": {"referenceNumber":"20250626-EG-333C814000-C529F710D8-D2"}
+ }
+ }
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details |\n|-|-|-|\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "403": {
+ "description": "Forbidden"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ],
+ "x-required-permissions": [
+ "CredentialsManage"
+ ]
+ }
+ },
+ "/api/v2/permissions/authorizations/grants": {
+ "post": {
+ "tags": [
+ "Nadawanie uprawnień"
+ ],
+ "summary": "Nadanie uprawnień podmiotowych",
+ "description": "Metoda pozwala na nadanie jednego z uprawnień podmiotowych do obsługi podmiotu kontekstu podmiotowi wskazanemu w żądaniu.\n\n> Więcej informacji:\n> - [Nadawanie uprawnień](https://github.com/CIRFMF/ksef-docs/blob/main/uprawnienia.md#nadanie-uprawnie%C5%84-podmiotowych)\n\n**Wymagane uprawnienia**: `CredentialsManage`.",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "required": [
+ "subjectIdentifier",
+ "permission",
+ "description"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/EntityAuthorizationPermissionsGrantRequest"
+ }
+ ]
+ },
+ "example": {"subjectIdentifier":{"type":"Nip","value":"7762811692"},"permission":"SelfInvoicing","description":"działanie w imieniu 3393244202 w kontekście 7762811692, Firma sp. z o.o."}
+ }
+ }
+ },
+ "responses": {
+ "202": {
+ "description": "Accepted",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/PermissionsOperationResponse"
+ },
+ "example": {"referenceNumber":"20250626-EG-333C814000-C529F710D8-D2"}
+ }
+ }
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details |\n|-|-|-|\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "403": {
+ "description": "Forbidden"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ],
+ "x-required-permissions": [
+ "CredentialsManage"
+ ]
+ }
+ },
+ "/api/v2/permissions/indirect/grants": {
+ "post": {
+ "tags": [
+ "Nadawanie uprawnień"
+ ],
+ "summary": "Nadanie uprawnień w sposób pośredni",
+ "description": "Metoda pozwala na nadanie w sposób pośredni osobie wskazanej w żądaniu uprawnień do obsługi faktur innego podmiotu – klienta. \nMoże to być jedna z możliwości: \n- nadanie uprawnień generalnych – do obsługi wszystkich klientów \n- nadanie uprawnień selektywnych – do obsługi wskazanego klienta \n \nUprawnienie selektywne może być nadane wyłącznie wtedy, gdy klient nadał wcześniej podmiotowi bieżącego kontekstu dowolne uprawnienie z prawem do jego dalszego przekazywania (patrz [POST /api/v2/permissions/entities/grants](/docs/v2/index.html#tag/Nadawanie-uprawnien/paths/~1api~1v2~1permissions~1entities~1grants/post)). \n \nW żądaniu określane są nadawane uprawnienia ze zbioru: \n- **InvoiceWrite** – wystawianie faktur \n- **InvoiceRead** – przeglądanie faktur \n \nMetoda pozwala na wybór dowolnej kombinacji powyższych uprawnień.\n\n> Więcej informacji:\n> - [Nadawanie uprawnień](https://github.com/CIRFMF/ksef-docs/blob/main/uprawnienia.md#nadanie-uprawnie%C5%84-w-spos%C3%B3b-po%C5%9Bredni)\n\n**Wymagane uprawnienia**: `CredentialsManage`.",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "required": [
+ "subjectIdentifier",
+ "permissions",
+ "description"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/IndirectPermissionsGrantRequest"
+ }
+ ]
+ },
+ "example": {"subjectIdentifier":{"type":"Pesel","value":"22271569167"},"targetIdentifier":{"type":"Nip","value":"5687926712"},"permissions":["InvoiceWrite","InvoiceRead"],"description":"praca dla klienta 5687926712; uprawniony PESEL: 22271569167, Adam Abacki; pośrednik 3936518395"}
+ }
+ }
+ },
+ "responses": {
+ "202": {
+ "description": "Accepted",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/PermissionsOperationResponse"
+ },
+ "example": {"referenceNumber":"20250626-EG-333C814000-C529F710D8-D2"}
+ }
+ }
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details |\n|-|-|-|\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "403": {
+ "description": "Forbidden"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ],
+ "x-required-permissions": [
+ "CredentialsManage"
+ ]
+ }
+ },
+ "/api/v2/permissions/subunits/grants": {
+ "post": {
+ "tags": [
+ "Nadawanie uprawnień"
+ ],
+ "summary": "Nadanie uprawnień administratora podmiotu podrzędnego",
+ "description": "Metoda pozwala na nadanie wskazanemu w żądaniu podmiotowi lub osobie fizycznej uprawnień administratora w kontekście: \n- wskazanego NIP podmiotu podrzędnego – wyłącznie jeżeli podmiot bieżącego kontekstu logowania ma rolę podmiotu nadrzędnego:\n - **LocalGovernmentUnit** \n - **VatGroupUnit** \n- wskazanego lub utworzonego identyfikatora wewnętrznego \n \nWraz z utworzeniem administratora jednostki podrzędnej tworzony jest identyfikator wewnętrzny składający się z numeru NIP podmiotu kontekstu logowania oraz 5 cyfr unikalnie identyfikujących jednostkę wewnętrzną. \nW żądaniu podaje się również nazwę tej jednostki. \n \nUprawnienia administratora jednostki podrzędnej obejmują: \n- **CredentialsManage** – zarządzanie uprawnieniami \n \nMetoda automatycznie nadaje powyższe uprawnienie, bez konieczności podawania go w żądaniu.\n \n> Więcej informacji:\n> - [Nadawanie uprawnień](https://github.com/CIRFMF/ksef-docs/blob/main/uprawnienia.md#nadanie-uprawnie%C5%84-administratora-podmiotu-podrz%C4%99dnego)\n\n**Wymagane uprawnienia**: `SubunitManage`.",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "required": [
+ "subjectIdentifier",
+ "contextIdentifier",
+ "description"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/SubunitPermissionsGrantRequest"
+ }
+ ]
+ },
+ "example": {"subjectIdentifier":{"type":"Pesel","value":"15062788702"},"contextIdentifier":{"type":"InternalId","value":"7762811692-12345"},"description":"Opis uprawnienia","subunitName":"Jednostka 014"}
+ }
+ }
+ },
+ "responses": {
+ "202": {
+ "description": "Accepted",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/PermissionsOperationResponse"
+ },
+ "example": {"referenceNumber":"20250626-EG-333C814000-C529F710D8-D2"}
+ }
+ }
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details |\n|-|-|-|\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "403": {
+ "description": "Forbidden"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ],
+ "x-required-permissions": [
+ "SubunitManage"
+ ]
+ }
+ },
+ "/api/v2/permissions/eu-entities/administration/grants": {
+ "post": {
+ "tags": [
+ "Nadawanie uprawnień"
+ ],
+ "summary": "Nadanie uprawnień administratora podmiotu unijnego",
+ "description": "Metoda pozwala na nadanie wskazanemu w żądaniu podmiotowi lub osobie fizycznej uprawnień administratora w kontekście złożonym z identyfikatora NIP podmiotu kontekstu bieżącego oraz numeru VAT UE podmiotu unijnego wskazanego w żądaniu. \nWraz z utworzeniem administratora podmiotu unijnego tworzony jest kontekst złożony składający się z numeru NIP podmiotu kontekstu logowania oraz wskazanego numeru identyfikacyjnego VAT UE podmiotu unijnego. \nW żądaniu podaje się również nazwę i adres podmiotu unijnego. \n \nJedynym sposobem identyfikacji uprawnianego jest odcisk palca certyfikatu kwalifikowanego: \n- certyfikat podpisu elektronicznego dla osób fizycznych \n- certyfikat pieczęci elektronicznej dla podmiotów \n \nUprawnienia administratora podmiotu unijnego obejmują: \n- **VatEuManage** – zarządzanie uprawnieniami w ramach podmiotu unijnego \n- **InvoiceWrite** – wystawianie faktur \n- **InvoiceRead** – przeglądanie faktur \n- **Introspection** – przeglądanie historii sesji \n \nMetoda automatycznie nadaje wszystkie powyższe uprawnienia, bez konieczności ich wskazywania w żądaniu.\n \n> Więcej informacji:\n> - [Nadawanie uprawnień](https://github.com/CIRFMF/ksef-docs/blob/main/uprawnienia.md#nadanie-uprawnie%C5%84-administratora-podmiotu-unijnego)\n\n**Wymagane uprawnienia**: `CredentialsManage`.",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "required": [
+ "subjectIdentifier",
+ "contextIdentifier",
+ "description",
+ "euEntityName"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/EuEntityAdministrationPermissionsGrantRequest"
+ }
+ ]
+ },
+ "example": {"subjectIdentifier":{"type":"Fingerprint","value":"CEB3643BAC2C111ADDE971BDA5A80163441867D65389FC0BC0DFF8B4C1CD4E59"},"contextIdentifier":{"type":"NipVatUe","value":"7762811692-DE123456789012"},"description":"Opis uprawnienia","euEntityName":"Firma G.m.b.H."}
+ }
+ }
+ },
+ "responses": {
+ "202": {
+ "description": "Accepted",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/PermissionsOperationResponse"
+ },
+ "example": {"referenceNumber":"20250626-EG-333C814000-C529F710D8-D2"}
+ }
+ }
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details |\n|-|-|-|\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "403": {
+ "description": "Forbidden"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ],
+ "x-required-permissions": [
+ "CredentialsManage"
+ ]
+ }
+ },
+ "/api/v2/permissions/eu-entities/grants": {
+ "post": {
+ "tags": [
+ "Nadawanie uprawnień"
+ ],
+ "summary": "Nadanie uprawnień reprezentanta podmiotu unijnego",
+ "description": "Metoda pozwala na nadanie wskazanemu w żądaniu podmiotowi lub osobie fizycznej uprawnień do wystawiania i/lub przeglądania faktur w kontekście złożonym kontekstu bieżącego. \n \nJedynym sposobem identyfikacji uprawnianego jest odcisk palca certyfikatu kwalifikowanego: \n- certyfikat podpisu elektronicznego dla osób fizycznych \n- certyfikat pieczęci elektronicznej dla podmiotów \n \nW żądaniu określane są nadawane uprawnienia ze zbioru: \n- **InvoiceWrite** – wystawianie faktur \n- **InvoiceRead** – przeglądanie faktur \n \nMetoda pozwala na wybór dowolnej kombinacji powyższych uprawnień.\n\n> Więcej informacji:\n> - [Nadawanie uprawnień](https://github.com/CIRFMF/ksef-docs/blob/main/uprawnienia.md#nadanie-uprawnie%C5%84-reprezentanta-podmiotu-unijnego)\n\n**Wymagane uprawnienia**: `VatUeManage`.",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "required": [
+ "subjectIdentifier",
+ "permissions",
+ "description"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/EuEntityPermissionsGrantRequest"
+ }
+ ]
+ },
+ "example": {"subjectIdentifier":{"type":"Fingerprint","value":"CEB3643BAC2C111ADDE971BDA5A80163441867D65389FC0BC0DFF8B4C1CD4E59"},"permissions":["InvoiceRead","InvoiceWrite"],"description":"Opis uprawnienia"}
+ }
+ }
+ },
+ "responses": {
+ "202": {
+ "description": "Accepted",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/PermissionsOperationResponse"
+ },
+ "example": {"referenceNumber":"20250626-EG-333C814000-C529F710D8-D2"}
+ }
+ }
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details |\n|-|-|-|\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "403": {
+ "description": "Forbidden"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ],
+ "x-required-permissions": [
+ "VatUeManage"
+ ]
+ }
+ },
+ "/api/v2/permissions/common/grants/{permissionId}": {
+ "delete": {
+ "tags": [
+ "Odbieranie uprawnień"
+ ],
+ "summary": "Odebranie uprawnień",
+ "description": "Metoda pozwala na odebranie uprawnienia o wskazanym identyfikatorze. \nWymagane jest wcześniejsze odczytanie uprawnień w celu uzyskania \nidentyfikatora uprawnienia, które ma zostać odebrane.\n\n> Więcej informacji:\n> - [Odbieranie uprawnień](https://github.com/CIRFMF/ksef-docs/blob/main/uprawnienia.md#odebranie-uprawnie%C5%84)\n\n**Wymagane uprawnienia**: `CredentialsManage`, `VatUeManage`, `SubunitManage`.",
+ "parameters": [
+ {
+ "name": "permissionId",
+ "in": "path",
+ "description": "Id uprawnienia.",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/PermissionId"
+ }
+ }
+ ],
+ "responses": {
+ "202": {
+ "description": "Accepted",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/PermissionsOperationResponse"
+ },
+ "example": {"referenceNumber":"20250626-EG-333C814000-C529F710D8-D2"}
+ }
+ }
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details |\n|-|-|-|\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "403": {
+ "description": "Forbidden"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ],
+ "x-required-permissions": [
+ "CredentialsManage",
+ "VatUeManage",
+ "SubunitManage"
+ ]
+ }
+ },
+ "/api/v2/permissions/authorizations/grants/{permissionId}": {
+ "delete": {
+ "tags": [
+ "Odbieranie uprawnień"
+ ],
+ "summary": "Odebranie uprawnień podmiotowych",
+ "description": "Metoda pozwala na odebranie uprawnienia podmiotowego o wskazanym identyfikatorze. \nWymagane jest wcześniejsze odczytanie uprawnień w celu uzyskania \nidentyfikatora uprawnienia, które ma zostać odebrane.\n \n> Więcej informacji:\n> - [Odbieranie uprawnień](https://github.com/CIRFMF/ksef-docs/blob/main/uprawnienia.md#odebranie-uprawnie%C5%84-podmiotowych)\n\n**Wymagane uprawnienia**: `CredentialsManage`.",
+ "parameters": [
+ {
+ "name": "permissionId",
+ "in": "path",
+ "description": "Id uprawnienia.",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/PermissionId"
+ }
+ }
+ ],
+ "responses": {
+ "202": {
+ "description": "Accepted",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/PermissionsOperationResponse"
+ },
+ "example": {"referenceNumber":"20250626-EG-333C814000-C529F710D8-D2"}
+ }
+ }
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details |\n|-|-|-|\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "403": {
+ "description": "Forbidden"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ],
+ "x-required-permissions": [
+ "CredentialsManage"
+ ]
+ }
+ },
+ "/api/v2/permissions/operations/{referenceNumber}": {
+ "get": {
+ "tags": [
+ "Operacje"
+ ],
+ "summary": "Pobranie statusu operacji",
+ "description": "Zwraca status operacji asynchronicznej związanej z nadaniem lub odebraniem uprawnień.",
+ "parameters": [
+ {
+ "name": "referenceNumber",
+ "in": "path",
+ "description": "Numer referencyjny operacji nadania lub odbierania uprawnień.",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/ReferenceNumber"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/PermissionsOperationStatusResponse"
+ },
+ "example": {"status":{"code":200,"description":"Operacja zakończona sukcesem"}}
+ }
+ }
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details |\n|-|-|-|\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ]
+ }
+ },
+ "/api/v2/permissions/attachments/status": {
+ "get": {
+ "tags": [
+ "Operacje"
+ ],
+ "summary": "Sprawdzenie statusu zgody na wystawianie faktur z załącznikiem",
+ "description": "Sprawdzenie czy obecny kontekst posiada zgodę na wystawianie faktur z załącznikiem.\n\n**Wymagane uprawnienia**: `CredentialsManage`, `CredentialsRead`.",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/CheckAttachmentPermissionStatusResponse"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details |\n|-|-|-|\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "403": {
+ "description": "Forbidden"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ],
+ "x-required-permissions": [
+ "CredentialsManage",
+ "CredentialsRead"
+ ]
+ }
+ },
+ "/api/v2/invoices/ksef/{ksefNumber}": {
+ "get": {
+ "tags": [
+ "Pobieranie faktur"
+ ],
+ "summary": "Pobranie faktury po numerze KSeF",
+ "description": "Zwraca fakturę o podanym numerze KSeF.\n\n**Wymagane uprawnienia**: `InvoiceRead`.",
+ "parameters": [
+ {
+ "name": "ksefNumber",
+ "in": "path",
+ "description": "Numer KSeF faktury.",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/KsefNumber"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/xml": {
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details | \n|---------------|-----------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------|\n| 21164 | Faktura o podanym identyfikatorze nie istnieje. | Faktura o numerze KSeF {ksefNumber} nie została znaleziona. |\n| 21165 | Faktura o podanym numerze KSeF nie jest jeszcze dostępna. | Faktura o numerze KSeF {ksefNumber} została przetworzona, ale nie jest jeszcze dostępna do pobrania. Spróbuj ponownie później. |\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "403": {
+ "description": "Forbidden"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ],
+ "x-required-permissions": [
+ "InvoiceRead"
+ ]
+ }
+ },
+ "/api/v2/invoices/query/metadata": {
+ "post": {
+ "tags": [
+ "Pobieranie faktur"
+ ],
+ "summary": "Pobranie listy metadanych faktur",
+ "description": "Zwraca metadane faktur spełniających filtry.\n\nLimit techniczny: ≤ 10 000 rekordów na zestaw filtrów, po jego osiągnięciu isTruncated = true i należy ponownie ustawić dateRange, używając ostatniej daty z wyników (tj. ustawić from/to - w zależności od kierunku sortowania, od daty ostatniego zwróconego rekordu) oraz wyzerować pageOffset.\n\n`Do scenariusza przyrostowego należy używać daty PermanentStorage oraz kolejność sortowania Asc`.\n \nScenariusz pobierania przyrostowego (skrót):\n* Gdy hasMore = false, należy zakończyć,\n* Gdy hasMore = true i isTruncated = false, należy zwiększyć pageOffset,\n* Gdy hasMore = true i isTruncated = true, należy zawęzić dateRange (ustawić from od daty ostatniego rekordu), wyzerować pageOffset i kontynuować\n\n**Sortowanie:**\n\n- permanentStorageDate | invoicingDate | issueDate (Asc | Desc) - pole wybierane na podstawie filtrów\n\n\n\n**Wymagane uprawnienia**: `InvoiceRead`.",
+ "parameters": [
+ {
+ "name": "sortOrder",
+ "in": "query",
+ "description": "Kolejność sortowania wyników.\n| Wartość | Opis |\n| --- | --- |\n| Asc | Sortowanie rosnąco. |\n| Desc | Sortowanie malejąco. |\n",
+ "schema": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/SortOrder"
+ }
+ ],
+ "description": "| Wartość | Opis |\n| --- | --- |\n| Asc | Sortowanie rosnąco. |\n| Desc | Sortowanie malejąco. |\n",
+ "default": "Asc"
+ }
+ },
+ {
+ "name": "pageOffset",
+ "in": "query",
+ "description": "Indeks pierwszej strony wyników (0 = pierwsza strona).",
+ "schema": {
+ "minimum": 0,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "format": "int32",
+ "default": 0
+ }
+ },
+ {
+ "name": "pageSize",
+ "in": "query",
+ "description": "Rozmiar strony wyników.",
+ "schema": {
+ "maximum": 250,
+ "exclusiveMaximum": false,
+ "minimum": 10,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "format": "int32",
+ "default": 10
+ }
+ }
+ ],
+ "requestBody": {
+ "description": "Kryteria filtrowania.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "required": [
+ "subjectType",
+ "dateRange"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/InvoiceQueryFilters"
+ }
+ ]
+ },
+ "example": {"subjectType":"Subject1","dateRange":{"dateType":"PermanentStorage","from":"2025-08-28T09:22:13.388+00:00","to":"2025-09-28T09:22:13.388+00:00"},"amount":{"type":"Brutto","from":100.50,"to":250.00},"currencyCodes":["PLN","EUR"],"invoicingMode":"Online","formType":"FA","invoiceTypes":["Vat"],"hasAttachment":true}
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/QueryInvoicesMetadataResponse"
+ },
+ "example": {"hasMore":false,"isTruncated":false,"invoices":[{"ksefNumber":"5555555555-20250828-010080615740-E4","invoiceNumber":"FA/KUDYO1a7dddfe-610e-4843-84ba-6b887e35266e","issueDate":"2025-08-27","invoicingDate":"2025-08-28T09:22:13.388+00:00","acquisitionDate":"2025-08-28T09:22:56.388+00:00","permanentStorageDate":"2025-08-28T09:23:01.388+00:00","seller":{"nip":"5555555555","name":"Test Company 1"},"buyer":{"identifier":{"type":"Nip","value":"7352765225"},"name":"Test Company 4"},"netAmount":35260.63,"grossAmount":43370.57,"vatAmount":8109.94,"currency":"PLN","invoicingMode":"Offline","invoiceType":"Vat","formCode":{"systemCode":"FA (3)","schemaVersion":"1-0E","value":"FA"},"isSelfInvoicing":false,"hasAttachment":false,"invoiceHash":"mkht+3m5trnfxlTYhq3QFn74LkEO69MFNlsMAkCDSPA=","thirdSubjects":[]},{"ksefNumber":"5555555555-20250828-010080615740-E4","invoiceNumber":"5265877635-20250925-010020A0A242-0A","issueDate":"2025-08-28","invoicingDate":"2025-08-28T10:23:13.388+00:00","acquisitionDate":"2025-08-28T10:23:56.388+00:00","permanentStorageDate":"2025-08-28T10:24:01.388+00:00","seller":{"nip":"5555555555","name":"Test Company 1"},"buyer":{"identifier":{"type":"Nip","value":"3225081610"},"name":"Test Company 2"},"netAmount":35260.63,"grossAmount":43370.57,"vatAmount":8109.94,"currency":"PLN","invoicingMode":"Online","invoiceType":"Vat","formCode":{"systemCode":"FA (3)","schemaVersion":"1-0E","value":"FA"},"isSelfInvoicing":false,"hasAttachment":true,"invoiceHash":"o+nMBU8n8TAhy6EjbcdYdHSZVbUspqmCKqOPLhy3zIQ=","thirdSubjects":[{"identifier":{"type":"InternalId","value":"5555555555-12345"},"name":"Wystawca faktury","role":4}]}]}
+ }
+ }
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details |\n|-|-|-|\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "403": {
+ "description": "Forbidden"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ],
+ "x-sort": [
+ {
+ "allowedFields": [
+ "permanentStorageDate",
+ "invoicingDate",
+ "issueDate"
+ ],
+ "allowedDirections": [
+ "Asc",
+ "Desc"
+ ]
+ }
+ ],
+ "x-required-permissions": [
+ "InvoiceRead"
+ ]
+ }
+ },
+ "/api/v2/invoices/exports": {
+ "post": {
+ "tags": [
+ "Pobieranie faktur"
+ ],
+ "summary": "Eksport paczki faktur",
+ "description": "Rozpoczyna asynchroniczny proces wyszukiwania faktur w systemie KSeF na podstawie przekazanych filtrów oraz przygotowania ich w formie zaszyfrowanej paczki.\nWymagane jest przekazanie informacji o szyfrowaniu w polu Encryption, które służą do zabezpieczenia przygotowanej paczki z fakturami.\nMaksymalnie można uruchomić 10 równoczesnych eksportów w zalogowanym kontekście.\n \nSystem pobiera faktury rosnąco według daty określonej w filtrze (Invoicing, Issue, PermanentStorage) i dodaje faktury(nazwa pliku: {ksefNumber}.xml) do paczki aż do osiągnięcia jednego z poniższych limitów:\n* Limit liczby faktur: 10 000 sztuk\n* Limit rozmiaru danych(skompresowanych): 1GB\n\nPaczka eksportu zawiera dodatkowy plik z metadanymi faktur w formacie JSON (`_metadata.json`). Zawartość pliku to\nobiekt z tablicą invoices, gdzie każdy element jest obiektem typu InvoiceMetadata\n(taki jak zwracany przez endpoint `POST /invoices/query/metadata`).\n\nPlik z metadanymi(_metadata.json) nie jest wliczany do limitów algorytmu budowania paczki. \n\n`Do realizacji pobierania przyrostowego należy stosować filtrowanie po dacie PermanentStorage`.\n\n**Sortowanie:**\n\n- permanentStorageDate | invoicingDate | issueDate (Asc) - pole wybierane na podstawie filtrów\n\n\n\n**Wymagane uprawnienia**: `InvoiceRead`.",
+ "requestBody": {
+ "description": "Dane wejściowe określające kryteria i format eksportu paczki faktur.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "required": [
+ "encryption",
+ "filters"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/InvoiceExportRequest"
+ }
+ ]
+ },
+ "example": {"encryption":{"encryptedSymmetricKey":"Rk1Qb1VhVjMyQ3NxQ1h1WlVtZUdHcDJSZ0pTbE5IbWQ=","initializationVector":"c29tZUluaXRWZWN0b3I="},"filters":{"subjectType":"Subject1","dateRange":{"dateType":"Issue","from":"2025-08-28T09:22:13.388+00:00","to":"2025-09-28T09:22:13.388+00:00"}}}
+ }
+ }
+ },
+ "responses": {
+ "201": {
+ "description": "Created",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExportInvoicesResponse"
+ },
+ "example": {"referenceNumber":"20251010-EH-1B6C9EB000-4B15D3AEB9-89"}
+ }
+ }
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details | \n|---------------------|-----------------------------------------------------|---------------------------------------------------------------|\n| 21181 | Nieprawidłowe żądanie eksportu faktur. | Nie można wyeksportować paczki faktur dla wybranego podmiotu ({subjecttype}) i zalogowanego identyfikatoru kontekstu ({type}). |\n| 21182 | Osiągnięto limit trwających eksportów. | Dla uwierzytelnionego podmiotu w bieżącym kontekście osiągnięto maksymalny limit {count} równoczesnych eksportów faktur. Spróbuj ponownie później. |\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "403": {
+ "description": "Forbidden"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ],
+ "x-sort": [
+ {
+ "allowedFields": [
+ "permanentStorageDate",
+ "invoicingDate",
+ "issueDate"
+ ],
+ "allowedDirections": "Asc"
+ }
+ ],
+ "x-required-permissions": [
+ "InvoiceRead"
+ ]
+ }
+ },
+ "/api/v2/invoices/exports/{referenceNumber}": {
+ "get": {
+ "tags": [
+ "Pobieranie faktur"
+ ],
+ "summary": "Pobranie statusu eksportu paczki faktur",
+ "description": "Paczka faktur jest dzielona na części o maksymalnym rozmiarze 50 MB. Każda część jest zaszyfrowana algorytmem AES-256-CBC z dopełnieniem PKCS#7, przy użyciu klucza symetrycznego przekazanego podczas inicjowania eksportu. \n\nW przypadku ucięcia wyniku eksportu z powodu przekroczenia limitów, zwracana jest flaga IsTruncated = true oraz odpowiednia data, którą należy wykorzystać do wykonania kolejnego eksportu, aż do momentu, gdy flaga IsTruncated = false.\n\n**Sortowanie:**\n\n- permanentStorageDate | invoicingDate | issueDate (Asc) - pole wybierane na podstawie filtrów\n\n\n\n**Wymagane uprawnienia**: `InvoiceRead`.",
+ "parameters": [
+ {
+ "name": "referenceNumber",
+ "in": "path",
+ "description": "Numer referencyjny eksportu faktur.",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/ReferenceNumber"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/InvoiceExportStatusResponse"
+ },
+ "example": {"status":{"code":200,"description":"Eksport faktur zakończony sukcesem"},"completedDate":"2025-09-16T16:09:40.901091+00:00","package":{"invoiceCount":10000,"size":22425060,"parts":[{"ordinalNumber":1,"partName":"20250925-EH-2D2C11B000-E9C9ED8340-EE-001.zip.aes","method":"GET","url":"https://ksef-api-storage/storage/00/20250626-eh-2d2c11b000-e9c9ed8340-ee/invoice-part/20250925-EH-2D2C11B000-E9C9ED8340-EE-001.zip.aes?skoid=1ad7cfe8-2cb2-406b-b96c-6eefb55794db&sktid=647754c7-3974-4442-a425-c61341b61c69&skt=2025-06-26T09%3A40%3A54Z&ske=2025-06-26T10%3A10%3A54Z&sks=b&skv=2025-01-05&sv=2025-01-05&se=2025-06-26T10%3A10%3A54Z&sr=b&sp=w&sig=8mKZEU8Reuz%2Fn7wHi4T%2FY8BzLeD5l8bR2xJsBxIgDEY%3D","partSize":22425060,"partHash":"BKH9Uy1CjBFXiQdDUM2CJYk5LxWTm4fE1lljnl83Ajw=","encryptedPartSize":22425072,"encryptedPartHash":"HlvwRLc59EJH7O5GoeHEZxTQO5TJ/WP1QH0aFi4x2Ss=","expirationDate":"2025-09-16T17:09:40.901091+00:00"}],"isTruncated":true,"lastPermanentStorageDate":"2025-09-11T11:40:40.266578+00:00"}}
+ }
+ }
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details | \n|---------------------|-----------------------------------------------------|---------------------------------------------------------------|\n| 21175 | Wynik zapytania o podanym identyfikatorze nie istnieje. | |\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "403": {
+ "description": "Forbidden"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ],
+ "x-sort": [
+ {
+ "allowedFields": [
+ "permanentStorageDate",
+ "invoicingDate",
+ "issueDate"
+ ],
+ "allowedDirections": "Asc"
+ }
+ ],
+ "x-required-permissions": [
+ "InvoiceRead"
+ ]
+ }
+ },
+ "/api/v2/sessions": {
+ "get": {
+ "tags": [
+ "Status wysyłki i UPO"
+ ],
+ "summary": "Pobranie listy sesji",
+ "description": "Zwraca listę sesji spełniających podane kryteria wyszukiwania.\n\n\n\n**Sortowanie:**\n\n- dateCreated (Desc)\n\n\n**Wymagane uprawnienia**:\n- `Introspection` – pozwala pobrać wszystkie sesje w bieżącym kontekście uwierzytelnienia `(ContextIdentifier)`.\n- `InvoiceWrite` – pozwala pobrać wyłącznie sesje utworzone przez podmiot uwierzytelniający, czyli podmiot inicjujący uwierzytelnienie.",
+ "parameters": [
+ {
+ "name": "pageSize",
+ "in": "query",
+ "description": "Rozmiar strony.",
+ "schema": {
+ "maximum": 500,
+ "exclusiveMaximum": false,
+ "minimum": 10,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "format": "int32",
+ "default": 10
+ }
+ },
+ {
+ "name": "sessionType",
+ "in": "query",
+ "description": "Typ sesji.\n| Wartość | Opis |\n| --- | --- |\n| Online | Wysyłka interaktywna (pojedyncze faktury). |\n| Batch | Wysyłka wsadowa (paczka faktur). |\n",
+ "required": true,
+ "schema": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/SessionType"
+ }
+ ]
+ }
+ },
+ {
+ "name": "referenceNumber",
+ "in": "query",
+ "description": "Numer referencyjny sesji.",
+ "schema": {
+ "$ref": "#/components/schemas/ReferenceNumber"
+ }
+ },
+ {
+ "name": "dateCreatedFrom",
+ "in": "query",
+ "description": "Data utworzenia sesji (od).",
+ "schema": {
+ "type": "string",
+ "format": "date-time"
+ }
+ },
+ {
+ "name": "dateCreatedTo",
+ "in": "query",
+ "description": "Data utworzenia sesji (do).",
+ "schema": {
+ "type": "string",
+ "format": "date-time"
+ }
+ },
+ {
+ "name": "dateClosedFrom",
+ "in": "query",
+ "description": "Data zamknięcia sesji (od).",
+ "schema": {
+ "type": "string",
+ "format": "date-time"
+ }
+ },
+ {
+ "name": "dateClosedTo",
+ "in": "query",
+ "description": "Data zamknięcia sesji (do).",
+ "schema": {
+ "type": "string",
+ "format": "date-time"
+ }
+ },
+ {
+ "name": "dateModifiedFrom",
+ "in": "query",
+ "description": "Data ostatniej aktywności (wysyłka faktury lub zmiana statusu) w ramach sesji (od).",
+ "schema": {
+ "type": "string",
+ "format": "date-time"
+ }
+ },
+ {
+ "name": "dateModifiedTo",
+ "in": "query",
+ "description": "Data ostatniej aktywności (wysyłka faktury lub zmiana statusu) w ramach sesji (do).",
+ "schema": {
+ "type": "string",
+ "format": "date-time"
+ }
+ },
+ {
+ "name": "statuses",
+ "in": "query",
+ "description": "Statusy sesji.\n| Wartość | Opis |\n| --- | --- |\n| InProgress | Sesja aktywna. |\n| Succeeded | Sesja przetworzona poprawnie. W trakcie przetwarzania sesji nie wystąpiły żadne błędy, ale część faktur nadal mogła zostać odrzucona. |\n| Failed | Sesja nie przetworzona z powodu błędów. Na etapie rozpoczynania lub kończenia sesji wystąpiły błędy, które nie pozwoliły na jej poprawne przetworzenie. |\n| Cancelled | Sesja anulowania. Został przekroczony czas na wysyłkę w sesji wsadowej, lub nie przesłano żadnych faktur w sesji interaktywnej. |\n",
+ "style": "form",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/CommonSessionStatus"
+ }
+ }
+ },
+ {
+ "name": "x-continuation-token",
+ "in": "header",
+ "description": "Token służący do pobrania kolejnej strony wyników.",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/SessionsQueryResponse"
+ },
+ "example": {"continuationToken":"W3sidG9rZW4iOiIrUklEOn4zeHd0QU1SM3dYYjRCd0FBQUFBQUNBPT0jUlQ6MSNUUkM6MTAjSVNWOjIjSUVPOjY1NTY3I1FDRjo4I0ZQQzpBZ2dBQUFBQUFDQUFBQVlBQUFBQUlBQUFBQUFBQUFBZ0FBQVVBUEVIQUVGdGdJUUFFUUJBQUJBRUFCQVVoZ1NBQXdBQUFBQWdBQUFHQUhFa0NFQWxnQVFBQUFBQUlBQUFGZ0F5Q0FVZ0VBRC9nRE9BRFlFdWdIcUF5SXBEZ0IrQUJnQUFBQUFnQUFBQ0FPNlYiLCJyYW5nZSI6eyJtaW4iOiIiLCJtYXgiOiIwNUMxREYyQjVGMzU5OCJ9fV0=","sessions":[{"referenceNumber":"20250925-SO-2F67776000-97273B191A-65","status":{"code":200,"description":"Sesja interaktywna przetworzona pomyślnie"},"dateCreated":"2025-09-25T13:48:26.8700925+00:00","dateUpdated":"2025-09-26T02:16:07+00:00","validUntil":"2025-09-26T01:48:26.8700925+00:00","totalInvoiceCount":2,"successfulInvoiceCount":2,"failedInvoiceCount":0},{"referenceNumber":"20250928-SO-494B541000-3AD87C01BA-5D","status":{"code":200,"description":"Sesja interaktywna przetworzona pomyślnie"},"dateCreated":"2025-09-28T21:20:54.5936927+00:00","dateUpdated":"2025-09-29T10:19:28+00:00","validUntil":"2025-09-29T09:20:54.5936927+00:00","totalInvoiceCount":3,"successfulInvoiceCount":3,"failedInvoiceCount":0}]}
+ }
+ }
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details | \n|---------------------|-----------------------------------------------------|-------------------------------------------------------------|\n| 21418 | Przekazany token kontynuacji ma nieprawidłowy format. | |\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "403": {
+ "description": "Forbidden"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ],
+ "x-sort": [
+ {
+ "field": "dateCreated",
+ "direction": "Desc"
+ }
+ ],
+ "x-required-permissions": [
+ "InvoiceWrite",
+ "Introspection"
+ ]
+ }
+ },
+ "/api/v2/sessions/{referenceNumber}": {
+ "get": {
+ "tags": [
+ "Status wysyłki i UPO"
+ ],
+ "summary": "Pobranie statusu sesji",
+ "description": "Sprawdza bieżący status sesji o podanym numerze referencyjnym.\n\n**Wymagane uprawnienia**: `InvoiceWrite`, `Introspection`, `PefInvoiceWrite`.",
+ "parameters": [
+ {
+ "name": "referenceNumber",
+ "in": "path",
+ "description": "Numer referencyjny sesji.",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/ReferenceNumber"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/SessionStatusResponse"
+ },
+ "example": {"status":{"code":200,"description":"Sesja interaktywna przetworzona pomyślnie"},"upo":{"pages":[{"referenceNumber":"20250918-EU-2EBD6FA000-242EB9B66D-43","downloadUrl":"https://ksef-test.mf.gov.pl/storage/01/20250918-sb-3789a40000-20373e1269-a3/session-upo/upo_00.xml?sv=2025-01-05&st=2025-09-18T14%3A55%3A50Z&se=2025-09-21T15%3A00%3A50Z&sr=b&sp=r&sig=ZlQO6Xtzu3VQQDwmEMfb0VryMxe9WcUgWtkdiB6X2Qo%3D","downloadUrlExpirationDate":"2025-09-21T15:00:50+00:00"}]},"invoiceCount":10,"successfulInvoiceCount":8,"failedInvoiceCount":2}
+ }
+ }
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details | \n|---------------------|-----------------------------------------------------|-------------------------------------------------------------|\n| 21173 | Brak sesji o wskazanym numerze referencyjnym. | Sesja o numerze referencyjnym {referenceNumber} nie została znaleziona. |\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "403": {
+ "description": "Forbidden"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ],
+ "x-required-permissions": [
+ "InvoiceWrite",
+ "Introspection",
+ "PefInvoiceWrite"
+ ]
+ }
+ },
+ "/api/v2/sessions/{referenceNumber}/invoices": {
+ "get": {
+ "tags": [
+ "Status wysyłki i UPO"
+ ],
+ "summary": "Pobranie faktur sesji",
+ "description": "Zwraca listę faktur przesłanych w sesji wraz z ich statusami, oraz informacje na temat ilości poprawnie i niepoprawnie przetworzonych faktur.\n\n**Wymagane uprawnienia**: `InvoiceWrite`, `Introspection`, `PefInvoiceWrite`.",
+ "parameters": [
+ {
+ "name": "x-continuation-token",
+ "in": "header",
+ "description": "Token służący do pobrania kolejnej strony wyników.",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "referenceNumber",
+ "in": "path",
+ "description": "Numer referencyjny sesji.",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/ReferenceNumber"
+ }
+ },
+ {
+ "name": "pageSize",
+ "in": "query",
+ "description": "Rozmiar strony wyników.",
+ "schema": {
+ "maximum": 500,
+ "exclusiveMaximum": false,
+ "minimum": 10,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "format": "int32",
+ "default": 10
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/SessionInvoicesResponse"
+ },
+ "example": {"continuationToken":"W34idG9rZW4iOiIrUklEOn4xUE5BQU5hcXJVOUFBQUFBQUFBQUFBPT0jUlQ6MSNUUkM6MTAjSVNWOjIjSUVPOjY1NTY3I1FDRjo4I0ZQQzpBVUFBQUFBQUFBQUFRZ0FBQUFBQUFBQT0iLCJyYW5nZSI6eyJtaW4iOiIiLCJtYXgiOiJGRiJ9fV0=","invoices":[{"ordinalNumber":1,"invoiceNumber":"FA/XPWIC-7900685789/06/2025","ksefNumber":"5265877635-20250626-010080DD2B5E-26","referenceNumber":"20250918-EE-2F15D39000-242207E5C4-1B","invoiceHash":"mkht+3m5trnfxlTYhq3QFn74LkEO69MFNlsMAkCDSPA=","acquisitionDate":"2025-09-18T12:24:16.0154302+00:00","invoicingDate":"2025-09-18T12:23:56.0154302+00:00","permanentStorageDate":"2025-09-18T12:24:01.0154302+00:00","upoDownloadUrl":"https://ksef-test.mf.gov.pl/storage/01/20250918-SB-3789A40000-20373E1269-A3/invoice-upo/upo_5265877635-20250626-010080DD2B5E-26.xml?sv=2025-01-05&st=2025-09-18T14%3A49%3A20Z&se=2025-09-21T14%3A54%3A20Z&sr=b&sp=r&sig=%2BUWFPA10gS580VhngGKW%2FZiOOtiHPOiTyMlxhG6ZvWs%3D","upoDownloadUrlExpirationDate":"2025-09-21T14:54:20+00:00","status":{"code":200,"description":"Sukces"}},{"ordinalNumber":2,"referenceNumber":"20250918-EE-2F20AD2000-242386DF86-52","invoiceHash":"mkht+3m5trnfxlTYhq3QFn74LkEO69MFNlsMAkCDSPA=","invoicingDate":"2025-09-18T12:23:56.0154302+00:00","status":{"code":440,"description":"Duplikat faktury","details":["Duplikat faktury. Faktura o numerze KSeF: 5265877635-20250626-010080DD2B5E-26 została już prawidłowo przesłana do systemu w sesji: 20250626-SO-2F14610000-242991F8C9-B4"]}}]}
+ }
+ }
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details | \n|---------------------|-----------------------------------------------------|-------------------------------------------------------------|\n| 21173 | Brak sesji o wskazanym numerze referencyjnym. | Sesja o numerze referencyjnym {referenceNumber} nie została znaleziona. |\n| 21418 | Przekazany token kontynuacji ma nieprawidłowy format. | |\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "403": {
+ "description": "Forbidden"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ],
+ "x-required-permissions": [
+ "InvoiceWrite",
+ "Introspection",
+ "PefInvoiceWrite"
+ ]
+ }
+ },
+ "/api/v2/sessions/{referenceNumber}/invoices/{invoiceReferenceNumber}": {
+ "get": {
+ "tags": [
+ "Status wysyłki i UPO"
+ ],
+ "summary": "Pobranie statusu faktury z sesji",
+ "description": "Zwraca fakturę przesłaną w sesji wraz ze statusem.\n\n**Wymagane uprawnienia**: `InvoiceWrite`, `Introspection`, `PefInvoiceWrite`.",
+ "parameters": [
+ {
+ "name": "referenceNumber",
+ "in": "path",
+ "description": "Numer referencyjny sesji.",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/ReferenceNumber"
+ }
+ },
+ {
+ "name": "invoiceReferenceNumber",
+ "in": "path",
+ "description": "Numer referencyjny faktury.",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/ReferenceNumber"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/SessionInvoiceStatusResponse"
+ },
+ "example": {"ordinalNumber":2,"referenceNumber":"20250626-EE-2F20AD2000-242386DF86-52","invoicingDate":"2025-07-11T12:23:56.0154302+00:00","status":{"code":440,"description":"Duplikat faktury","details":["Duplikat faktury. Faktura o numerze KSeF: 5265877635-20250626-010080DD2B5E-26 została już prawidłowo przesłana do systemu w sesji: 20250626-SO-2F14610000-242991F8C9-B4"]}}
+ }
+ }
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details |\n|-|-|-|\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "403": {
+ "description": "Forbidden"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ],
+ "x-required-permissions": [
+ "InvoiceWrite",
+ "Introspection",
+ "PefInvoiceWrite"
+ ]
+ }
+ },
+ "/api/v2/sessions/{referenceNumber}/invoices/failed": {
+ "get": {
+ "tags": [
+ "Status wysyłki i UPO"
+ ],
+ "summary": "Pobranie niepoprawnie przetworzonych faktur sesji",
+ "description": "Zwraca listę niepoprawnie przetworzonych faktur przesłanych w sesji wraz z ich statusami.\n\n**Wymagane uprawnienia**: `InvoiceWrite`, `Introspection`, `PefInvoiceWrite`.",
+ "parameters": [
+ {
+ "name": "x-continuation-token",
+ "in": "header",
+ "description": "Token służący do pobrania kolejnej strony wyników.",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "referenceNumber",
+ "in": "path",
+ "description": "Numer referencyjny sesji.",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/ReferenceNumber"
+ }
+ },
+ {
+ "name": "pageSize",
+ "in": "query",
+ "description": "Rozmiar strony wyników.",
+ "schema": {
+ "maximum": 500,
+ "exclusiveMaximum": false,
+ "minimum": 10,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "format": "int32",
+ "default": 10
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/SessionInvoicesResponse"
+ },
+ "example": {"continuationToken":"...","invoices":[{"ordinalNumber":2,"referenceNumber":"20250626-EE-2F20AD2000-242386DF86-52","invoiceHash":"mkht+3m5trnfxlTYhq3QFn74LkEO69MFNlsMAkCDSPA=","invoiceFileName":"invoice1.xml","invoicingDate":"2025-07-11T12:23:56.0154302+00:00","status":{"code":440,"description":"Duplikat faktury","details":["Duplikat faktury. Faktura o numerze KSeF: 5265877635-20250626-010080DD2B5E-26 została już prawidłowo przesłana do systemu w sesji: 20250626-SO-2F14610000-242991F8C9-B4"]}}]}
+ }
+ }
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details | \n|---------------------|-----------------------------------------------------|-------------------------------------------------------------|\n| 21173 | Brak sesji o wskazanym numerze referencyjnym. | Sesja o numerze referencyjnym {referenceNumber} nie została znaleziona. |\n| 21418 | Przekazany token kontynuacji ma nieprawidłowy format. | |\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "403": {
+ "description": "Forbidden"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ],
+ "x-required-permissions": [
+ "InvoiceWrite",
+ "Introspection",
+ "PefInvoiceWrite"
+ ]
+ }
+ },
+ "/api/v2/sessions/{referenceNumber}/invoices/ksef/{ksefNumber}/upo": {
+ "get": {
+ "tags": [
+ "Status wysyłki i UPO"
+ ],
+ "summary": "Pobranie UPO faktury z sesji na podstawie numeru KSeF",
+ "description": "Zwraca UPO faktury przesłanego w sesji na podstawie jego numeru KSeF.\n\n**Wymagane uprawnienia**: `InvoiceWrite`, `Introspection`, `PefInvoiceWrite`.",
+ "parameters": [
+ {
+ "name": "referenceNumber",
+ "in": "path",
+ "description": "Numer referencyjny sesji.",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/ReferenceNumber"
+ }
+ },
+ {
+ "name": "ksefNumber",
+ "in": "path",
+ "description": "Numer KSeF faktury.",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/KsefNumber"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/xml": {
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details | \n|---------------------|-----------------------------------------------------|----------------------------------------------------------------------------------------------------------------|\n| 21178 | Nie znaleziono UPO dla podanych kryteriów. | UPO o numerze KSeF {ksefNumber} i numerze referencyjnym sesji {referenceNumber} nie zostało znalezione. |\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "403": {
+ "description": "Forbidden"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ],
+ "x-required-permissions": [
+ "InvoiceWrite",
+ "Introspection",
+ "PefInvoiceWrite"
+ ]
+ }
+ },
+ "/api/v2/sessions/{referenceNumber}/invoices/{invoiceReferenceNumber}/upo": {
+ "get": {
+ "tags": [
+ "Status wysyłki i UPO"
+ ],
+ "summary": "Pobranie UPO faktury z sesji na podstawie numeru referencyjnego faktury",
+ "description": "Zwraca UPO faktury przesłanego w sesji na podstawie jego numeru KSeF.\n\n**Wymagane uprawnienia**: `InvoiceWrite`, `Introspection`, `PefInvoiceWrite`.",
+ "parameters": [
+ {
+ "name": "referenceNumber",
+ "in": "path",
+ "description": "Numer referencyjny sesji.",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/ReferenceNumber"
+ }
+ },
+ {
+ "name": "invoiceReferenceNumber",
+ "in": "path",
+ "description": "Numer referencyjny faktury.",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/ReferenceNumber"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/xml": {
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details |\n|-|-|-|\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "403": {
+ "description": "Forbidden"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ],
+ "x-required-permissions": [
+ "InvoiceWrite",
+ "Introspection",
+ "PefInvoiceWrite"
+ ]
+ }
+ },
+ "/api/v2/sessions/{referenceNumber}/upo/{upoReferenceNumber}": {
+ "get": {
+ "tags": [
+ "Status wysyłki i UPO"
+ ],
+ "summary": "Pobranie UPO dla sesji",
+ "description": "Zwraca XML zawierający zbiorcze UPO dla sesji.\n\n**Wymagane uprawnienia**: `InvoiceWrite`, `Introspection`, `PefInvoiceWrite`.",
+ "parameters": [
+ {
+ "name": "referenceNumber",
+ "in": "path",
+ "description": "Numer referencyjny sesji.",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/ReferenceNumber"
+ }
+ },
+ {
+ "name": "upoReferenceNumber",
+ "in": "path",
+ "description": "Numer referencyjny UPO.",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/ReferenceNumber"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/xml": {
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details | \n|---------------------|-----------------------------------------------------|----------------------------------------------------------------------------------------------------------------|\n| 21173 | Brak sesji o wskazanym numerze referencyjnym. | Sesja o numerze referencyjnym {referenceNumber} nie została znaleziona. |\n| 21178 | Nie znaleziono UPO dla podanych kryteriów. | UPO o numerze referencyjnym {referenceNumber} dla sesji {referenceNumber} nie zostało znalezione. |\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "403": {
+ "description": "Forbidden"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ],
+ "x-required-permissions": [
+ "InvoiceWrite",
+ "Introspection",
+ "PefInvoiceWrite"
+ ]
+ }
+ },
+ "/api/v2/tokens": {
+ "post": {
+ "tags": [
+ "Tokeny KSeF"
+ ],
+ "summary": "Wygenerowanie nowego tokena",
+ "description": "Zwraca token, który może być użyty do uwierzytelniania się w KSeF.\n\nToken może być generowany tylko w kontekście NIP lub identyfikatora wewnętrznego. Jest zwracany tylko raz. Zaczyna być aktywny w momencie gdy jego status zmieni się na `Active`.",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "required": [
+ "permissions",
+ "description"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/GenerateTokenRequest"
+ }
+ ]
+ },
+ "example": {"permissions":["InvoiceRead","InvoiceWrite"],"description":"Wystawianie i przeglądanie faktur."}
+ }
+ }
+ },
+ "responses": {
+ "202": {
+ "description": "Accepted",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/GenerateTokenResponse"
+ },
+ "example": {"referenceNumber":"20251010-EC-1DCE3E3000-12ECB5B36E-45","token":"20251010-EC-1DCE3E3000-12ECB5B36E-45|internalId-5265877635-12345|919f704466624ce29cd5ac7b65ded5e7cccc112eee314f2aaa76e02cd16df7b9"}
+ }
+ }
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details |\n|---------------------|------------------------------------------------------------|---------|\n| 26001 | Nie można nadać tokenowi uprawnień których nie posiadasz. | Informacja o brakujących uprawnieniach. |\n| 26002 | Nie można wygenerować tokena dla obecnego typu kontekstu. | Informacja o aktualnym i dozwolonych typach kontekstu. |\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ]
+ },
+ "get": {
+ "tags": [
+ "Tokeny KSeF"
+ ],
+ "summary": "Pobranie listy wygenerowanych tokenów",
+ "description": "\n\n**Sortowanie:**\n\n- dateCreated (Desc)\n\n",
+ "parameters": [
+ {
+ "name": "status",
+ "in": "query",
+ "description": "Status tokenów do zwrócenia. W przypadku braku parametru zwracane są wszystkie tokeny. Parametr można przekazać wielokrotnie.\n| Wartość | Opis |\n| --- | --- |\n| Pending | Token został utworzony ale jest jeszcze w trakcie aktywacji i nadawania uprawnień. Nie może być jeszcze wykorzystywany do uwierzytelniania. |\n| Active | Token jest aktywny i może być wykorzystywany do uwierzytelniania. |\n| Revoking | Token jest w trakcie unieważniania. Nie może już być wykorzystywany do uwierzytelniania. |\n| Revoked | Token został unieważniony i nie może być wykorzystywany do uwierzytelniania. |\n| Failed | Nie udało się aktywować tokena. Należy wygenerować nowy token, obecny nie może być wykorzystywany do uwierzytelniania. |\n",
+ "style": "form",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/AuthenticationTokenStatus"
+ }
+ }
+ },
+ {
+ "name": "description",
+ "in": "query",
+ "description": "Umożliwia filtrowanie tokenów po opisie. Wartość parametru jest wyszukiwana w opisie tokena (operacja nie rozróżnia wielkości liter). Należy podać co najmniej 3 znaki.",
+ "schema": {
+ "minLength": 3,
+ "type": "string"
+ }
+ },
+ {
+ "name": "authorIdentifier",
+ "in": "query",
+ "description": "Umożliwia filtrowanie tokenów po ich twórcy. Wartość parametru jest wyszukiwana w identyfikatorze (operacja nie rozróżnia wielkości liter). Należy podać co najmniej 3 znaki.",
+ "schema": {
+ "minLength": 3,
+ "type": "string"
+ }
+ },
+ {
+ "name": "authorIdentifierType",
+ "in": "query",
+ "description": "Umożliwia filtrowanie tokenów po ich twórcy. Wartość parametru określa typ identyfikatora w którym będzie wyszukiwany ciąg znaków przekazany w parametrze `authorIdentifier`.\n| Wartość | Opis |\n| --- | --- |\n| Nip | NIP. |\n| Pesel | PESEL. |\n| Fingerprint | Odcisk palca certyfikatu. |\n",
+ "schema": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/TokenAuthorIdentifierType"
+ }
+ ]
+ }
+ },
+ {
+ "name": "pageSize",
+ "in": "query",
+ "description": "Rozmiar strony wyników.",
+ "schema": {
+ "maximum": 100,
+ "exclusiveMaximum": false,
+ "minimum": 10,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "format": "int32",
+ "default": 10
+ }
+ },
+ {
+ "name": "x-continuation-token",
+ "in": "header",
+ "description": "Token służący do pobrania kolejnej strony wyników.",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/QueryTokensResponse"
+ },
+ "example": {"continuationToken":"W3sidG9rZW4iOiIrUklEOn4zeHd0QUlqZUc5VkhCQUFBQUFBQUJBPT0jUlQ6MSNUUkM6MTAjSVNWOjIjSUVPOjY1NTY3I1FDRjo4I0ZQQzpBZ2dBQUFBQUFCQUFBQUFBQUFBQUVBQUFBQUFBQUFBUUFBQUVBRWVFMllFPSIsInJhbmdlIjp7Im1pbiI6IjA1QzFERjIxOUY5OTIwIiwibWF4IjoiRkYifX1d","tokens":[{"referenceNumber":"20251001-EC-2DD3AFF000-A6B7F19A95-11","authorIdentifier":{"type":"Nip","value":"5265877635"},"contextIdentifier":{"type":"Nip","value":"5265877635"},"description":"Wystawianie i przeglądanie faktur.","requestedPermissions":["InvoiceRead","InvoiceWrite"],"dateCreated":"2025-10-01T13:20:52.9919681+00:00","status":"Active","statusDetails":[]}]}
+ }
+ }
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details | \n|---------------------|-----------------------------------------------------|-------------------------------------------------------------|\n| 21418 | Przekazany token kontynuacji ma nieprawidłowy format. | |\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ],
+ "x-sort": [
+ {
+ "field": "dateCreated",
+ "direction": "Desc"
+ }
+ ]
+ }
+ },
+ "/api/v2/tokens/{referenceNumber}": {
+ "get": {
+ "tags": [
+ "Tokeny KSeF"
+ ],
+ "summary": "Pobranie statusu tokena",
+ "parameters": [
+ {
+ "name": "referenceNumber",
+ "in": "path",
+ "description": "Numer referencyjny tokena KSeF.",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/ReferenceNumber"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/TokenStatusResponse"
+ },
+ "example": {"referenceNumber":"20251001-EC-220B0CE000-E228129563-96","authorIdentifier":{"type":"Nip","value":"7762811692"},"contextIdentifier":{"type":"Nip","value":"5265877635"},"description":"Wystawianie i przeglądanie faktur.","requestedPermissions":["InvoiceWrite","InvoiceRead"],"dateCreated":"2025-07-11T12:23:56.0154302+00:00","lastUseDate":"2025-07-11T12:23:56.0154302+00:00","status":"Pending","statusDetails":[]}
+ }
+ }
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details |\n|-|-|-|\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ]
+ },
+ "delete": {
+ "tags": [
+ "Tokeny KSeF"
+ ],
+ "summary": "Unieważnienie tokena",
+ "description": "Unieważniony token nie pozwoli już na uwierzytelnienie się za jego pomocą. Unieważnienie nie może zostać cofnięte.",
+ "parameters": [
+ {
+ "name": "referenceNumber",
+ "in": "path",
+ "description": "Numer referencyjny tokena KSeF.",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/ReferenceNumber"
+ }
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "No Content"
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details |\n|-|-|-|\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ]
+ }
+ },
+ "/api/v2/peppol/query": {
+ "get": {
+ "tags": [
+ "Usługi Peppol"
+ ],
+ "summary": "Pobranie listy dostawców usług Peppol",
+ "description": "Zwraca listę dostawców usług Peppol zarejestrowanych w systemie.\n\n**Sortowanie:**\n\n- dateCreated (Desc)\n\n",
+ "parameters": [
+ {
+ "name": "pageOffset",
+ "in": "query",
+ "description": "Numer strony wyników.",
+ "schema": {
+ "minimum": 0,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "format": "int32",
+ "default": 0
+ }
+ },
+ {
+ "name": "pageSize",
+ "in": "query",
+ "description": "Rozmiar strony wyników.",
+ "schema": {
+ "maximum": 100,
+ "exclusiveMaximum": false,
+ "minimum": 10,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "format": "int32",
+ "default": 10
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/QueryPeppolProvidersResponse"
+ },
+ "example": {"peppolProviders":[{"id":"P123456789","name":"Dostawca usług Peppol","dateCreated":"2025-07-11T12:23:56.0154302+00:00"}],"hasMore":false}
+ }
+ }
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details |\n|-|-|-|\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ }
+ },
+ "x-sort": [
+ {
+ "field": "dateCreated",
+ "direction": "Desc"
+ }
+ ]
+ }
+ },
+ "/api/v2/auth/challenge": {
+ "post": {
+ "tags": [
+ "Uzyskiwanie dostępu"
+ ],
+ "summary": "Inicjalizacja uwierzytelnienia",
+ "description": "Generuje unikalny challenge wymagany w kolejnym kroku operacji uwierzytelnienia.",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/AuthenticationChallengeResponse"
+ },
+ "example": {"challenge":"20250514-CR-226FB7B000-3ACF9BE4C0-10","timestamp":"2025-07-11T12:23:56.0154302+00:00"}
+ }
+ }
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ }
+ }
+ }
+ },
+ "/api/v2/auth/xades-signature": {
+ "post": {
+ "tags": [
+ "Uzyskiwanie dostępu"
+ ],
+ "summary": "Uwierzytelnienie z wykorzystaniem podpisu XAdES",
+ "description": "Rozpoczyna operację uwierzytelniania za pomocą dokumentu XML podpisanego podpisem elektronicznym XAdES.\n\n> Więcej informacji:\n> - [Przygotowanie dokumentu XML](https://github.com/CIRFMF/ksef-docs/blob/main/uwierzytelnianie.md#1-przygotowanie-dokumentu-xml-authtokenrequest)\n> - [Podpis dokumentu XML](https://github.com/CIRFMF/ksef-docs/blob/main/uwierzytelnianie.md#2-podpisanie-dokumentu-xades)\n> - [Schemat XSD](/docs/v2/schemas/authv2.xsd)",
+ "parameters": [
+ {
+ "name": "verifyCertificateChain",
+ "in": "query",
+ "description": "Wymuszenie weryfikacji zaufania łańcucha certyfikatu wraz ze sprawdzeniem statusu certyfikatu (OCSP/CRL) na środowiskach które umożliwiają wykorzystanie samodzielnie wygenerowanych certyfikatów.",
+ "schema": {
+ "type": "boolean"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/xml": {
+ "schema": {
+ "type": "string"
+ },
+ "example": "\n\n 20250625-CR-20F5EE4000-DA48AE4124-46\n \n 5265877635\n \n certificateSubject\n \n \n \n"
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "202": {
+ "description": "Accepted",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/AuthenticationInitResponse"
+ },
+ "example": {"referenceNumber":"20250514-AU-2DFC46C000-3AC6D5877F-D4","authenticationToken":{"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbi10eXBlIjoiT3BlcmF0aW9uVG9rZW4iLCJvcGVyYXRpb24tcmVmZXJlbmNlLW51bWJlciI6IjIwMjUwNTE0LUFVLTJERkM0NkMwMDAtM0FDNkQ1ODc3Ri1ENCIsImV4cCI6MTc0NzIzMTcxOSwiaWF0IjoxNzQ3MjI5MDE5LCJpc3MiOiJrc2VmLWFwaS10aSIsImF1ZCI6ImtzZWYtYXBpLXRpIn0.rtRcV2mR9SiuJwpQaQHsbAXvvVsdNKG4DJsdiJctIeU","validUntil":"2025-07-11T12:23:56.0154302+00:00"}}
+ }
+ }
+ },
+ "400": {
+ "description": " | ExceptionCode | ExceptionDescription | Details | \n|---------------------|---------------------------------------------------------------------|-------------------------------------------------------------|\n| 21001 | Nieczytelna treść. | |\n| 21111 | Nieprawidłowe wyzwanie autoryzacyjne. | |\n| 21115 | Nieprawidłowy certyfikat. | |\n| 21117 | Nieprawidłowy identyfikator podmiotu dla wskazanego typu kontekstu. | |\n| 21217 | Nieprawidłowe kodowanie znaków. | |\n| 21401 | Dokument nie jest zgodny ze schemą (xsd). | {treść błędu walidacji} |\n| 21406 | Konflikt podpisu i typu uwierzytelnienia. | |\n| 9101 | Nieprawidłowy dokument. | |\n| 9102 | Brak podpisu. | |\n| 9103 | Przekroczona liczba dozwolonych podpisów. | |\n| 9105 | Nieprawidłowy podpis. | |\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ }
+ }
+ }
+ },
+ "/api/v2/auth/ksef-token": {
+ "post": {
+ "tags": [
+ "Uzyskiwanie dostępu"
+ ],
+ "summary": "Uwierzytelnienie z wykorzystaniem tokena KSeF",
+ "description": "Rozpoczyna operację uwierzytelniania z wykorzystaniem wcześniej wygenerowanego tokena KSeF.\n\nToken KSeF wraz z timestampem ze wcześniej wygenerowanego challenge'a (w formacie ```token|timestamp```) powinien zostać zaszyfrowany dedykowanym do tego celu kluczem publicznym.\n- Timestamp powinien zostać przekazany jako **liczba milisekund od 1 stycznia 1970 roku (Unix timestamp)**.\n- Algorytm szyfrowania: **RSA-OAEP (z użyciem SHA-256 jako funkcji skrótu)**.",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "required": [
+ "challenge",
+ "contextIdentifier",
+ "encryptedToken"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/InitTokenAuthenticationRequest"
+ }
+ ]
+ },
+ "example": {"challenge":"20250625-CR-2FDC223000-C2BFC98A9C-4E","contextIdentifier":{"type":"Nip","value":"5265877635"},"encryptedToken":"..."}
+ }
+ }
+ },
+ "responses": {
+ "202": {
+ "description": "Accepted",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/AuthenticationInitResponse"
+ },
+ "example": {"referenceNumber":"20250514-AU-2DFC46C000-3AC6D5877F-D4","authenticationToken":{"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbi10eXBlIjoiT3BlcmF0aW9uVG9rZW4iLCJvcGVyYXRpb24tcmVmZXJlbmNlLW51bWJlciI6IjIwMjUwNTE0LUFVLTJERkM0NkMwMDAtM0FDNkQ1ODc3Ri1ENCIsImV4cCI6MTc0NzIzMTcxOSwiaWF0IjoxNzQ3MjI5MDE5LCJpc3MiOiJrc2VmLWFwaS10aSIsImF1ZCI6ImtzZWYtYXBpLXRpIn0.rtRcV2mR9SiuJwpQaQHsbAXvvVsdNKG4DJsdiJctIeU","validUntil":"2025-07-11T12:23:56.0154302+00:00"}}
+ }
+ }
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details |\n|-|-|-|\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ }
+ }
+ }
+ },
+ "/api/v2/auth/{referenceNumber}": {
+ "get": {
+ "tags": [
+ "Uzyskiwanie dostępu"
+ ],
+ "summary": "Pobranie statusu uwierzytelniania",
+ "description": "Sprawdza bieżący status operacji uwierzytelniania dla podanego tokena.\n\nSposób uwierzytelnienia: `AuthenticationToken` otrzymany przy rozpoczęciu operacji uwierzytelniania.",
+ "parameters": [
+ {
+ "name": "referenceNumber",
+ "in": "path",
+ "description": "Numer referencyjny tokena otrzymanego przy inicjalizacji operacji uwierzytelniania.",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/ReferenceNumber"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/AuthenticationOperationStatusResponse"
+ },
+ "examples": {
+ "Kod 100 | Uwierzytelnianie w toku": {
+ "value": {"startDate":"0001-01-01T00:00:00+00:00","authenticationMethod":"Token","status":{"code":100,"description":"Uwierzytelnianie w toku"}}
+ },
+ "Kod 200 | Uwierzytelnianie zakończone sukcesem": {
+ "value": {"startDate":"0001-01-01T00:00:00+00:00","authenticationMethod":"Token","status":{"code":200,"description":"Uwierzytelnianie zakończone sukcesem"}}
+ },
+ "Kod 400 | Uwierzytelnianie zakończone niepowodzeniem | Nieważny certyfikat": {
+ "value": {"startDate":"0001-01-01T00:00:00+00:00","authenticationMethod":"Token","status":{"code":400,"description":"Uwierzytelnianie zakończone niepowodzeniem","details":["Nieważny certyfikat."]}}
+ },
+ "Kod 400 | Uwierzytelnianie zakończone niepowodzeniem | Błąd weryfikacji łańcucha certyfikatów": {
+ "value": {"startDate":"0001-01-01T00:00:00+00:00","authenticationMethod":"Token","status":{"code":400,"description":"Uwierzytelnianie zakończone niepowodzeniem","details":["Błąd weryfikacji łańcucha certyfikatów."]}}
+ },
+ "Kod 400 | Uwierzytelnianie zakończone niepowodzeniem | Niezaufany łańcuch certyfikatów": {
+ "value": {"startDate":"0001-01-01T00:00:00+00:00","authenticationMethod":"Token","status":{"code":400,"description":"Uwierzytelnianie zakończone niepowodzeniem","details":["Niezaufany łańcuch certyfikatów."]}}
+ },
+ "Kod 400 | Uwierzytelnianie zakończone niepowodzeniem | Certyfikat odwołany": {
+ "value": {"startDate":"0001-01-01T00:00:00+00:00","authenticationMethod":"Token","status":{"code":400,"description":"Uwierzytelnianie zakończone niepowodzeniem","details":["Certyfikat odwołany."]}}
+ },
+ "Kod 400 | Uwierzytelnianie zakończone niepowodzeniem | Niepoprawny certyfikat": {
+ "value": {"startDate":"0001-01-01T00:00:00+00:00","authenticationMethod":"Token","status":{"code":400,"description":"Uwierzytelnianie zakończone niepowodzeniem","details":["Niepoprawny certyfikat."]}}
+ },
+ "Kod 500 | Nieznany błąd": {
+ "value": {"startDate":"0001-01-01T00:00:00+00:00","authenticationMethod":"Token","status":{"code":500,"description":"Nieznany błąd ({statusCode})"}}
+ }
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ]
+ }
+ },
+ "/api/v2/auth/token/redeem": {
+ "post": {
+ "tags": [
+ "Uzyskiwanie dostępu"
+ ],
+ "summary": "Pobranie tokenów dostępowych",
+ "description": "Pobiera parę tokenów (access token i refresh token) wygenerowanych w ramach pozytywnie zakończonego procesu uwierzytelniania.\n**Tokeny można pobrać tylko raz.**\n\nSposób uwierzytelnienia: `AuthenticationToken` otrzymany przy rozpoczęciu operacji uwierzytelniania.",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/AuthenticationTokensResponse"
+ },
+ "example": {"accessToken":{"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbi10eXBlIjoiQ29udGV4dFRva2VuIiwiY29udGV4dC1pZGVudGlmaWVyLXR5cGUiOiJOaXAiLCJjb250ZXh0LWlkZW50aWZpZXItdmFsdWUiOiIzNzU2OTc3MDQ5IiwiYXV0aGVudGljYXRpb24tbWV0aG9kIjoiUXVhbGlmaWVkU2VhbCIsInN1YmplY3QtZGV0YWlscyI6IntcIlN1YmplY3RJZGVudGlmaWVyXCI6e1wiVHlwZVwiOlwiTmlwXCIsXCJWYWx1ZVwiOlwiMzc1Njk3NzA0OVwifX0iLCJleHAiOjE3NDcyMjAxNDksImlhdCI6MTc0NzIxOTI0OSwiaXNzIjoia3NlZi1hcGktdGkiLCJhdWQiOiJrc2VmLWFwaS10aSJ9.R_3_R2PbdCk8T4WP_0XGOO1iVNu2ugNxmkDvsD0soIE","validUntil":"2025-07-11T12:23:56.0154302+00:00"},"refreshToken":{"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbi10eXBlIjoiQ29udGV4dFRva2VuIiwiY29udGV4dC1pZGVudGlmaWVyLXR5cGUiOiJOaXAiLCJjb250ZXh0LWlkZW50aWZpZXItdmFsdWUiOiIzNzU2OTc3MDQ5IiwiYXV0aGVudGljYXRpb24tbWV0aG9kIjoiUXVhbGlmaWVkU2VhbCIsInN1YmplY3QtZGV0YWlscyI6IntcIlN1YmplY3RJZGVudGlmaWVyXCI6e1wiVHlwZVwiOlwiTmlwXCIsXCJWYWx1ZVwiOlwiMzc1Njk3NzA0OVwifX0iLCJleHAiOjE3NDcyMjAxNDksImlhdCI6MTc0NzIxOTI0OSwiaXNzIjoia3NlZi1hcGktdGkiLCJhdWQiOiJrc2VmLWFwaS10aSJ9.R_3_R2PbdCk8T4WP_0XGOO1iVNu2ugNxmkDvsD0soIE","validUntil":"2025-07-11T12:23:56.0154302+00:00"}}
+ }
+ }
+ },
+ "400": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ]
+ }
+ },
+ "/api/v2/auth/token/refresh": {
+ "post": {
+ "tags": [
+ "Uzyskiwanie dostępu"
+ ],
+ "summary": "Odświeżenie tokena dostępowego",
+ "description": "Generuje nowy token dostępu na podstawie ważnego refresh tokena.\n\nSposób uwierzytelnienia: `RefreshToken`.",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/AuthenticationTokenRefreshResponse"
+ },
+ "example": {"accessToken":{"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbi10eXBlIjoiQ29udGV4dFRva2VuIiwiY29udGV4dC1pZGVudGlmaWVyLXR5cGUiOiJOaXAiLCJjb250ZXh0LWlkZW50aWZpZXItdmFsdWUiOiIzNzU2OTc3MDQ5IiwiYXV0aGVudGljYXRpb24tbWV0aG9kIjoiUXVhbGlmaWVkU2VhbCIsInN1YmplY3QtZGV0YWlscyI6IntcIlN1YmplY3RJZGVudGlmaWVyXCI6e1wiVHlwZVwiOlwiTmlwXCIsXCJWYWx1ZVwiOlwiMzc1Njk3NzA0OVwifX0iLCJleHAiOjE3NDcyMjAxNDksImlhdCI6MTc0NzIxOTI0OSwiaXNzIjoia3NlZi1hcGktdGkiLCJhdWQiOiJrc2VmLWFwaS10aSJ9.R_3_R2PbdCk8T4WP_0XGOO1iVNu2ugNxmkDvsD0soIE","validUntil":"2025-07-11T12:23:56.0154302+00:00"}}
+ }
+ }
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details | \n|---------------------|-----------------------------------------------------|-----------------------------------------------------------------------------|\n| 21304 | Brak uwierzytelnienia. | Operacja uwierzytelniania o numerze referencyjnym {referenceNumber} nie została znaleziona. |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ]
+ }
+ },
+ "/api/v2/sessions/online": {
+ "post": {
+ "tags": [
+ "Wysyłka interaktywna"
+ ],
+ "summary": "Otwarcie sesji interaktywnej",
+ "description": "Otwiera sesję do wysyłki pojedynczych faktur. Należy przekazać schemat wysyłanych faktur oraz informacje o kluczu używanym do szyfrowania.\n\n> Więcej informacji:\n> - [Otwarcie sesji interaktywnej](https://github.com/CIRFMF/ksef-docs/blob/main/sesja-interaktywna.md#1-otwarcie-sesji)\n> - [Klucz publiczny Ministersta Finansów](/docs/v2/index.html#tag/Certyfikaty-klucza-publicznego)\n\n**Wymagane uprawnienia**: `InvoiceWrite`, `PefInvoiceWrite`.",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "required": [
+ "formCode",
+ "encryption"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/OpenOnlineSessionRequest"
+ }
+ ]
+ },
+ "example": {"formCode":{"systemCode":"FA (3)","schemaVersion":"1-0E","value":"FA"},"encryption":{"encryptedSymmetricKey":"bdUVjqLj+y2q6aBUuLxxXYAMqeDuIBRTyr+hB96DaWKaGzuVHw9p+Nk9vhzgF/Q5cavK2k6eCh6SdsrWI0s9mFFj4A4UJtsyD8Dn3esLfUZ5A1juuG3q3SBi/XOC/+9W+0T/KdwdE393mbiUNyx1K/0bw31vKJL0COeJIDP7usAMDl42/H1TNvkjk+8iZ80V0qW7D+RZdz+tdiY1xV0f2mfgwJ46V0CpZ+sB9UAssRj+eVffavJ0TOg2b5JaBxE8MCAvrF6rO5K4KBjUmoy7PP7g1qIbm8xI2GO0KnfPOO5OWj8rsotRwBgu7x19Ine3qYUvuvCZlXRGGZ5NHIzWPM4O74+gNalaMgFCsmv8mMhETSU4SfAGmJr9edxPjQSbgD5i2X4eDRDMwvyaAa7CP1b2oICju+0L7Fywd2ZtUcr6El++eTVoi8HYsTArntET++gULT7XXjmb8e3O0nxrYiYsE9GMJ7HBGv3NOoJ1NTm3a7U6+c0ZJiBVLvn6xXw10LQX243xH+ehsKo6djQJKYtqcNPaXtCwM1c9RrsOx/wRXyWCtTffqLiaR0LbYvfMJAcEWceG+RaeAx4p37OiQqdJypd6LAv9/0ECWK8Bip8yyoA+0EYiAJb9YuDz2YlQX9Mx9E9FzFIAsgEQ2w723HZYWgPywLb+dlsum4lTZKQ=","initializationVector":"OmtDQdl6vkOI1GLKZSjgEg=="}}
+ }
+ }
+ },
+ "responses": {
+ "201": {
+ "description": "Created",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/OpenOnlineSessionResponse"
+ },
+ "example": {"referenceNumber":"20250625-SO-2C3E6C8000-B675CF5D68-07","validUntil":"2025-07-11T12:23:56.0154302+00:00"}
+ }
+ }
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details |\n|-|-|-|\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "403": {
+ "description": "Forbidden"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ],
+ "x-required-permissions": [
+ "InvoiceWrite",
+ "PefInvoiceWrite"
+ ]
+ }
+ },
+ "/api/v2/sessions/online/{referenceNumber}/invoices": {
+ "post": {
+ "tags": [
+ "Wysyłka interaktywna"
+ ],
+ "summary": "Wysłanie faktury",
+ "description": "Przyjmuje zaszyfrowaną fakturę oraz jej metadane i rozpoczyna jej przetwarzanie.\n\n> Więcej informacji:\n> - [Wysłanie faktury](https://github.com/CIRFMF/ksef-docs/blob/main/sesja-interaktywna.md#2-wys%C5%82anie-faktury)\n\n**Wymagane uprawnienia**: `InvoiceWrite`, `PefInvoiceWrite`.",
+ "parameters": [
+ {
+ "name": "referenceNumber",
+ "in": "path",
+ "description": "Numer referencyjny sesji",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/ReferenceNumber"
+ }
+ }
+ ],
+ "requestBody": {
+ "description": "Dane faktury",
+ "content": {
+ "application/json": {
+ "schema": {
+ "required": [
+ "invoiceHash",
+ "invoiceSize",
+ "encryptedInvoiceHash",
+ "encryptedInvoiceSize",
+ "encryptedInvoiceContent"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/SendInvoiceRequest"
+ }
+ ]
+ },
+ "example": {"invoiceHash":"EbrK4cOSjW4hEpJaHU71YXSOZZmqP5++dK9nLgTzgV4=","invoiceSize":6480,"encryptedInvoiceHash":"miYb1z3Ljw5VucTZslv3Tlt+V/EK1V8Q8evD8HMQ0dc=","encryptedInvoiceSize":6496,"encryptedInvoiceContent":"...","offlineMode":false}
+ }
+ }
+ },
+ "responses": {
+ "202": {
+ "description": "Accepted",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/SendInvoiceResponse"
+ },
+ "example": {"referenceNumber":"20250625-EE-319D7EE000-B67F415CDC-2C"}
+ }
+ }
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details | \n|---------------------|-----------------------------------------------------|------------------------------------------------------------------------------------------------------------|\n| 21173 | Brak sesji o wskazanym numerze referencyjnym. | Sesja o numerze referencyjnym {referenceNumber} nie została odnaleziona. |\n| 21155 | Przekroczono dozwoloną liczbę faktur w sesji. | Sesja o numerze referencyjnym {referenceNumber} osiągnęła dozwolony limit liczby faktur {invoiceLimit}. |\n| 21180 | Status sesji nie pozwala na wykonanie operacji. | Status sesji {code} uniemożliwia wysyłkę faktur. |\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "403": {
+ "description": "Forbidden"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ],
+ "x-required-permissions": [
+ "InvoiceWrite",
+ "PefInvoiceWrite"
+ ]
+ }
+ },
+ "/api/v2/sessions/online/{referenceNumber}/close": {
+ "post": {
+ "tags": [
+ "Wysyłka interaktywna"
+ ],
+ "summary": "Zamknięcie sesji interaktywnej",
+ "description": "Zamyka sesję interaktywną i rozpoczyna generowanie zbiorczego UPO dla sesji.\n\n**Wymagane uprawnienia**: `InvoiceWrite`, `PefInvoiceWrite`.",
+ "parameters": [
+ {
+ "name": "referenceNumber",
+ "in": "path",
+ "description": "Numer referencyjny sesji",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/ReferenceNumber"
+ }
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "No Content"
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details | \n|---------------------|-----------------------------------------------------|----------------------------------------------------------------------------|\n| 21173 | Brak sesji o wskazanym numerze referencyjnym. | Sesja o numerze referencyjnym {referenceNumber} nie została odnaleziona. |\n| 21180 | Status sesji nie pozwala na wykonanie operacji. | Status sesji {code} uniemożliwia jej zamknięcie. |\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "403": {
+ "description": "Forbidden"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ],
+ "x-required-permissions": [
+ "InvoiceWrite",
+ "PefInvoiceWrite"
+ ]
+ }
+ },
+ "/api/v2/sessions/batch": {
+ "post": {
+ "tags": [
+ "Wysyłka wsadowa"
+ ],
+ "summary": "Otwarcie sesji wsadowej",
+ "description": "Otwiera sesję do wysyłki wsadowej faktur. Należy przekazać schemat wysyłanych faktur, informacje o paczce faktur oraz informacje o kluczu używanym do szyfrowania.\n\n> Więcej informacji:\n> - [Przygotwanie paczki faktur](https://github.com/CIRFMF/ksef-docs/blob/main/sesja-wsadowa.md)\n> - [Klucz publiczny Ministersta Finansów](/docs/v2/index.html#tag/Certyfikaty-klucza-publicznego)\n\n**Wymagane uprawnienia**: `InvoiceWrite`.",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "required": [
+ "formCode",
+ "batchFile",
+ "encryption"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/OpenBatchSessionRequest"
+ }
+ ]
+ },
+ "example": {"formCode":{"systemCode":"FA (2)","schemaVersion":"1-0E","value":"FA"},"batchFile":{"fileSize":16037,"fileHash":"WO86CC+1Lef11wEosItld/NPwxGN8tobOMLqk9PQjgs=","fileParts":[{"ordinalNumber":1,"fileSize":16048,"fileHash":"23ZyDAN0H/+yhC/En2xbNfF0tajAWSfejDaXD7fc2AE="}]},"encryption":{"encryptedSymmetricKey":"bYqmPAglF01AxZim4oNa+1NerhZYfFgLMnvksBprUur1aesQ0Y5jsmOIfCrozfMkF2tjdO+uOsBg4FPlDgjChwN2/tz2Hqwtxq3RkTr1SjY4x8jxJFpPedcS7EI+XO8C+i9mLj7TFx9p/bg07yM9vHtMAk5b88Ay9Qc3+T5Ch1DM2ClR3sVu2DqdlKzmbINY+rhfGtXn58Qo0XRyESGgc6M0iTZVBRPuPXLnD8a1KpOneCpNzLwxgT6Ei3ivLOpPWT53PxkRTaQ8puj6CIiCKo4FHQzHuI/NmrAhYU7TkNm2kymP/OxBgWdg3XB74tqNFfT8RZN1bZXuPhBidDOqa+xsqY3E871FSDmQwZf58HmoNl31XNvpnryiRGfnAISt+m+ELqgksAresVu6E9poUL1yiff+IOHSZABoYpNiqwnbT8qyW1uk8lKLyFVFu+kOsbzBk1OWWHqSkNFDaznDa2MKjHonOXI0uyKaKWvoBFC4dWN1PVumfpSSFAeYgNpAyVrZdcVOuiliEWepTDjGzJoOafTvwr5za2S6B5bPECDpX7JXazV7Olkq7ezG0w8y3olx+0C+NHoCk8B5/cm4gtVHTgKjiLSGpKJVOJABLXFkOyIOjbQsVe4ryX0Qy+SfL7JIQvTWvM5xkCoOMbzLdMo9tNo5qE34sguFI+lIevY=","initializationVector":"jWpJLNBHJ5pQEGCBglmIAw=="},"offlineMode":false}
+ }
+ }
+ },
+ "responses": {
+ "201": {
+ "description": "Created",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/OpenBatchSessionResponse"
+ },
+ "example": {"referenceNumber":"20250626-SB-213D593000-4DE10D80A5-E9","partUploadRequests":[{"ordinalNumber":1,"method":"PUT","url":"https://ksef-api-storage/storage/00/20250626-sb-213d593000-4de10d80a5-e9/batch-parts/1?skoid=1ad7cfe8-2cb2-406b-b96c-6eefb55794db&sktid=647754c7-3974-4442-a425-c61341b61c69&skt=2025-06-26T09%3A40%3A54Z&ske=2025-06-26T10%3A10%3A54Z&sks=b&skv=2025-01-05&sv=2025-01-05&se=2025-06-26T10%3A10%3A54Z&sr=b&sp=w&sig=8mKZEU8Reuz%2Fn7wHi4T%2FY8BzLeD5l8bR2xJsBxIgDEY%3D","headers":{"x-ms-blob-type":"BlockBlob"}}]}
+ }
+ }
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details | \n|---------------------|-----------------------------------------------------|---------------------------------------------------------------------------|\n| 21157 | Nieprawidłowy rozmiar części pakietu. | {treść błędu walidacji} | \n| 21161 | Przekroczono dozwoloną liczbę części pakietu. | {treść błędu walidacji} |\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "403": {
+ "description": "Forbidden"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ],
+ "x-required-permissions": [
+ "InvoiceWrite"
+ ]
+ }
+ },
+ "/api/v2/sessions/batch/{referenceNumber}/close": {
+ "post": {
+ "tags": [
+ "Wysyłka wsadowa"
+ ],
+ "summary": "Zamknięcie sesji wsadowej",
+ "description": "Zamyka sesję wsadową, rozpoczyna procesowanie paczki faktur i generowanie UPO dla prawidłowych faktur oraz zbiorczego UPO dla sesji.\n\n**Wymagane uprawnienia**: `InvoiceWrite`.",
+ "parameters": [
+ {
+ "name": "referenceNumber",
+ "in": "path",
+ "description": "Numer referencyjny sesji",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/ReferenceNumber"
+ }
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "No Content"
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details | \n|---------------------|-----------------------------------------------------|---------------------------------------------------------------------------|\n| 21157 | Nieprawidłowy rozmiar części pakietu. | Zadeklarowany rozmiar części '{ordinalNumber}' nie zgadza się z rzeczywistym. | \n| 21173 | Brak sesji o wskazanym numerze referencyjnym. | Sesja o numerze referencyjnym {referenceNumber} nie została znaleziona. |\n| 21180 | Status sesji nie pozwala na wykonanie operacji. | Status sesji {code} uniemożliwia jej zamknięcie. |\n| 21205 | Pakiet nie może być pusty. | Nie przesłano zadeklarowanej '{ordinalNumber}' części pliku. |\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "403": {
+ "description": "Forbidden"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ],
+ "x-required-permissions": [
+ "InvoiceWrite"
+ ]
+ }
+ },
+ "/api/v2/permissions/query/personal/grants": {
+ "post": {
+ "tags": [
+ "Wyszukiwanie nadanych uprawnień"
+ ],
+ "summary": "Pobranie listy własnych uprawnień",
+ "description": " Metoda pozwala na odczytanie własnych uprawnień uwierzytelnionego klienta API w bieżącym kontekście logowania. \n\n W odpowiedzi przekazywane są następujące uprawnienia: \n - nadane w sposób bezpośredni w bieżącym kontekście \n - nadane przez podmiot nadrzędny \n - nadane w sposób pośredni, jeżeli podmiot kontekstu logowania jest w uprawnieniu pośrednikiem lub podmiotem docelowym \n - nadane podmiotowi do obsługi faktur przez inny podmiot, jeśli podmiot uwierzytelniony ma w bieżącym kontekście uprawnienia właścicielskie \n\n Uprawnienia zwracane przez operację obejmują: \n - **CredentialsManage** – zarządzanie uprawnieniami \n - **CredentialsRead** – przeglądanie uprawnień \n - **InvoiceWrite** – wystawianie faktur \n - **InvoiceRead** – przeglądanie faktur \n - **Introspection** – przeglądanie historii sesji \n - **SubunitManage** – zarządzanie podmiotami podrzędnymi \n - **EnforcementOperations** – wykonywanie operacji egzekucyjnych \n - **VatEuManage** – zarządzanie uprawnieniami w ramach podmiotu unijnego \n\n Odpowiedź może być filtrowana na podstawie następujących parametrów: \n - **contextIdentifier** – identyfikator podmiotu, który nadał uprawnienie do obsługi faktur \n - **targetIdentifier** – identyfikator podmiotu docelowego dla uprawnień nadanych pośrednio \n - **permissionTypes** – lista rodzajów wyszukiwanych uprawnień \n - **permissionState** – status uprawnienia \n\n#### Stronicowanie wyników\nZapytanie zwraca **jedną stronę wyników** o numerze i rozmiarze podanym w ścieżce.\n- Przy pierwszym wywołaniu należy ustawić parametr `pageOffset = 0`. \n- Jeżeli dostępna jest kolejna strona wyników, w odpowiedzi pojawi się flaga **`hasMore`**. \n- W takim przypadku można wywołać zapytanie ponownie z kolejnym numerem strony.\n\n > Więcej informacji:\n > - [Pobieranie listy uprawnień](https://github.com/CIRFMF/ksef-docs/blob/main/uprawnienia.md#pobranie-listy-w%C5%82asnych-uprawnie%C5%84)\n\n**Sortowanie:**\n\n- startDate (Desc)\n\n",
+ "parameters": [
+ {
+ "name": "pageOffset",
+ "in": "query",
+ "description": "Numer strony wyników.",
+ "schema": {
+ "minimum": 0,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "format": "int32",
+ "default": 0
+ }
+ },
+ {
+ "name": "pageSize",
+ "in": "query",
+ "description": "Rozmiar strony wyników.",
+ "schema": {
+ "maximum": 100,
+ "exclusiveMaximum": false,
+ "minimum": 10,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "format": "int32",
+ "default": 10
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PersonalPermissionsQueryRequest"
+ }
+ ]
+ },
+ "example": {"contextIdentifier":{"type":"Nip","value":"3568707925"},"permissionTypes":["InvoiceWrite"],"permissionState":"Active"}
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/QueryPersonalPermissionsResponse"
+ },
+ "example": {"permissions":[{"id":"0c9a72e8-f344-457f-9c16-7c640eb60242","contextIdentifier":{"type":"Nip","value":"3568707925"},"authorizedIdentifier":{"type":"Nip","value":"5247677742"},"permissionScope":"InvoiceWrite","description":"Opis uprawnienia","permissionState":"Active","startDate":"2025-06-22T10:41:11+00:00","canDelegate":false}],"hasMore":false}
+ }
+ }
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details |\n|-|-|-|\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ],
+ "x-sort": [
+ {
+ "field": "startDate",
+ "direction": "Desc"
+ }
+ ]
+ }
+ },
+ "/api/v2/permissions/query/persons/grants": {
+ "post": {
+ "tags": [
+ "Wyszukiwanie nadanych uprawnień"
+ ],
+ "summary": "Pobranie listy uprawnień do pracy w KSeF nadanych osobom fizycznym lub podmiotom",
+ "description": " Metoda pozwala na odczytanie uprawnień nadanych osobie fizycznej lub podmiotowi. \n Lista pobranych uprawnień może być dwóch rodzajów: \n - Lista wszystkich uprawnień obowiązujących w bieżącym kontekście logowania (używana, gdy administrator chce przejrzeć uprawnienia wszystkich użytkowników w bieżącym kontekście) \n - Lista wszystkich uprawnień nadanych w bieżącym kontekście przez uwierzytelnionego klienta API (używana, gdy administrator chce przejrzeć listę nadanych przez siebie uprawnień w bieżącym kontekście) \n\n Dla pierwszej listy (obowiązujących uprawnień) w odpowiedzi przekazywane są: \n - osoby i podmioty mogące pracować w bieżącym kontekście z wyjątkiem osób uprawnionych w sposób pośredni \n - osoby uprawnione w sposób pośredni przez podmiot bieżącego kontekstu \n\n Dla drugiej listy (nadanych uprawnień) w odpowiedzi przekazywane są: \n - uprawnienia nadane w sposób bezpośredni do pracy w bieżącym kontekście lub w kontekście jednostek podrzędnych \n - uprawnienia nadane w sposób pośredni do obsługi klientów podmiotu bieżącego kontekstu \n\n Uprawnienia zwracane przez operację obejmują: \n - **CredentialsManage** – zarządzanie uprawnieniami \n - **CredentialsRead** – przeglądanie uprawnień \n - **InvoiceWrite** – wystawianie faktur \n - **InvoiceRead** – przeglądanie faktur \n - **Introspection** – przeglądanie historii sesji \n - **SubunitManage** – zarządzanie podmiotami podrzędnymi \n - **EnforcementOperations** – wykonywanie operacji egzekucyjnych \n\n Odpowiedź może być filtrowana na podstawie parametrów: \n - **authorIdentifier** – identyfikator osoby, która nadała uprawnienie \n - **authorizedIdentifier** – identyfikator osoby lub podmiotu uprawnionego \n - **targetIdentifier** – identyfikator podmiotu docelowego dla uprawnień nadanych pośrednio \n - **permissionTypes** – lista rodzajów wyszukiwanych uprawnień \n - **permissionState** – status uprawnienia \n - **queryType** – typ zapytania określający, która z dwóch list ma zostać zwrócona \n\n#### Stronicowanie wyników\nZapytanie zwraca **jedną stronę wyników** o numerze i rozmiarze podanym w ścieżce.\n- Przy pierwszym wywołaniu należy ustawić parametr `pageOffset = 0`. \n- Jeżeli dostępna jest kolejna strona wyników, w odpowiedzi pojawi się flaga **`hasMore`**. \n- W takim przypadku można wywołać zapytanie ponownie z kolejnym numerem strony.\n\n > Więcej informacji:\n > - [Pobieranie listy uprawnień](https://github.com/CIRFMF/ksef-docs/blob/main/uprawnienia.md#pobranie-listy-uprawnie%C5%84-do-pracy-w-ksef-nadanych-osobom-fizycznym-lub-podmiotom)\n\n**Sortowanie:**\n\n- startDate (Desc)\n\n\n\n**Wymagane uprawnienia**: `CredentialsManage`, `CredentialsRead`, `SubunitManage`.",
+ "parameters": [
+ {
+ "name": "pageOffset",
+ "in": "query",
+ "description": "Numer strony wyników.",
+ "schema": {
+ "minimum": 0,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "format": "int32",
+ "default": 0
+ }
+ },
+ {
+ "name": "pageSize",
+ "in": "query",
+ "description": "Rozmiar strony wyników.",
+ "schema": {
+ "maximum": 100,
+ "exclusiveMaximum": false,
+ "minimum": 10,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "format": "int32",
+ "default": 10
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "required": [
+ "queryType"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PersonPermissionsQueryRequest"
+ }
+ ]
+ },
+ "example": {"authorIdentifier":{"type":"Nip","value":"7762811692"},"permissionTypes":["CredentialsManage","CredentialsRead","InvoiceWrite"],"permissionState":"Active","queryType":"PermissionsInCurrentContext"}
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/QueryPersonPermissionsResponse"
+ },
+ "example": {"permissions":[{"id":"0c9a72e8-f344-457f-9c16-7c640eb60242","authorizedIdentifier":{"type":"Nip","value":"7762811692"},"targetIdentifier":{"type":"Nip","value":"9786214922"},"authorIdentifier":{"type":"Pesel","value":"15062788702"},"permissionScope":"InvoiceWrite","description":"praca dla klienta 9786214922; uprawniony NIP: 7762811692, Adam Abacki; pośrednik 3936518395","permissionState":"Active","startDate":"2025-06-22T10:41:11+00:00","canDelegate":false}],"hasMore":false}
+ }
+ }
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details |\n|-|-|-|\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "403": {
+ "description": "Forbidden"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ],
+ "x-sort": [
+ {
+ "field": "startDate",
+ "direction": "Desc"
+ }
+ ],
+ "x-required-permissions": [
+ "CredentialsManage",
+ "CredentialsRead",
+ "SubunitManage"
+ ]
+ }
+ },
+ "/api/v2/permissions/query/subunits/grants": {
+ "post": {
+ "tags": [
+ "Wyszukiwanie nadanych uprawnień"
+ ],
+ "summary": "Pobranie listy uprawnień administratorów jednostek i podmiotów podrzędnych",
+ "description": " Metoda pozwala na odczytanie uprawnień do zarządzania uprawnieniami nadanych administratorom: \n - jednostek podrzędnych identyfikowanych identyfikatorem wewnętrznym \n - podmiotów podrzędnych (podrzędnych JST lub członków grupy VAT) identyfikowanych przez NIP \n\n Lista zwraca wyłącznie uprawnienia do zarządzania uprawnieniami nadane z kontekstu bieżącego (z podmiotu nadrzędnego). \n Nie są odczytywane uprawnienia nadane przez administratorów jednostek podrzędnych wewnątrz tych jednostek. \n\n Odpowiedź może być filtrowana na podstawie parametru: \n - **subunitIdentifier** – identyfikator jednostki lub podmiotu podrzędnego \n\n#### Stronicowanie wyników\nZapytanie zwraca **jedną stronę wyników** o numerze i rozmiarze podanym w ścieżce.\n- Przy pierwszym wywołaniu należy ustawić parametr `pageOffset = 0`. \n- Jeżeli dostępna jest kolejna strona wyników, w odpowiedzi pojawi się flaga **`hasMore`**. \n- W takim przypadku można wywołać zapytanie ponownie z kolejnym numerem strony.\n\n > Więcej informacji:\n > - [Pobieranie listy uprawnień](https://github.com/CIRFMF/ksef-docs/blob/main/uprawnienia.md#pobranie-listy-uprawnie%C5%84-administrator%C3%B3w-jednostek-i-podmiot%C3%B3w-podrz%C4%99dnych)\n\n**Sortowanie:**\n\n- startDate (Desc)\n\n\n\n**Wymagane uprawnienia**: `CredentialsManage`, `CredentialsRead`, `SubunitManage`.",
+ "parameters": [
+ {
+ "name": "pageOffset",
+ "in": "query",
+ "description": "Numer strony wyników.",
+ "schema": {
+ "minimum": 0,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "format": "int32",
+ "default": 0
+ }
+ },
+ {
+ "name": "pageSize",
+ "in": "query",
+ "description": "Rozmiar strony wyników.",
+ "schema": {
+ "maximum": 100,
+ "exclusiveMaximum": false,
+ "minimum": 10,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "format": "int32",
+ "default": 10
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/SubunitPermissionsQueryRequest"
+ }
+ ]
+ },
+ "example": {"subunitIdentifier":{"type":"InternalId","value":"7762811692-12345"}}
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/QuerySubunitPermissionsResponse"
+ },
+ "example": {"permissions":[{"id":"0c9a72e8-f344-457f-9c16-7c640eb60242","authorizedIdentifier":{"type":"Fingerprint","value":"CEB3643BAC2C111ADDE971BDA5A80163441867D65389FC0BC0DFF8B4C1CD4E59"},"subunitIdentifier":{"type":"InternalId","value":"7762811692-12345"},"authorIdentifier":{"type":"Pesel","value":"15062788702"},"permissionScope":"CredentialsManage","description":"Opis uprawnienia","startDate":"2025-06-22T10:41:11+00:00"}],"hasMore":false}
+ }
+ }
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details |\n|-|-|-|\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "403": {
+ "description": "Forbidden"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ],
+ "x-sort": [
+ {
+ "field": "startDate",
+ "direction": "Desc"
+ }
+ ],
+ "x-required-permissions": [
+ "CredentialsManage",
+ "CredentialsRead",
+ "SubunitManage"
+ ]
+ }
+ },
+ "/api/v2/permissions/query/entities/roles": {
+ "get": {
+ "tags": [
+ "Wyszukiwanie nadanych uprawnień"
+ ],
+ "summary": "Pobranie listy ról podmiotu",
+ "description": " Metoda pozwala na **odczytanie listy ról podmiotu bieżącego kontekstu logowania**.\n\n#### Role podmiotów zwracane przez operację:\n- **CourtBailiff** – komornik sądowy \n- **EnforcementAuthority** – organ egzekucyjny \n- **LocalGovernmentUnit** – nadrzędna JST \n- **LocalGovernmentSubUnit** – podrzędne JST \n- **VatGroupUnit** – grupa VAT \n- **VatGroupSubUnit** – członek grupy VAT\n\n#### Stronicowanie wyników\nZapytanie zwraca **jedną stronę wyników** o numerze i rozmiarze podanym w ścieżce.\n- Przy pierwszym wywołaniu należy ustawić parametr `pageOffset = 0`. \n- Jeżeli dostępna jest kolejna strona wyników, w odpowiedzi pojawi się flaga **`hasMore`**. \n- W takim przypadku można wywołać zapytanie ponownie z kolejnym numerem strony.\n \n > Więcej informacji:\n > - [Pobieranie listy ról](https://github.com/CIRFMF/ksef-docs/blob/main/uprawnienia.md#pobranie-listy-r%C3%B3l-podmiotu)\n\n**Sortowanie:**\n\n- startDate (Desc)\n\n\n\n**Wymagane uprawnienia**: `CredentialsManage`, `CredentialsRead`.",
+ "parameters": [
+ {
+ "name": "pageOffset",
+ "in": "query",
+ "description": "Numer strony wyników.",
+ "schema": {
+ "minimum": 0,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "format": "int32",
+ "default": 0
+ }
+ },
+ {
+ "name": "pageSize",
+ "in": "query",
+ "description": "Rozmiar strony wyników.",
+ "schema": {
+ "maximum": 100,
+ "exclusiveMaximum": false,
+ "minimum": 10,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "format": "int32",
+ "default": 10
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/QueryEntityRolesResponse"
+ },
+ "example": {"roles":[{"role":"EnforcementAuthority","description":"Organ egzekucyjny","startDate":"2025-06-22T10:41:11+00:00"}],"hasMore":false}
+ }
+ }
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details |\n|-|-|-|\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "403": {
+ "description": "Forbidden"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ],
+ "x-sort": [
+ {
+ "field": "startDate",
+ "direction": "Desc"
+ }
+ ],
+ "x-required-permissions": [
+ "CredentialsManage",
+ "CredentialsRead"
+ ]
+ }
+ },
+ "/api/v2/permissions/query/subordinate-entities/roles": {
+ "post": {
+ "tags": [
+ "Wyszukiwanie nadanych uprawnień"
+ ],
+ "summary": "Pobranie listy podmiotów podrzędnych",
+ "description": " Metoda pozwala na odczytanie listy podmiotów podrzędnych, \n jeżeli podmiot bieżącego kontekstu ma rolę podmiotu nadrzędnego:\n - **nadrzędna JST** – odczytywane są podrzędne JST, \n - **grupa VAT** – odczytywane są podmioty będące członkami grupy VAT.\n\n Role podmiotów zwracane przez operację obejmują: \n - **LocalGovernmentSubUnit** – podrzędne JST, \n - **VatGroupSubUnit** – członek grupy VAT.\n\n Odpowiedź może być filtrowana według parametru: \n - **subordinateEntityIdentifier** – identyfikator podmiotu podrzędnego.\n\n#### Stronicowanie wyników\nZapytanie zwraca **jedną stronę wyników** o numerze i rozmiarze podanym w ścieżce.\n- Przy pierwszym wywołaniu należy ustawić parametr `pageOffset = 0`. \n- Jeżeli dostępna jest kolejna strona wyników, w odpowiedzi pojawi się flaga **`hasMore`**. \n- W takim przypadku można wywołać zapytanie ponownie z kolejnym numerem strony.\n \n > Więcej informacji:\n > - [Pobieranie listy podmiotów podrzędnych](https://github.com/CIRFMF/ksef-docs/blob/main/uprawnienia.md#pobranie-listy-podmiot%C3%B3w-podrz%C4%99dnych)\n\n**Sortowanie:**\n\n- startDate (Desc)\n\n\n\n**Wymagane uprawnienia**: `CredentialsManage`, `CredentialsRead`, `SubunitManage`.",
+ "parameters": [
+ {
+ "name": "pageOffset",
+ "in": "query",
+ "description": "Numer strony wyników.",
+ "schema": {
+ "minimum": 0,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "format": "int32",
+ "default": 0
+ }
+ },
+ {
+ "name": "pageSize",
+ "in": "query",
+ "description": "Rozmiar strony wyników.",
+ "schema": {
+ "maximum": 100,
+ "exclusiveMaximum": false,
+ "minimum": 10,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "format": "int32",
+ "default": 10
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/SubordinateEntityRolesQueryRequest"
+ }
+ ]
+ },
+ "example": {"subordinateEntityIdentifier":{"type":"Nip","value":"7762811692"}}
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/QuerySubordinateEntityRolesResponse"
+ },
+ "example": {"roles":[{"subordinateEntityIdentifier":{"type":"Nip","value":"7762811692"},"role":"VatGroupSubUnit","description":"Członek grupy VAT 8373740478","startDate":"2025-06-22T10:41:11+00:00"}],"hasMore":false}
+ }
+ }
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details |\n|-|-|-|\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "403": {
+ "description": "Forbidden"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ],
+ "x-sort": [
+ {
+ "field": "startDate",
+ "direction": "Desc"
+ }
+ ],
+ "x-required-permissions": [
+ "CredentialsManage",
+ "CredentialsRead",
+ "SubunitManage"
+ ]
+ }
+ },
+ "/api/v2/permissions/query/authorizations/grants": {
+ "post": {
+ "tags": [
+ "Wyszukiwanie nadanych uprawnień"
+ ],
+ "summary": "Pobranie listy uprawnień podmiotowych do obsługi faktur",
+ "description": " Metoda pozwala na odczytanie uprawnień podmiotowych: \n - otrzymanych przez podmiot bieżącego kontekstu \n - nadanych przez podmiot bieżącego kontekstu \n\n Wybór listy nadanych lub otrzymanych uprawnień odbywa się przy użyciu parametru **queryType**. \n\n Uprawnienia zwracane przez operację obejmują: \n - **SelfInvoicing** – wystawianie faktur w trybie samofakturowania \n - **TaxRepresentative** – wykonywanie operacji przedstawiciela podatkowego \n - **RRInvoicing** – wystawianie faktur VAT RR \n - **PefInvoicing** – wystawianie faktur PEF \n\n Odpowiedź może być filtrowana na podstawie następujących parametrów: \n - **authorizingIdentifier** – identyfikator podmiotu uprawniającego (stosowane przy queryType = Received) \n - **authorizedIdentifier** – identyfikator podmiotu uprawnionego (stosowane przy queryType = Granted) \n - **permissionTypes** – lista rodzajów wyszukiwanych uprawnień \n\n#### Stronicowanie wyników\nZapytanie zwraca **jedną stronę wyników** o numerze i rozmiarze podanym w ścieżce.\n- Przy pierwszym wywołaniu należy ustawić parametr `pageOffset = 0`. \n- Jeżeli dostępna jest kolejna strona wyników, w odpowiedzi pojawi się flaga **`hasMore`**. \n- W takim przypadku można wywołać zapytanie ponownie z kolejnym numerem strony.\n\n > Więcej informacji:\n > - [Pobieranie listy uprawnień](https://github.com/CIRFMF/ksef-docs/blob/main/uprawnienia.md#pobranie-listy-uprawnie%C5%84-podmiotowych-do-obs%C5%82ugi-faktur)\n\n**Sortowanie:**\n\n- startDate (Desc)\n\n\n\n**Wymagane uprawnienia**: `CredentialsManage`, `CredentialsRead`.",
+ "parameters": [
+ {
+ "name": "pageOffset",
+ "in": "query",
+ "description": "Numer strony wyników.",
+ "schema": {
+ "minimum": 0,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "format": "int32",
+ "default": 0
+ }
+ },
+ {
+ "name": "pageSize",
+ "in": "query",
+ "description": "Rozmiar strony wyników.",
+ "schema": {
+ "maximum": 100,
+ "exclusiveMaximum": false,
+ "minimum": 10,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "format": "int32",
+ "default": 10
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "required": [
+ "queryType"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/EntityAuthorizationPermissionsQueryRequest"
+ }
+ ]
+ },
+ "example": {"authorizedIdentifier":{"type":"Nip","value":"7762811692"},"queryType":"Granted","permissionTypes":["SelfInvoicing","TaxRepresentative","RRInvoicing"]}
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/QueryEntityAuthorizationPermissionsResponse"
+ },
+ "example": {"authorizationGrants":[{"id":"0c9a72e8-f344-457f-9c16-7c640eb60242","authorIdentifier":{"type":"Pesel","value":"15062788702"},"authorizedEntityIdentifier":{"type":"Nip","value":"7762811692"},"authorizingEntityIdentifier":{"type":"Nip","value":"1134256681"},"authorizationScope":"SelfInvoicing","description":"Uprawnienie podmiotowe do samofakturowania","startDate":"2025-06-22T10:41:11+00:00"}],"hasMore":false}
+ }
+ }
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details |\n|-|-|-|\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "403": {
+ "description": "Forbidden"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ],
+ "x-sort": [
+ {
+ "field": "startDate",
+ "direction": "Desc"
+ }
+ ],
+ "x-required-permissions": [
+ "CredentialsManage",
+ "CredentialsRead"
+ ]
+ }
+ },
+ "/api/v2/permissions/query/eu-entities/grants": {
+ "post": {
+ "tags": [
+ "Wyszukiwanie nadanych uprawnień"
+ ],
+ "summary": "Pobranie listy uprawnień administratorów lub reprezentantów podmiotów unijnych uprawnionych do samofakturowania",
+ "description": " Metoda pozwala na odczytanie uprawnień administratorów lub reprezentantów podmiotów unijnych: \n - Jeżeli kontekstem logowania jest NIP, możliwe jest odczytanie uprawnień administratorów podmiotów unijnych powiązanych z podmiotem bieżącego kontekstu, czyli takich, dla których pierwszy człon kontekstu złożonego jest równy NIP-owi kontekstu logowania. \n - Jeżeli kontekst logowania jest złożony (NIP-VAT UE), możliwe jest pobranie wszystkich uprawnień administratorów i reprezentantów podmiotu w bieżącym kontekście złożonym. \n\n Uprawnienia zwracane przez operację obejmują: \n - **VatUeManage** – zarządzanie uprawnieniami w ramach podmiotu unijnego \n - **InvoiceWrite** – wystawianie faktur \n - **InvoiceRead** – przeglądanie faktur \n - **Introspection** – przeglądanie historii sesji \n\n Odpowiedź może być filtrowana na podstawie następujących parametrów: \n - **vatUeIdentifier** – identyfikator podmiotu unijnego \n - **authorizedFingerprintIdentifier** – odcisk palca certyfikatu uprawnionej osoby lub podmiotu \n - **permissionTypes** – lista rodzajów wyszukiwanych uprawnień \n\n#### Stronicowanie wyników\nZapytanie zwraca **jedną stronę wyników** o numerze i rozmiarze podanym w ścieżce.\n- Przy pierwszym wywołaniu należy ustawić parametr `pageOffset = 0`. \n- Jeżeli dostępna jest kolejna strona wyników, w odpowiedzi pojawi się flaga **`hasMore`**. \n- W takim przypadku można wywołać zapytanie ponownie z kolejnym numerem strony.\n \n > Więcej informacji:\n > - [Pobieranie listy uprawnień](https://github.com/CIRFMF/ksef-docs/blob/main/uprawnienia.md#pobranie-listy-uprawnie%C5%84-administrator%C3%B3w-lub-reprezentant%C3%B3w-podmiot%C3%B3w-unijnych-uprawnionych-do-samofakturowania)\n\n**Sortowanie:**\n\n- startDate (Desc)\n\n\n\n**Wymagane uprawnienia**: `CredentialsManage`, `CredentialsRead`, `VatUeManage`.",
+ "parameters": [
+ {
+ "name": "pageOffset",
+ "in": "query",
+ "description": "Numer strony wyników.",
+ "schema": {
+ "minimum": 0,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "format": "int32",
+ "default": 0
+ }
+ },
+ {
+ "name": "pageSize",
+ "in": "query",
+ "description": "Rozmiar strony wyników.",
+ "schema": {
+ "maximum": 100,
+ "exclusiveMaximum": false,
+ "minimum": 10,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "format": "int32",
+ "default": 10
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/EuEntityPermissionsQueryRequest"
+ }
+ ]
+ },
+ "example": {"vatUeIdentifier":"DE123456789012","permissionTypes":["VatUeManage","Introspection"]}
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/QueryEuEntityPermissionsResponse"
+ },
+ "example": {"permissions":[{"id":"0c9a72e8-f344-457f-9c16-7c640eb60242","authorIdentifier":{"type":"Pesel","value":"15062788702"},"vatUeIdentifier":"DE123456789012","euEntityName":"Podmiot unijny","authorizedFingerprintIdentifier":"CEB3643BAC2C111ADDE971BDA5A80163441867D65389FC0BC0DFF8B4C1CD4E59","permissionScope":"VatUeManage","description":"Opis uprawnienia","startDate":"2025-06-22T10:41:11+00:00"}],"hasMore":false}
+ }
+ }
+ },
+ "400": {
+ "description": "| ExceptionCode | ExceptionDescription | Details |\n|-|-|-|\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExceptionResponse"
+ }
+ }
+ },
+ "x-summary": "Bad Request"
+ },
+ "403": {
+ "description": "Forbidden"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "security": [
+ {
+ "Bearer": [ ]
+ }
+ ],
+ "x-sort": [
+ {
+ "field": "startDate",
+ "direction": "Desc"
+ }
+ ],
+ "x-required-permissions": [
+ "CredentialsManage",
+ "CredentialsRead",
+ "VatUeManage"
+ ]
+ }
+ }
+ },
+ "components": {
+ "schemas": {
+ "AllowedIps": {
+ "type": "object",
+ "properties": {
+ "ip4Addresses": {
+ "type": "array",
+ "items": {
+ "pattern": "^((25[0-5]|(2[0-4]|1\\d|[1-9]|)\\d)\\.?\\b){4}$",
+ "type": "string"
+ },
+ "description": "Lista adresów IPv4 w notacji dziesiętnej kropkowanej, np. `192.168.0.10`.",
+ "nullable": true
+ },
+ "ip4Ranges": {
+ "type": "array",
+ "items": {
+ "pattern": "^((25[0-5]|(2[0-4]|1\\d|[1-9]|)\\d)\\.?\\b){4}-((25[0-5]|(2[0-4]|1\\d|[1-9]|)\\d)\\.?\\b){4}$",
+ "type": "string"
+ },
+ "description": "Lista adresów IPv4 podana w formie zakresu początek–koniec, oddzielonego pojedynczym myślnikiem, np. `10.0.0.1–10.0.0.254`.",
+ "nullable": true
+ },
+ "ip4Masks": {
+ "type": "array",
+ "items": {
+ "pattern": "^((25[0-5]|(2[0-4]|1\\d|[1-9]|)\\d)\\.?\\b){4}\\/(0|[1-9]|1[0-9]|2[0-9]|3[0-2])$",
+ "type": "string"
+ },
+ "description": "Lista adresów IPv4 w notacji CIDR, np. `172.16.0.0/16`.",
+ "nullable": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "AmountType": {
+ "enum": [
+ "Brutto",
+ "Netto",
+ "Vat"
+ ],
+ "type": "string"
+ },
+ "ApiRateLimitValuesOverride": {
+ "required": [
+ "perHour",
+ "perMinute",
+ "perSecond"
+ ],
+ "type": "object",
+ "properties": {
+ "perSecond": {
+ "type": "integer",
+ "description": "Limit na sekundę.",
+ "format": "int32"
+ },
+ "perMinute": {
+ "type": "integer",
+ "description": "Limit na minutę.",
+ "format": "int32"
+ },
+ "perHour": {
+ "type": "integer",
+ "description": "Limit na godzinę.",
+ "format": "int32"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ApiRateLimitsOverride": {
+ "required": [
+ "batchSession",
+ "invoiceDownload",
+ "invoiceExport",
+ "invoiceMetadata",
+ "invoiceSend",
+ "invoiceStatus",
+ "onlineSession",
+ "other",
+ "sessionInvoiceList",
+ "sessionList",
+ "sessionMisc"
+ ],
+ "type": "object",
+ "properties": {
+ "onlineSession": {
+ "required": [
+ "perSecond",
+ "perMinute",
+ "perHour"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ApiRateLimitValuesOverride"
+ }
+ ],
+ "description": "Limity dla otwierania/zamykania sesji interaktywnych."
+ },
+ "batchSession": {
+ "required": [
+ "perSecond",
+ "perMinute",
+ "perHour"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ApiRateLimitValuesOverride"
+ }
+ ],
+ "description": "Limity dla otwierania/zamykania sesji wsadowych."
+ },
+ "invoiceSend": {
+ "required": [
+ "perSecond",
+ "perMinute",
+ "perHour"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ApiRateLimitValuesOverride"
+ }
+ ],
+ "description": "Limity dla wysyłki faktur."
+ },
+ "invoiceStatus": {
+ "required": [
+ "perSecond",
+ "perMinute",
+ "perHour"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ApiRateLimitValuesOverride"
+ }
+ ],
+ "description": "Limity dla pobierania statusu faktury z sesji."
+ },
+ "sessionList": {
+ "required": [
+ "perSecond",
+ "perMinute",
+ "perHour"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ApiRateLimitValuesOverride"
+ }
+ ],
+ "description": "Limity dla pobierania listy sesji."
+ },
+ "sessionInvoiceList": {
+ "required": [
+ "perSecond",
+ "perMinute",
+ "perHour"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ApiRateLimitValuesOverride"
+ }
+ ],
+ "description": "Limity dla pobierania listy faktur w sesji."
+ },
+ "sessionMisc": {
+ "required": [
+ "perSecond",
+ "perMinute",
+ "perHour"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ApiRateLimitValuesOverride"
+ }
+ ],
+ "description": "Limity dla pozostałych operacji w ramach sesji."
+ },
+ "invoiceMetadata": {
+ "required": [
+ "perSecond",
+ "perMinute",
+ "perHour"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ApiRateLimitValuesOverride"
+ }
+ ],
+ "description": "Limity dla pobierania metadanych faktur."
+ },
+ "invoiceExport": {
+ "required": [
+ "perSecond",
+ "perMinute",
+ "perHour"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ApiRateLimitValuesOverride"
+ }
+ ],
+ "description": "Limity dla eksportu paczku faktur."
+ },
+ "invoiceDownload": {
+ "required": [
+ "perSecond",
+ "perMinute",
+ "perHour"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ApiRateLimitValuesOverride"
+ }
+ ],
+ "description": "Limity dla pobierania faktur po numerze KSeF."
+ },
+ "other": {
+ "required": [
+ "perSecond",
+ "perMinute",
+ "perHour"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ApiRateLimitValuesOverride"
+ }
+ ],
+ "description": "Limity dla pozostałych operacji API."
+ }
+ },
+ "additionalProperties": false
+ },
+ "AttachmentPermissionGrantRequest": {
+ "required": [
+ "nip"
+ ],
+ "type": "object",
+ "properties": {
+ "nip": {
+ "$ref": "#/components/schemas/Nip"
+ }
+ },
+ "additionalProperties": false
+ },
+ "AttachmentPermissionRevokeRequest": {
+ "required": [
+ "nip"
+ ],
+ "type": "object",
+ "properties": {
+ "nip": {
+ "$ref": "#/components/schemas/Nip"
+ }
+ },
+ "additionalProperties": false
+ },
+ "AuthenticationChallengeResponse": {
+ "required": [
+ "challenge",
+ "timestamp"
+ ],
+ "type": "object",
+ "properties": {
+ "challenge": {
+ "$ref": "#/components/schemas/Challenge"
+ },
+ "timestamp": {
+ "type": "string",
+ "description": "Czas wygenerowania challenge-a.",
+ "format": "date-time"
+ }
+ },
+ "additionalProperties": false
+ },
+ "AuthenticationContextIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "type": "object",
+ "properties": {
+ "type": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/AuthenticationContextIdentifierType"
+ }
+ ],
+ "description": "Typ identyfikatora"
+ },
+ "value": {
+ "type": "string",
+ "description": "Wartość identyfikatora"
+ }
+ },
+ "additionalProperties": false
+ },
+ "AuthenticationContextIdentifierType": {
+ "enum": [
+ "Nip",
+ "InternalId",
+ "NipVatUe",
+ "PeppolId"
+ ],
+ "type": "string"
+ },
+ "AuthenticationInitResponse": {
+ "required": [
+ "authenticationToken",
+ "referenceNumber"
+ ],
+ "type": "object",
+ "properties": {
+ "referenceNumber": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ReferenceNumber"
+ }
+ ],
+ "description": "Numer referencyjny sesji uwierzytelnienia."
+ },
+ "authenticationToken": {
+ "required": [
+ "token",
+ "validUntil"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/TokenInfo"
+ }
+ ],
+ "description": "Token operacji uwierzytelnienia."
+ }
+ },
+ "additionalProperties": false
+ },
+ "AuthenticationListItem": {
+ "required": [
+ "authenticationMethod",
+ "referenceNumber",
+ "startDate",
+ "status"
+ ],
+ "type": "object",
+ "properties": {
+ "startDate": {
+ "type": "string",
+ "description": "Data rozpoczęcia operacji uwierzytelnienia.",
+ "format": "date-time"
+ },
+ "authenticationMethod": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/AuthenticationMethod"
+ }
+ ],
+ "description": "Metoda uwierzytelnienia.\n| Wartość | Opis |\n| --- | --- |\n| Token | Token KSeF. |\n| TrustedProfile | Profil Zaufany. |\n| InternalCertificate | Certyfikat KSeF. |\n| QualifiedSignature | Podpis kwalifikowany. |\n| QualifiedSeal | Pieczęć kwalifikowana. |\n| PersonalSignature | Podpis osobisty. |\n| PeppolSignature | Podpis dostawcy uslug Peppol. |\n"
+ },
+ "status": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/StatusInfo"
+ }
+ ],
+ "description": "Informacje o aktualnym statusie.\n| Code | Description | Details |\n| --- | --- | --- |\n| 100 | Uwierzytelnianie w toku | - |\n| 200 | Uwierzytelnianie zakończone sukcesem | - |\n| 415 | Uwierzytelnianie zakończone niepowodzeniem | Brak przypisanych uprawnień |\n| 425 | Uwierzytelnienie unieważnione | Uwierzytelnienie i powiązane refresh tokeny zostały unieważnione przez użytkownika |\n| 450 | Uwierzytelnianie zakończone niepowodzeniem z powodu błędnego tokenu | Nieprawidłowy token |\n| 450 | Uwierzytelnianie zakończone niepowodzeniem z powodu błędnego tokenu | Nieprawidłowy czas tokena |\n| 450 | Uwierzytelnianie zakończone niepowodzeniem z powodu błędnego tokenu | Token unieważniony |\n| 450 | Uwierzytelnianie zakończone niepowodzeniem z powodu błędnego tokenu | Token nieaktywny |\n| 460 | Uwierzytelnianie zakończone niepowodzeniem z powodu błędu certyfikatu | Nieważny certyfikat |\n| 460 | Uwierzytelnianie zakończone niepowodzeniem z powodu błędu certyfikatu | Błąd weryfikacji łańcucha certyfikatów |\n| 460 | Uwierzytelnianie zakończone niepowodzeniem z powodu błędu certyfikatu | Niezaufany łańcuch certyfikatów |\n| 460 | Uwierzytelnianie zakończone niepowodzeniem z powodu błędu certyfikatu | Certyfikat odwołany |\n| 460 | Uwierzytelnianie zakończone niepowodzeniem z powodu błędu certyfikatu | Niepoprawny certyfikat |\n| 470 | Uwierzytelnianie zakończone niepowodzeniem | Próba wykorzystania metod autoryzacyjnych osoby zmarłej |\n| 500 | Nieznany błąd | - |\n| 550 | Operacja została anulowana przez system | Przetwarzanie zostało przerwane z przyczyn wewnętrznych systemu. Spróbuj ponownie |"
+ },
+ "isTokenRedeemed": {
+ "type": "boolean",
+ "description": "Czy został już wydany refresh token powiązany z danym uwierzytelnieniem.",
+ "nullable": true
+ },
+ "lastTokenRefreshDate": {
+ "type": "string",
+ "description": "Data ostatniego odświeżenia tokena.",
+ "format": "date-time",
+ "nullable": true
+ },
+ "refreshTokenValidUntil": {
+ "type": "string",
+ "description": "Termin ważności refresh tokena (o ile nie zostanie wcześniej unieważniony).",
+ "format": "date-time",
+ "nullable": true
+ },
+ "referenceNumber": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ReferenceNumber"
+ }
+ ],
+ "description": "Numer referencyjny sesji uwierzytelnienia."
+ },
+ "isCurrent": {
+ "type": "boolean",
+ "description": "Czy sesja jest powiązana z aktualnie używanym tokenem.",
+ "readOnly": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "AuthenticationListResponse": {
+ "required": [
+ "items"
+ ],
+ "type": "object",
+ "properties": {
+ "continuationToken": {
+ "type": "string",
+ "description": "Token służący do pobrania kolejnej strony wyników. Jeśli jest pusty, to nie ma kolejnych stron.",
+ "nullable": true
+ },
+ "items": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/AuthenticationListItem"
+ },
+ "description": "Lista sesji uwierzytelniania."
+ }
+ },
+ "additionalProperties": false
+ },
+ "AuthenticationMethod": {
+ "enum": [
+ "Token",
+ "TrustedProfile",
+ "InternalCertificate",
+ "QualifiedSignature",
+ "QualifiedSeal",
+ "PersonalSignature",
+ "PeppolSignature"
+ ],
+ "type": "string",
+ "description": "Metoda uwierzytelnienia.\n| Wartość | Opis |\n| --- | --- |\n| Token | Token KSeF. |\n| TrustedProfile | Profil Zaufany. |\n| InternalCertificate | Certyfikat KSeF. |\n| QualifiedSignature | Podpis kwalifikowany. |\n| QualifiedSeal | Pieczęć kwalifikowana. |\n| PersonalSignature | Podpis osobisty. |\n| PeppolSignature | Podpis dostawcy uslug Peppol. |\n"
+ },
+ "AuthenticationOperationStatusResponse": {
+ "required": [
+ "authenticationMethod",
+ "startDate",
+ "status"
+ ],
+ "type": "object",
+ "properties": {
+ "startDate": {
+ "type": "string",
+ "description": "Data rozpoczęcia operacji uwierzytelnienia.",
+ "format": "date-time"
+ },
+ "authenticationMethod": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/AuthenticationMethod"
+ }
+ ],
+ "description": "Metoda uwierzytelnienia.\n| Wartość | Opis |\n| --- | --- |\n| Token | Token KSeF. |\n| TrustedProfile | Profil Zaufany. |\n| InternalCertificate | Certyfikat KSeF. |\n| QualifiedSignature | Podpis kwalifikowany. |\n| QualifiedSeal | Pieczęć kwalifikowana. |\n| PersonalSignature | Podpis osobisty. |\n| PeppolSignature | Podpis dostawcy uslug Peppol. |\n"
+ },
+ "status": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/StatusInfo"
+ }
+ ],
+ "description": "Informacje o aktualnym statusie.\n| Code | Description | Details |\n| --- | --- | --- |\n| 100 | Uwierzytelnianie w toku | - |\n| 200 | Uwierzytelnianie zakończone sukcesem | - |\n| 415 | Uwierzytelnianie zakończone niepowodzeniem | Brak przypisanych uprawnień |\n| 425 | Uwierzytelnienie unieważnione | Uwierzytelnienie i powiązane refresh tokeny zostały unieważnione przez użytkownika |\n| 450 | Uwierzytelnianie zakończone niepowodzeniem z powodu błędnego tokenu | Nieprawidłowy token |\n| 450 | Uwierzytelnianie zakończone niepowodzeniem z powodu błędnego tokenu | Nieprawidłowy czas tokena |\n| 450 | Uwierzytelnianie zakończone niepowodzeniem z powodu błędnego tokenu | Token unieważniony |\n| 450 | Uwierzytelnianie zakończone niepowodzeniem z powodu błędnego tokenu | Token nieaktywny |\n| 460 | Uwierzytelnianie zakończone niepowodzeniem z powodu błędu certyfikatu | Nieważny certyfikat |\n| 460 | Uwierzytelnianie zakończone niepowodzeniem z powodu błędu certyfikatu | Błąd weryfikacji łańcucha certyfikatów |\n| 460 | Uwierzytelnianie zakończone niepowodzeniem z powodu błędu certyfikatu | Niezaufany łańcuch certyfikatów |\n| 460 | Uwierzytelnianie zakończone niepowodzeniem z powodu błędu certyfikatu | Certyfikat odwołany |\n| 460 | Uwierzytelnianie zakończone niepowodzeniem z powodu błędu certyfikatu | Niepoprawny certyfikat |\n| 470 | Uwierzytelnianie zakończone niepowodzeniem | Próba wykorzystania metod autoryzacyjnych osoby zmarłej |\n| 500 | Nieznany błąd | - |\n| 550 | Operacja została anulowana przez system | Przetwarzanie zostało przerwane z przyczyn wewnętrznych systemu. Spróbuj ponownie |"
+ },
+ "isTokenRedeemed": {
+ "type": "boolean",
+ "description": "Czy został już wydany refresh token powiązany z danym uwierzytelnieniem.",
+ "nullable": true
+ },
+ "lastTokenRefreshDate": {
+ "type": "string",
+ "description": "Data ostatniego odświeżenia tokena.",
+ "format": "date-time",
+ "nullable": true
+ },
+ "refreshTokenValidUntil": {
+ "type": "string",
+ "description": "Termin ważności refresh tokena (o ile nie zostanie wcześniej unieważniony).",
+ "format": "date-time",
+ "nullable": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "AuthenticationTokenRefreshResponse": {
+ "required": [
+ "accessToken"
+ ],
+ "type": "object",
+ "properties": {
+ "accessToken": {
+ "required": [
+ "token",
+ "validUntil"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/TokenInfo"
+ }
+ ],
+ "description": "Token dostępu, którego należy używać w wywołaniach chronionych zasobów API."
+ }
+ },
+ "additionalProperties": false
+ },
+ "AuthenticationTokenStatus": {
+ "enum": [
+ "Pending",
+ "Active",
+ "Revoking",
+ "Revoked",
+ "Failed"
+ ],
+ "type": "string",
+ "description": "| Wartość | Opis |\n| --- | --- |\n| Pending | Token został utworzony ale jest jeszcze w trakcie aktywacji i nadawania uprawnień. Nie może być jeszcze wykorzystywany do uwierzytelniania. |\n| Active | Token jest aktywny i może być wykorzystywany do uwierzytelniania. |\n| Revoking | Token jest w trakcie unieważniania. Nie może już być wykorzystywany do uwierzytelniania. |\n| Revoked | Token został unieważniony i nie może być wykorzystywany do uwierzytelniania. |\n| Failed | Nie udało się aktywować tokena. Należy wygenerować nowy token, obecny nie może być wykorzystywany do uwierzytelniania. |\n"
+ },
+ "AuthenticationTokensResponse": {
+ "required": [
+ "accessToken",
+ "refreshToken"
+ ],
+ "type": "object",
+ "properties": {
+ "accessToken": {
+ "required": [
+ "token",
+ "validUntil"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/TokenInfo"
+ }
+ ],
+ "description": "Token dostępu."
+ },
+ "refreshToken": {
+ "required": [
+ "token",
+ "validUntil"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/TokenInfo"
+ }
+ ],
+ "description": "Token umożliwiający odświeżenie tokenu dostępu.\n> Więcej informacji:\n> - [Odświeżanie tokena](https://github.com/CIRFMF/ksef-docs/blob/main/uwierzytelnianie.md#od%C5%9Bwie%C5%BCenie-tokena-accesstoken)"
+ }
+ },
+ "additionalProperties": false
+ },
+ "AuthorizationPolicy": {
+ "type": "object",
+ "properties": {
+ "allowedIps": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/AllowedIps"
+ }
+ ],
+ "description": "Lista dozwolonych adresów IP.",
+ "nullable": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "BatchFileInfo": {
+ "required": [
+ "fileHash",
+ "fileParts",
+ "fileSize"
+ ],
+ "type": "object",
+ "properties": {
+ "fileSize": {
+ "maximum": 5000000000,
+ "exclusiveMaximum": false,
+ "minimum": 1,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "description": "Rozmiar pliku paczki w bajtach. Maksymalny rozmiar paczki to 5GB.",
+ "format": "int64"
+ },
+ "fileHash": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/Sha256HashBase64"
+ }
+ ],
+ "description": "Skrót SHA256 pliku paczki, zakodowany w formacie Base64."
+ },
+ "fileParts": {
+ "maxItems": 50,
+ "minItems": 1,
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/BatchFilePartInfo"
+ },
+ "description": "Informacje o częściach pliku paczki. Maksymalna liczba części to 50. Maksymalny dozwolony rozmiar części przed zaszyfrowaniem to 100MB."
+ }
+ },
+ "additionalProperties": false
+ },
+ "BatchFilePartInfo": {
+ "required": [
+ "fileHash",
+ "fileSize",
+ "ordinalNumber"
+ ],
+ "type": "object",
+ "properties": {
+ "ordinalNumber": {
+ "minimum": 1,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "description": "Numer sekwencyjny części pliku paczki.",
+ "format": "int32"
+ },
+ "fileName": {
+ "maxLength": 100,
+ "type": "string",
+ "description": "Nazwa części pliku paczki.",
+ "nullable": true,
+ "deprecated": true,
+ "x-removal-date": "2025-12-07"
+ },
+ "fileSize": {
+ "minimum": 1,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "description": "Rozmiar zaszyfrowanej części pliku paczki w bajtach.",
+ "format": "int64"
+ },
+ "fileHash": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/Sha256HashBase64"
+ }
+ ],
+ "description": "Skrót SHA256 zaszyfrowanej części pliku paczki, zakodowany w formacie Base64."
+ }
+ },
+ "additionalProperties": false
+ },
+ "BatchSessionContextLimitsOverride": {
+ "required": [
+ "maxInvoices",
+ "maxInvoiceSizeInMB",
+ "maxInvoiceWithAttachmentSizeInMB"
+ ],
+ "type": "object",
+ "properties": {
+ "maxInvoiceSizeInMB": {
+ "maximum": 5,
+ "exclusiveMaximum": false,
+ "minimum": 0,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "description": "Maksymalny rozmiar faktury w MB.",
+ "format": "int32"
+ },
+ "maxInvoiceWithAttachmentSizeInMB": {
+ "maximum": 10,
+ "exclusiveMaximum": false,
+ "minimum": 0,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "description": "Maksymalny rozmiar faktury z załącznikiem w MB.",
+ "format": "int32"
+ },
+ "maxInvoices": {
+ "maximum": 100000,
+ "exclusiveMaximum": false,
+ "minimum": 0,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "description": "Maksymalna ilość faktur które można przesłać w pojedynczej sesji.",
+ "format": "int32"
+ }
+ },
+ "additionalProperties": false
+ },
+ "BatchSessionEffectiveContextLimits": {
+ "required": [
+ "maxInvoices",
+ "maxInvoiceSizeInMB",
+ "maxInvoiceWithAttachmentSizeInMB"
+ ],
+ "type": "object",
+ "properties": {
+ "maxInvoiceSizeInMB": {
+ "minimum": 0,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "description": "Maksymalny rozmiar faktury w MB.",
+ "format": "int32"
+ },
+ "maxInvoiceWithAttachmentSizeInMB": {
+ "minimum": 0,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "description": "Maksymalny rozmiar faktury z załącznikiem w MB.",
+ "format": "int32"
+ },
+ "maxInvoices": {
+ "minimum": 0,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "description": "Maksymalna ilość faktur które można przesłać w pojedynczej sesji.",
+ "format": "int32"
+ }
+ },
+ "additionalProperties": false
+ },
+ "BuyerIdentifierType": {
+ "enum": [
+ "None",
+ "Other",
+ "Nip",
+ "VatUe"
+ ],
+ "type": "string",
+ "description": "| Wartość | Opis |\n| --- | --- |\n| None | Brak identyfikatora nabywcy |\n| Other | Inny identyfikator |\n| Nip | 10 cyfrowy numer NIP |\n| VatUe | Identyfikator VAT UE podmiotu unijnego |\n"
+ },
+ "CertificateEffectiveSubjectLimits": {
+ "type": "object",
+ "properties": {
+ "maxCertificates": {
+ "type": "integer",
+ "format": "int32"
+ }
+ },
+ "additionalProperties": false
+ },
+ "CertificateEnrollmentDataResponse": {
+ "required": [
+ "commonName",
+ "countryName"
+ ],
+ "type": "object",
+ "properties": {
+ "commonName": {
+ "type": "string",
+ "description": "Nazwa powszechna."
+ },
+ "countryName": {
+ "type": "string",
+ "description": "Kraj, kod ISO 3166."
+ },
+ "givenName": {
+ "type": "string",
+ "description": "Imię.",
+ "nullable": true
+ },
+ "surname": {
+ "type": "string",
+ "description": "Nazwisko.",
+ "nullable": true
+ },
+ "serialNumber": {
+ "type": "string",
+ "description": "Numer seryjny podmiotu.",
+ "nullable": true
+ },
+ "uniqueIdentifier": {
+ "type": "string",
+ "description": "Unikalny identyfikator.",
+ "nullable": true
+ },
+ "organizationName": {
+ "type": "string",
+ "description": "Nazwa organizacji.",
+ "nullable": true
+ },
+ "organizationIdentifier": {
+ "type": "string",
+ "description": "Identyfikator organizacji.",
+ "nullable": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "CertificateEnrollmentStatusResponse": {
+ "required": [
+ "requestDate",
+ "status"
+ ],
+ "type": "object",
+ "properties": {
+ "requestDate": {
+ "type": "string",
+ "description": "Data złożenia wniosku certyfikacyjnego.",
+ "format": "date-time"
+ },
+ "status": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/StatusInfo"
+ }
+ ],
+ "description": "Informacje o aktualnym statusie.\n| Code | Description | Details |\n| --- | --- | --- |\n| 100 | Wniosek przyjęty do realizacji | - |\n| 200 | Wniosek obsłużony (certyfikat wygenerowany) | - |\n| 400 | Wniosek odrzucony | Klucz publiczny został już certyfikowany przez inny podmiot. |\n| 400 | Wniosek odrzucony | Osiągnięto dopuszczalny limit posiadanych certyfikatów. |\n| 500 | Nieznany błąd | - |\n| 550 | Operacja została anulowana przez system | Przetwarzanie zostało przerwane z przyczyn wewnętrznych systemu. Spróbuj ponownie |"
+ },
+ "certificateSerialNumber": {
+ "type": "string",
+ "description": "Numer seryjny wygenerowanego certyfikatu (w formacie szesnastkowym). \nZwracany w przypadku prawidłowego przeprocesowania wniosku certyfikacyjnego.",
+ "nullable": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "CertificateLimit": {
+ "required": [
+ "limit",
+ "remaining"
+ ],
+ "type": "object",
+ "properties": {
+ "remaining": {
+ "type": "integer",
+ "description": "Pozostała wartość limitu.",
+ "format": "int32"
+ },
+ "limit": {
+ "type": "integer",
+ "description": "Maksymalna liczba zasobów dozwolona w ramach limitu.",
+ "format": "int32"
+ }
+ },
+ "additionalProperties": false
+ },
+ "CertificateLimitsResponse": {
+ "required": [
+ "canRequest",
+ "certificate",
+ "enrollment"
+ ],
+ "type": "object",
+ "properties": {
+ "canRequest": {
+ "type": "boolean",
+ "description": "Flaga informująca czy uwierzytelniony podmiot może złożyć nowy wniosek o certyfikat.",
+ "readOnly": true
+ },
+ "enrollment": {
+ "required": [
+ "remaining",
+ "limit"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/CertificateLimit"
+ }
+ ],
+ "description": "Informacje o limitach związanych z liczbą możliwych do złożenia wniosków certyfikacyjnych."
+ },
+ "certificate": {
+ "required": [
+ "remaining",
+ "limit"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/CertificateLimit"
+ }
+ ],
+ "description": "Informacje o limitach dotyczących liczby aktywnych certyfikatów wydanych dla danego podmiotu."
+ }
+ },
+ "additionalProperties": false,
+ "description": "Informacje o limitach wniosków oraz certyfikatów dla uwierzytelnionego podmiotu."
+ },
+ "CertificateListItem": {
+ "required": [
+ "certificateSerialNumber",
+ "commonName",
+ "name",
+ "requestDate",
+ "status",
+ "subjectIdentifier",
+ "type",
+ "validFrom",
+ "validTo"
+ ],
+ "type": "object",
+ "properties": {
+ "certificateSerialNumber": {
+ "type": "string",
+ "description": "Numer seryjny certyfikatu (w formacie szesnastkowym)."
+ },
+ "name": {
+ "maxLength": 100,
+ "type": "string",
+ "description": "Nazwa własna certyfikatu."
+ },
+ "type": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/KsefCertificateType"
+ }
+ ],
+ "description": "Typ certyfikatu.\n| Wartość | Opis |\n| --- | --- |\n| Authentication | Certyfikat używany do uwierzytelnienia w systemie. |\n| Offline | Certyfikat używany wyłącznie do potwierdzania autentyczności wystawcy i integralności faktury w trybie offline |\n"
+ },
+ "commonName": {
+ "type": "string",
+ "description": "Nazwa powszechna (CN) podmiotu, dla którego wystawiono certyfikat."
+ },
+ "status": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/CertificateListItemStatus"
+ }
+ ],
+ "description": "Status certyfikatu.\n| Wartość | Opis |\n| --- | --- |\n| Active | Certyfikat jest aktywny i może zostać użyty do uwierzytelnienia lub realizacji operacji w trybie offline (w zależności od typu certyfikatu). |\n| Blocked | Certyfikat został zablokowany i nie może zostać użyty do uwierzytelnienia i realizacji operacji w trybie offline. Status przejściowy do czasu zakończenia procesu unieważniania. |\n| Revoked | Certyfikat został unieważniony i nie może zostać użyty do uwierzytelnienia i realizacji operacji w trybie offline. |\n| Expired | Certyfikat wygasł i nie może zostać użyty do uwierzytelnienia i realizacji operacji w trybie offline. |\n"
+ },
+ "subjectIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/CertificateSubjectIdentifier"
+ }
+ ],
+ "description": "Identyfikator podmiotu, dla którego wystawiono certyfikat."
+ },
+ "validFrom": {
+ "type": "string",
+ "description": "Data rozpoczęcia ważności certyfikatu.",
+ "format": "date-time"
+ },
+ "validTo": {
+ "type": "string",
+ "description": "Data wygaśnięcia certyfikatu.",
+ "format": "date-time"
+ },
+ "lastUseDate": {
+ "type": "string",
+ "description": "Data ostatniego użycia certyfikatu.",
+ "format": "date-time",
+ "nullable": true
+ },
+ "requestDate": {
+ "type": "string",
+ "description": "Data złożenia wniosku certyfikacyjnego.",
+ "format": "date-time"
+ }
+ },
+ "additionalProperties": false
+ },
+ "CertificateListItemStatus": {
+ "enum": [
+ "Active",
+ "Blocked",
+ "Revoked",
+ "Expired"
+ ],
+ "type": "string",
+ "description": "| Wartość | Opis |\n| --- | --- |\n| Active | Certyfikat jest aktywny i może zostać użyty do uwierzytelnienia lub realizacji operacji w trybie offline (w zależności od typu certyfikatu). |\n| Blocked | Certyfikat został zablokowany i nie może zostać użyty do uwierzytelnienia i realizacji operacji w trybie offline. Status przejściowy do czasu zakończenia procesu unieważniania. |\n| Revoked | Certyfikat został unieważniony i nie może zostać użyty do uwierzytelnienia i realizacji operacji w trybie offline. |\n| Expired | Certyfikat wygasł i nie może zostać użyty do uwierzytelnienia i realizacji operacji w trybie offline. |\n"
+ },
+ "CertificateRevocationReason": {
+ "enum": [
+ "Unspecified",
+ "Superseded",
+ "KeyCompromise"
+ ],
+ "type": "string",
+ "description": "| Wartość | Opis |\n| --- | --- |\n| Unspecified | Nieokreślony. |\n| Superseded | Certyfikat został zastąpiony przez inny. |\n| KeyCompromise | Klucz prywatny powiązany z certyfikatem został skompromitowany. |\n"
+ },
+ "CertificateSubjectIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "type": "object",
+ "properties": {
+ "type": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/CertificateSubjectIdentifierType"
+ }
+ ],
+ "description": "Typ identyfikatora."
+ },
+ "value": {
+ "type": "string",
+ "description": "Wartość identyfikatora."
+ }
+ },
+ "additionalProperties": false,
+ "description": "Identyfikator podmiotu dla którego wystawiono certyfikat.\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |\n| Pesel | 11 cyfrowy numer PESEL |\n| Fingerprint | Odcisk palca certyfikatu |"
+ },
+ "CertificateSubjectIdentifierType": {
+ "enum": [
+ "Nip",
+ "Pesel",
+ "Fingerprint"
+ ],
+ "type": "string"
+ },
+ "CertificateSubjectLimitsOverride": {
+ "type": "object",
+ "properties": {
+ "maxCertificates": {
+ "minimum": 0,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "format": "int32",
+ "nullable": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "Challenge": {
+ "maxLength": 36,
+ "minLength": 36,
+ "type": "string",
+ "description": "Unikalny challenge."
+ },
+ "CheckAttachmentPermissionStatusResponse": {
+ "type": "object",
+ "properties": {
+ "isAttachmentAllowed": {
+ "type": "boolean",
+ "description": "Informacja czy Podmiot ma obecnie możliwość dodawania Załączników do Faktur"
+ },
+ "revokedDate": {
+ "type": "string",
+ "description": "Data i czas zakończenia możliwość dodawania przez Podmiot Załączników do Faktur.\nBrak podanej daty oznacza bezterminową możliwość dodawania Załączników do Faktur",
+ "format": "date-time",
+ "nullable": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "CommonSessionStatus": {
+ "enum": [
+ "InProgress",
+ "Succeeded",
+ "Failed",
+ "Cancelled"
+ ],
+ "type": "string",
+ "description": "| Wartość | Opis |\n| --- | --- |\n| InProgress | Sesja aktywna. |\n| Succeeded | Sesja przetworzona poprawnie. W trakcie przetwarzania sesji nie wystąpiły żadne błędy, ale część faktur nadal mogła zostać odrzucona. |\n| Failed | Sesja nie przetworzona z powodu błędów. Na etapie rozpoczynania lub kończenia sesji wystąpiły błędy, które nie pozwoliły na jej poprawne przetworzenie. |\n| Cancelled | Sesja anulowania. Został przekroczony czas na wysyłkę w sesji wsadowej, lub nie przesłano żadnych faktur w sesji interaktywnej. |\n"
+ },
+ "CurrencyCode": {
+ "enum": [
+ "AED",
+ "AFN",
+ "ALL",
+ "AMD",
+ "ANG",
+ "AOA",
+ "ARS",
+ "AUD",
+ "AWG",
+ "AZN",
+ "BAM",
+ "BBD",
+ "BDT",
+ "BGN",
+ "BHD",
+ "BIF",
+ "BMD",
+ "BND",
+ "BOB",
+ "BOV",
+ "BRL",
+ "BSD",
+ "BTN",
+ "BWP",
+ "BYN",
+ "BZD",
+ "CAD",
+ "CDF",
+ "CHE",
+ "CHF",
+ "CHW",
+ "CLF",
+ "CLP",
+ "CNY",
+ "COP",
+ "COU",
+ "CRC",
+ "CUC",
+ "CUP",
+ "CVE",
+ "CZK",
+ "DJF",
+ "DKK",
+ "DOP",
+ "DZD",
+ "EGP",
+ "ERN",
+ "ETB",
+ "EUR",
+ "FJD",
+ "FKP",
+ "GBP",
+ "GEL",
+ "GGP",
+ "GHS",
+ "GIP",
+ "GMD",
+ "GNF",
+ "GTQ",
+ "GYD",
+ "HKD",
+ "HNL",
+ "HRK",
+ "HTG",
+ "HUF",
+ "IDR",
+ "ILS",
+ "IMP",
+ "INR",
+ "IQD",
+ "IRR",
+ "ISK",
+ "JEP",
+ "JMD",
+ "JOD",
+ "JPY",
+ "KES",
+ "KGS",
+ "KHR",
+ "KMF",
+ "KPW",
+ "KRW",
+ "KWD",
+ "KYD",
+ "KZT",
+ "LAK",
+ "LBP",
+ "LKR",
+ "LRD",
+ "LSL",
+ "LYD",
+ "MAD",
+ "MDL",
+ "MGA",
+ "MKD",
+ "MMK",
+ "MNT",
+ "MOP",
+ "MRU",
+ "MUR",
+ "MVR",
+ "MWK",
+ "MXN",
+ "MXV",
+ "MYR",
+ "MZN",
+ "NAD",
+ "NGN",
+ "NIO",
+ "NOK",
+ "NPR",
+ "NZD",
+ "OMR",
+ "PAB",
+ "PEN",
+ "PGK",
+ "PHP",
+ "PKR",
+ "PLN",
+ "PYG",
+ "QAR",
+ "RON",
+ "RSD",
+ "RUB",
+ "RWF",
+ "SAR",
+ "SBD",
+ "SCR",
+ "SDG",
+ "SEK",
+ "SGD",
+ "SHP",
+ "SLL",
+ "SOS",
+ "SRD",
+ "SSP",
+ "STN",
+ "SVC",
+ "SYP",
+ "SZL",
+ "THB",
+ "TJS",
+ "TMT",
+ "TND",
+ "TOP",
+ "TRY",
+ "TTD",
+ "TWD",
+ "TZS",
+ "UAH",
+ "UGX",
+ "USD",
+ "USN",
+ "UYI",
+ "UYU",
+ "UYW",
+ "UZS",
+ "VES",
+ "VND",
+ "VUV",
+ "WST",
+ "XAF",
+ "XAG",
+ "XAU",
+ "XBA",
+ "XBB",
+ "XBC",
+ "XBD",
+ "XCD",
+ "XCG",
+ "XDR",
+ "XOF",
+ "XPD",
+ "XPF",
+ "XPT",
+ "XSU",
+ "XUA",
+ "XXX",
+ "YER",
+ "ZAR",
+ "ZMW",
+ "ZWL"
+ ],
+ "type": "string"
+ },
+ "EffectiveApiRateLimitValues": {
+ "required": [
+ "perHour",
+ "perMinute",
+ "perSecond"
+ ],
+ "type": "object",
+ "properties": {
+ "perSecond": {
+ "type": "integer",
+ "description": "Limit na sekundę.",
+ "format": "int32"
+ },
+ "perMinute": {
+ "type": "integer",
+ "description": "Limit na minutę.",
+ "format": "int32"
+ },
+ "perHour": {
+ "type": "integer",
+ "description": "Limit na godzinę.",
+ "format": "int32"
+ }
+ },
+ "additionalProperties": false
+ },
+ "EffectiveApiRateLimits": {
+ "required": [
+ "batchSession",
+ "invoiceDownload",
+ "invoiceExport",
+ "invoiceMetadata",
+ "invoiceSend",
+ "invoiceStatus",
+ "onlineSession",
+ "other",
+ "sessionInvoiceList",
+ "sessionList",
+ "sessionMisc"
+ ],
+ "type": "object",
+ "properties": {
+ "onlineSession": {
+ "required": [
+ "perSecond",
+ "perMinute",
+ "perHour"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/EffectiveApiRateLimitValues"
+ }
+ ],
+ "description": "Limity dla otwierania/zamykania sesji interaktywnych."
+ },
+ "batchSession": {
+ "required": [
+ "perSecond",
+ "perMinute",
+ "perHour"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/EffectiveApiRateLimitValues"
+ }
+ ],
+ "description": "Limity dla otwierania/zamykania sesji wsadowych."
+ },
+ "invoiceSend": {
+ "required": [
+ "perSecond",
+ "perMinute",
+ "perHour"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/EffectiveApiRateLimitValues"
+ }
+ ],
+ "description": "Limity dla wysyłki faktur."
+ },
+ "invoiceStatus": {
+ "required": [
+ "perSecond",
+ "perMinute",
+ "perHour"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/EffectiveApiRateLimitValues"
+ }
+ ],
+ "description": "Limity dla pobierania statusu faktury z sesji."
+ },
+ "sessionList": {
+ "required": [
+ "perSecond",
+ "perMinute",
+ "perHour"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/EffectiveApiRateLimitValues"
+ }
+ ],
+ "description": "Limity dla pobierania listy sesji."
+ },
+ "sessionInvoiceList": {
+ "required": [
+ "perSecond",
+ "perMinute",
+ "perHour"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/EffectiveApiRateLimitValues"
+ }
+ ],
+ "description": "Limity dla pobierania listy faktur w sesji."
+ },
+ "sessionMisc": {
+ "required": [
+ "perSecond",
+ "perMinute",
+ "perHour"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/EffectiveApiRateLimitValues"
+ }
+ ],
+ "description": "Limity dla pozostałych operacji w ramach sesji."
+ },
+ "invoiceMetadata": {
+ "required": [
+ "perSecond",
+ "perMinute",
+ "perHour"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/EffectiveApiRateLimitValues"
+ }
+ ],
+ "description": "Limity dla pobierania metadanych faktur."
+ },
+ "invoiceExport": {
+ "required": [
+ "perSecond",
+ "perMinute",
+ "perHour"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/EffectiveApiRateLimitValues"
+ }
+ ],
+ "description": "Limity dla eksportu paczku faktur."
+ },
+ "invoiceDownload": {
+ "required": [
+ "perSecond",
+ "perMinute",
+ "perHour"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/EffectiveApiRateLimitValues"
+ }
+ ],
+ "description": "Limity dla pobierania faktur po numerze KSeF."
+ },
+ "other": {
+ "required": [
+ "perSecond",
+ "perMinute",
+ "perHour"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/EffectiveApiRateLimitValues"
+ }
+ ],
+ "description": "Limity dla pozostałych operacji API."
+ }
+ },
+ "additionalProperties": false
+ },
+ "EffectiveContextLimits": {
+ "required": [
+ "batchSession",
+ "onlineSession"
+ ],
+ "type": "object",
+ "properties": {
+ "onlineSession": {
+ "required": [
+ "maxInvoiceSizeInMB",
+ "maxInvoiceWithAttachmentSizeInMB",
+ "maxInvoices"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/OnlineSessionEffectiveContextLimits"
+ }
+ ],
+ "description": "Limity dla sesji interaktywnych."
+ },
+ "batchSession": {
+ "required": [
+ "maxInvoiceSizeInMB",
+ "maxInvoiceWithAttachmentSizeInMB",
+ "maxInvoices"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BatchSessionEffectiveContextLimits"
+ }
+ ],
+ "description": "Limity dla sesji wsadowych."
+ }
+ },
+ "additionalProperties": false
+ },
+ "EffectiveSubjectLimits": {
+ "type": "object",
+ "properties": {
+ "enrollment": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/EnrollmentEffectiveSubjectLimits"
+ }
+ ],
+ "nullable": true
+ },
+ "certificate": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/CertificateEffectiveSubjectLimits"
+ }
+ ],
+ "nullable": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "EncryptionInfo": {
+ "required": [
+ "encryptedSymmetricKey",
+ "initializationVector"
+ ],
+ "type": "object",
+ "properties": {
+ "encryptedSymmetricKey": {
+ "type": "string",
+ "description": "Klucz symetryczny o długości 32 bajtów, zaszyfrowany algorytmem RSA (Padding: OAEP z SHA-256), zakodowany w formacie Base64.\n\n[Klucz publiczny Ministersta Finansów](/docs/v2/index.html#tag/Certyfikaty-klucza-publicznego)",
+ "format": "byte"
+ },
+ "initializationVector": {
+ "type": "string",
+ "description": "Wektor inicjalizujący (IV) o długości 16 bajtów, używany do szyfrowania symetrycznego, zakodowany w formacie Base64.",
+ "format": "byte"
+ }
+ },
+ "additionalProperties": false
+ },
+ "EnrollCertificateRequest": {
+ "required": [
+ "certificateName",
+ "certificateType",
+ "csr"
+ ],
+ "type": "object",
+ "properties": {
+ "certificateName": {
+ "maxLength": 100,
+ "minLength": 5,
+ "pattern": "^[a-zA-Z0-9_\\-\\ ąćęłńóśźżĄĆĘŁŃÓŚŹŻ]+$",
+ "type": "string",
+ "description": "Nazwa własna certyfikatu."
+ },
+ "certificateType": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/KsefCertificateType"
+ }
+ ],
+ "description": "Typ certyfikatu.\n| Wartość | Opis |\n| --- | --- |\n| Authentication | Certyfikat używany do uwierzytelnienia w systemie. |\n| Offline | Certyfikat używany wyłącznie do potwierdzania autentyczności wystawcy i integralności faktury w trybie offline |\n"
+ },
+ "csr": {
+ "type": "string",
+ "description": "Wniosek certyfikacyjny PKCS#10 (CSR) w formacie DER zakodowany w Base64.",
+ "format": "byte"
+ },
+ "validFrom": {
+ "type": "string",
+ "description": "Data rozpoczęcia ważności certyfikatu.\nJeśli nie zostanie podana, certyfikat będzie ważny od momentu jego wystawienia.",
+ "format": "date-time",
+ "nullable": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "EnrollCertificateResponse": {
+ "required": [
+ "referenceNumber",
+ "timestamp"
+ ],
+ "type": "object",
+ "properties": {
+ "referenceNumber": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ReferenceNumber"
+ }
+ ],
+ "description": "Numer referencyjny wniosku certyfikacyjnego."
+ },
+ "timestamp": {
+ "type": "string",
+ "description": "Data złożenia wniosku certyfikacyjnego.",
+ "format": "date-time"
+ }
+ },
+ "additionalProperties": false
+ },
+ "EnrollmentEffectiveSubjectLimits": {
+ "type": "object",
+ "properties": {
+ "maxEnrollments": {
+ "type": "integer",
+ "format": "int32"
+ }
+ },
+ "additionalProperties": false
+ },
+ "EnrollmentSubjectLimitsOverride": {
+ "type": "object",
+ "properties": {
+ "maxEnrollments": {
+ "minimum": 0,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "format": "int32",
+ "nullable": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "EntityAuthorizationGrant": {
+ "required": [
+ "authorizationScope",
+ "authorizedEntityIdentifier",
+ "authorizingEntityIdentifier",
+ "description",
+ "id",
+ "startDate"
+ ],
+ "type": "object",
+ "properties": {
+ "id": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PermissionId"
+ }
+ ],
+ "description": "Identyfikator uprawnienia."
+ },
+ "authorIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/EntityAuthorizationsAuthorIdentifier"
+ }
+ ],
+ "description": "Identyfikator osoby nadającej uprawnienie.\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |\n| Pesel | 11 cyfrowy numer PESEL |\n| Fingerprint | Odcisk palca certyfikatu |",
+ "nullable": true
+ },
+ "authorizedEntityIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/EntityAuthorizationsAuthorizedEntityIdentifier"
+ }
+ ],
+ "description": "Identyfikator podmiotu uprawnionego.\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |\n| PeppolId | Identyfikator dostawcy usług Peppol |"
+ },
+ "authorizingEntityIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/EntityAuthorizationsAuthorizingEntityIdentifier"
+ }
+ ],
+ "description": "Identyfikator podmiotu uprawniającego.\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |"
+ },
+ "authorizationScope": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/InvoicePermissionType"
+ }
+ ],
+ "description": "Rodzaj uprawnienia."
+ },
+ "description": {
+ "maxLength": 256,
+ "minLength": 5,
+ "type": "string",
+ "description": "Opis uprawnienia."
+ },
+ "startDate": {
+ "type": "string",
+ "description": "Data rozpoczęcia obowiązywania uprawnienia.",
+ "format": "date-time"
+ }
+ },
+ "additionalProperties": false
+ },
+ "EntityAuthorizationPermissionType": {
+ "enum": [
+ "SelfInvoicing",
+ "RRInvoicing",
+ "TaxRepresentative",
+ "PefInvoicing"
+ ],
+ "type": "string"
+ },
+ "EntityAuthorizationPermissionsGrantRequest": {
+ "required": [
+ "description",
+ "permission",
+ "subjectIdentifier"
+ ],
+ "type": "object",
+ "properties": {
+ "subjectIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/EntityAuthorizationPermissionsSubjectIdentifier"
+ }
+ ],
+ "description": "Identyfikator podmiotu uprawnianego.\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |\n| PeppolId | Identyfikator dostawcy usług Peppol |"
+ },
+ "permission": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/EntityAuthorizationPermissionType"
+ }
+ ],
+ "description": "Rodzaj uprawnienia."
+ },
+ "description": {
+ "maxLength": 256,
+ "minLength": 5,
+ "type": "string",
+ "description": "Opis uprawnienia"
+ }
+ },
+ "additionalProperties": false
+ },
+ "EntityAuthorizationPermissionsQueryRequest": {
+ "required": [
+ "queryType"
+ ],
+ "type": "object",
+ "properties": {
+ "authorizingIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/EntityAuthorizationsAuthorizingEntityIdentifier"
+ }
+ ],
+ "description": "Identyfikator podmiotu uprawniającego.\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |",
+ "nullable": true
+ },
+ "authorizedIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/EntityAuthorizationsAuthorizedEntityIdentifier"
+ }
+ ],
+ "description": "Identyfikator podmiotu uprawnionego.\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |\n| PeppolId | Identyfikator dostawcy usług Peppol |",
+ "nullable": true
+ },
+ "queryType": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/QueryType"
+ }
+ ],
+ "description": "Typ zapytania.\n| Type | Value |\n| --- | --- |\n| Granted | Uprawnienia nadane innym podmiotom |\n| Received | Uprawnienia otrzymane od innych podmiotów |"
+ },
+ "permissionTypes": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/InvoicePermissionType"
+ },
+ "description": "Lista rodzajów wyszukiwanych uprawnień.",
+ "nullable": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "EntityAuthorizationPermissionsSubjectIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "type": "object",
+ "properties": {
+ "type": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/EntityAuthorizationPermissionsSubjectIdentifierType"
+ }
+ ],
+ "description": "Typ identyfikatora."
+ },
+ "value": {
+ "type": "string",
+ "description": "Wartość identyfikatora."
+ }
+ },
+ "additionalProperties": false,
+ "description": "Identyfikator podmiotu uprawnianego.\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |\n| PeppolId | Identyfikator dostawcy usług Peppol |"
+ },
+ "EntityAuthorizationPermissionsSubjectIdentifierType": {
+ "enum": [
+ "Nip",
+ "PeppolId"
+ ],
+ "type": "string"
+ },
+ "EntityAuthorizationsAuthorIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "type": "object",
+ "properties": {
+ "type": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/EntityAuthorizationsAuthorIdentifierType"
+ }
+ ],
+ "description": "Typ identyfikatora."
+ },
+ "value": {
+ "type": "string",
+ "description": "Wartość identyfikatora."
+ }
+ },
+ "additionalProperties": false,
+ "description": "Identyfikator osoby nadającej uprawnienie.\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |\n| Pesel | 11 cyfrowy numer PESEL |\n| Fingerprint | Odcisk palca certyfikatu |"
+ },
+ "EntityAuthorizationsAuthorIdentifierType": {
+ "enum": [
+ "Nip",
+ "Pesel",
+ "Fingerprint"
+ ],
+ "type": "string"
+ },
+ "EntityAuthorizationsAuthorizedEntityIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "type": "object",
+ "properties": {
+ "type": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/EntityAuthorizationsAuthorizedEntityIdentifierType"
+ }
+ ],
+ "description": "Typ identyfikatora."
+ },
+ "value": {
+ "type": "string",
+ "description": "Wartość identyfikatora."
+ }
+ },
+ "additionalProperties": false,
+ "description": "Identyfikator podmiotu uprawnionego.\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |\n| PeppolId | Identyfikator dostawcy usług Peppol |"
+ },
+ "EntityAuthorizationsAuthorizedEntityIdentifierType": {
+ "enum": [
+ "Nip",
+ "PeppolId"
+ ],
+ "type": "string"
+ },
+ "EntityAuthorizationsAuthorizingEntityIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "type": "object",
+ "properties": {
+ "type": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/EntityAuthorizationsAuthorizingEntityIdentifierType"
+ }
+ ],
+ "description": "Typ identyfikatora."
+ },
+ "value": {
+ "type": "string",
+ "description": "Wartość identyfikatora."
+ }
+ },
+ "additionalProperties": false,
+ "description": "Identyfikator podmiotu uprawniającego.\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |"
+ },
+ "EntityAuthorizationsAuthorizingEntityIdentifierType": {
+ "enum": [
+ "Nip"
+ ],
+ "type": "string"
+ },
+ "EntityPermission": {
+ "required": [
+ "type"
+ ],
+ "type": "object",
+ "properties": {
+ "type": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/EntityPermissionType"
+ }
+ ],
+ "description": "Rodzaj uprawnienia."
+ },
+ "canDelegate": {
+ "type": "boolean",
+ "description": "Flaga pozwalająca na pośrednie przekazywanie danego uprawnienia"
+ }
+ },
+ "additionalProperties": false
+ },
+ "EntityPermissionType": {
+ "enum": [
+ "InvoiceWrite",
+ "InvoiceRead"
+ ],
+ "type": "string"
+ },
+ "EntityPermissionsGrantRequest": {
+ "required": [
+ "description",
+ "permissions",
+ "subjectIdentifier"
+ ],
+ "type": "object",
+ "properties": {
+ "subjectIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/EntityPermissionsSubjectIdentifier"
+ }
+ ],
+ "description": "Identyfikator podmiotu.\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |"
+ },
+ "permissions": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/EntityPermission"
+ },
+ "description": "Lista nadawanych uprawnień. Każda wartość może wystąpić tylko raz."
+ },
+ "description": {
+ "maxLength": 256,
+ "minLength": 5,
+ "type": "string",
+ "description": "Opis uprawnienia"
+ }
+ },
+ "additionalProperties": false
+ },
+ "EntityPermissionsSubjectIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "type": "object",
+ "properties": {
+ "type": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/EntityPermissionsSubjectIdentifierType"
+ }
+ ],
+ "description": "Typ identyfikatora."
+ },
+ "value": {
+ "type": "string",
+ "description": "Wartość identyfikatora."
+ }
+ },
+ "additionalProperties": false,
+ "description": "Identyfikator podmiotu.\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |"
+ },
+ "EntityPermissionsSubjectIdentifierType": {
+ "enum": [
+ "Nip"
+ ],
+ "type": "string"
+ },
+ "EntityPermissionsSubordinateEntityIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "type": "object",
+ "properties": {
+ "type": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/EntityPermissionsSubordinateEntityIdentifierType"
+ }
+ ],
+ "description": "Typ identyfikatora."
+ },
+ "value": {
+ "type": "string",
+ "description": "Wartość identyfikatora."
+ }
+ },
+ "additionalProperties": false,
+ "description": "Identyfikator podmiotu podrzędnego.\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |"
+ },
+ "EntityPermissionsSubordinateEntityIdentifierType": {
+ "enum": [
+ "Nip"
+ ],
+ "type": "string"
+ },
+ "EntityRole": {
+ "required": [
+ "description",
+ "role",
+ "startDate"
+ ],
+ "type": "object",
+ "properties": {
+ "parentEntityIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/EntityRolesParentEntityIdentifier"
+ }
+ ],
+ "description": "Identyfikator podmiotu nadrzędnego.\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |",
+ "nullable": true
+ },
+ "role": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/EntityRoleType"
+ }
+ ],
+ "description": "Typ roli - powiązania z podmiotem nadrzędnym."
+ },
+ "description": {
+ "maxLength": 256,
+ "minLength": 5,
+ "type": "string",
+ "description": "Opis roli."
+ },
+ "startDate": {
+ "type": "string",
+ "description": "Data rozpoczęcia obowiązywania roli.",
+ "format": "date-time"
+ }
+ },
+ "additionalProperties": false
+ },
+ "EntityRoleType": {
+ "enum": [
+ "CourtBailiff",
+ "EnforcementAuthority",
+ "LocalGovernmentUnit",
+ "LocalGovernmentSubUnit",
+ "VatGroupUnit",
+ "VatGroupSubUnit"
+ ],
+ "type": "string"
+ },
+ "EntityRolesParentEntityIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "type": "object",
+ "properties": {
+ "type": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/EntityRolesParentEntityIdentifierType"
+ }
+ ],
+ "description": "Typ identyfikatora."
+ },
+ "value": {
+ "type": "string",
+ "description": "Wartość identyfikatora."
+ }
+ },
+ "additionalProperties": false,
+ "description": "Identyfikator podmiotu nadrzędnego.\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |"
+ },
+ "EntityRolesParentEntityIdentifierType": {
+ "enum": [
+ "Nip"
+ ],
+ "type": "string"
+ },
+ "EuEntityAdministrationPermissionsContextIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "type": "object",
+ "properties": {
+ "type": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/EuEntityAdministrationPermissionsContextIdentifierType"
+ }
+ ],
+ "description": "Typ identyfikatora."
+ },
+ "value": {
+ "type": "string",
+ "description": "Wartość identyfikatora."
+ }
+ },
+ "additionalProperties": false,
+ "description": "Identyfikator kontekstu złożonego.\n| Type | Value |\n| --- | --- |\n| NipVatUe | Dwuczłonowy identyfikator składający się z numeru NIP i numeru VAT-UE: `{nip}-{vat_ue}` |"
+ },
+ "EuEntityAdministrationPermissionsContextIdentifierType": {
+ "enum": [
+ "NipVatUe"
+ ],
+ "type": "string"
+ },
+ "EuEntityAdministrationPermissionsGrantRequest": {
+ "required": [
+ "contextIdentifier",
+ "description",
+ "euEntityName",
+ "subjectIdentifier"
+ ],
+ "type": "object",
+ "properties": {
+ "subjectIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/EuEntityAdministrationPermissionsSubjectIdentifier"
+ }
+ ],
+ "description": "Identyfikator podmiotu uprawnionego.\n| Type | Value |\n| --- | --- |\n| Fingerprint | Odcisk palca certyfikatu |"
+ },
+ "contextIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/EuEntityAdministrationPermissionsContextIdentifier"
+ }
+ ],
+ "description": "Identyfikator kontekstu złożonego.\n| Type | Value |\n| --- | --- |\n| NipVatUe | Dwuczłonowy identyfikator składający się z numeru NIP i numeru VAT-UE: `{nip}-{vat_ue}` |"
+ },
+ "description": {
+ "maxLength": 256,
+ "minLength": 5,
+ "type": "string",
+ "description": "Opis uprawnienia"
+ },
+ "euEntityName": {
+ "maxLength": 256,
+ "minLength": 5,
+ "type": "string",
+ "description": "Nazwa i adres podmiotu unijnego w formacie: \n`{euSubjectName}, {euSubjectAddress}`"
+ }
+ },
+ "additionalProperties": false
+ },
+ "EuEntityAdministrationPermissionsSubjectIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "type": "object",
+ "properties": {
+ "type": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/EuEntityAdministrationPermissionsSubjectIdentifierType"
+ }
+ ],
+ "description": "Typ identyfikatora."
+ },
+ "value": {
+ "type": "string",
+ "description": "Wartość identyfikatora."
+ }
+ },
+ "additionalProperties": false,
+ "description": "Identyfikator podmiotu uprawnionego.\n| Type | Value |\n| --- | --- |\n| Fingerprint | Odcisk palca certyfikatu |"
+ },
+ "EuEntityAdministrationPermissionsSubjectIdentifierType": {
+ "enum": [
+ "Fingerprint"
+ ],
+ "type": "string"
+ },
+ "EuEntityPermission": {
+ "required": [
+ "authorIdentifier",
+ "authorizedFingerprintIdentifier",
+ "description",
+ "euEntityName",
+ "id",
+ "permissionScope",
+ "startDate",
+ "vatUeIdentifier"
+ ],
+ "type": "object",
+ "properties": {
+ "id": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PermissionId"
+ }
+ ],
+ "description": "Identyfikator uprawnienia."
+ },
+ "authorIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/EuEntityPermissionsAuthorIdentifier"
+ }
+ ],
+ "description": "Identyfikator uprawniającego.\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |\n| Pesel | 11 cyfrowy numer PESEL |\n| Fingerprint | Odcisk palca certyfikatu |"
+ },
+ "vatUeIdentifier": {
+ "type": "string",
+ "description": "Identyfikator podmiotu unijnego."
+ },
+ "euEntityName": {
+ "maxLength": 256,
+ "minLength": 5,
+ "type": "string",
+ "description": "Nazwa podmiotu unijnego."
+ },
+ "authorizedFingerprintIdentifier": {
+ "type": "string",
+ "description": "Uprawniony odcisk palca certyfikatu."
+ },
+ "permissionScope": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/EuEntityPermissionsQueryPermissionType"
+ }
+ ],
+ "description": "Uprawnienie."
+ },
+ "description": {
+ "maxLength": 256,
+ "minLength": 5,
+ "type": "string",
+ "description": "Opis uprawnienia."
+ },
+ "startDate": {
+ "type": "string",
+ "description": "Data rozpoczęcia obowiązywania uprawnienia.",
+ "format": "date-time"
+ }
+ },
+ "additionalProperties": false
+ },
+ "EuEntityPermissionType": {
+ "enum": [
+ "InvoiceWrite",
+ "InvoiceRead"
+ ],
+ "type": "string"
+ },
+ "EuEntityPermissionsAuthorIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "type": "object",
+ "properties": {
+ "type": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/EuEntityPermissionsAuthorIdentifierType"
+ }
+ ],
+ "description": "Typ identyfikatora."
+ },
+ "value": {
+ "type": "string",
+ "description": "Wartość identyfikatora."
+ }
+ },
+ "additionalProperties": false,
+ "description": "Identyfikator uprawniającego.\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |\n| Pesel | 11 cyfrowy numer PESEL |\n| Fingerprint | Odcisk palca certyfikatu |"
+ },
+ "EuEntityPermissionsAuthorIdentifierType": {
+ "enum": [
+ "Nip",
+ "Pesel",
+ "Fingerprint"
+ ],
+ "type": "string"
+ },
+ "EuEntityPermissionsGrantRequest": {
+ "required": [
+ "description",
+ "permissions",
+ "subjectIdentifier"
+ ],
+ "type": "object",
+ "properties": {
+ "subjectIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/EuEntityPermissionsSubjectIdentifier"
+ }
+ ],
+ "description": "Identyfikator podmiotu uprawnianego.\n| Type | Value |\n| --- | --- |\n| Fingerprint | Odcisk palca certyfikatu |"
+ },
+ "permissions": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/EuEntityPermissionType"
+ },
+ "description": "Lista nadawanych uprawnień. Każda wartość może wystąpić tylko raz."
+ },
+ "description": {
+ "maxLength": 256,
+ "minLength": 5,
+ "type": "string",
+ "description": "Opis uprawnienia"
+ }
+ },
+ "additionalProperties": false
+ },
+ "EuEntityPermissionsQueryPermissionType": {
+ "enum": [
+ "VatUeManage",
+ "InvoiceWrite",
+ "InvoiceRead",
+ "Introspection"
+ ],
+ "type": "string"
+ },
+ "EuEntityPermissionsQueryRequest": {
+ "type": "object",
+ "properties": {
+ "vatUeIdentifier": {
+ "pattern": "^(ATU\\d{8}|BE[01]{1}\\d{9}|BG\\d{9,10}|CY\\d{8}[A-Z]|CZ\\d{8,10}|DE\\d{9}|DK\\d{8}|EE\\d{9}|EL\\d{9}|ES([A-Z]\\d{8}|\\d{8}[A-Z]|[A-Z]\\d{7}[A-Z])|FI\\d{8}|FR[A-Z0-9]{2}\\d{9}|HR\\d{11}|HU\\d{8}|IE(\\d{7}[A-Z]{2}|\\d[A-Z0-9+*]\\d{5}[A-Z])|IT\\d{11}|LT(\\d{9}|\\d{12})|LU\\d{8}|LV\\d{11}|MT\\d{8}|NL[A-Z0-9+*]{12}|PT\\d{9}|RO\\d{2,10}|SE\\d{12}|SI\\d{8}|SK\\d{10}|XI((\\d{9}|\\d{12})|(GD|HA)\\d{3}))$",
+ "type": "string",
+ "description": "Wartość identyfikatora (numeru identyfikacyjnego VAT) podmiotu unijnego.",
+ "nullable": true
+ },
+ "authorizedFingerprintIdentifier": {
+ "pattern": "^[0-9A-F]{64}$",
+ "type": "string",
+ "description": "Odcisk palca certyfikatu kwalifikowanego uprawnionego.",
+ "nullable": true
+ },
+ "permissionTypes": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/EuEntityPermissionsQueryPermissionType"
+ },
+ "description": "Lista rodzajów wyszukiwanych uprawnień.",
+ "nullable": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "EuEntityPermissionsSubjectIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "type": "object",
+ "properties": {
+ "type": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/EuEntityPermissionsSubjectIdentifierType"
+ }
+ ],
+ "description": "Typ identyfikatora."
+ },
+ "value": {
+ "type": "string",
+ "description": "Wartość identyfikatora."
+ }
+ },
+ "additionalProperties": false,
+ "description": "Identyfikator podmiotu uprawnianego.\n| Type | Value |\n| --- | --- |\n| Fingerprint | Odcisk palca certyfikatu |"
+ },
+ "EuEntityPermissionsSubjectIdentifierType": {
+ "enum": [
+ "Fingerprint"
+ ],
+ "type": "string"
+ },
+ "ExceptionDetails": {
+ "type": "object",
+ "properties": {
+ "exceptionCode": {
+ "type": "integer",
+ "format": "int32"
+ },
+ "exceptionDescription": {
+ "type": "string",
+ "nullable": true
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "nullable": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "ExceptionInfo": {
+ "type": "object",
+ "properties": {
+ "exceptionDetailList": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/ExceptionDetails"
+ },
+ "nullable": true
+ },
+ "referenceNumber": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ReferenceNumber"
+ }
+ ],
+ "nullable": true
+ },
+ "serviceCode": {
+ "type": "string",
+ "nullable": true
+ },
+ "serviceCtx": {
+ "type": "string",
+ "nullable": true
+ },
+ "serviceName": {
+ "type": "string",
+ "nullable": true
+ },
+ "timestamp": {
+ "type": "string",
+ "format": "date-time"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ExceptionResponse": {
+ "type": "object",
+ "properties": {
+ "exception": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ExceptionInfo"
+ }
+ ],
+ "nullable": true
+ }
+ },
+ "additionalProperties": false,
+ "example": {
+ "Exception": {
+ "ExceptionDetailList": [
+ {
+ "ExceptionCode": 12345,
+ "ExceptionDescription": "Opis błędu.",
+ "Details": [
+ "Opcjonalne dodatkowe szczegóły błędu."
+ ]
+ }
+ ],
+ "ReferenceNumber": "a1b2c3d4-e5f6-4789-ab12-cd34ef567890",
+ "ServiceCode": "00-c02cc3747020c605be02159bf3324f0e-eee7647dc67aa74a-00",
+ "ServiceCtx": "srvABCDA",
+ "ServiceName": "Undefined",
+ "Timestamp": "2025-10-11T12:23:56.0154302"
+ }
+ }
+ },
+ "ExportInvoicesResponse": {
+ "required": [
+ "referenceNumber"
+ ],
+ "type": "object",
+ "properties": {
+ "referenceNumber": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ReferenceNumber"
+ }
+ ],
+ "description": "Numer referencyjny eksportu faktur."
+ }
+ },
+ "additionalProperties": false
+ },
+ "FormCode": {
+ "required": [
+ "schemaVersion",
+ "systemCode",
+ "value"
+ ],
+ "type": "object",
+ "properties": {
+ "systemCode": {
+ "type": "string",
+ "description": "Kod systemowy"
+ },
+ "schemaVersion": {
+ "type": "string",
+ "description": "Wersja schematu"
+ },
+ "value": {
+ "type": "string",
+ "description": "Wartość"
+ }
+ },
+ "additionalProperties": false
+ },
+ "GenerateTokenRequest": {
+ "required": [
+ "description",
+ "permissions"
+ ],
+ "type": "object",
+ "properties": {
+ "permissions": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/TokenPermissionType"
+ },
+ "description": "Uprawnienia przypisane tokenowi."
+ },
+ "description": {
+ "maxLength": 256,
+ "minLength": 5,
+ "type": "string",
+ "description": "Opis tokena."
+ }
+ },
+ "additionalProperties": false
+ },
+ "GenerateTokenResponse": {
+ "required": [
+ "referenceNumber",
+ "token"
+ ],
+ "type": "object",
+ "properties": {
+ "referenceNumber": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ReferenceNumber"
+ }
+ ],
+ "description": "Numer referencyjny tokena KSeF."
+ },
+ "token": {
+ "maxLength": 160,
+ "type": "string",
+ "description": "Token KSeF."
+ }
+ },
+ "additionalProperties": false
+ },
+ "IndirectPermissionType": {
+ "enum": [
+ "InvoiceRead",
+ "InvoiceWrite"
+ ],
+ "type": "string"
+ },
+ "IndirectPermissionsGrantRequest": {
+ "required": [
+ "description",
+ "permissions",
+ "subjectIdentifier"
+ ],
+ "type": "object",
+ "properties": {
+ "subjectIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/IndirectPermissionsSubjectIdentifier"
+ }
+ ],
+ "description": "Identyfikator osoby fizycznej.\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |\n| Pesel | 11 cyfrowy numer PESEL |\n| Fingerprint | Odcisk palca certyfikatu |"
+ },
+ "targetIdentifier": {
+ "required": [
+ "type"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/IndirectPermissionsTargetIdentifier"
+ }
+ ],
+ "description": "Identyfikator kontekstu klienta. Nie przekazanie identyfikatora oznacza, że uprawnienie nadane w sposób pośredni jest typu generalnego.\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |\n| AllPartners | Identyfikator oznaczający, że uprawnienie nadane w sposób pośredni jest typu generalnego |\n| InternalId | Dwuczłonowy identyfikator składający się z numeru NIP i 5 cyfr: `{nip}-{5_cyfr}` |",
+ "nullable": true
+ },
+ "permissions": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/IndirectPermissionType"
+ },
+ "description": "Lista nadawanych uprawnień. Każda wartość może wystąpić tylko raz."
+ },
+ "description": {
+ "maxLength": 256,
+ "minLength": 5,
+ "type": "string",
+ "description": "Opis uprawnienia"
+ }
+ },
+ "additionalProperties": false
+ },
+ "IndirectPermissionsSubjectIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "type": "object",
+ "properties": {
+ "type": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/IndirectPermissionsSubjectIdentifierType"
+ }
+ ],
+ "description": "Typ identyfikatora."
+ },
+ "value": {
+ "type": "string",
+ "description": "Wartość identyfikatora."
+ }
+ },
+ "additionalProperties": false,
+ "description": "Identyfikator osoby fizycznej.\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |\n| Pesel | 11 cyfrowy numer PESEL |\n| Fingerprint | Odcisk palca certyfikatu |"
+ },
+ "IndirectPermissionsSubjectIdentifierType": {
+ "enum": [
+ "Nip",
+ "Pesel",
+ "Fingerprint"
+ ],
+ "type": "string"
+ },
+ "IndirectPermissionsTargetIdentifier": {
+ "required": [
+ "type"
+ ],
+ "type": "object",
+ "properties": {
+ "type": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/IndirectPermissionsTargetIdentifierType"
+ }
+ ],
+ "description": "Typ identyfikatora."
+ },
+ "value": {
+ "type": "string",
+ "description": "Wartość identyfikatora. W przypadku typu AllPartners należy pozostawić puste. W pozostałych przypadkach pole jest wymagane.",
+ "nullable": true
+ }
+ },
+ "additionalProperties": false,
+ "description": "Identyfikator kontekstu klienta. Nie przekazanie identyfikatora oznacza, że uprawnienie nadane w sposób pośredni jest typu generalnego.\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |\n| AllPartners | Identyfikator oznaczający, że uprawnienie nadane w sposób pośredni jest typu generalnego |\n| InternalId | Dwuczłonowy identyfikator składający się z numeru NIP i 5 cyfr: `{nip}-{5_cyfr}` |"
+ },
+ "IndirectPermissionsTargetIdentifierType": {
+ "enum": [
+ "Nip",
+ "AllPartners",
+ "InternalId"
+ ],
+ "type": "string"
+ },
+ "InitTokenAuthenticationRequest": {
+ "required": [
+ "challenge",
+ "contextIdentifier",
+ "encryptedToken"
+ ],
+ "type": "object",
+ "properties": {
+ "challenge": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/Challenge"
+ }
+ ],
+ "description": "Wygenerowany wcześniej challenge."
+ },
+ "contextIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/AuthenticationContextIdentifier"
+ }
+ ],
+ "description": "Indentyfikator kontekstu do którego następuje uwierzytelnienie."
+ },
+ "encryptedToken": {
+ "type": "string",
+ "description": "Zaszyfrowany token wraz z timestampem z challenge'a, w formacie `token|timestamp`.",
+ "format": "byte"
+ },
+ "authorizationPolicy": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/AuthorizationPolicy"
+ }
+ ],
+ "description": "Polityka autoryzacji żądań przy każdym użyciu tokena dostępu.",
+ "nullable": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "InternalId": {
+ "maxLength": 16,
+ "minLength": 16,
+ "pattern": "^[1-9]((\\d[1-9])|([1-9]\\d))\\d{7}-\\d{5}$",
+ "type": "string",
+ "description": "Identyfikator wewnętrzny, składający się z numeru NIP i 5 cyfr."
+ },
+ "InvoiceExportRequest": {
+ "required": [
+ "encryption",
+ "filters"
+ ],
+ "type": "object",
+ "properties": {
+ "encryption": {
+ "required": [
+ "encryptedSymmetricKey",
+ "initializationVector"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/EncryptionInfo"
+ }
+ ],
+ "description": "Informacje wymagane do zaszyfrowania wyniku zapytania."
+ },
+ "filters": {
+ "required": [
+ "subjectType",
+ "dateRange"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/InvoiceQueryFilters"
+ }
+ ],
+ "description": "Zestaw filtrów do wyszukiwania faktur."
+ }
+ },
+ "additionalProperties": false
+ },
+ "InvoiceExportStatusResponse": {
+ "required": [
+ "status"
+ ],
+ "type": "object",
+ "properties": {
+ "status": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/StatusInfo"
+ }
+ ],
+ "description": "Status eksportu.\n\n| Code | Description | Details |\n| --- | --- | --- |\n| 100 | Eksport faktur w toku | - |\n| 200 | Eksport faktur zakończony sukcesem | - |\n| 210 | Eksport faktur wygasł i nie jest już dostępny do pobrania | - |\n| 415 | Błąd odszyfrowania dostarczonego klucza | - |\n| 500 | Nieznany błąd ({statusCode}) | - |\n| 550 | Operacja została anulowana przez system | Przetwarzanie zostało przerwane z przyczyn wewnętrznych systemu. Spróbuj ponownie |"
+ },
+ "completedDate": {
+ "type": "string",
+ "description": "Data zakończenia przetwarzania żądania eksportu faktur.",
+ "format": "date-time",
+ "nullable": true
+ },
+ "packageExpirationDate": {
+ "type": "string",
+ "description": "Data wygaśnięcia paczki faktur przygotowanej do pobrania.\nPo upływie tej daty paczka nie będzie już dostępna do pobrania.",
+ "format": "date-time",
+ "nullable": true
+ },
+ "package": {
+ "required": [
+ "invoiceCount",
+ "size",
+ "parts",
+ "isTruncated"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/InvoicePackage"
+ }
+ ],
+ "description": "Dane paczki faktur przygotowanej do pobrania.",
+ "nullable": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "InvoiceMetadata": {
+ "required": [
+ "acquisitionDate",
+ "buyer",
+ "currency",
+ "formCode",
+ "grossAmount",
+ "hasAttachment",
+ "invoiceHash",
+ "invoiceNumber",
+ "invoiceType",
+ "invoicingDate",
+ "invoicingMode",
+ "isSelfInvoicing",
+ "issueDate",
+ "ksefNumber",
+ "netAmount",
+ "permanentStorageDate",
+ "seller",
+ "vatAmount"
+ ],
+ "type": "object",
+ "properties": {
+ "ksefNumber": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/KsefNumber"
+ }
+ ],
+ "description": "Numer KSeF faktury."
+ },
+ "invoiceNumber": {
+ "maxLength": 256,
+ "type": "string",
+ "description": "Numer faktury nadany przez wystawcę."
+ },
+ "issueDate": {
+ "type": "string",
+ "description": "Data wystawienia faktury.",
+ "format": "date"
+ },
+ "invoicingDate": {
+ "type": "string",
+ "description": "Data przyjęcia faktury w systemie KSeF (do dalszego przetwarzania).",
+ "format": "date-time"
+ },
+ "acquisitionDate": {
+ "type": "string",
+ "description": "Data nadania numeru KSeF.",
+ "format": "date-time"
+ },
+ "permanentStorageDate": {
+ "type": "string",
+ "description": "Data trwałego zapisu faktury w repozytorium systemu KSeF.",
+ "format": "date-time"
+ },
+ "seller": {
+ "required": [
+ "nip"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/InvoiceMetadataSeller"
+ }
+ ],
+ "description": "Dane identyfikujące sprzedawcę."
+ },
+ "buyer": {
+ "required": [
+ "identifier"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/InvoiceMetadataBuyer"
+ }
+ ],
+ "description": "Dane identyfikujące nabywcę."
+ },
+ "netAmount": {
+ "type": "number",
+ "description": "Łączna kwota netto.",
+ "format": "double"
+ },
+ "grossAmount": {
+ "type": "number",
+ "description": "Łączna kwota brutto.",
+ "format": "double"
+ },
+ "vatAmount": {
+ "type": "number",
+ "description": "Łączna kwota VAT.",
+ "format": "double"
+ },
+ "currency": {
+ "maxLength": 3,
+ "minLength": 3,
+ "type": "string",
+ "description": "Kod waluty."
+ },
+ "invoicingMode": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/InvoicingMode"
+ }
+ ],
+ "description": "Tryb fakturowania (online/offline)."
+ },
+ "invoiceType": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/InvoiceType"
+ }
+ ],
+ "description": "Rodzaj faktury.\n| Wartość | Opis |\n| --- | --- |\n| Vat | (FA) Podstawowa |\n| Zal | (FA) Zaliczkowa |\n| Kor | (FA) Korygująca |\n| Roz | (FA) Rozliczeniowa |\n| Upr | (FA) Uproszczona |\n| KorZal | (FA) Korygująca fakturę zaliczkową |\n| KorRoz | (FA) Korygująca fakturę rozliczeniową |\n| VatPef | (PEF) Podstawowowa |\n| VatPefSp | (PEF) Specjalizowana |\n| KorPef | (PEF) Korygująca |\n| VatRr | (RR) Podstawowa |\n| KorVatRr | (RR) Korygująca |\n"
+ },
+ "formCode": {
+ "required": [
+ "systemCode",
+ "schemaVersion",
+ "value"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/FormCode"
+ }
+ ],
+ "description": "Struktura dokumentu faktury.\n\nObsługiwane schematy:\n| SystemCode | SchemaVersion | Value |\n| --- | --- | --- |\n| FA (2) | 1-0E | FA |\n| FA (3) | 1-0E | FA |\n| PEF (3) | 2-1 | PEF |\n| PEF_KOR (3) | 2-1 | PEF |\n"
+ },
+ "isSelfInvoicing": {
+ "type": "boolean",
+ "description": "Czy faktura została wystawiona w trybie samofakturowania."
+ },
+ "hasAttachment": {
+ "type": "boolean",
+ "description": "Określa, czy faktura posiada załącznik."
+ },
+ "invoiceHash": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/Sha256HashBase64"
+ }
+ ],
+ "description": "Skrót SHA256 faktury."
+ },
+ "hashOfCorrectedInvoice": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/Sha256HashBase64"
+ }
+ ],
+ "description": "Skrót SHA256 korygowanej faktury.",
+ "nullable": true
+ },
+ "thirdSubjects": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/InvoiceMetadataThirdSubject"
+ },
+ "description": "Lista podmiotów trzecich.",
+ "nullable": true
+ },
+ "authorizedSubject": {
+ "required": [
+ "nip",
+ "role"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/InvoiceMetadataAuthorizedSubject"
+ }
+ ],
+ "description": "Podmiot upoważniony.",
+ "nullable": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "InvoiceMetadataAuthorizedSubject": {
+ "required": [
+ "nip",
+ "role"
+ ],
+ "type": "object",
+ "properties": {
+ "nip": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/Nip"
+ }
+ ],
+ "description": "Nip podmiotu upoważnionego"
+ },
+ "name": {
+ "maxLength": 512,
+ "type": "string",
+ "description": "Nazwa podmiotu upoważnionego.",
+ "nullable": true
+ },
+ "role": {
+ "type": "integer",
+ "description": "Rola podmiotu upoważnionego.\n| Wartość | Opis |\n| ---- | --- |\n| 1 | Organ egzekucyjny - w przypadku, o którym mowa w art. 106c pkt 1 ustawy |\n| 2 | Komornik sądowy - w przypadku, o którym mowa w art. 106c pkt 2 ustawy |\n| 3 | Przedstawiciel podatkowy - w przypadku gdy na fakturze występują dane przedstawiciela podatkowego, o którym mowa w art. 18a - 18d ustawy |",
+ "format": "int32"
+ }
+ },
+ "additionalProperties": false
+ },
+ "InvoiceMetadataBuyer": {
+ "required": [
+ "identifier"
+ ],
+ "type": "object",
+ "properties": {
+ "identifier": {
+ "required": [
+ "type"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/InvoiceMetadataBuyerIdentifier"
+ }
+ ],
+ "description": "Identyfikator nabywcy.\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |\n| VatUe | Identyfikator VAT UE podmiotu unijnego |\n| Other | Inny identyfikator|\n| None | Brak identyfikatora nabywcy |"
+ },
+ "name": {
+ "maxLength": 512,
+ "type": "string",
+ "description": "Nazwa nabywcy.",
+ "nullable": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "InvoiceMetadataBuyerIdentifier": {
+ "required": [
+ "type"
+ ],
+ "type": "object",
+ "properties": {
+ "type": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BuyerIdentifierType"
+ }
+ ],
+ "description": "Typ identyfikatora nabywcy.\n| Wartość | Opis |\n| --- | --- |\n| None | Brak identyfikatora nabywcy |\n| Other | Inny identyfikator |\n| Nip | 10 cyfrowy numer NIP |\n| VatUe | Identyfikator VAT UE podmiotu unijnego |\n"
+ },
+ "value": {
+ "type": "string",
+ "description": "Wartośc identyfikatora nabywcy.",
+ "nullable": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "InvoiceMetadataSeller": {
+ "required": [
+ "nip"
+ ],
+ "type": "object",
+ "properties": {
+ "nip": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/Nip"
+ }
+ ],
+ "description": "Nip sprzedawcy."
+ },
+ "name": {
+ "maxLength": 512,
+ "type": "string",
+ "description": "Nazwa sprzedawcy.",
+ "nullable": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "InvoiceMetadataThirdSubject": {
+ "required": [
+ "identifier",
+ "role"
+ ],
+ "type": "object",
+ "properties": {
+ "identifier": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/InvoiceMetadataThirdSubjectIdentifier"
+ }
+ ]
+ },
+ "name": {
+ "maxLength": 512,
+ "type": "string",
+ "description": "Nazwa podmiotu trzeciego.",
+ "nullable": true
+ },
+ "role": {
+ "type": "integer",
+ "description": "Rola podmiotu trzeciego.\n| Wartość | Opis |\n| ---- | --- |\n| 0 | Inna rola |\n| 1 | Faktor - w przypadku gdy na fakturze występują dane faktora |\n| 2 | Odbiorca - w przypadku gdy na fakturze występują dane jednostek wewnętrznych, oddziałów, wyodrębnionych w ramach nabywcy, które same nie stanowią nabywcy w rozumieniu ustawy |\n| 3 | Podmiot pierwotny - w przypadku gdy na fakturze występują dane podmiotu będącego w stosunku do podatnika podmiotem przejętym lub przekształconym, który dokonywał dostawy lub świadczył usługę. Z wyłączeniem przypadków, o których mowa w art. 106j ust.2 pkt 3 ustawy, gdy dane te wykazywane są w części Podmiot1K |\n| 4 | Dodatkowy nabywca - w przypadku gdy na fakturze występują dane kolejnych (innych niż wymieniony w części Podmiot2) nabywców |\n| 5 | Wystawca faktury - w przypadku gdy na fakturze występują dane podmiotu wystawiającego fakturę w imieniu podatnika. Nie dotyczy przypadku, gdy wystawcą faktury jest nabywca |\n| 6 | Dokonujący płatności - w przypadku gdy na fakturze występują dane podmiotu regulującego zobowiązanie w miejsce nabywcy |\n| 7 | Jednostka samorządu terytorialnego - wystawca |\n| 8 | Jednostka samorządu terytorialnego - odbiorca |\n| 9 | Członek grupy VAT - wystawca |\n| 10 | Członek grupy VAT - odbiorca |\n| 11 | Pracownik |",
+ "format": "int32"
+ }
+ },
+ "additionalProperties": false
+ },
+ "InvoiceMetadataThirdSubjectIdentifier": {
+ "required": [
+ "type"
+ ],
+ "type": "object",
+ "properties": {
+ "type": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ThirdSubjectIdentifierType"
+ }
+ ],
+ "description": "Typ identyfikatora podmiotu trzeciego.\n| Wartość | Opis |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |\n| InternalId | Identyfikator wewnętrzny, składający się z numeru NIP i 5 cyfr. |\n| VatUe | Identyfikator VAT UE podmiotu unijnego |\n| Other | Inny identyfikator |\n| None | Brak identyfikatora podmiotu trzeciego |\n"
+ },
+ "value": {
+ "type": "string",
+ "description": "Wartość identyfikatora podmiotu trzeciego.",
+ "nullable": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "InvoicePackage": {
+ "required": [
+ "invoiceCount",
+ "isTruncated",
+ "parts",
+ "size"
+ ],
+ "type": "object",
+ "properties": {
+ "invoiceCount": {
+ "maximum": 10000,
+ "exclusiveMaximum": false,
+ "minimum": 0,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "description": "Łączna liczba faktur w paczce.",
+ "format": "int64"
+ },
+ "size": {
+ "minimum": 0,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "description": "Rozmiar paczki w bajtach.",
+ "format": "int64"
+ },
+ "parts": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/InvoicePackagePart"
+ },
+ "description": "Lista dostępnych części paczki do pobrania."
+ },
+ "isTruncated": {
+ "type": "boolean",
+ "description": "Określa, czy wynik eksportu został ucięty z powodu przekroczenia limitu liczby faktur lub wielkości paczki."
+ },
+ "lastIssueDate": {
+ "type": "string",
+ "description": "Data wystawienia ostatniej faktury ujętej w paczce.\nPole występuje wyłącznie wtedy, gdy paczka została ucięta i eksport był filtrowany po typie daty `Issue`.",
+ "format": "date",
+ "nullable": true
+ },
+ "lastInvoicingDate": {
+ "type": "string",
+ "description": "Data przyjęcia ostatniej faktury ujętej w paczce.\nPole występuje wyłącznie wtedy, gdy paczka została ucięta i eksport był filtrowany po typie daty `Invoicing`.",
+ "format": "date-time",
+ "nullable": true
+ },
+ "lastPermanentStorageDate": {
+ "type": "string",
+ "description": "Data trwałego zapisu ostatniej faktury ujętej w paczce.\nPole występuje wyłącznie wtedy, gdy paczka została ucięta i eksport był filtrowany po typie daty `PermanentStorage`.",
+ "format": "date-time",
+ "nullable": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "InvoicePackagePart": {
+ "required": [
+ "encryptedPartHash",
+ "encryptedPartSize",
+ "expirationDate",
+ "method",
+ "ordinalNumber",
+ "partHash",
+ "partName",
+ "partSize",
+ "url"
+ ],
+ "type": "object",
+ "properties": {
+ "ordinalNumber": {
+ "minimum": 1,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "description": "Numer sekwencyjny pliku części paczki.",
+ "format": "int32"
+ },
+ "partName": {
+ "maxLength": 100,
+ "type": "string",
+ "description": "Nazwa pliku części paczki."
+ },
+ "method": {
+ "type": "string",
+ "description": "Metoda HTTP, której należy użyć przy pobieraniu pliku."
+ },
+ "url": {
+ "type": "string",
+ "description": "Adres URL, pod który należy wysłać żądanie pobrania części paczki.\nLink jest generowany dynamicznie w momencie odpytania o status operacji eksportu.\nNie podlega limitom API i nie wymaga przesyłania tokenu dostępowego przy pobraniu.",
+ "format": "uri"
+ },
+ "partSize": {
+ "minimum": 1,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "description": "Rozmiar części paczki w bajtach.",
+ "format": "int64"
+ },
+ "partHash": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/Sha256HashBase64"
+ }
+ ],
+ "description": "Skrót SHA256 pliku części paczki, zakodowany w formacie Base64."
+ },
+ "encryptedPartSize": {
+ "minimum": 1,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "description": "Rozmiar zaszyfrowanej części paczki w bajtach.",
+ "format": "int64"
+ },
+ "encryptedPartHash": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/Sha256HashBase64"
+ }
+ ],
+ "description": "Skrót SHA256 zaszyfrowanej części paczki, zakodowany w formacie Base64."
+ },
+ "expirationDate": {
+ "type": "string",
+ "description": "Data i godzina wygaśnięcia linku umożliwiającego pobranie części paczki.\nPo upływie tego momentu link przestaje być aktywny.",
+ "format": "date-time"
+ }
+ },
+ "additionalProperties": false
+ },
+ "InvoicePermissionType": {
+ "enum": [
+ "SelfInvoicing",
+ "TaxRepresentative",
+ "RRInvoicing",
+ "PefInvoicing"
+ ],
+ "type": "string"
+ },
+ "InvoiceQueryAmount": {
+ "required": [
+ "type"
+ ],
+ "type": "object",
+ "properties": {
+ "type": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/AmountType"
+ }
+ ]
+ },
+ "from": {
+ "type": "number",
+ "format": "double",
+ "nullable": true
+ },
+ "to": {
+ "type": "number",
+ "format": "double",
+ "nullable": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "InvoiceQueryBuyerIdentifier": {
+ "required": [
+ "type"
+ ],
+ "type": "object",
+ "properties": {
+ "type": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BuyerIdentifierType"
+ }
+ ],
+ "description": "Typ identyfikatora nabywcy.\n| Wartość | Opis |\n| --- | --- |\n| None | Brak identyfikatora nabywcy |\n| Other | Inny identyfikator |\n| Nip | 10 cyfrowy numer NIP |\n| VatUe | Identyfikator VAT UE podmiotu unijnego |\n"
+ },
+ "value": {
+ "type": "string",
+ "description": "Wartość identyfikatora nabywcy (exact match).",
+ "nullable": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "InvoiceQueryDateRange": {
+ "required": [
+ "dateType",
+ "from"
+ ],
+ "type": "object",
+ "properties": {
+ "dateType": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/InvoiceQueryDateType"
+ }
+ ],
+ "description": "Typ daty, według której ma być zastosowany zakres.\n| Wartość | Opis |\n| --- | --- |\n| Issue | Data wystawienia faktury. |\n| Invoicing | Data przyjęcia faktury w systemie KSeF (do dalszego przetwarzania). |\n| PermanentStorage | Data trwałego zapisu faktury w repozytorium systemu KSeF. |\n"
+ },
+ "from": {
+ "type": "string",
+ "description": "Data początkowa zakresu(UTC).",
+ "format": "date-time"
+ },
+ "to": {
+ "type": "string",
+ "description": "Data końcowa zakresu(UTC). Jeśli nie zostanie podana, przyjmowana jest bieżąca data i czas w UTC.",
+ "format": "date-time",
+ "nullable": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "InvoiceQueryDateType": {
+ "enum": [
+ "Issue",
+ "Invoicing",
+ "PermanentStorage"
+ ],
+ "type": "string",
+ "description": "| Wartość | Opis |\n| --- | --- |\n| Issue | Data wystawienia faktury. |\n| Invoicing | Data przyjęcia faktury w systemie KSeF (do dalszego przetwarzania). |\n| PermanentStorage | Data trwałego zapisu faktury w repozytorium systemu KSeF. |\n"
+ },
+ "InvoiceQueryFilters": {
+ "required": [
+ "dateRange",
+ "subjectType"
+ ],
+ "type": "object",
+ "properties": {
+ "subjectType": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/InvoiceQuerySubjectType"
+ }
+ ],
+ "description": "Typ podmiotu, którego dotyczą kryteria filtrowania metadanych faktur.\nOkreśla kontekst, w jakim przeszukiwane są dane.\n| Wartość | Opis |\n| --- | --- |\n| Subject1 | Podmiot 1 - sprzedawca |\n| Subject2 | Podmiot 2 - nabywca |\n| Subject3 | Podmiot 3 |\n| SubjectAuthorized | Podmiot upoważniony |\n"
+ },
+ "dateRange": {
+ "required": [
+ "dateType",
+ "from"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/InvoiceQueryDateRange"
+ }
+ ],
+ "description": "Typ i zakres dat, według którego mają być filtrowane faktury. Dozwolony maksymalny okres wynosi 2 lata."
+ },
+ "ksefNumber": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/KsefNumber"
+ }
+ ],
+ "description": "Numer KSeF faktury (exact match).",
+ "nullable": true
+ },
+ "invoiceNumber": {
+ "maxLength": 256,
+ "type": "string",
+ "description": "Numer faktury nadany przez wystawcę (exact match).",
+ "nullable": true
+ },
+ "amount": {
+ "required": [
+ "type"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/InvoiceQueryAmount"
+ }
+ ],
+ "description": "Filtr kwotowy – brutto, netto lub VAT (z wartością).",
+ "nullable": true
+ },
+ "sellerNip": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/Nip"
+ }
+ ],
+ "description": "Nip sprzedawcy (exact match).",
+ "nullable": true
+ },
+ "buyerIdentifier": {
+ "required": [
+ "type"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/InvoiceQueryBuyerIdentifier"
+ }
+ ],
+ "description": "Identyfikator nabywcy.\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |\n| VatUe | Identyfikator VAT UE podmiotu unijnego. |\n| Other | Inny identyfikator|\n| None | Brak identyfikatora nabywcy |",
+ "nullable": true
+ },
+ "currencyCodes": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/CurrencyCode"
+ },
+ "description": "Kody walut.",
+ "nullable": true
+ },
+ "invoicingMode": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/InvoicingMode"
+ }
+ ],
+ "description": "Tryb wystawienia faktury: online lub offline.",
+ "nullable": true
+ },
+ "isSelfInvoicing": {
+ "type": "boolean",
+ "description": "Czy faktura została wystawiona w trybie samofakturowania.",
+ "nullable": true
+ },
+ "formType": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/InvoiceQueryFormType"
+ }
+ ],
+ "description": "Typ dokumentu.\n| Wartość | Opis |\n| --- | --- |\n| FA | Faktura VAT |\n| PEF | Faktura PEF |\n| RR | Faktura RR |\n",
+ "nullable": true
+ },
+ "invoiceTypes": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/InvoiceType"
+ },
+ "description": "Rodzaje faktur.\n| Wartość | Opis |\n| --- | --- |\n| Vat | (FA) Podstawowa |\n| Zal | (FA) Zaliczkowa |\n| Kor | (FA) Korygująca |\n| Roz | (FA) Rozliczeniowa |\n| Upr | (FA) Uproszczona |\n| KorZal | (FA) Korygująca fakturę zaliczkową |\n| KorRoz | (FA) Korygująca fakturę rozliczeniową |\n| VatPef | (PEF) Podstawowowa |\n| VatPefSp | (PEF) Specjalizowana |\n| KorPef | (PEF) Korygująca |\n| VatRr | (RR) Podstawowa |\n| KorVatRr | (RR) Korygująca |\n",
+ "nullable": true
+ },
+ "hasAttachment": {
+ "type": "boolean",
+ "description": "Czy faktura ma załącznik.",
+ "nullable": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "InvoiceQueryFormType": {
+ "enum": [
+ "FA",
+ "PEF",
+ "RR"
+ ],
+ "type": "string",
+ "description": "| Wartość | Opis |\n| --- | --- |\n| FA | Faktura VAT |\n| PEF | Faktura PEF |\n| RR | Faktura RR |\n"
+ },
+ "InvoiceQuerySubjectType": {
+ "enum": [
+ "Subject1",
+ "Subject2",
+ "Subject3",
+ "SubjectAuthorized"
+ ],
+ "type": "string",
+ "description": "| Wartość | Opis |\n| --- | --- |\n| Subject1 | Podmiot 1 - sprzedawca |\n| Subject2 | Podmiot 2 - nabywca |\n| Subject3 | Podmiot 3 |\n| SubjectAuthorized | Podmiot upoważniony |\n"
+ },
+ "InvoiceType": {
+ "enum": [
+ "Vat",
+ "Zal",
+ "Kor",
+ "Roz",
+ "Upr",
+ "KorZal",
+ "KorRoz",
+ "VatPef",
+ "VatPefSp",
+ "KorPef",
+ "VatRr",
+ "KorVatRr"
+ ],
+ "type": "string",
+ "description": "| Wartość | Opis |\n| --- | --- |\n| Vat | (FA) Podstawowa |\n| Zal | (FA) Zaliczkowa |\n| Kor | (FA) Korygująca |\n| Roz | (FA) Rozliczeniowa |\n| Upr | (FA) Uproszczona |\n| KorZal | (FA) Korygująca fakturę zaliczkową |\n| KorRoz | (FA) Korygująca fakturę rozliczeniową |\n| VatPef | (PEF) Podstawowowa |\n| VatPefSp | (PEF) Specjalizowana |\n| KorPef | (PEF) Korygująca |\n| VatRr | (RR) Podstawowa |\n| KorVatRr | (RR) Korygująca |\n"
+ },
+ "InvoicingMode": {
+ "enum": [
+ "Online",
+ "Offline"
+ ],
+ "type": "string"
+ },
+ "KsefCertificateType": {
+ "enum": [
+ "Authentication",
+ "Offline"
+ ],
+ "type": "string",
+ "description": "| Wartość | Opis |\n| --- | --- |\n| Authentication | Certyfikat używany do uwierzytelnienia w systemie. |\n| Offline | Certyfikat używany wyłącznie do potwierdzania autentyczności wystawcy i integralności faktury w trybie offline |\n"
+ },
+ "KsefNumber": {
+ "maxLength": 36,
+ "minLength": 35,
+ "pattern": "^([1-9](\\d[1-9]|[1-9]\\d)\\d{7})-(20[2-9][0-9]|2[1-9]\\d{2}|[3-9]\\d{3})(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])-([0-9A-F]{6})-?([0-9A-F]{6})-([0-9A-F]{2})$",
+ "type": "string",
+ "description": "Numer KSeF o długości 35 znaków jest akceptowany, by zachować kompatybilność wsteczna z KSeF 1.0. W KSeF 2.0 numery są generowane wyłącznie w formacie 36-znakowym."
+ },
+ "Nip": {
+ "maxLength": 10,
+ "minLength": 10,
+ "pattern": "^[1-9]((\\d[1-9])|([1-9]\\d))\\d{7}$",
+ "type": "string",
+ "description": "10 cyfrowy numer NIP."
+ },
+ "NipVatUe": {
+ "pattern": "^[1-9]((\\d[1-9])|([1-9]\\d))\\d{7}-(ATU\\d{8}|BE[01]{1}\\d{9}|BG\\d{9,10}|CY\\d{8}[A-Z]|CZ\\d{8,10}|DE\\d{9}|DK\\d{8}|EE\\d{9}|EL\\d{9}|ES([A-Z]\\d{8}|\\d{8}[A-Z]|[A-Z]\\d{7}[A-Z])|FI\\d{8}|FR[A-Z0-9]{2}\\d{9}|HR\\d{11}|HU\\d{8}|IE(\\d{7}[A-Z]{2}|\\d[A-Z0-9+*]\\d{5}[A-Z])|IT\\d{11}|LT(\\d{9}|\\d{12})|LU\\d{8}|LV\\d{11}|MT\\d{8}|NL[A-Z0-9+*]{12}|PT\\d{9}|RO\\d{2,10}|SE\\d{12}|SI\\d{8}|SK\\d{10}|XI((\\d{9}|\\d{12})|(GD|HA)\\d{3}))$",
+ "type": "string",
+ "description": "Identyfikator złożony, czyli dwuczłonowy identyfikator składający się z nr NIP podmiotu polskiego oraz numeru VAT UE podmiotu unijnego."
+ },
+ "OnlineSessionContextLimitsOverride": {
+ "required": [
+ "maxInvoices",
+ "maxInvoiceSizeInMB",
+ "maxInvoiceWithAttachmentSizeInMB"
+ ],
+ "type": "object",
+ "properties": {
+ "maxInvoiceSizeInMB": {
+ "maximum": 5,
+ "exclusiveMaximum": false,
+ "minimum": 0,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "description": "Maksymalny rozmiar faktury w MB.",
+ "format": "int32"
+ },
+ "maxInvoiceWithAttachmentSizeInMB": {
+ "maximum": 10,
+ "exclusiveMaximum": false,
+ "minimum": 0,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "description": "Maksymalny rozmiar faktury z załącznikiem w MB.",
+ "format": "int32"
+ },
+ "maxInvoices": {
+ "maximum": 100000,
+ "exclusiveMaximum": false,
+ "minimum": 0,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "description": "Maksymalna ilość faktur które można przesłać w pojedynczej sesji.",
+ "format": "int32"
+ }
+ },
+ "additionalProperties": false
+ },
+ "OnlineSessionEffectiveContextLimits": {
+ "required": [
+ "maxInvoices",
+ "maxInvoiceSizeInMB",
+ "maxInvoiceWithAttachmentSizeInMB"
+ ],
+ "type": "object",
+ "properties": {
+ "maxInvoiceSizeInMB": {
+ "minimum": 0,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "description": "Maksymalny rozmiar faktury w MB.",
+ "format": "int32"
+ },
+ "maxInvoiceWithAttachmentSizeInMB": {
+ "minimum": 0,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "description": "Maksymalny rozmiar faktury z załącznikiem w MB.",
+ "format": "int32"
+ },
+ "maxInvoices": {
+ "minimum": 0,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "description": "Maksymalna ilość faktur które można przesłać w pojedynczej sesji.",
+ "format": "int32"
+ }
+ },
+ "additionalProperties": false
+ },
+ "OpenBatchSessionRequest": {
+ "required": [
+ "batchFile",
+ "encryption",
+ "formCode"
+ ],
+ "type": "object",
+ "properties": {
+ "formCode": {
+ "required": [
+ "systemCode",
+ "schemaVersion",
+ "value"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/FormCode"
+ }
+ ],
+ "description": "Schemat faktur wysyłanych w ramach sesji.\n\nObsługiwane schematy:\n| SystemCode | SchemaVersion | Value |\n| --- | --- | --- |\n| FA (2) | 1-0E | FA |\n| FA (3) | 1-0E | FA |\n"
+ },
+ "batchFile": {
+ "required": [
+ "fileSize",
+ "fileHash",
+ "fileParts"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BatchFileInfo"
+ }
+ ],
+ "description": "Informacje o przesyłanej paczce faktur."
+ },
+ "encryption": {
+ "required": [
+ "encryptedSymmetricKey",
+ "initializationVector"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/EncryptionInfo"
+ }
+ ],
+ "description": "Symetryczny klucz szyfrujący plik paczki, zaszyfrowany kluczem publicznym Ministerstwa Finansów."
+ },
+ "offlineMode": {
+ "type": "boolean",
+ "description": "Określa, czy podatnik deklaruje tryb fakurowania \"offline\" dla dokumentów przesyłanych w sesji wsadowej.",
+ "default": false
+ }
+ },
+ "additionalProperties": false
+ },
+ "OpenBatchSessionResponse": {
+ "required": [
+ "partUploadRequests",
+ "referenceNumber"
+ ],
+ "type": "object",
+ "properties": {
+ "referenceNumber": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ReferenceNumber"
+ }
+ ],
+ "description": "Numer referencyjny sesji."
+ },
+ "partUploadRequests": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/PartUploadRequest"
+ },
+ "description": "Dane wymagane do poprawnego przesłania poszczególnych części pliku paczki faktur.\n\nKażdą część pliku paczki zadeklarowaną w fileParts należy przesłać zgodnie z odpowiadającym jej obiektem w partUploadRequests.\nŁącznikiem pomiędzy deklaracją a instrukcją wysyłki jest pole ordinalNumber.\n\nDla każdej części należy:\n* zastosować metodę HTTP wskazaną w method,\n* ustawić adres z url,\n* dołączyć nagłówki z headers,\n* dołączyć treść części pliku w korpusie żądania.\n\n`Uwaga: nie należy dodawać do nagłówków token dostępu (accessToken).`\n \nKażdą część przesyła się oddzielnym żądaniem HTTP.Zwracane kody odpowiedzi:\n * 201 – poprawne przyjęcie pliku,\n * 400 – błędne dane,\n * 401 – nieprawidłowe uwierzytelnienie,\n * 403 – brak uprawnień do zapisu (np.upłynął czas na zapis)."
+ }
+ },
+ "additionalProperties": false
+ },
+ "OpenOnlineSessionRequest": {
+ "required": [
+ "encryption",
+ "formCode"
+ ],
+ "type": "object",
+ "properties": {
+ "formCode": {
+ "required": [
+ "systemCode",
+ "schemaVersion",
+ "value"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/FormCode"
+ }
+ ],
+ "description": "Schemat faktur wysyłanych w ramach sesji.\n\nObsługiwane schematy:\n| SystemCode | SchemaVersion | Value |\n| --- | --- | --- |\n| FA (2) | 1-0E | FA |\n| FA (3) | 1-0E | FA |\n| PEF (3) | 2-1 | PEF |\n| PEF_KOR (3) | 2-1 | PEF |\n"
+ },
+ "encryption": {
+ "required": [
+ "encryptedSymmetricKey",
+ "initializationVector"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/EncryptionInfo"
+ }
+ ],
+ "description": "Symetryczny klucz szyfrujący pliki XML, zaszyfrowany kluczem publicznym Ministerstwa Finansów."
+ }
+ },
+ "additionalProperties": false
+ },
+ "OpenOnlineSessionResponse": {
+ "required": [
+ "referenceNumber",
+ "validUntil"
+ ],
+ "type": "object",
+ "properties": {
+ "referenceNumber": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ReferenceNumber"
+ }
+ ],
+ "description": "Numer referencyjny sesji."
+ },
+ "validUntil": {
+ "type": "string",
+ "description": "Termin ważności sesji. Po jego upływie sesja zostanie automatycznie zamknięta.",
+ "format": "date-time"
+ }
+ },
+ "additionalProperties": false
+ },
+ "PartUploadRequest": {
+ "required": [
+ "headers",
+ "method",
+ "ordinalNumber",
+ "url"
+ ],
+ "type": "object",
+ "properties": {
+ "ordinalNumber": {
+ "minimum": 1,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "description": "Numer sekwencyjny części pliku paczki.",
+ "format": "int32"
+ },
+ "method": {
+ "type": "string",
+ "description": "Metoda HTTP, której należy użyć przy wysyłce części pliku paczki."
+ },
+ "url": {
+ "type": "string",
+ "description": "Adres pod który należy wysłać część pliku paczki.",
+ "format": "uri"
+ },
+ "headers": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string",
+ "nullable": true
+ },
+ "description": "Nagłówki, których należy użyć przy wysyłce części pliku paczki."
+ }
+ },
+ "additionalProperties": false
+ },
+ "PeppolId": {
+ "maxLength": 9,
+ "minLength": 9,
+ "pattern": "^P[A-Z]{2}[0-9]{6}$",
+ "type": "string",
+ "description": "Identyfikator dostawcy usług Peppol."
+ },
+ "PeppolProvider": {
+ "required": [
+ "dateCreated",
+ "id",
+ "name"
+ ],
+ "type": "object",
+ "properties": {
+ "id": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PeppolId"
+ }
+ ],
+ "description": "Identyfikator dostawcy usług Peppol."
+ },
+ "name": {
+ "maxLength": 256,
+ "type": "string",
+ "description": "Nazwa dostawcy usług Peppol."
+ },
+ "dateCreated": {
+ "type": "string",
+ "description": "Data rejestracji dostawcy usług Peppol w systemie.",
+ "format": "date-time"
+ }
+ },
+ "additionalProperties": false
+ },
+ "PermissionId": {
+ "maxLength": 36,
+ "minLength": 36,
+ "type": "string",
+ "description": "Techniczny identyfikator nadanego uprawnienia – wymagany m.in. przy operacjach odbierania."
+ },
+ "PermissionState": {
+ "enum": [
+ "Active",
+ "Inactive"
+ ],
+ "type": "string"
+ },
+ "PermissionsOperationResponse": {
+ "required": [
+ "referenceNumber"
+ ],
+ "type": "object",
+ "properties": {
+ "referenceNumber": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ReferenceNumber"
+ }
+ ],
+ "description": "Numer referencyjny operacji nadania lub odbierania uprawnień."
+ }
+ },
+ "additionalProperties": false
+ },
+ "PermissionsOperationStatusResponse": {
+ "required": [
+ "status"
+ ],
+ "type": "object",
+ "properties": {
+ "status": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/StatusInfo"
+ }
+ ],
+ "description": "Informacje o aktualnym statusie.\n| Code | Description | Details |\n| --- | --- | --- |\n| 100 | Operacja przyjęta do realizacji | - |\n| 200 | Operacja zakończona sukcesem | - |\n| 400 | Operacja zakończona niepowodzeniem | - |\n| 410 | Podane identyfikatory są niezgodne lub pozostają w niewłaściwej relacji | - |\n| 420 | Użyte poświadczenia nie mają uprawnień do wykonania tej operacji | - |\n| 430 | Kontekst identyfikatora nie odpowiada wymaganej roli lub uprawnieniom | - |\n| 440 | Operacja niedozwolona dla wskazanych powiązań identyfikatorów | - |\n| 450 | Operacja niedozwolona dla wskazanego identyfikatora lub jego typu | - |\n| 500 | Nieznany błąd | - |\n| 550 | Operacja została anulowana przez system | Przetwarzanie zostało przerwane z przyczyn wewnętrznych systemu. Spróbuj ponownie później. |"
+ }
+ },
+ "additionalProperties": false
+ },
+ "PersonCreateRequest": {
+ "required": [
+ "description",
+ "isBailiff",
+ "nip",
+ "pesel"
+ ],
+ "type": "object",
+ "properties": {
+ "nip": {
+ "$ref": "#/components/schemas/Nip"
+ },
+ "pesel": {
+ "$ref": "#/components/schemas/Pesel"
+ },
+ "isBailiff": {
+ "type": "boolean"
+ },
+ "description": {
+ "maxLength": 256,
+ "minLength": 5,
+ "type": "string"
+ },
+ "isDeceased": {
+ "type": "boolean"
+ },
+ "createdDate": {
+ "type": "string",
+ "description": "W przypadku wielokrotnego tworzenia danych testowych z tym samym identyfikatorem nie można podawać daty wcześniejszej ani takiej samej jak poprzednia.",
+ "format": "date-time",
+ "nullable": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "PersonPermission": {
+ "required": [
+ "authorIdentifier",
+ "authorizedIdentifier",
+ "canDelegate",
+ "description",
+ "id",
+ "permissionScope",
+ "permissionState",
+ "startDate"
+ ],
+ "type": "object",
+ "properties": {
+ "id": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PermissionId"
+ }
+ ],
+ "description": "Identyfikator uprawnienia."
+ },
+ "authorizedIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PersonPermissionsAuthorizedIdentifier"
+ }
+ ],
+ "description": "Identyfikator osoby lub podmiotu uprawnionego.\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |\n| Pesel | 11 cyfrowy numer PESEL |\n| Fingerprint | Odcisk palca certyfikatu |"
+ },
+ "contextIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PersonPermissionsContextIdentifier"
+ }
+ ],
+ "description": "Identyfikator kontekstu uprawnienia (dla uprawnień nadanych administratorom jednostek podrzędnych).\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |\n| InternalId | Dwuczłonowy identyfikator składający się z numeru NIP i 5 cyfr: `{nip}-{5_cyfr}` |",
+ "nullable": true
+ },
+ "targetIdentifier": {
+ "required": [
+ "type"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PersonPermissionsTargetIdentifier"
+ }
+ ],
+ "description": "Identyfikator podmiotu docelowego dla uprawnień nadanych pośrednio.\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |\n| AllPartners | Identyfikator oznaczający, że uprawnienie nadane w sposób pośredni jest typu generalnego |\n| InternalId | Dwuczłonowy identyfikator składający się z numeru NIP i 5 cyfr: `{nip}-{5_cyfr}` |",
+ "nullable": true
+ },
+ "authorIdentifier": {
+ "required": [
+ "type"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PersonPermissionsAuthorIdentifier"
+ }
+ ],
+ "description": "Identyfikator osoby lub podmiotu nadającego uprawnienie.\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |\n| Pesel | 11 cyfrowy numer PESEL |\n| Fingerprint | Odcisk palca certyfikatu |\n| System | Identyfikator systemowy KSeF |"
+ },
+ "permissionScope": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PersonPermissionScope"
+ }
+ ],
+ "description": "Rodzaj uprawnienia."
+ },
+ "description": {
+ "maxLength": 256,
+ "minLength": 5,
+ "type": "string",
+ "description": "Opis uprawnienia."
+ },
+ "permissionState": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PermissionState"
+ }
+ ],
+ "description": "Stan uprawnienia."
+ },
+ "startDate": {
+ "type": "string",
+ "description": "Data rozpoczęcia obowiązywania uprawnienia.",
+ "format": "date-time"
+ },
+ "canDelegate": {
+ "type": "boolean",
+ "description": "Flaga określająca, czy uprawnienie ma być możliwe do dalszego przekazywania."
+ }
+ },
+ "additionalProperties": false
+ },
+ "PersonPermissionScope": {
+ "enum": [
+ "CredentialsManage",
+ "CredentialsRead",
+ "InvoiceWrite",
+ "InvoiceRead",
+ "Introspection",
+ "SubunitManage",
+ "EnforcementOperations"
+ ],
+ "type": "string"
+ },
+ "PersonPermissionType": {
+ "enum": [
+ "CredentialsManage",
+ "CredentialsRead",
+ "InvoiceWrite",
+ "InvoiceRead",
+ "Introspection",
+ "SubunitManage",
+ "EnforcementOperations"
+ ],
+ "type": "string"
+ },
+ "PersonPermissionsAuthorIdentifier": {
+ "required": [
+ "type"
+ ],
+ "type": "object",
+ "properties": {
+ "type": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PersonPermissionsAuthorIdentifierType"
+ }
+ ],
+ "description": "Typ identyfikatora."
+ },
+ "value": {
+ "type": "string",
+ "description": "Wartość identyfikatora. W przypadku typu System należy pozostawić puste. W pozostałych przypadkach pole jest wymagane.",
+ "nullable": true
+ }
+ },
+ "additionalProperties": false,
+ "description": "Identyfikator osoby lub podmiotu nadającego uprawnienie.\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |\n| Pesel | 11 cyfrowy numer PESEL |\n| Fingerprint | Odcisk palca certyfikatu |\n| System | Identyfikator systemowy KSeF |"
+ },
+ "PersonPermissionsAuthorIdentifierType": {
+ "enum": [
+ "Nip",
+ "Pesel",
+ "Fingerprint",
+ "System"
+ ],
+ "type": "string"
+ },
+ "PersonPermissionsAuthorizedIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "type": "object",
+ "properties": {
+ "type": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PersonPermissionsAuthorizedIdentifierType"
+ }
+ ],
+ "description": "Typ identyfikatora."
+ },
+ "value": {
+ "type": "string",
+ "description": "Wartość identyfikatora."
+ }
+ },
+ "additionalProperties": false,
+ "description": "Identyfikator osoby lub podmiotu uprawnionego.\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |\n| Pesel | 11 cyfrowy numer PESEL |\n| Fingerprint | Odcisk palca certyfikatu |"
+ },
+ "PersonPermissionsAuthorizedIdentifierType": {
+ "enum": [
+ "Nip",
+ "Pesel",
+ "Fingerprint"
+ ],
+ "type": "string"
+ },
+ "PersonPermissionsContextIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "type": "object",
+ "properties": {
+ "type": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PersonPermissionsContextIdentifierType"
+ }
+ ],
+ "description": "Typ identyfikatora."
+ },
+ "value": {
+ "type": "string",
+ "description": "Wartość identyfikatora."
+ }
+ },
+ "additionalProperties": false,
+ "description": "Identyfikator kontekstu uprawnienia (dla uprawnień nadanych administratorom jednostek podrzędnych).\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |\n| InternalId | Dwuczłonowy identyfikator składający się z numeru NIP i 5 cyfr: `{nip}-{5_cyfr}` |"
+ },
+ "PersonPermissionsContextIdentifierType": {
+ "enum": [
+ "Nip",
+ "InternalId"
+ ],
+ "type": "string"
+ },
+ "PersonPermissionsGrantRequest": {
+ "required": [
+ "description",
+ "permissions",
+ "subjectIdentifier"
+ ],
+ "type": "object",
+ "properties": {
+ "subjectIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PersonPermissionsSubjectIdentifier"
+ }
+ ],
+ "description": "Identyfikator osoby fizycznej.\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |\n| Pesel | 11 cyfrowy numer PESEL |\n| Fingerprint | Odcisk palca certyfikatu |"
+ },
+ "permissions": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/PersonPermissionType"
+ },
+ "description": "Lista nadawanych uprawnień. Każda wartość może wystąpić tylko raz."
+ },
+ "description": {
+ "maxLength": 256,
+ "minLength": 5,
+ "type": "string",
+ "description": "Opis uprawnienia"
+ }
+ },
+ "additionalProperties": false
+ },
+ "PersonPermissionsQueryRequest": {
+ "required": [
+ "queryType"
+ ],
+ "type": "object",
+ "properties": {
+ "authorIdentifier": {
+ "required": [
+ "type"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PersonPermissionsAuthorIdentifier"
+ }
+ ],
+ "description": "Identyfikator osoby lub podmiotu nadającego uprawnienie.\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |\n| Pesel | 11 cyfrowy numer PESEL |\n| Fingerprint | Odcisk palca certyfikatu |\n| System | Identyfikator systemowy KSeF |",
+ "nullable": true
+ },
+ "authorizedIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PersonPermissionsAuthorizedIdentifier"
+ }
+ ],
+ "description": "Identyfikator osoby lub podmiotu uprawnionego.\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |\n| Pesel | 11 cyfrowy numer PESEL |\n| Fingerprint | Odcisk palca certyfikatu |",
+ "nullable": true
+ },
+ "contextIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PersonPermissionsContextIdentifier"
+ }
+ ],
+ "description": "Identyfikator kontekstu uprawnienia (dla uprawnień nadanych administratorom jednostek podrzędnych).\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |\n| InternalId | Dwuczłonowy identyfikator składający się z numeru NIP i 5 cyfr: `{nip}-{5_cyfr}` |",
+ "nullable": true
+ },
+ "targetIdentifier": {
+ "required": [
+ "type"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PersonPermissionsTargetIdentifier"
+ }
+ ],
+ "description": "Identyfikator podmiotu docelowego dla uprawnień nadanych pośrednio.\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |\n| AllPartners | Identyfikator oznaczający, że uprawnienie nadane w sposób pośredni jest typu generalnego |\n| InternalId | Dwuczłonowy identyfikator składający się z numeru NIP i 5 cyfr: `{nip}-{5_cyfr}` |",
+ "nullable": true
+ },
+ "permissionTypes": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/PersonPermissionType"
+ },
+ "description": "Lista rodzajów wyszukiwanych uprawnień.",
+ "nullable": true
+ },
+ "permissionState": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PermissionState"
+ }
+ ],
+ "description": "Stan uprawnienia. \n| Type | Value |\n| --- | --- |\n| Active | Uprawnienia aktywne |\n| Inactive | Uprawnienia nieaktywne, nadane w sposób poœredni |",
+ "nullable": true
+ },
+ "queryType": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PersonPermissionsQueryType"
+ }
+ ],
+ "description": "Typ zapytania.\n| Type | Value |\n| --- | --- |\n| PermissionsInCurrentContext | Lista uprawnień obowiązujących w bieżącym kontekście |\n| PermissionsGrantedInCurrentContext | Lista uprawmoeń nadanych w bieżącym kontekście |"
+ }
+ },
+ "additionalProperties": false
+ },
+ "PersonPermissionsQueryType": {
+ "enum": [
+ "PermissionsInCurrentContext",
+ "PermissionsGrantedInCurrentContext"
+ ],
+ "type": "string"
+ },
+ "PersonPermissionsSubjectIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "type": "object",
+ "properties": {
+ "type": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PersonPermissionsSubjectIdentifierType"
+ }
+ ],
+ "description": "Typ identyfikatora."
+ },
+ "value": {
+ "type": "string",
+ "description": "Wartość identyfikatora."
+ }
+ },
+ "additionalProperties": false,
+ "description": "Identyfikator osoby fizycznej.\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |\n| Pesel | 11 cyfrowy numer PESEL |\n| Fingerprint | Odcisk palca certyfikatu |"
+ },
+ "PersonPermissionsSubjectIdentifierType": {
+ "enum": [
+ "Nip",
+ "Pesel",
+ "Fingerprint"
+ ],
+ "type": "string"
+ },
+ "PersonPermissionsTargetIdentifier": {
+ "required": [
+ "type"
+ ],
+ "type": "object",
+ "properties": {
+ "type": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PersonPermissionsTargetIdentifierType"
+ }
+ ],
+ "description": "Typ identyfikatora."
+ },
+ "value": {
+ "type": "string",
+ "description": "Wartość identyfikatora. W przypadku typu AllPartners należy pozostawić puste. W pozostałych przypadkach pole jest wymagane.",
+ "nullable": true
+ }
+ },
+ "additionalProperties": false,
+ "description": "Identyfikator podmiotu docelowego dla uprawnień nadanych pośrednio.\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |\n| AllPartners | Identyfikator oznaczający, że uprawnienie nadane w sposób pośredni jest typu generalnego |\n| InternalId | Dwuczłonowy identyfikator składający się z numeru NIP i 5 cyfr: `{nip}-{5_cyfr}` |"
+ },
+ "PersonPermissionsTargetIdentifierType": {
+ "enum": [
+ "Nip",
+ "AllPartners",
+ "InternalId"
+ ],
+ "type": "string"
+ },
+ "PersonRemoveRequest": {
+ "required": [
+ "nip"
+ ],
+ "type": "object",
+ "properties": {
+ "nip": {
+ "$ref": "#/components/schemas/Nip"
+ }
+ },
+ "additionalProperties": false
+ },
+ "PersonalPermission": {
+ "required": [
+ "canDelegate",
+ "description",
+ "id",
+ "permissionScope",
+ "permissionState",
+ "startDate"
+ ],
+ "type": "object",
+ "properties": {
+ "id": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PermissionId"
+ }
+ ],
+ "description": "Identyfikator uprawnienia."
+ },
+ "contextIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PersonalPermissionsContextIdentifier"
+ }
+ ],
+ "description": "Identyfikator kontekstu podmiotu, który nadał uprawnienia do obsługi faktur.\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |",
+ "nullable": true
+ },
+ "authorizedIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PersonalPermissionsAuthorizedIdentifier"
+ }
+ ],
+ "description": "Identyfikator podmiotu uprawnionego, jeżeli jest inny niż identyfikator uwierzytelnionego klienta API.\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |",
+ "nullable": true
+ },
+ "targetIdentifier": {
+ "required": [
+ "type"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PersonalPermissionsTargetIdentifier"
+ }
+ ],
+ "description": "Identyfikator podmiotu docelowego dla uprawnień selektywnych nadanych pośrednio.\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |\n| AllPartners | Identyfikator oznaczający, że wyszukiwanie dotyczy uprawnień generalnych nadanych w sposób pośredni |\n| InternalId | Dwuczłonowy identyfikator składający się z numeru NIP i 5 cyfr: `{nip}-{5_cyfr}` |",
+ "nullable": true
+ },
+ "permissionScope": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PersonalPermissionScope"
+ }
+ ],
+ "description": "Rodzaj uprawnienia."
+ },
+ "description": {
+ "maxLength": 256,
+ "minLength": 5,
+ "type": "string",
+ "description": "Opis uprawnienia."
+ },
+ "permissionState": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PermissionState"
+ }
+ ],
+ "description": "Stan uprawnienia."
+ },
+ "startDate": {
+ "type": "string",
+ "description": "Data rozpoczęcia obowiązywania uprawnienia.",
+ "format": "date-time"
+ },
+ "canDelegate": {
+ "type": "boolean",
+ "description": "Flaga określająca, czy uprawnienie ma być możliwe do dalszego przekazywania."
+ }
+ },
+ "additionalProperties": false
+ },
+ "PersonalPermissionScope": {
+ "enum": [
+ "CredentialsManage",
+ "CredentialsRead",
+ "InvoiceWrite",
+ "InvoiceRead",
+ "Introspection",
+ "SubunitManage",
+ "EnforcementOperations",
+ "VatUeManage"
+ ],
+ "type": "string"
+ },
+ "PersonalPermissionType": {
+ "enum": [
+ "CredentialsManage",
+ "CredentialsRead",
+ "InvoiceWrite",
+ "InvoiceRead",
+ "Introspection",
+ "SubunitManage",
+ "EnforcementOperations",
+ "VatUeManage"
+ ],
+ "type": "string"
+ },
+ "PersonalPermissionsAuthorizedIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "type": "object",
+ "properties": {
+ "type": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PersonalPermissionsAuthorizedIdentifierType"
+ }
+ ],
+ "description": "Typ identyfikatora."
+ },
+ "value": {
+ "type": "string",
+ "description": "Wartość identyfikatora."
+ }
+ },
+ "additionalProperties": false,
+ "description": "Identyfikator podmiotu uprawnionego, jeżeli jest inny niż identyfikator uwierzytelnionego klienta API.\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |"
+ },
+ "PersonalPermissionsAuthorizedIdentifierType": {
+ "enum": [
+ "Nip",
+ "Pesel",
+ "Fingerprint"
+ ],
+ "type": "string"
+ },
+ "PersonalPermissionsContextIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "type": "object",
+ "properties": {
+ "type": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PersonalPermissionsContextIdentifierType"
+ }
+ ],
+ "description": "Typ identyfikatora."
+ },
+ "value": {
+ "type": "string",
+ "description": "Wartość identyfikatora."
+ }
+ },
+ "additionalProperties": false,
+ "description": "Identyfikator kontekstu podmiotu, który nadał uprawnienia do obsługi faktur.\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |"
+ },
+ "PersonalPermissionsContextIdentifierType": {
+ "enum": [
+ "Nip",
+ "InternalId"
+ ],
+ "type": "string"
+ },
+ "PersonalPermissionsQueryRequest": {
+ "type": "object",
+ "properties": {
+ "contextIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PersonalPermissionsContextIdentifier"
+ }
+ ],
+ "description": "Identyfikator kontekstu podmiotu, który nadał uprawnienia do obsługi faktur.\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |",
+ "nullable": true
+ },
+ "targetIdentifier": {
+ "required": [
+ "type"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PersonalPermissionsTargetIdentifier"
+ }
+ ],
+ "description": "Identyfikator podmiotu docelowego dla uprawnień selektywnych nadanych pośrednio.\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |\n| AllPartners | Identyfikator oznaczający, że wyszukiwanie dotyczy uprawnień generalnych nadanych w sposób pośredni |\n| InternalId | Dwuczłonowy identyfikator składający się z numeru NIP i 5 cyfr: `{nip}-{5_cyfr}` |",
+ "nullable": true
+ },
+ "permissionTypes": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/PersonalPermissionType"
+ },
+ "description": "Lista rodzajów wyszukiwanych uprawnień.",
+ "nullable": true
+ },
+ "permissionState": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PermissionState"
+ }
+ ],
+ "description": "Stan uprawnienia. \n| Type | Value |\n| --- | --- |\n| Active | Uprawnienia aktywne |\n| Inactive | Uprawnienia nieaktywne |",
+ "nullable": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "PersonalPermissionsTargetIdentifier": {
+ "required": [
+ "type"
+ ],
+ "type": "object",
+ "properties": {
+ "type": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PersonalPermissionsTargetIdentifierType"
+ }
+ ],
+ "description": "Typ identyfikatora."
+ },
+ "value": {
+ "type": "string",
+ "description": "Wartość identyfikatora. W przypadku typu AllPartners należy pozostawić puste. W pozostałych przypadkach pole jest wymagane.",
+ "nullable": true
+ }
+ },
+ "additionalProperties": false,
+ "description": "Identyfikator podmiotu docelowego dla uprawnień selektywnych nadanych pośrednio.\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |\n| AllPartners | Identyfikator oznaczający, że wyszukiwanie dotyczy uprawnień generalnych nadanych w sposób pośredni |\n| InternalId | Dwuczłonowy identyfikator składający się z numeru NIP i 5 cyfr: `{nip}-{5_cyfr}` |"
+ },
+ "PersonalPermissionsTargetIdentifierType": {
+ "enum": [
+ "Nip",
+ "AllPartners",
+ "InternalId"
+ ],
+ "type": "string"
+ },
+ "Pesel": {
+ "maxLength": 11,
+ "minLength": 11,
+ "pattern": "^\\d{2}(?:0[1-9]|1[0-2]|2[1-9]|3[0-2]|4[1-9]|5[0-2]|6[1-9]|7[0-2]|8[1-9]|9[0-2])\\d{7}$",
+ "type": "string",
+ "description": "11 cyfrowy numer PESEL."
+ },
+ "PublicKeyCertificate": {
+ "required": [
+ "certificate",
+ "usage",
+ "validFrom",
+ "validTo"
+ ],
+ "type": "object",
+ "properties": {
+ "certificate": {
+ "type": "string",
+ "description": "Certyfikat klucza publicznego w formacie DER zakodowany w Base64."
+ },
+ "validFrom": {
+ "type": "string",
+ "description": "Data początku obowiązywania certyfikatu.",
+ "format": "date-time"
+ },
+ "validTo": {
+ "type": "string",
+ "description": "Data końca obowiązywania certyfikatu.",
+ "format": "date-time"
+ },
+ "usage": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/PublicKeyCertificateUsage"
+ },
+ "description": "Operacje do których może być używany certyfikat.\n| Wartość | Opis |\n| --- | --- |\n| KsefTokenEncryption | Szyfrowanie tokenów KSeF przesyłanych w trakcie procesu uwierzytelniania. |\n| SymmetricKeyEncryption | Szyfrowanie klucza symetrycznego wykorzystywanego do szyfrowania przesyłanych faktur. |\n"
+ }
+ },
+ "additionalProperties": false
+ },
+ "PublicKeyCertificateUsage": {
+ "enum": [
+ "KsefTokenEncryption",
+ "SymmetricKeyEncryption"
+ ],
+ "type": "string",
+ "description": "| Wartość | Opis |\n| --- | --- |\n| KsefTokenEncryption | Szyfrowanie tokenów KSeF przesyłanych w trakcie procesu uwierzytelniania. |\n| SymmetricKeyEncryption | Szyfrowanie klucza symetrycznego wykorzystywanego do szyfrowania przesyłanych faktur. |\n"
+ },
+ "QueryCertificatesRequest": {
+ "type": "object",
+ "properties": {
+ "certificateSerialNumber": {
+ "type": "string",
+ "description": "Numer seryjny certyfikatu. Wyszukiwanie odbywa się na zasadzie dokładnego dopasowania (exact match).",
+ "nullable": true
+ },
+ "name": {
+ "type": "string",
+ "description": "Nazwa własna certyfikatu. Wyszukiwanie jest częściowe, czyli zwracane są certyfikaty, których nazwa zawiera podany ciąg znaków (contains).",
+ "nullable": true
+ },
+ "type": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/KsefCertificateType"
+ }
+ ],
+ "description": "Typ certyfikatu KSeF.\n| Wartość | Opis |\n| --- | --- |\n| Authentication | Certyfikat używany do uwierzytelnienia w systemie. |\n| Offline | Certyfikat używany wyłącznie do potwierdzania autentyczności wystawcy i integralności faktury w trybie offline |\n",
+ "nullable": true
+ },
+ "status": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/CertificateListItemStatus"
+ }
+ ],
+ "description": "Status certyfikatu.\n| Wartość | Opis |\n| --- | --- |\n| Active | Certyfikat jest aktywny i może zostać użyty do uwierzytelnienia lub realizacji operacji w trybie offline (w zależności od typu certyfikatu). |\n| Blocked | Certyfikat został zablokowany i nie może zostać użyty do uwierzytelnienia i realizacji operacji w trybie offline. Status przejściowy do czasu zakończenia procesu unieważniania. |\n| Revoked | Certyfikat został unieważniony i nie może zostać użyty do uwierzytelnienia i realizacji operacji w trybie offline. |\n| Expired | Certyfikat wygasł i nie może zostać użyty do uwierzytelnienia i realizacji operacji w trybie offline. |\n",
+ "nullable": true
+ },
+ "expiresAfter": {
+ "type": "string",
+ "description": "Filtruje certyfikaty, które wygasają po podanej dacie.",
+ "format": "date-time",
+ "nullable": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "QueryCertificatesResponse": {
+ "required": [
+ "certificates",
+ "hasMore"
+ ],
+ "type": "object",
+ "properties": {
+ "certificates": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/CertificateListItem"
+ },
+ "description": "Lista certyfikatów spełniających kryteria wyszukiwania."
+ },
+ "hasMore": {
+ "type": "boolean",
+ "description": "Flaga informująca o dostępności kolejnej strony wyników."
+ }
+ },
+ "additionalProperties": false
+ },
+ "QueryEntityAuthorizationPermissionsResponse": {
+ "required": [
+ "authorizationGrants",
+ "hasMore"
+ ],
+ "type": "object",
+ "properties": {
+ "authorizationGrants": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/EntityAuthorizationGrant"
+ },
+ "description": "Lista odczytanych uprawnień."
+ },
+ "hasMore": {
+ "type": "boolean",
+ "description": "Flaga informująca o dostępności kolejnej strony wyników."
+ }
+ },
+ "additionalProperties": false
+ },
+ "QueryEntityRolesResponse": {
+ "required": [
+ "hasMore",
+ "roles"
+ ],
+ "type": "object",
+ "properties": {
+ "roles": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/EntityRole"
+ },
+ "description": "Lista odczytanych ról podmiotu."
+ },
+ "hasMore": {
+ "type": "boolean",
+ "description": "Flaga informująca o dostępności kolejnej strony wyników."
+ }
+ },
+ "additionalProperties": false
+ },
+ "QueryEuEntityPermissionsResponse": {
+ "required": [
+ "hasMore",
+ "permissions"
+ ],
+ "type": "object",
+ "properties": {
+ "permissions": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/EuEntityPermission"
+ },
+ "description": "Lista odczytanych uprawnień."
+ },
+ "hasMore": {
+ "type": "boolean",
+ "description": "Flaga informująca o dostępności kolejnej strony wyników."
+ }
+ },
+ "additionalProperties": false
+ },
+ "QueryInvoicesMetadataResponse": {
+ "required": [
+ "hasMore",
+ "invoices",
+ "isTruncated"
+ ],
+ "type": "object",
+ "properties": {
+ "hasMore": {
+ "type": "boolean",
+ "description": "Określa, czy istnieją kolejne wyniki zapytania."
+ },
+ "isTruncated": {
+ "type": "boolean",
+ "description": "Określa, czy osiągnięto maksymalny dopuszczalny zakres wyników zapytania (10 000)."
+ },
+ "invoices": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/InvoiceMetadata"
+ },
+ "description": "Lista faktur spełniających kryteria."
+ }
+ },
+ "additionalProperties": false
+ },
+ "QueryPeppolProvidersResponse": {
+ "required": [
+ "hasMore",
+ "peppolProviders"
+ ],
+ "type": "object",
+ "properties": {
+ "peppolProviders": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/PeppolProvider"
+ },
+ "description": "Lista dostawców usług Peppol."
+ },
+ "hasMore": {
+ "type": "boolean",
+ "description": "Flaga informująca o dostępności kolejnej strony wyników."
+ }
+ },
+ "additionalProperties": false
+ },
+ "QueryPersonPermissionsResponse": {
+ "required": [
+ "hasMore",
+ "permissions"
+ ],
+ "type": "object",
+ "properties": {
+ "permissions": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/PersonPermission"
+ },
+ "description": "Lista odczytanych uprawnień."
+ },
+ "hasMore": {
+ "type": "boolean",
+ "description": "Flaga informująca o dostępności kolejnej strony wyników."
+ }
+ },
+ "additionalProperties": false
+ },
+ "QueryPersonalPermissionsResponse": {
+ "required": [
+ "hasMore",
+ "permissions"
+ ],
+ "type": "object",
+ "properties": {
+ "permissions": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/PersonalPermission"
+ },
+ "description": "Lista odczytanych uprawnień."
+ },
+ "hasMore": {
+ "type": "boolean",
+ "description": "Flaga informująca o dostępności kolejnej strony wyników."
+ }
+ },
+ "additionalProperties": false
+ },
+ "QuerySubordinateEntityRolesResponse": {
+ "required": [
+ "hasMore",
+ "roles"
+ ],
+ "type": "object",
+ "properties": {
+ "roles": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/SubordinateEntityRole"
+ },
+ "description": "Lista odczytanych podmiotów podrzędnych i ich ról."
+ },
+ "hasMore": {
+ "type": "boolean",
+ "description": "Flaga informująca o dostępności kolejnej strony wyników."
+ }
+ },
+ "additionalProperties": false
+ },
+ "QuerySubunitPermissionsResponse": {
+ "required": [
+ "hasMore",
+ "permissions"
+ ],
+ "type": "object",
+ "properties": {
+ "permissions": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/SubunitPermission"
+ },
+ "description": "Lista odczytanych uprawnień."
+ },
+ "hasMore": {
+ "type": "boolean",
+ "description": "Flaga informująca o dostępności kolejnej strony wyników."
+ }
+ },
+ "additionalProperties": false
+ },
+ "QueryTokensResponse": {
+ "required": [
+ "tokens"
+ ],
+ "type": "object",
+ "properties": {
+ "continuationToken": {
+ "type": "string",
+ "description": "Token służący do pobrania kolejnej strony wyników. Jeśli jest pusty, to nie ma kolejnych stron.",
+ "nullable": true
+ },
+ "tokens": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/QueryTokensResponseItem"
+ },
+ "description": "Lista tokenów uwierzytelniających."
+ }
+ },
+ "additionalProperties": false
+ },
+ "QueryTokensResponseItem": {
+ "required": [
+ "authorIdentifier",
+ "contextIdentifier",
+ "dateCreated",
+ "description",
+ "referenceNumber",
+ "requestedPermissions",
+ "status"
+ ],
+ "type": "object",
+ "properties": {
+ "referenceNumber": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ReferenceNumber"
+ }
+ ],
+ "description": "Numer referencyjny tokena KSeF."
+ },
+ "authorIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/TokenAuthorIdentifierTypeIdentifier"
+ }
+ ],
+ "description": "Identyfikator osoby która wygenerowała token."
+ },
+ "contextIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/TokenContextIdentifierTypeIdentifier"
+ }
+ ],
+ "description": "Identyfikator kontekstu, w którym został wygenerowany token i do którego daje dostęp."
+ },
+ "description": {
+ "maxLength": 256,
+ "minLength": 5,
+ "type": "string",
+ "description": "Opis tokena."
+ },
+ "requestedPermissions": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/TokenPermissionType"
+ },
+ "description": "Uprawnienia przypisane tokenowi."
+ },
+ "dateCreated": {
+ "type": "string",
+ "description": "Data i czas utworzenia tokena.",
+ "format": "date-time"
+ },
+ "lastUseDate": {
+ "type": "string",
+ "description": "Data ostatniego użycia tokena.",
+ "format": "date-time",
+ "nullable": true
+ },
+ "status": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/AuthenticationTokenStatus"
+ }
+ ],
+ "description": "Status tokena.\n| Wartość | Opis |\n| --- | --- |\n| Pending | Token został utworzony ale jest jeszcze w trakcie aktywacji i nadawania uprawnień. Nie może być jeszcze wykorzystywany do uwierzytelniania. |\n| Active | Token jest aktywny i może być wykorzystywany do uwierzytelniania. |\n| Revoking | Token jest w trakcie unieważniania. Nie może już być wykorzystywany do uwierzytelniania. |\n| Revoked | Token został unieważniony i nie może być wykorzystywany do uwierzytelniania. |\n| Failed | Nie udało się aktywować tokena. Należy wygenerować nowy token, obecny nie może być wykorzystywany do uwierzytelniania. |\n"
+ },
+ "statusDetails": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "description": "Dodatkowe informacje na temat statusu, zwracane w przypadku błędów.",
+ "nullable": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "QueryType": {
+ "enum": [
+ "Granted",
+ "Received"
+ ],
+ "type": "string"
+ },
+ "ReferenceNumber": {
+ "maxLength": 36,
+ "minLength": 36,
+ "type": "string",
+ "description": "Numer referencyjny."
+ },
+ "RetrieveCertificatesListItem": {
+ "required": [
+ "certificate",
+ "certificateName",
+ "certificateSerialNumber",
+ "certificateType"
+ ],
+ "type": "object",
+ "properties": {
+ "certificate": {
+ "type": "string",
+ "description": "Certyfikat w formacie DER zakodowany w Base64.",
+ "format": "byte"
+ },
+ "certificateName": {
+ "type": "string",
+ "description": "Nazwa własna certyfikatu."
+ },
+ "certificateSerialNumber": {
+ "type": "string",
+ "description": "Numer seryjny certyfikatu."
+ },
+ "certificateType": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/KsefCertificateType"
+ }
+ ],
+ "description": "Typ certyfikatu.\n| Wartość | Opis |\n| --- | --- |\n| Authentication | Certyfikat używany do uwierzytelnienia w systemie. |\n| Offline | Certyfikat używany wyłącznie do potwierdzania autentyczności wystawcy i integralności faktury w trybie offline |\n"
+ }
+ },
+ "additionalProperties": false
+ },
+ "RetrieveCertificatesRequest": {
+ "required": [
+ "certificateSerialNumbers"
+ ],
+ "type": "object",
+ "properties": {
+ "certificateSerialNumbers": {
+ "maxItems": 10,
+ "minItems": 1,
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "description": "Numery seryjne certyfikatów do pobrania."
+ }
+ },
+ "additionalProperties": false
+ },
+ "RetrieveCertificatesResponse": {
+ "required": [
+ "certificates"
+ ],
+ "type": "object",
+ "properties": {
+ "certificates": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/RetrieveCertificatesListItem"
+ },
+ "description": "Pobrane certyfikaty."
+ }
+ },
+ "additionalProperties": false
+ },
+ "RevokeCertificateRequest": {
+ "type": "object",
+ "properties": {
+ "revocationReason": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/CertificateRevocationReason"
+ }
+ ],
+ "description": "Powód unieważnienia certyfikatu.\n| Wartość | Opis |\n| --- | --- |\n| Unspecified | Nieokreślony. |\n| Superseded | Certyfikat został zastąpiony przez inny. |\n| KeyCompromise | Klucz prywatny powiązany z certyfikatem został skompromitowany. |\n",
+ "nullable": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "SendInvoiceRequest": {
+ "required": [
+ "encryptedInvoiceContent",
+ "encryptedInvoiceHash",
+ "encryptedInvoiceSize",
+ "invoiceHash",
+ "invoiceSize"
+ ],
+ "type": "object",
+ "properties": {
+ "invoiceHash": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/Sha256HashBase64"
+ }
+ ],
+ "description": "Skrót SHA256 oryginalnej faktury, zakodowany w formacie Base64."
+ },
+ "invoiceSize": {
+ "minimum": 1,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "description": "Rozmiar oryginalnej faktury w bajtach. Maksymalny rozmiar zależy od limitów ustawionych dla uwierzytelnionego kontekstu.",
+ "format": "int64"
+ },
+ "encryptedInvoiceHash": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/Sha256HashBase64"
+ }
+ ],
+ "description": "Skrót SHA256 zaszyfrowanej faktury, zakodowany w formacie Base64."
+ },
+ "encryptedInvoiceSize": {
+ "minimum": 1,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "description": "Rozmiar zaszyfrowanej faktury w bajtach.",
+ "format": "int64"
+ },
+ "encryptedInvoiceContent": {
+ "type": "string",
+ "description": "Faktura zaszyfrowana algorytmem AES-256-CBC z dopełnianiem PKCS#7 (kluczem przekazanym przy otwarciu sesji), zakodowana w formacie Base64.",
+ "format": "byte"
+ },
+ "offlineMode": {
+ "type": "boolean",
+ "description": "Określa, czy podatnik deklaruje tryb fakturowania \"offline\" dla przesyłanego dokumentu.",
+ "default": false
+ },
+ "hashOfCorrectedInvoice": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/Sha256HashBase64"
+ }
+ ],
+ "description": "Skrót SHA256 korygowanej faktury, zakodowany w formacie Base64. Wymagany przy wysyłaniu korekty technicznej faktury.",
+ "nullable": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "SendInvoiceResponse": {
+ "required": [
+ "referenceNumber"
+ ],
+ "type": "object",
+ "properties": {
+ "referenceNumber": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ReferenceNumber"
+ }
+ ],
+ "description": "Numer referencyjny faktury."
+ }
+ },
+ "additionalProperties": false
+ },
+ "SessionInvoiceStatusResponse": {
+ "required": [
+ "invoiceHash",
+ "invoicingDate",
+ "ordinalNumber",
+ "referenceNumber",
+ "status"
+ ],
+ "type": "object",
+ "properties": {
+ "ordinalNumber": {
+ "minimum": 1,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "description": "Numer sekwencyjny faktury w ramach sesji.",
+ "format": "int32"
+ },
+ "invoiceNumber": {
+ "maxLength": 256,
+ "type": "string",
+ "description": "Numer faktury.",
+ "nullable": true
+ },
+ "ksefNumber": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/KsefNumber"
+ }
+ ],
+ "description": "Numer KSeF.",
+ "nullable": true
+ },
+ "referenceNumber": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ReferenceNumber"
+ }
+ ],
+ "description": "Numer referencyjny faktury."
+ },
+ "invoiceHash": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/Sha256HashBase64"
+ }
+ ],
+ "description": "Skrót SHA256 faktury, zakodowany w formacie Base64."
+ },
+ "invoiceFileName": {
+ "maxLength": 128,
+ "type": "string",
+ "description": "Nazwa pliku faktury (zwracana dla faktur wysyłanych wsadowo).",
+ "nullable": true
+ },
+ "acquisitionDate": {
+ "type": "string",
+ "description": "Data nadania numeru KSeF.",
+ "format": "date-time",
+ "nullable": true
+ },
+ "invoicingDate": {
+ "type": "string",
+ "description": "Data przyjęcia faktury w systemie KSeF (do dalszego przetwarzania).",
+ "format": "date-time"
+ },
+ "permanentStorageDate": {
+ "type": "string",
+ "description": "Data trwałego zapisu faktury w repozytorium KSeF. Wartość uzupełniana asynchronicznie w momencie trwałego zapisu; zawsze późniejsza niż acquisitionDate. Podczas sprawdzania statusu może być jeszcze niedostępna.",
+ "format": "date-time",
+ "nullable": true
+ },
+ "upoDownloadUrl": {
+ "type": "string",
+ "description": "Adres do pobrania UPO. Link generowany jest przy każdym odpytaniu o status. \nDostęp odbywa się metodą `HTTP GET` i nie należy wysyłać tokenu dostępowego. \nLink nie podlega limitom API i wygasa po określonym czasie w `UpoDownloadUrlExpirationDate`.",
+ "format": "uri",
+ "nullable": true
+ },
+ "upoDownloadUrlExpirationDate": {
+ "type": "string",
+ "description": "Data i godzina wygaśnięcia adresu. Po tej dacie link `UpoDownloadUrl` nie będzie już aktywny.",
+ "format": "date-time",
+ "nullable": true
+ },
+ "invoicingMode": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/InvoicingMode"
+ }
+ ],
+ "description": "Tryb fakturowania (online/offline).",
+ "nullable": true
+ },
+ "status": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/StatusInfo"
+ }
+ ],
+ "description": "Status faktury.\n\n| Code | Description | Details |\n| --- | --- | --- |\n| 100 | Faktura przyjęta do dalszego przetwarzania | - |\n| 150 | Trwa przetwarzanie | - |\n| 200 | Sukces | - |\n| 405 | Przetwarzanie anulowane z powodu błędu sesji | - |\n| 410 | Nieprawidłowy zakres uprawnień | - |\n| 415 | Brak możliwości wysyłania faktury z załącznikiem | - |\n| 430 | Błąd weryfikacji pliku faktury | - |\n| 435 | Błąd odszyfrowania pliku | - |\n| 440 | Duplikat faktury | - |\n| 450 | Błąd weryfikacji semantyki dokumentu faktury | - |\n| 500 | Nieznany błąd ({statusCode}) | - |\n| 550 | Operacja została anulowana przez system | Przetwarzanie zostało przerwane z przyczyn wewnętrznych systemu. Spróbuj ponownie |"
+ }
+ },
+ "additionalProperties": false
+ },
+ "SessionInvoicesResponse": {
+ "required": [
+ "invoices"
+ ],
+ "type": "object",
+ "properties": {
+ "continuationToken": {
+ "type": "string",
+ "description": "Token służący do pobrania kolejnej strony wyników. Jeśli jest pusty, to nie ma kolejnych stron.",
+ "nullable": true
+ },
+ "invoices": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/SessionInvoiceStatusResponse"
+ },
+ "description": "Lista pobranych faktur."
+ }
+ },
+ "additionalProperties": false
+ },
+ "SessionStatusResponse": {
+ "required": [
+ "status"
+ ],
+ "type": "object",
+ "properties": {
+ "status": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/StatusInfo"
+ }
+ ],
+ "description": "Informacje o aktualnym statusie.\n \nSesja wsadowa:\n| Code | Description | Details |\n| --- | --- | --- |\n| 100 | Sesja wsadowa rozpoczęta | - |\n| 150 | Trwa przetwarzanie | - |\n| 200 | Sesja wsadowa przetworzona pomyślnie | - |\n| 405 | Błąd weryfikacji poprawności dostarczonych elementów paczki | - |\n| 415 | Błąd odszyfrowania dostarczonego klucza | - |\n| 420 | Przekroczony limit faktur w sesji | - |\n| 430 | Błąd dekompresji pierwotnego archiwum | - |\n| 435 | Błąd odszyfrowania zaszyfrowanych części archiwum | - |\n| 440 | Sesja anulowana | Przekroczono czas wysyłki |\n| 440 | Sesja anulowana | Nie przesłano faktur |\n| 445 | Błąd weryfikacji, brak poprawnych faktur | - |\n| 500 | Nieznany błąd ({statusCode}) | - |\n\nSesja interaktywna:\n| Code | Description | Details |\n| --- | --- | --- |\n| 100 | Sesja interaktywna otwarta | - |\n| 170 | Sesja interaktywna zamknięta | - |\n| 200 | Sesja interaktywna przetworzona pomyślnie | - |\n| 415 | Błąd odszyfrowania dostarczonego klucza | - |\n| 440 | Sesja anulowana | Nie przesłano faktur |\n| 445 | Błąd weryfikacji, brak poprawnych faktur | - |\n| * | description missing | - |"
+ },
+ "validUntil": {
+ "type": "string",
+ "description": "Termin ważności sesji. Po jego upływie sesja zostanie automatycznie zamknięta.",
+ "format": "date-time",
+ "nullable": true,
+ "readOnly": true
+ },
+ "upo": {
+ "required": [
+ "pages"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/UpoResponse"
+ }
+ ],
+ "description": "Informacja o UPO sesyjnym, zwracana gdy sesja została zamknięta i UPO zostało wygenerowane.",
+ "nullable": true
+ },
+ "invoiceCount": {
+ "minimum": 0,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "description": "Liczba przyjętych faktur w ramach sesji.",
+ "format": "int32",
+ "nullable": true
+ },
+ "successfulInvoiceCount": {
+ "minimum": 0,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "description": "Liczba faktur przeprocesowanych w ramach sesji z sukcesem .",
+ "format": "int32",
+ "nullable": true
+ },
+ "failedInvoiceCount": {
+ "minimum": 0,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "description": "Liczba faktur przeprocesowanych w ramach sesji z błędem.",
+ "format": "int32",
+ "nullable": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "SessionType": {
+ "enum": [
+ "Online",
+ "Batch"
+ ],
+ "type": "string",
+ "description": "| Wartość | Opis |\n| --- | --- |\n| Online | Wysyłka interaktywna (pojedyncze faktury). |\n| Batch | Wysyłka wsadowa (paczka faktur). |\n"
+ },
+ "SessionsQueryResponse": {
+ "required": [
+ "sessions"
+ ],
+ "type": "object",
+ "properties": {
+ "continuationToken": {
+ "type": "string",
+ "description": "Token służący do pobrania kolejnej strony wyników. Jeśli jest pusty, to nie ma kolejnych stron.",
+ "nullable": true
+ },
+ "sessions": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/SessionsQueryResponseItem"
+ },
+ "description": "Lista sesji."
+ }
+ },
+ "additionalProperties": false
+ },
+ "SessionsQueryResponseItem": {
+ "required": [
+ "dateCreated",
+ "dateUpdated",
+ "failedInvoiceCount",
+ "referenceNumber",
+ "status",
+ "successfulInvoiceCount",
+ "totalInvoiceCount"
+ ],
+ "type": "object",
+ "properties": {
+ "referenceNumber": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ReferenceNumber"
+ }
+ ],
+ "description": "Numer referencyjny sesji."
+ },
+ "status": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/StatusInfo"
+ }
+ ],
+ "description": "Status sesji."
+ },
+ "dateCreated": {
+ "type": "string",
+ "description": "Data utworzenia sesji.",
+ "format": "date-time"
+ },
+ "dateUpdated": {
+ "type": "string",
+ "description": "Data ostatniej aktywności w ramach sesji.",
+ "format": "date-time"
+ },
+ "validUntil": {
+ "type": "string",
+ "description": "Termin ważności sesji. Po jego upływie sesja interaktywna zostanie automatycznie zamknięta.",
+ "format": "date-time",
+ "nullable": true
+ },
+ "totalInvoiceCount": {
+ "minimum": 0,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "description": "Łączna liczba faktur (uwzględnia również te w trakcie przetwarzania).",
+ "format": "int32"
+ },
+ "successfulInvoiceCount": {
+ "minimum": 0,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "description": "Liczba poprawnie przetworzonych faktur.",
+ "format": "int32"
+ },
+ "failedInvoiceCount": {
+ "minimum": 0,
+ "exclusiveMinimum": false,
+ "type": "integer",
+ "description": "Liczba błędnie przetworzonych faktur.",
+ "format": "int32"
+ }
+ },
+ "additionalProperties": false
+ },
+ "SetRateLimitsRequest": {
+ "required": [
+ "rateLimits"
+ ],
+ "type": "object",
+ "properties": {
+ "rateLimits": {
+ "required": [
+ "onlineSession",
+ "batchSession",
+ "invoiceSend",
+ "invoiceStatus",
+ "sessionList",
+ "sessionInvoiceList",
+ "sessionMisc",
+ "invoiceMetadata",
+ "invoiceExport",
+ "invoiceDownload",
+ "other"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ApiRateLimitsOverride"
+ }
+ ],
+ "description": "Limity dla ilości żądań do API."
+ }
+ },
+ "additionalProperties": false
+ },
+ "SetSessionLimitsRequest": {
+ "required": [
+ "batchSession",
+ "onlineSession"
+ ],
+ "type": "object",
+ "properties": {
+ "onlineSession": {
+ "required": [
+ "maxInvoiceSizeInMB",
+ "maxInvoiceWithAttachmentSizeInMB",
+ "maxInvoices"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/OnlineSessionContextLimitsOverride"
+ }
+ ],
+ "description": "Limity dla sesji interaktywnych."
+ },
+ "batchSession": {
+ "required": [
+ "maxInvoiceSizeInMB",
+ "maxInvoiceWithAttachmentSizeInMB",
+ "maxInvoices"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BatchSessionContextLimitsOverride"
+ }
+ ],
+ "description": "Limity dla sesji wsadowych."
+ }
+ },
+ "additionalProperties": false
+ },
+ "SetSubjectLimitsRequest": {
+ "type": "object",
+ "properties": {
+ "subjectIdentifierType": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/SubjectIdentifierType"
+ }
+ ]
+ },
+ "enrollment": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/EnrollmentSubjectLimitsOverride"
+ }
+ ],
+ "nullable": true
+ },
+ "certificate": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/CertificateSubjectLimitsOverride"
+ }
+ ],
+ "nullable": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "Sha256HashBase64": {
+ "maxLength": 44,
+ "minLength": 44,
+ "type": "string",
+ "description": "SHA-256 w Base64.",
+ "format": "byte"
+ },
+ "SortOrder": {
+ "enum": [
+ "Asc",
+ "Desc"
+ ],
+ "type": "string",
+ "description": "| Wartość | Opis |\n| --- | --- |\n| Asc | Sortowanie rosnąco. |\n| Desc | Sortowanie malejąco. |\n"
+ },
+ "StatusInfo": {
+ "required": [
+ "code",
+ "description"
+ ],
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "description": "Kod statusu",
+ "format": "int32"
+ },
+ "description": {
+ "minLength": 1,
+ "type": "string",
+ "description": "Opis statusu"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "description": "Dodatkowe szczegóły statusu",
+ "nullable": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "SubjectCreateRequest": {
+ "required": [
+ "description",
+ "subjectNip",
+ "subjectType"
+ ],
+ "type": "object",
+ "properties": {
+ "subjectNip": {
+ "$ref": "#/components/schemas/Nip"
+ },
+ "subjectType": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/SubjectType"
+ }
+ ]
+ },
+ "subunits": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/Subunit"
+ },
+ "nullable": true
+ },
+ "description": {
+ "maxLength": 256,
+ "minLength": 5,
+ "type": "string"
+ },
+ "createdDate": {
+ "type": "string",
+ "description": "W przypadku wielokrotnego tworzenia danych testowych z tym samym identyfikatorem nie można podawać daty wcześniejszej ani takiej samej jak poprzednia.",
+ "format": "date-time",
+ "nullable": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "SubjectIdentifierType": {
+ "enum": [
+ "Nip",
+ "Pesel",
+ "Fingerprint",
+ "Token"
+ ],
+ "type": "string"
+ },
+ "SubjectRemoveRequest": {
+ "required": [
+ "subjectNip"
+ ],
+ "type": "object",
+ "properties": {
+ "subjectNip": {
+ "$ref": "#/components/schemas/Nip"
+ }
+ },
+ "additionalProperties": false
+ },
+ "SubjectType": {
+ "enum": [
+ "EnforcementAuthority",
+ "VatGroup",
+ "JST"
+ ],
+ "type": "string"
+ },
+ "SubordinateEntityRole": {
+ "required": [
+ "description",
+ "role",
+ "startDate",
+ "subordinateEntityIdentifier"
+ ],
+ "type": "object",
+ "properties": {
+ "subordinateEntityIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/SubordinateRoleSubordinateEntityIdentifier"
+ }
+ ],
+ "description": "Identyfikator podmiotu podrzędnego.\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |"
+ },
+ "role": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/SubordinateEntityRoleType"
+ }
+ ],
+ "description": "Typ roli - powiązania z podmiotem nadrzędnym."
+ },
+ "description": {
+ "maxLength": 256,
+ "minLength": 5,
+ "type": "string",
+ "description": "Opis powiązania."
+ },
+ "startDate": {
+ "type": "string",
+ "description": "Data rozpoczęcia obowiązywania powiązania.",
+ "format": "date-time"
+ }
+ },
+ "additionalProperties": false
+ },
+ "SubordinateEntityRoleType": {
+ "enum": [
+ "LocalGovernmentSubUnit",
+ "VatGroupSubUnit"
+ ],
+ "type": "string"
+ },
+ "SubordinateEntityRolesQueryRequest": {
+ "type": "object",
+ "properties": {
+ "subordinateEntityIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/EntityPermissionsSubordinateEntityIdentifier"
+ }
+ ],
+ "description": "Identyfikator podmiotu podrzędnego.\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |",
+ "nullable": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "SubordinateRoleSubordinateEntityIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "type": "object",
+ "properties": {
+ "type": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/SubordinateRoleSubordinateEntityIdentifierType"
+ }
+ ],
+ "description": "Typ identyfikatora."
+ },
+ "value": {
+ "type": "string",
+ "description": "Wartość identyfikatora."
+ }
+ },
+ "additionalProperties": false,
+ "description": "Identyfikator podmiotu podrzędnego.\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |"
+ },
+ "SubordinateRoleSubordinateEntityIdentifierType": {
+ "enum": [
+ "Nip"
+ ],
+ "type": "string"
+ },
+ "Subunit": {
+ "required": [
+ "description",
+ "subjectNip"
+ ],
+ "type": "object",
+ "properties": {
+ "subjectNip": {
+ "$ref": "#/components/schemas/Nip"
+ },
+ "description": {
+ "maxLength": 256,
+ "minLength": 5,
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "SubunitPermission": {
+ "required": [
+ "authorIdentifier",
+ "authorizedIdentifier",
+ "description",
+ "id",
+ "permissionScope",
+ "startDate",
+ "subunitIdentifier"
+ ],
+ "type": "object",
+ "properties": {
+ "id": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PermissionId"
+ }
+ ],
+ "description": "Identyfikator uprawnienia."
+ },
+ "authorizedIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/SubunitPermissionsAuthorizedIdentifier"
+ }
+ ],
+ "description": "Identyfikator uprawnionego.\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |\n| Pesel | 11 cyfrowy numer PESEL |\n| Fingerprint | Odcisk palca certyfikatu |"
+ },
+ "subunitIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/SubunitPermissionsSubunitIdentifier"
+ }
+ ],
+ "description": "Identyfikator jednostki lub podmiotu podrzędnego.\n| Type | Value |\n| --- | --- |\n| InternalId | Dwuczłonowy identyfikator składający się z numeru NIP i 5 cyfr: `{nip}-{5_cyfr}` |\n| Nip | 10 cyfrowy numer NIP |"
+ },
+ "authorIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/SubunitPermissionsAuthorIdentifier"
+ }
+ ],
+ "description": "Identyfikator uprawniającego.\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |\n| Pesel | 11 cyfrowy numer PESEL |\n| Fingerprint | Odcisk palca certyfikatu |"
+ },
+ "permissionScope": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/SubunitPermissionScope"
+ }
+ ],
+ "description": "Rodzaj uprawnienia."
+ },
+ "description": {
+ "maxLength": 256,
+ "minLength": 5,
+ "type": "string",
+ "description": "Opis uprawnienia."
+ },
+ "subunitName": {
+ "maxLength": 256,
+ "minLength": 5,
+ "type": "string",
+ "description": "Nazwa jednostki podrzędnej.",
+ "nullable": true
+ },
+ "startDate": {
+ "type": "string",
+ "description": "Data rozpoczęcia obowiązywania uprawnienia.",
+ "format": "date-time"
+ }
+ },
+ "additionalProperties": false
+ },
+ "SubunitPermissionScope": {
+ "enum": [
+ "CredentialsManage"
+ ],
+ "type": "string"
+ },
+ "SubunitPermissionsAuthorIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "type": "object",
+ "properties": {
+ "type": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/SubunitPermissionsAuthorIdentifierType"
+ }
+ ],
+ "description": "Typ identyfikatora."
+ },
+ "value": {
+ "type": "string",
+ "description": "Wartość identyfikatora."
+ }
+ },
+ "additionalProperties": false,
+ "description": "Identyfikator uprawniającego.\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |\n| Pesel | 11 cyfrowy numer PESEL |\n| Fingerprint | Odcisk palca certyfikatu |"
+ },
+ "SubunitPermissionsAuthorIdentifierType": {
+ "enum": [
+ "Nip",
+ "Pesel",
+ "Fingerprint"
+ ],
+ "type": "string"
+ },
+ "SubunitPermissionsAuthorizedIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "type": "object",
+ "properties": {
+ "type": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/SubunitPermissionsSubjectIdentifierType"
+ }
+ ],
+ "description": "Typ identyfikatora."
+ },
+ "value": {
+ "type": "string",
+ "description": "Wartość identyfikatora."
+ }
+ },
+ "additionalProperties": false,
+ "description": "Identyfikator uprawnionego.\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |\n| Pesel | 11 cyfrowy numer PESEL |\n| Fingerprint | Odcisk palca certyfikatu |"
+ },
+ "SubunitPermissionsContextIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "type": "object",
+ "properties": {
+ "type": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/SubunitPermissionsContextIdentifierType"
+ }
+ ],
+ "description": "Typ identyfikatora."
+ },
+ "value": {
+ "type": "string",
+ "description": "Wartość identyfikatora."
+ }
+ },
+ "additionalProperties": false,
+ "description": "Identyfikator podmiotu podrzędnego.\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |\n| InternalId | Dwuczłonowy identyfikator składający się z numeru NIP i 5 cyfr: `{nip}-{5_cyfr}` |"
+ },
+ "SubunitPermissionsContextIdentifierType": {
+ "enum": [
+ "InternalId",
+ "Nip"
+ ],
+ "type": "string"
+ },
+ "SubunitPermissionsGrantRequest": {
+ "required": [
+ "contextIdentifier",
+ "description",
+ "subjectIdentifier"
+ ],
+ "type": "object",
+ "properties": {
+ "subjectIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/SubunitPermissionsSubjectIdentifier"
+ }
+ ],
+ "description": "Identyfikator podmiotu lub osoby fizycznej.\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |\n| Pesel | 11 cyfrowy numer PESEL |\n| Fingerprint | Odcisk palca certyfikatu |"
+ },
+ "contextIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/SubunitPermissionsContextIdentifier"
+ }
+ ],
+ "description": "Identyfikator podmiotu podrzędnego.\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |\n| InternalId | Dwuczłonowy identyfikator składający się z numeru NIP i 5 cyfr: `{nip}-{5_cyfr}` |"
+ },
+ "description": {
+ "maxLength": 256,
+ "minLength": 5,
+ "type": "string",
+ "description": "Opis uprawnienia"
+ },
+ "subunitName": {
+ "maxLength": 256,
+ "minLength": 5,
+ "type": "string",
+ "description": "Nazwa jednostki podrzędnej. W przypadku jednostki podrzędnej z identyfikatorem wewnętrznym pole jest wymagane.",
+ "nullable": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "SubunitPermissionsQueryRequest": {
+ "type": "object",
+ "properties": {
+ "subunitIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/SubunitPermissionsSubunitIdentifier"
+ }
+ ],
+ "description": "Identyfikator jednostki lub podmiotu podrzędnego.\n| Type | Value |\n| --- | --- |\n| InternalId | Dwuczłonowy identyfikator składający się z numeru NIP i 5 cyfr: `{nip}-{5_cyfr}` |\n| Nip | 10 cyfrowy numer NIP |",
+ "nullable": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "SubunitPermissionsSubjectIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "type": "object",
+ "properties": {
+ "type": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/SubunitPermissionsSubjectIdentifierType"
+ }
+ ],
+ "description": "Typ identyfikatora."
+ },
+ "value": {
+ "type": "string",
+ "description": "Wartość identyfikatora."
+ }
+ },
+ "additionalProperties": false,
+ "description": "Identyfikator podmiotu lub osoby fizycznej.\n| Type | Value |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |\n| Pesel | 11 cyfrowy numer PESEL |\n| Fingerprint | Odcisk palca certyfikatu |"
+ },
+ "SubunitPermissionsSubjectIdentifierType": {
+ "enum": [
+ "Nip",
+ "Pesel",
+ "Fingerprint"
+ ],
+ "type": "string"
+ },
+ "SubunitPermissionsSubunitIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "type": "object",
+ "properties": {
+ "type": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/SubunitPermissionsSubunitIdentifierType"
+ }
+ ],
+ "description": "Typ identyfikatora."
+ },
+ "value": {
+ "type": "string",
+ "description": "Wartość identyfikatora."
+ }
+ },
+ "additionalProperties": false,
+ "description": "Identyfikator jednostki lub podmiotu podrzędnego.\n| Type | Value |\n| --- | --- |\n| InternalId | Dwuczłonowy identyfikator składający się z numeru NIP i 5 cyfr: `{nip}-{5_cyfr}` |\n| Nip | 10 cyfrowy numer NIP |"
+ },
+ "SubunitPermissionsSubunitIdentifierType": {
+ "enum": [
+ "InternalId",
+ "Nip"
+ ],
+ "type": "string"
+ },
+ "TestDataAuthorizedIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "type": "object",
+ "properties": {
+ "type": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/TestDataAuthorizedIdentifierType"
+ }
+ ]
+ },
+ "value": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "TestDataAuthorizedIdentifierType": {
+ "enum": [
+ "Nip",
+ "Pesel",
+ "Fingerprint"
+ ],
+ "type": "string"
+ },
+ "TestDataContextIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "type": "object",
+ "properties": {
+ "type": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/TestDataContextIdentifierType"
+ }
+ ]
+ },
+ "value": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "TestDataContextIdentifierType": {
+ "enum": [
+ "Nip"
+ ],
+ "type": "string"
+ },
+ "TestDataPermission": {
+ "required": [
+ "description",
+ "permissionType"
+ ],
+ "type": "object",
+ "properties": {
+ "description": {
+ "maxLength": 256,
+ "minLength": 5,
+ "type": "string"
+ },
+ "permissionType": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/TestDataPermissionType"
+ }
+ ]
+ }
+ },
+ "additionalProperties": false
+ },
+ "TestDataPermissionType": {
+ "enum": [
+ "InvoiceRead",
+ "InvoiceWrite",
+ "Introspection",
+ "CredentialsRead",
+ "CredentialsManage",
+ "EnforcementOperations",
+ "SubunitManage"
+ ],
+ "type": "string"
+ },
+ "TestDataPermissionsGrantRequest": {
+ "required": [
+ "authorizedIdentifier",
+ "contextIdentifier",
+ "permissions"
+ ],
+ "type": "object",
+ "properties": {
+ "contextIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/TestDataContextIdentifier"
+ }
+ ]
+ },
+ "authorizedIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/TestDataAuthorizedIdentifier"
+ }
+ ]
+ },
+ "permissions": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/TestDataPermission"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "TestDataPermissionsRevokeRequest": {
+ "required": [
+ "authorizedIdentifier",
+ "contextIdentifier"
+ ],
+ "type": "object",
+ "properties": {
+ "contextIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/TestDataContextIdentifier"
+ }
+ ]
+ },
+ "authorizedIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/TestDataAuthorizedIdentifier"
+ }
+ ]
+ }
+ },
+ "additionalProperties": false
+ },
+ "ThirdSubjectIdentifierType": {
+ "enum": [
+ "Nip",
+ "InternalId",
+ "VatUe",
+ "Other",
+ "None"
+ ],
+ "type": "string",
+ "description": "| Wartość | Opis |\n| --- | --- |\n| Nip | 10 cyfrowy numer NIP |\n| InternalId | Identyfikator wewnętrzny, składający się z numeru NIP i 5 cyfr. |\n| VatUe | Identyfikator VAT UE podmiotu unijnego |\n| Other | Inny identyfikator |\n| None | Brak identyfikatora podmiotu trzeciego |\n"
+ },
+ "TokenAuthorIdentifierType": {
+ "enum": [
+ "Nip",
+ "Pesel",
+ "Fingerprint"
+ ],
+ "type": "string",
+ "description": "| Wartość | Opis |\n| --- | --- |\n| Nip | NIP. |\n| Pesel | PESEL. |\n| Fingerprint | Odcisk palca certyfikatu. |\n"
+ },
+ "TokenAuthorIdentifierTypeIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "type": "object",
+ "properties": {
+ "type": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/TokenAuthorIdentifierType"
+ }
+ ],
+ "description": "Typ identyfikatora.\n| Wartość | Opis |\n| --- | --- |\n| Nip | NIP. |\n| Pesel | PESEL. |\n| Fingerprint | Odcisk palca certyfikatu. |\n"
+ },
+ "value": {
+ "type": "string",
+ "description": "Wartość identyfikatora."
+ }
+ },
+ "additionalProperties": false
+ },
+ "TokenContextIdentifierType": {
+ "enum": [
+ "Nip",
+ "InternalId",
+ "NipVatUe",
+ "PeppolId"
+ ],
+ "type": "string",
+ "description": "| Wartość | Opis |\n| --- | --- |\n| Nip | NIP. |\n| InternalId | Identyfikator wewnętrzny. |\n| NipVatUe | Dwuczłonowy identyfikator składający się z numeru NIP i numeru VAT-UE: `{nip}-{vat_ue}`. |\n| PeppolId | Identyfikator dostawcy usług Peppol. |\n"
+ },
+ "TokenContextIdentifierTypeIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "type": "object",
+ "properties": {
+ "type": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/TokenContextIdentifierType"
+ }
+ ],
+ "description": "Typ identyfikatora.\n| Wartość | Opis |\n| --- | --- |\n| Nip | NIP. |\n| InternalId | Identyfikator wewnętrzny. |\n| NipVatUe | Dwuczłonowy identyfikator składający się z numeru NIP i numeru VAT-UE: `{nip}-{vat_ue}`. |\n| PeppolId | Identyfikator dostawcy usług Peppol. |\n"
+ },
+ "value": {
+ "type": "string",
+ "description": "Wartość identyfikatora."
+ }
+ },
+ "additionalProperties": false
+ },
+ "TokenInfo": {
+ "required": [
+ "token",
+ "validUntil"
+ ],
+ "type": "object",
+ "properties": {
+ "token": {
+ "type": "string",
+ "description": "Token w formacie JWT."
+ },
+ "validUntil": {
+ "type": "string",
+ "description": "Data ważności tokena.",
+ "format": "date-time"
+ }
+ },
+ "additionalProperties": false
+ },
+ "TokenPermissionType": {
+ "enum": [
+ "InvoiceRead",
+ "InvoiceWrite",
+ "CredentialsRead",
+ "CredentialsManage",
+ "SubunitManage",
+ "EnforcementOperations"
+ ],
+ "type": "string"
+ },
+ "TokenStatusResponse": {
+ "required": [
+ "authorIdentifier",
+ "contextIdentifier",
+ "dateCreated",
+ "description",
+ "referenceNumber",
+ "requestedPermissions",
+ "status"
+ ],
+ "type": "object",
+ "properties": {
+ "referenceNumber": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ReferenceNumber"
+ }
+ ],
+ "description": "Numer referencyjny tokena KSeF."
+ },
+ "authorIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/TokenAuthorIdentifierTypeIdentifier"
+ }
+ ],
+ "description": "Identyfikator osoby która wygenerowała token."
+ },
+ "contextIdentifier": {
+ "required": [
+ "type",
+ "value"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/TokenContextIdentifierTypeIdentifier"
+ }
+ ],
+ "description": "Identyfikator kontekstu, w którym został wygenerowany token i do którego daje dostęp."
+ },
+ "description": {
+ "maxLength": 256,
+ "minLength": 5,
+ "type": "string",
+ "description": "Opis tokena."
+ },
+ "requestedPermissions": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/TokenPermissionType"
+ },
+ "description": "Uprawnienia przypisane tokenowi."
+ },
+ "dateCreated": {
+ "type": "string",
+ "description": "Data i czas utworzenia tokena.",
+ "format": "date-time"
+ },
+ "lastUseDate": {
+ "type": "string",
+ "description": "Data ostatniego użycia tokena.",
+ "format": "date-time",
+ "nullable": true
+ },
+ "status": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/AuthenticationTokenStatus"
+ }
+ ],
+ "description": "Status tokena.\n| Wartość | Opis |\n| --- | --- |\n| Pending | Token został utworzony ale jest jeszcze w trakcie aktywacji i nadawania uprawnień. Nie może być jeszcze wykorzystywany do uwierzytelniania. |\n| Active | Token jest aktywny i może być wykorzystywany do uwierzytelniania. |\n| Revoking | Token jest w trakcie unieważniania. Nie może już być wykorzystywany do uwierzytelniania. |\n| Revoked | Token został unieważniony i nie może być wykorzystywany do uwierzytelniania. |\n| Failed | Nie udało się aktywować tokena. Należy wygenerować nowy token, obecny nie może być wykorzystywany do uwierzytelniania. |\n"
+ },
+ "statusDetails": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "description": "Dodatkowe informacje na temat statusu, zwracane w przypadku błędów.",
+ "nullable": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "UpoPageResponse": {
+ "required": [
+ "downloadUrl",
+ "downloadUrlExpirationDate",
+ "referenceNumber"
+ ],
+ "type": "object",
+ "properties": {
+ "referenceNumber": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ReferenceNumber"
+ }
+ ],
+ "description": "Numer referencyjny strony UPO."
+ },
+ "downloadUrl": {
+ "type": "string",
+ "description": "Adres do pobrania strony UPO. Link generowany jest przy każdym odpytaniu o status. \nDostęp odbywa się metodą `HTTP GET` i nie należy wysyłać tokenu dostępowego. \nLink nie podlega limitom API i wygasa po określonym czasie w `DownloadUrlExpirationDate`.",
+ "format": "uri"
+ },
+ "downloadUrlExpirationDate": {
+ "type": "string",
+ "description": "Data i godzina wygaśnięcia adresu. Po tej dacie link `DownloadUrl` nie będzie już aktywny.",
+ "format": "date-time"
+ }
+ },
+ "additionalProperties": false
+ },
+ "UpoResponse": {
+ "required": [
+ "pages"
+ ],
+ "type": "object",
+ "properties": {
+ "pages": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/UpoPageResponse"
+ },
+ "description": "Lista stron UPO."
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "securitySchemes": {
+ "Bearer": {
+ "type": "http",
+ "description": "Token dostępu uzyskany w wyniku operacji uwierzytelnienia.",
+ "scheme": "Bearer",
+ "bearerFormat": "JWT"
+ },
+ "SessionToken": {
+ "type": "apiKey",
+ "name": "SessionToken",
+ "in": "header"
+ }
+ }
+ },
+ "tags": [
+ {
+ "name": "Uzyskiwanie dostępu",
+ "description": "Uwierzytelnianie w systemie KSeF API 2.0 jest obowiązkowym etapem, który należy wykonać przed dostępem do chronionych zasobów systemu. Proces ten oparty jest na **uzyskaniu tokenu dostępu** (```accessToken```) w formacie ```JWT```, który następnie wykorzystywany jest do autoryzacji operacji API.\n\n> Więcej informacji:\n> - [Uwierzytelnianie](https://github.com/CIRFMF/ksef-docs/blob/main/uwierzytelnianie.md)"
+ },
+ {
+ "name": "Aktywne sesje"
+ },
+ {
+ "name": "Limity i ograniczenia"
+ },
+ {
+ "name": "Certyfikaty klucza publicznego"
+ },
+ {
+ "name": "Wysyłka interaktywna"
+ },
+ {
+ "name": "Wysyłka wsadowa",
+ "description": ""
+ },
+ {
+ "name": "Status wysyłki i UPO"
+ },
+ {
+ "name": "Pobieranie faktur"
+ },
+ {
+ "name": "Nadawanie uprawnień"
+ },
+ {
+ "name": "Odbieranie uprawnień"
+ },
+ {
+ "name": "Wyszukiwanie nadanych uprawnień"
+ },
+ {
+ "name": "Operacje"
+ },
+ {
+ "name": "Certyfikaty",
+ "description": "Certyfikat KSeF to cyfrowe poświadczenie tożsamości podmiotu, wydawane przez system KSeF na wniosek uwierzytelnionego podmiotu. \nCertyfikat ten może być wykorzystywany do:\n\n- uwierzytelniania się w systemie KSeF,\n- realizacji operacji w trybie offline, w tym wystawiania faktur bezpośrednio w aplikacji użytkownika.\n\n**Uwaga**: Wnioskowanie o certyfikat KSeF jest możliwe wyłącznie po uwierzytelnieniu z wykorzystaniem podpisu (XAdES). Uwierzytelnienie przy użyciu tokenu systemowego KSeF nie pozwala na złożenie wniosku."
+ },
+ {
+ "name": "Tokeny KSeF",
+ "description": "Token KSeF to unikalny, generowany identyfikator uwierzytelniający, który — na równi z [kwalifikowanym podpisem elektronicznym](https://github.com/CIRFMF/ksef-docs/blob/main/uwierzytelnianie.md#21-uwierzytelnianie-kwalifikowanym-podpisem-elektronicznym) — umożliwia [uwierzytelnienie](https://github.com/CIRFMF/ksef-docs/blob/main/uwierzytelnianie.md#22-uwierzytelnianie-tokenem-ksef) się do API KSeF.\n\nToken KSeF jest wydawany z niezmiennym zestawem uprawnień określonych przy jego tworzeniu; każda modyfikacja tych uprawnień wymaga wygenerowania nowego tokena.\n> **Uwaga!**
\n> Token KSeF pełni rolę **poufnego sekretu** uwierzytelniającego — należy przechowywać go wyłącznie w zaufanym i bezpiecznym magazynie.\n\nWięcej informacji:\n- [Token KSeF](https://github.com/CIRFMF/ksef-docs/blob/main/tokeny-ksef.md)\n"
+ },
+ {
+ "name": "Usługi Peppol",
+ "description": ""
+ },
+ {
+ "name": "Dane testowe",
+ "description": "API służy do tworzenia i zarządzania danymi testowymi, takimi jak podmioty, osoby fizyczne oraz uprawnienia. Możliwe do utworzenia podmioty to: organ egzekucyjny, grupa VAT oraz jednostki samorządu terytorialnego. W przypadku osób fizycznych można określić, czy dana osoba jest komornikiem. Funkcjonalność nadawania i odbierania uprawnień ma na celu odwzorowanie działania formularza ZAW-FA w środowisku testowym.\n\nWięcej informacji:\n- [Scenariusze testowe](https://github.com/CIRFMF/ksef-docs/blob/main/dane-testowe-scenariusze.md)"
+ }
+ ],
+ "x-tagGroups": [
+ {
+ "name": "Uwierzytelnianie",
+ "tags": [
+ "Uzyskiwanie dostępu",
+ "Aktywne sesje"
+ ]
+ },
+ {
+ "name": "Limity i ograniczenia",
+ "tags": [
+ "Limity i ograniczenia"
+ ]
+ },
+ {
+ "name": "Szyfrowanie danych",
+ "tags": [
+ "Certyfikaty klucza publicznego"
+ ]
+ },
+ {
+ "name": "Faktury",
+ "tags": [
+ "Wysyłka interaktywna",
+ "Wysyłka wsadowa",
+ "Status wysyłki i UPO",
+ "Pobieranie faktur"
+ ]
+ },
+ {
+ "name": "Uprawnienia",
+ "tags": [
+ "Nadawanie uprawnień",
+ "Odbieranie uprawnień",
+ "Wyszukiwanie nadanych uprawnień",
+ "Operacje"
+ ]
+ },
+ {
+ "name": "Certyfikaty",
+ "tags": [
+ "Certyfikaty"
+ ]
+ },
+ {
+ "name": "Tokeny KSeF",
+ "tags": [
+ "Tokeny KSeF"
+ ]
+ },
+ {
+ "name": "Usługi Peppol",
+ "tags": [
+ "Usługi Peppol"
+ ]
+ },
+ {
+ "name": "Dane testowe",
+ "tags": [
+ "Dane testowe"
+ ]
+ }
+ ]
+}
diff --git a/doc/KSeF/test.xml b/doc/KSeF/test.xml
new file mode 100644
index 0000000..1db12a9
--- /dev/null
+++ b/doc/KSeF/test.xml
@@ -0,0 +1,75 @@
+
+
+ Ministerstwo Finansów
+ 20251128-SO-1DA83DC000-9430B11465-93
+
+
+ 9552521552
+
+ 20251113-EC-2751AC3000-5C5466924B-62
+
+ 1-0E
+ FA (3)
+
+ 9552521552
+ 9552521552-20251128-010000AA503B-FE
+ 216577
+ 2024-04-03
+ 2025-11-28T09:38:18.096+01:00
+ 2025-11-28T09:38:18.192+01:00
+ wk2TorojBbyNYtDODL1l/KCxQi/rlb3Yss/OEmf5HpE=
+
+
+
+
+
+
+
+
+
+
+ N/EazXugPjJtobeCSm/ShxeSafdffzHFeRo/BLsngR4=
+
+
+
+
+
+
+ 7OYxftjJC1QhSKcWd/oeu7jJaLiO1kFvDCLja8xmNqk=
+
+
+
+ c87dKdbK3Wf2QpeKEEC0H2LMG92YBH95EbKL6wJTqozOzPq6wqj+06CIPX6bIEz8Szup9xWJlJHX+/xzO4NyMxeiXMQOCAiQ4ZnhPLG2EChopNZYGDbVgOMvfSQBSkHODobG8HH+q4fqueya0V+41CnCSzF8f68fcfVTrV8DfAuw3faKYVg4ddfkvFT+AkBCAZ/JPdYzVVN28np33bd1lHNFJ5wNSpILy9h0FF9iJIiB5RMyvJwxx0HlutrhIMUoId5vUW2XLJKAOLJSSntTJf2S4qjMJcgZr/ZVP9GSaBZPBX09nPWrXOfOwIOuakVfq9N2n+ONZ29ivHpZelMWlA==
+
+
+
+ MIIGWDCCBECgAwIBAgIQY1FHALBG7qGuhTJ/Z7W+yjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJQTDEhMB8GA1UECgwYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMRwwGgYDVQQDDBNDZXJ0dW0gU01JTUUgUlNBIENBMB4XDTI1MDkyOTA2MTEzM1oXDTI3MDkyOTA2MTEzMlowgb4xGTAXBgNVBGETEFZBVFBMLTUyNjAyNTAyNzQxCzAJBgNVBAYTAlBMMRQwEgYDVQQIDAttYXpvd2llY2tpZTERMA8GA1UEBwwIV2Fyc3phd2ExHzAdBgNVBAoMFk1pbmlzdGVyc3R3byBGaW5hbnPDs3cxHzAdBgNVBAMMFk1pbmlzdGVyc3R3byBGaW5hbnPDs3cxKTAnBgkqhkiG9w0BCQEWGmtvbnN1bHRhY2plLmtzZWZAbWYuZ292LnBsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtL+kpQU8d16im5Z3wIEzo7GqfQF8zWEYZqN5JroiX2ePVACR3znmoo4zx0krVEyhtKKB2/oE3Ql2M5sxaRWC/hnBMLj8r7uAJ/v3lQqzGYAf0ImwRy1H+nF4OS0B1U0m7wD2dGXOSQdbPNVru8SZ9Nw6IcsuAsHezy8EagEIffl+zA/GWtAG6Mp8Bxj3K8LkUdZp70Faaeiv25kOuvT7vThePW+qNFhpdktYQT56lGOmWJqKsm0QtdMzAy1o7bfWeAFLfP7DU3Okk/oz9NqUJc8Swih2ligWN/+g/nwFxcEMrQ4GWE3FDQogNz6kySZ7OIqN//kY1SXXb1nQ1MVAXQIDAQABo4IBvzCCAbswDAYDVR0TAQH/BAIwADBBBgNVHR8EOjA4MDagNKAyhjBodHRwOi8vY3NtaW1lcnNhY2EuY3JsLmNlcnR1bS5wbC9jc21pbWVyc2FjYS5jcmwwgYMGCCsGAQUFBwEBBHcwdTAuBggrBgEFBQcwAYYiaHR0cDovL2NzbWltZXJzYWNhLm9jc3AtY2VydHVtLmNvbTBDBggrBgEFBQcwAoY3aHR0cDovL2NzbWltZXJzYWNhLnJlcG9zaXRvcnkuY2VydHVtLnBsL2NzbWltZXJzYWNhLmNlcjAfBgNVHSMEGDAWgBRm+8MPvvS/4JzJq03eRxm9wMqmaDAdBgNVHQ4EFgQUGwFEj1u0JETJoPhJu2cKjErLsUwwTAYDVR0gBEUwQzAJBgdngQwBBQICMDYGCyqEaAGG9ncCZAMBMCcwJQYIKwYBBQUHAgEWGWh0dHBzOi8vd3d3LmNlcnR1bS5wbC9DUFMwHQYDVR0lBBYwFAYIKwYBBQUHAwQGCCsGAQUFBwMCMA4GA1UdDwEB/wQEAwIE8DAlBgNVHREEHjAcgRprb25zdWx0YWNqZS5rc2VmQG1mLmdvdi5wbDANBgkqhkiG9w0BAQsFAAOCAgEAOfiPMXAeftxKk6fMiRud/VZnQixhHqBakVx11ToO7m8qGW3gj2NJDkIoIWVuRIDpz6bg7vRoyPE0mSjYkjxXfb/gaAHVM1e9vGd5cN5esvJVc9wAbLY/e1ZAg7K8IHE+SQYjLsm0ykCQcnnamzEjSD6CArGUmvwJr33OnlNusVdSZ6ar+EexAEbwBUYL+8aeKYwXn+M928h4W831LxYoVv1WaNFfgUJHjFrIUNeSuXHLG0BslrJwJuy26UQaxiM0FSNJQyeSF5Xt3K+V7EuzX4jf3yfOcTwUrt/4Lq6AEH+konMj5OZurS75aA06NbR6L4hUWfdCFRIx561Y2sHeNlggONsvvQ//z0P9IVk65RqDz21DPt688SRJ5BL5wGo9CDn29+G8VEECPRuhe+UAoQOL/9iQ2mReybunuliarQCLGya/+Ig9QRZe9BWhlN7im1B+7kaMmTbGqzmUkiFoabH+hIqqh72o5B05H9U8R0o7PpI9oJZ95edst1y9fCXw5fbly5Y3N3lR78Ui3AkUf6NN6ZtsMixVHZS8qD/QTaXDX4ez8Kz1PkMGrPWYC0L64PZzyWGZmm3RNtvv/uqx4X/L0Kyu5Dp5+H5BJyQAGh+wHJ5TadGuzASThvuB+fXEhwO3Y+bS41G2czc1vf3s9DXSqMZykYVzRbPQ2XUWkzQ=
+
+
+
+
+
\ No newline at end of file
diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/ksef/api/KSeFAPIService.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/ksef/api/KSeFAPIService.java
index b62d321..a33ff27 100644
--- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/ksef/api/KSeFAPIService.java
+++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/ksef/api/KSeFAPIService.java
@@ -2,12 +2,15 @@ package com.alexanderlogistics.ksef.api;
import java.io.IOException;
import java.net.URI;
+import java.net.URLEncoder;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
+import java.nio.charset.StandardCharsets;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
+import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Base64;
import java.util.List;
@@ -122,7 +125,9 @@ public class KSeFAPIService {
// Calculate hashes
String invoiceHash = calculateSHA256Hash(invoiceXml);
+ workitem.setItemValue("ksef.invoiceHash", invoiceHash);
String encryptedInvoiceHash = calculateSHA256Hash(encryptedInvoice);
+ workitem.setItemValue("ksef.encryptedInvoiceHash", encryptedInvoiceHash);
// Build JSON request body
String jsonBody = String.format(
@@ -198,7 +203,7 @@ public class KSeFAPIService {
// Now we need to wait until auth/{AuthRef} will return 200
int code = -1;
long start = System.currentTimeMillis();
- long timeout = 60_000; // 60 Sekunden
+ long timeout = 60_000; // 3 Minuten
boolean timeoutStatus = true;
while (System.currentTimeMillis() - start < timeout) {
code = kseFAuthManager.checkSessionStatus(workitem);
@@ -207,12 +212,13 @@ public class KSeFAPIService {
break; // ok or broken
}
// kleine Pause, um CPU zu schonen
- kseFAuthManager.waitSomeTime(1000);
-
+ kseFAuthManager.waitSomeTime(3000);
}
if (timeoutStatus) {
logger.severe("├── ⚠️ Status timeout");
+ throw new PluginException(KSeFAuthManager.class.getSimpleName(), "Session Status: " + code,
+ "Invoice was not processed within expected timeout " + timeout + " upload canceled");
}
// In case we have an error we print out the reason...
@@ -224,9 +230,18 @@ public class KSeFAPIService {
throw new PluginException(KSeFAuthManager.class.getSimpleName(), errorCode,
errorMessage);
}
- } catch (IOException | NoSuchAlgorithmException |
- InterruptedException e) {
+ // if status code 200 and if we have a ksef.upo.referencenumber we download the
+ // document
+ if (code == 200 && !referenceNumber.isEmpty()) {
+ FileData upoFileData = downloadUOPXML(workitem);
+ workitem.addFileData(upoFileData);
+
+ // store verification url
+ generateVerificationUrl(workitem);
+ }
+
+ } catch (IOException | NoSuchAlgorithmException | InterruptedException e) {
logger.severe("├── ⚠️ Invoice upload failed: " + e.getMessage());
kseFAuthManager.closeInteractiveSession();
throw new PluginException(KSeFAuthManager.class.getSimpleName(), ERROR_API,
@@ -319,6 +334,75 @@ public class KSeFAPIService {
}
+ /**
+ * This method downloads the UPO XML document based on the KSeF reference
+ * number
+ *
+ * https://ksef-test.mf.gov.pl/docs/v2/index.html#tag/Status-wysylki-i-UPO/paths/~1api~1v2~1sessions~1%7BreferenceNumber%7D~1invoices~1%7BinvoiceReferenceNumber%7D~1upo/get
+ *
+ * @return Session Status Code
+ * @throws PluginException
+ */
+ public FileData downloadUOPXML(ItemCollection workitem) throws PluginException {
+
+ String ksefRefNumber = workitem.getItemValueString("ksef.referenceNumber");
+ if (ksefRefNumber == null || ksefRefNumber.isEmpty()) {
+ logger.severe("├── ⚠️ Error parsing ksef.referenceNumber");
+ throw new PluginException(KSeFAuthManager.class.getSimpleName(), ERROR_API,
+ "Error parsing ksef.referenceNumber");
+ }
+ logger.info("├── 📥 KSeF API download UPO XML...");
+ String uri = kseFAuthManager.getBaseURI() + "/sessions/" + kseFAuthManager.getSessionRefNumber()
+ + "/invoices/" + ksefRefNumber + "/upo";
+
+ int httpResponse = -1;
+ logger.info("│ ├── GET: " + uri);
+ HttpResponse response = null;
+ try {
+ HttpRequest request = HttpRequest.newBuilder()
+ .uri(URI.create(uri))
+ .header("Accept", "application/json")
+ .header("Content-Type", "application/json")
+ .header("Authorization", "Bearer " + kseFAuthManager.getAccessToken())
+ .GET()
+ .build();
+ response = kseFAuthManager.getHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
+ } catch (IOException | InterruptedException e) {
+ throw new PluginException(KSeFAuthManager.class.getSimpleName(), ERROR_API,
+ "API Error: Unable to request auth status: " + e.getMessage());
+ }
+
+ httpResponse = response.statusCode();
+ logger.info("│ ├── HTTP Response: " + httpResponse);
+ logger.info("│ ├── " + response.body());
+
+ FileData fileData = new FileData(ksefRefNumber + ".xml", response.body().getBytes(), "application/xml", null);
+ return fileData;
+ }
+
+ /**
+ * Generate KSeF verification URL for QR code (KOD I) and stores the URL into
+ * the item ksef.VerificationUrl
+ *
+ * @param workitem
+ */
+ public void generateVerificationUrl(ItemCollection workitem) throws NoSuchAlgorithmException {
+
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy");
+ String invoiceDate = formatter.format(workitem.getItemValueLocalDate("invoice.date"));
+ String invoiceHash = workitem.getItemValueString("ksef.invoiceHash");
+ String urlEncodedHash = URLEncoder.encode(invoiceHash, StandardCharsets.UTF_8);
+
+ String baseURL = kseFAuthManager.getBaseURI();
+
+ // https://ksef-test.mf.gov.pl/api/v2 -> https://ksef-test.mf.gov.pl/client-app/
+ baseURL = baseURL.replace("/api/v2", "/client-app/invoice");
+ // Build verification URL
+ workitem.setItemValue("ksef.VerificationUrl",
+ baseURL + "/" + kseFAuthManager.getKsefNip() + "/" + invoiceDate + "/"
+ + urlEncodedHash);
+ }
+
/**
* Encrypt invoice XML with the session encryption keys
*
diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/ksef/api/KSeFAuthManager.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/ksef/api/KSeFAuthManager.java
index f73356d..ffef017 100644
--- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/ksef/api/KSeFAuthManager.java
+++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/ksef/api/KSeFAuthManager.java
@@ -149,6 +149,10 @@ public class KSeFAuthManager {
this.ksefNip = Optional.ofNullable(nip);
}
+ public String getKsefNip() {
+ return ksefNip.orElse(null);
+ }
+
public void setKsefEndpoint(String endpoint) {
this.ksefEndpoint = Optional.ofNullable(endpoint);
}