SDK API Reference
This page provides a concise reference for the PayParts SDK (TypeScript) public API. It covers the newer init() -> prepare() -> bind() flow. See Add components to your frontend for guidance, and Handle events for the event model.
PayPartsSDK
The global object exposed as window.PayPartsSDK (also the named export PayParts).
| Method | Signature | Description |
|---|---|---|
init | (opt: InitOptions) => Promise<Checkout> | Initializes the SDK using your sessionToken and returns a Checkout. |
prepare | (methodOrSection: string) => PaymentComponent | Returns a PaymentComponent for the given method/section. Throws unless called after init. |
Passcustomertoinit()— attaches payer data to/payInclude the payer's details in the
init()options so the SDK can attach them to thePOST /v1/session/{id}/payrequest:const checkout = await window.PayPartsSDK.init({ sessionToken, apiUrl, country: 'NL', language: 'nl', customer: { email: cart.email, firstName: cart.shipping_address?.first_name, lastName: cart.shipping_address?.last_name, phone: cart.shipping_address?.phone, shippingAddress: { /* street, streetNumber, streetNumberExtension, zipCode, city, country */ }, billingAddress: { /* ... */ }, }, });
shippingAddress/billingAddressare sent as the order'sdeliveryAddress/invoiceAddressin the/paybody — but note that body fields are optional. PayParts builds the actual order (products, addresses, customer) from the data stored on the session atPOST /v1/session/start. For order-based methods (e.g. iDEAL) the session must be created with the fullorder+customer, otherwise/paycan fail with422 PAY-2880 requiredDataMissing.
Checkout
The object returned by PayPartsSDK.init().
| Member | Signature | Description |
|---|---|---|
events | MountEventHandlers | Attach event handlers to control the payment flow. |
prepare | (methodOrSection: string) => PaymentComponent | Prepare a component (e.g. 'card-payments', 'checkout-buttons', 'methods'). |
updateConfig | (config: Partial<CheckoutConfig>) => void | Update the SDK configuration after initialization. |
getConfig | () => Readonly<Required<CheckoutConfig>> | Get the current configuration. |
updateSession | (request: UpdateSessionRequest) => Promise<UpdateSessionResponse> | Update the session amount/order. Zero only (not yet in Production). |
PaymentComponent
Returned by checkout.prepare(methodOrSection).
| Method | Signature | Description |
|---|---|---|
bind | (target: string | HTMLElement) => void | Mounts the component into a target element or selector. |
unmount | () => void | Unmounts the component from the page. |
updateContext | (context: Partial<PaymentMethodContext>) => void | Updates the component's context. |
isReady | () => boolean | Whether the component is ready to submit (all fields valid). |
refresh | () => Promise<void> | Refreshes the component data. |
reset | () => Promise<void> | Clears the component's resettable state and re-mounts it. No-op for components without state to reset. |
submit | () => Promise<SubmitResult> | Triggers payment programmatically. Useful when you hide the built-in pay button (creditCardOptions.hideSubmitButton). |
reset() and Click to Pay recognition
reset() and Click to Pay recognitionWhen called on a card component with Click to Pay enabled, reset() provides a new-user experience. Click to Pay remembers a returning shopper via a recognition binding held by the Visa / Mastercard SRC network (server-side) — not an email. reset():
- Calls
unbindAppInstanceagainst the SRC network with the storedidToken, removing the device/app-instance recognition binding. - Clears the locally stored recognition tokens, then re-mounts the component.
- On the next mount the shopper is treated as unrecognized and prompted for their identity instead of having their cards silently loaded.
If Click to Pay is not enabled on the component, reset() still clears any stale stored recognition tokens so a later mount starts fresh.
SubmitResult
Returned by PaymentComponent.submit().
type SubmitResult =
| { status: 'success'; orderId: string; returnUrl: string }
| { status: 'validation_failed' }
| { status: 'error'; message: string; errorTag?: string }
| { status: 'not_ready' };Async submit (onSubmit)
onSubmit)The onSubmit handler supports asynchronous logic. When the user submits payment, the SDK waits (up to onSubmitTimeout, default 30000 ms) for the handler to call event.resolve() before continuing with the payment.
This lets you run other async work first — for example creating an order on a different platform/ERP, freezing stock, or validating inventory — and only continue once it has completed:
onSubmit: async (event) => {
// Create the order on another platform first...
await myPlatformApi.createOrder({ items, customer });
// ...and only then continue with the PayParts payment
event.resolve();
}- Call
event.resolve()to continue with the payment. - Call
event.reject(error)to cancel/abort the payment (e.g. if the external order creation fails). - See Handle events for the full
onSubmitexample.
The pay call (POST /v1/session/{id}/pay)
POST /v1/session/{id}/pay)When the payer confirms a redirect/order-based method (such as iDEAL), the SDK calls:
POST /v1/session/{sessionId}/pay
Content-Type: application/json
with a body such as:
{
"methodId": 10,
"customer": {
"email": "[email protected]",
"firstName": "John",
"lastName": "Doe",
"phone": "+31000000000"
}
}Important details:
amountis NOT required in/pay— it already exists on the session.methodIdis required. iDEAL (10) is a redirect method and needs no issuer; only bank-selection methods (MetjeBank5358, PayByBank2970) require one viainput.issuerId/subMethodId.customerandorderin the body are optional — the SDK sends them if acustomerwas passed toinit(), but PayParts builds the actual order from the session data.- The order line items come from the session, not
/pay: the products/amount are created server-side from the data you supplied inPOST /v1/session/start. This is why the session must contain the fullorder+customerfor order-based methods (see Create a session from your backend).
Example response (HTTP 200)
{
"request": { "result": "1" },
"data": {
"orderId": "50xxxxxxxxxxxxxx",
"returnUrl": "https://checkout-zero.pay.nl/to/payment/..."
}
}The data.returnUrl is where the payer should be sent (or directly navigated to) to complete their payment / bank selection. Use it to redirect the shopper from your checkout.
Failures worth knowing
422— validation problems (e.g. a zero-pricedprice.value: 0line, or areferencemismatch).422 PAY-2880 requiredDataMissing— the session is missing required order/customer data. Add the fullorderandcustomerwhen creating the session.422 PAY-1422 reference: Deze waarde is niet geldig.— the session'sreferencecontains characters Pay rejects server-side (commonly_, e.g. acart_...identifier). Strip them or use a plain order number. See thereferenceformat note in Create a session from your backend.410 Gone— the session has expired / is no longer available. Create a fresh session or set a longerexpire.
Units (cents): all monetary values (
amount.value, and every orderproducts[].price.value) are in the smallest currency unit (e.g. cents) — €10.00 =1000. Never send decimal euros.
Events
Event handlers are attached via checkout.events. Full list and event payloads: Handle events.
Updated 3 days ago