Skip to content
Menu

Polecenie zapłaty SEPA

blank

Polecenie zapłaty SEPA (SEPA DD) to metoda płatności umożliwiająca sprzedawcom pobieranie płatności w euro bezpośrednio z rachunku bankowego klienta w ramach Jednolitego Obszaru Płatności w Euro (SEPA).

Opiera się ona na mandacie, w ramach którego klient (Dłużnik) upoważnia sprzedawcę (Wierzyciela) do inicjowania obciążeń. Zarówno Dłużnik, jak i Wierzyciel muszą posiadać rachunki bankowe w strefie SEPA.

SEPA Direct Debit obsługuje dwa schematy:

  • CORE – dla klientów indywidualnych
  • B2B – dla transakcji między przedsiębiorstwami
Przegląd metody płatności
Payment MethodCategoryCountriesCurrenciesFeaturesIntegrations
SEPA DD (via Tink)Bank DebitEurope (SEPA)EURTink – based Open Banking, Recurring paymentsPayment Form
SEPA DD (via iDEAL)Bank DebitNetherlandsEURiDEAL – based authenticationPayment Form, API
Info

SEPA DD obsługuje różne mechanizmy uwierzytelniania:

  • Tink (Open Banking)
  • iDEAL |Wero (przekierowanie do banku)

Dostawcy ci wpływają wyłącznie na proces uwierzytelniania, a nie na cykl życia płatności SEPA.

FunkcjaSEPA DD przez TinkSEPA DD przez iDEAL
Zakres geograficznyKraje SEPATylko Niderlandy
Typ mandatuCORE / B2BTylko CORE
Kraj klientaDowolnyMusi być NL
Adres rozliczeniowyZalecanyObowiązkowy (kontekst holenderski)
Typ integracjiFormularz płatnościFormularz płatności + API
Wybór modelu integracji

Przed rozpoczęciem integracji sprzedawca musi wybrać odpowiedni model integracji.

Wybór ten nie jest częścią specyfikacji SEPA DD i jest opisany w dedykowanej dokumentacji integracyjnej.

Dostępne modele:

Integration ModelDescription
Formularz PłatnościSIBS zarządza interfejsem użytkownika oraz przebiegiem płatności
Server-to-Server APISprzedawca w pełni kontroluje doświadczenie użytkownika oraz logikę przekierowań

Wybór ten nie jest częścią żądania API – określa sposób wykorzystania odpowiedzi Checkout.

Jak to działa

Integracja zawsze rozpoczyna się od wywołania Checkout API, które tworzy sesję płatności i zwraca dane niezbędne do kontynuacji procesu.

Od tego momentu dalsza realizacja zależy od modelu integracji wybranego podczas onboardingu (Formularz płatności lub API S2S).

Przepływ integracji
  1. Utworzenie sesji płatności (Checkout API)
  2. Wykonanie płatności
  3. Monitorowanie statusu mandatu (Status API)
  4. Monitorowanie statusu obciążenia (Opcjonalnie)
  5. Webhooki do aktualizacji asynchronicznych
Krok 1 – Utworzenie sesji płatności

Jest to główny punkt wejścia dla transakcji SEPA DD, niezależnie od dostawcy (Tink lub iDEAL).

Na tym etapie tworzona jest sesja płatności oraz definiowane są:

  • konfiguracja sprzedawcy
  • dane klienta
  • szczegóły transakcji
  • konfiguracja mandatu
Info

⚠️ Obsługa kwoty w SEPA Direct Debit

SEPA Direct Debit nie realizuje natychmiastowego obciążenia podczas procesu checkout.

Dla standardowych przepływów (Tink):

  • transaction.amount.value = 0

 

Wyjątek – SEPA DD oparte na iDEAL:

  • Przy użyciu `[„SPDD”,”IDEL”]` kwota transakcji musi być większa od 0
  • iDEAL nie wspiera transakcji o wartości zerowej
  • Minimalna wspierana wartość: 0,01 EUR – transaction.amount.value => 0

Rzeczywiste pobranie środków następuje po zakończeniu cyklu życia autoryzacji mandatu.

 

Endpoint
EnvironmentURLMethod & Endpoint
PRODapi.sibsgateway.comPOST api/version-id/payments
TESTstargate.qly.site[1|2].sibs.ptPOST api/version-id/payments
Request Headers
FieldTypeDescription
Content-TypeStringapplication/json
AuthorizationStringBearer token
x-ibm-client-idStringClient identifier (onboarding provided)
Podstawowa struktura żądania

Żądanie Checkout składa się z 4 obowiązkowych blokow:

  • merchant
  • customer
  • transaction
  • mandate
1.1 Merchant Object (Mandatory)

Definiuje kontekst akceptanta wykonującego transakcję.

FieldTypeConditionDescriptionExample
merchant.terminalIdString (max 10 numeric)MandatoryMerchant terminal47215
merchant.channelstringMandatorySales channelWEB
merchant.transactionIdstring (max 1000)MandatoryUnique reference987635435
merchant.transactionDescriptionString (max 4000)OptionalContextorder #123
1.2 Transaction Object (Mandatory)

To kluczowy blok konfiguracji realizacji płatności.

Najważniejsze pola:

FieldTypeConditionDescriptionExample
transaction.transactionTimestampDateTimeMandatoryTimestamp ISO86012026-04-24T13:40:08Z
transaction.descriptionStringOptionalTransaction short description.purchase
transaction.motoBooleanOptionalIndicates if is a Mail Order Telephone Order.false
transaction.paymentTypeStringOptionalType of payment used by the client.
Possible values are:
“PURS” – Purchase,
“AUTH” – Authorisation,
“CAPT” – Capture,
“CAUT” – Authorisation Cancellation,
“RFND” – Refund,
“RVSL” – Reversal,
“STIQ” – Status Inquiry.
AUTH
transaction.amount.valueNumberMandatoryTransaction amount.
For standard SEPA Direct Debit flows, this value must be set to 0.
Exception:
When using [„SPDD”, „iDEAL”], the amount must be greater than 0, as iDEAL does not support zero-value transactions.
0
transaction.amount.currencyStringMandatoryCurrency used in the transaction.EUR
transaction.paymentMethodArrayMandatoryDetermines how the SEPA Direct Debit flow is executed. [„SPDD”] triggers a SEPA DD flow using Tink for bank authentication. [„SPDD”,”IDEL”] adds iDEAL to the authentication journey, enforcing a CORE mandate and NL-based customer data.[„SPDD”]
Zachowanie metody płatności (KRYTYCZNY PUNKT DECYZYJNY)
Przepływ Tink

Jeśli:

</> JSON
"paymentMethod": ["SPDD"]

Ta konfiguracja włącza przepływ SEPA Direct Debit, w którym autoryzacja bankowa odbywa się za pośrednictwem Tink (Open Banking).

Z perspektywy integracji:
  • Klient autoryzuje się w swoim banku podczas checkout
  • Dane rachunku bankowego są zbierane w ramach przepływu dostawcy
  • Utworzenie mandatu jest wspierane wynikiem autoryzacji
Obowiązki integratora:
  • Przekazanie kompletnych danych klienta
  • Zapewnienie poprawnego zdefiniowania obiektu mandate
  • Kontynuowanie przepływu na podstawie danych z odpowiedzi Checkout
Przepływ iDEAL

Jeśli:

</> JSON 
"paymentMethod": ["SPDD", "IDEL"]

Ta konfiguracja wprowadza iDEAL jako kanał autoryzacji w ramach przepływu SEPA DD.

Z perspektywy integracji:
  • Klient przechodzi przez proces autoryzacji u dostawcy
  • Weryfikacja tożsamości odbywa się w ramach procesu dostawcy
  • Mandat jest wciąż tworzony jako część cyklu życia SEPA DD
Obowiązki integratora:
  • Zapewnienie, że mandate.serviceType = CORE
  • Przekazanie danych klienta zgodnych z kontekstem holenderskim
  • Wymuszenie ograniczeń dotyczących adresu w Holandii

This configuration is intended for Netherlands-based payment flows where iDEAL is part of the checkout experience.

1.3 Customer Object (Mandatory)

Ta konfiguracja jest przeznaczona dla przepływów płatności realizowanych w Holandii, gdzie iDEAL jest częścią procesu checkout.

Key fields:

FieldTypeConditionDescriptionExample
customer.customerInfo.customerNameStringMandatoryCustomer name.Test Name
customer.customerInfo.customerEmailStringMandatoryCustomer E-mailemail@provider.com
customer.customerInfo.customerLanguageStringConditionalCustomer language. ISO 639-1 Format.
Must be fulfilled if intended Payment Method (Request Body.transaction.paymentMethod) to proceed payment is one of:
„IDEL” – „iDEAL”;
NL
customer.customerInfo.customerPhoneStringConditionalPhone number of the customer formatted in the International E.164 standard, starting with plus (+) symbol.
E. 164 numbers can have a maximum of fifteen digits and are usually written as follows: [+][country code][subscriber number including area code]
Must be fulfilled if intended Payment Method (Request Body.transaction.paymentMethod) to proceed payment is „BNPL” or „MBWAY”.
+351919191919
Warning

Uwaga: Weryfikacja adresu może być wymagana w zależności od konfiguracji dostawcy i zasad oceny ryzyka.

Billing Address (Mandatory)
FieldTypeConditionDescriptionExample
customer.customerInfo.billingAddress.street1String (Max70Text)MandatoryFirst line of the billing address (street name and number)„Damrak 1”
customer.customerInfo.billingAddress.street2String (Max70Text)MandatoryAdditional address information (e.g., apartment, floor)„Floor 2”
customer.customerInfo.billingAddress.cityString (Max35Text)Mandatory (iDEAL)City of the billing address„Amsterdam”
customer.customerInfo.billingAddress.postcodeString (Max16Text)Optional (Mandatory if available)Postal code„1012LG”
customer.customerInfo.billingAddress.countryString (ISO 3166-1 alpha-2)MandatoryCountry code„NL”
Warning

Zasada iDEAL – Obowiązkowa

Dla transakcji SEPA Direct Debit z wykorzystaniem iDEAL:

  • billingAddress.country musi zawsze mieć wartość „NL”
  • Adres rozliczeniowy musi odpowiadać adresowi w Holandii
  • Jest to wymagane do walidacji mandatu w ramach procesu autoryzacji iDEAL

Shipping Address (Optional)

Używany wyłącznie w przypadku dostaw osobistych.

FieldsTypeConditionDescriptionExample
customer.customerInfo.shippingAddress.street1String (Max70Text)MandatoryFirst line of the shipping address„Herengracht 10”
customer.customerInfo.shippingAddress.street2String (Max70Text)MandatoryAdditional shipping address information„Unit 5A”
customer.customerInfo.shippingAddress.cityString (Max35Text)Mandatory (iDEAL)City of the shipping address„Amsterdam”
customer.customerInfo.shippingAddress.postcodeString (Max16Text)Optional (Mandatory if available)Postal code„1015BK”
customer.customerInfo.shippingAddress.countryString (ISO 3166-1 alpha-2)MandatoryCountry code„NL”
Warning

Zasada iDEAL – Obowiązkowa

Dla transakcji SEPA Direct Debit z wykorzystaniem iDEAL:

  • customer.customerInfo.shippingAddress.country musi zawsze mieć wartość „NL”
  • Adres dostawy musi odpowiadać adresowi w Holandii

1.4 mandate – Object (Mandatory)
mandatemandateConditionalMandate details information
Remark: only to be filled when Merchant wants to offer SEPA DD as payment method
mandate.mandateIdString (Max35Text)MandatoryIdentification of the Direct Debit mandate resource.
It refers to Debit Authorisation Number.
mandateID
mandate.mandateDescriptionString (Max256Text)MandatoryDescription of the Direct Debit mandate resource’s context.mandateDescription
mandate.frequencyString (Exact4Text)MandatoryRegularity with which instructions are to be created and processed.
„OOFF” – „One-Off” (Direct debit instruction where the debtor’s authorisation is used to initiate one single direct debit transaction)
„RCUR” – „Recurring” (Direct debit instruction where the debtor’s authorisation is used for regular direct debit transactions initiated by the creditor)
‘OOFF’
mandate.serviceTypeString (Exact4Text)MandatoryIdentification of the SEPA Direct Debits service related to the specific Direct Debit Mandate.
It can be fulfilled with the following values:
„CORE” when it refers to SEPA DD CORE service;
„BTOB” when it refers to SEPA DD B2B service.
‘CORE’
Warning

⚠️ Zasada dotycząca mandatu:

  • Ten obiekt jest wymagany tylko dla przepływów SEPA DD
  • Definiuje on prawne upoważnienie do realizacji obciążenia

Przykład żądania – SEPA DD oparte na Tink
</>JSON
{ 
  "merchant": {
    "terminalId": "1000536",
    "channel": "web",
    "merchantTransactionId": "trx123",
    "transactionDescription": "order 123"
  },
  "transaction": {
    "transactionTimestamp": "2026-04-24T13:41:08Z",
    "paymentType": "AUTH",
    "amount": {
      "value": 0,
      "currency": "EUR"
    },
    "paymentMethod": ["SPDD"]
  },
  "customer": {
    "customerInfo": {
      "customerName": "Test Name",
      "customerEmail": "email@provider.com"
    }
  },
"mandate": {
        "mandateId": "mandateID",
        "mandateDescription": "mandateDescription",
        "frequency": "OOFF",
        "serviceType": "CORE"  }
}
Przykład żądania – SEPA DD oparte na iDEAL
</>JSON
{
  "transaction": {
    "amount": {
      "value": 0.01,
      "currency": "EUR"
    },
    "paymentMethod": ["SPDD","IDEL"]
  }
}
Odpowiedź – API Checkout

Po pomyślnym przetworzeniu żądania Checkout, API zwraca odpowiedź reprezentującą utworzoną sesję płatności.

Ta odpowiedź jest niezbędna do:

  • identyfikacji transakcji
  • kontynuowania realizacji płatności
  • śledzenia cyklu życia płatności
FieldTypeConditionDescriptionExample
transactionIDString (Max36Text)AlwaysUnique identifier of the transaction. Must be stored for tracking and status queriesTECByGFuB7yaFta19hua
transactionSignatureStringAlwaysSecurity signature associated with the transactioneyJ0eElkIjoiVEVD…
amount.valueNumber (double)AlwaysTransaction amount.
⚠️ Represents the transaction amount.
For SEPA Direct Debit, this value corresponds to the actual transaction amount.
0.01
amount.currencyString (Currency Code –
ISO 4217 Alpha-3 Code).
AlwaysCurrency of the transactionEUR
paymentMethodListArrayAlwaysList of payment methods available for execution[„IDEL”,”SPDD”]
formContextStringConditional (Payment Form)Encoded data required to initialise the hosted payment execution experienceeyJQYXltZW50TWV0aG9kIj…
mandate.mandateIdString (Max35Text)Conditional (SEPA DD)Unique identifier of the generated SEPA mandatev8t58W2RpGDaDbESMrnMhYGZdixsHUDZUkC
mandate.mandateDescriptionString (Max254Text)MandatoryDescription of the Direct Debit mandate resource’s context.“short information”
mandate.frequencyString (Exact4Text)Conditional (SEPA DD)Mandate frequency (OOFF or RCUR)OOFF
mandate.serviceTypeString (Exact4Text)Conditional (SEPA DD)SEPA scheme used (CORE or B2B)CORE
returnStatus.statusCodeStringAlwaysOperation status code („000” means success)000
returnStatus.statusMsgStringAlwaysShort status messageSuccess
serviceTypeStringAlwaysDetailed status descriptionSuccess
Warning

Ważna uwaga

W odróżnieniu od żądania, odpowiedzi `amount.value` reprezentuje rzeczywistą kwotę transakcji.

Przykładowa odpowiedź
</> JSON
{
  "transactionID": "TECByGFuB7yaFta19hua",
  "transactionSignature": "eyJ0eElkIjoiVEVD...",
  "amount": {
    "value": 0.01,
    "currency": "EUR"
  },
  "paymentMethodList": ["IDEL", "SPDD"],
  "returnStatus": {
    "statusCode": "000",
    "statusMsg": "Success",
    "statusDescription": "Success"
  }
}
Jak wykorzystać odpowiedź

Po otrzymaniu pomyślnej odpowiedzi:

  • Zapisz transactionID jako główny identyfikator referencyjny
  • Wykorzystaj zwrócone dane do kontynuowania realizacji płatności
  • Przygotuj system na obsługę aktualizacji asynchronicznych (status lub webhooki)

Jeśli korzystasz z hostowanego modelu integracji, odpowiedź zawiera dane niezbędne do zainicjowania kroku realizacji płatności

Krok 2 – Realizacja płatności
Co się dzieje w praktyce
  • Wcześniej utworzona sesja płatności jest wykorzystywana do kontynuowania procesu checkout
  • Klient przechodzi przez proces autoryzacji u dostawcy (Tink lub iDEAL)
  • Autoryzacja mandatu oraz zbieranie wymaganych danych bankowych odbywają się w ramach procesu dostawcy
Perspektywa integracji

Z perspektywy integracji:

  • Na tym etapie nie jest wymagane dodatkowe wywołanie API
  • Nie oczekuje się żadnej ręcznej interwencji ani przetwarzania ze strony integratora
  • Cały proces realizacji jest obsługiwany w ramach kontekstu sesji płatności zwróconego w Kroku 1
Krok 3 – Status płatności

Po zakończeniu procesu realizacji płatności (Krok 2) mandat SEPA Direct Debit kontynuuje swój cykl asynchronicznie, aż do osiągnięcia ostatecznego statusu w cyklu życia.

Akceptant może monitorować cykl życia mandatu za pomocą API Checkout Status.

Jak sprawdzić status
Endpoint
EnvironmentURLMethod & Endpoint
PRODapi.sibsgateway.comGET /version-id/payments/{transactionId}/status
TESTstargate.qly.site[1|2].sibs.ptGET version-id/payments/status
Parametry żądania
TypeFieldFormatConditionDescription
PATHtransactionIdStringConditionalUnikalny identyfikator transakcji
QUERYmerchantTransactionIdString (Max1000)ConditionalReferencja akceptanta używana do pobrania statusu
Nagłówki żądania
FieldTypeConditionDescription
Content-TypeStringMandatoryapplication/json
AuthorizationStringMandatoryBearer token
x-ibm-client-idStringMandatoryClient identifier provided during onboarding
Co należy monitorować

Pole: mandate.mandateStatus

To pole reprezentuje cykl życia mandatu SEPA Direct Debit.

Wartości statusu
StatusZnaczenie
INTTZainicjowany
PDNGOczekujący
ACTV*Aktywny
RJCTOdrzucony
RFSDOdmówiony
CNCLAnulowany

*ACTV oznacza pomyślnie aktywowany mandat.

Rekomendacja integracyjna

Należy:

  • Zapisać transactionId zwrócony w Kroku 1
  • Okresowo wywoływać API Checkout Status
  • Opcjonalnie zaimplementować webhooki dla powiadomień asynchronicznych
Krok 4 – Informacje dodatkowe: status pobrania (Collection Status)

Monitorowanie statusu pobrania ma zastosowanie tylko wtedy, gdy pobrania środków są inicjowane w oparciu o istniejący mandat SEPA.

Po aktywacji mandatu SEPA Direct Debit, pobrania środków mogą być inicjowane zgodnie z modelem biznesowym akceptanta.

Realizacja pobrania jest asynchroniczna i może udostępniać dodatkowe informacje o statusie za pomocą API Checkout Status.

Monitorowanie cyklu życia pobrania

Odpowiedź Checkout Status udostępnia dwa uzupełniające się pola statusu dla pobrań SEPA Direct Debit.

PoleCel
paymentStatusKońcowy wynik transakcji
mandate.mandateCollection.statusSzczegółowy cykl życia pobrania SEPA Direct Debit
4.1. paymentStatus

Pole: paymentStatus

To pole reprezentuje skonsolidowany wynik transakcji z perspektywy akceptanta.

Możliwe wartości obejmują:

StatusMeaning
PENDINGTransakcja wciąż w trakcie przetwarzania
INPROCESSINGRealizacja pobrania w toku
SUCCESSPobranie zrealizowane pomyślnie
DECLINEDPobranie nie powiodło się lub zostało odrzucone
ERRORBłąd techniczny

To pole podstawowe, które należy wykorzystać do określenia ostatecznego wyniku transakcji.

4.2. mandate.mandateCollction.status

Pole: mandate.mandateCollction.status

To pole zawiera dodatkowe szczegóły operacyjne dotyczące cyklu życia pobrania SEPA Direct Debit.

Wartości statusu pobrania
StatusMeaning
CRTDPobranie utworzone
PDNGOczekujące na przetworzenie
ACSP*Zaakceptowane, rozliczenie w toku (STATUS KOŃCOWY)
RJCTOdrzucone
RVSLWycofane (Reversed)
Notification

Ważne

Status pobrania odnosi się do cyklu życia realizacji obciążenia i jest niezależny od cyklu życia mandatu opisanego w Kroku 3.

*ACSP oznacza pomyślne zakończenie procesu pobrania SEPA Direct Debit i powinno być traktowane jako ostateczny status sukcesu.

Rekomendacja integracyjna

Z perspektywy integracji:

  • Zapisz transactionId zwrócony podczas tworzenia sesji Checkout
  • Monitoruj aktualizacje transakcji za pomocą API Checkout Status
  • Traktuj przepływy SEPA Direct Debit jako asynchroniczne
  • Opcjonalnie zaimplementuj webhooki dla automatycznych powiadomień o statusie
Krok 5 – Webhooki

Transakcje SEPA Direct Debit są z natury asynchroniczne.

Zamiast okresowo wywoływać API Checkout Status, akceptanci mogą opcjonalnie zaimplementować webhooki, aby otrzymywać automatyczne aktualizacje transakcji.

Powiadomienia webhook mogą być wykorzystywane do:

  • monitorowania zmian w cyklu życia transakcji
  • otrzymywania aktualizacji statusu płatności
  • śledzenia przebiegu pobrania SEPA Direct Debit
Warning

Webhooki są opcjonalne, ale rekomendowane w środowiskach produkcyjnych wymagających asynchronicznego monitorowania płatności.

Szczegóły integracji webhooków, struktura payloadu oraz konfiguracja zdarzeń znajdują się w dokumentacji integracji webhooków.

Przegląd prywatności

Ta strona korzysta z ciasteczek, aby zapewnić Ci najlepszą możliwą obsługę. Informacje o ciasteczkach są przechowywane w przeglądarce i wykonują funkcje takie jak rozpoznawanie Cię po powrocie na naszą stronę internetową i pomaganie naszemu zespołowi w zrozumieniu, które sekcje witryny są dla Ciebie najbardziej interesujące i przydatne.

Ściśle niezbędne ciasteczka

Niezbędne ciasteczka powinny być zawsze włączone, abyśmy mogli zapisać twoje preferencje dotyczące ustawień ciasteczek.