listPaymentProgramsPresentation is currently unavailable in both playground and production. The spec is Klarna-internal until the endpoint is released; request it from your Klarna Business Developer, who can also advise on early-access timing. The page describes the integration pattern so you can plan against it ahead of GA. Until the endpoint is live, use Method 2a as the actively recommended AP-portal approach.AVAILABLE, DEPRECATED, DECOMMISSIONED), and migration hints (replaces_ payment_ program_ ids). You render that response in your UI and call createPaymentProgramEnablementpartner_ account_ id for every API call.locale for each Partner so Klarna returns localized presentation content. Klarna falls back to en-US when the requested locale isn't available. See Handling localization and fallbacks.partner_ account_ id. You don't need the Partner's MCC or to resolve a Payment Program Plan from the Partner's Payment Profile. That's the main reason to choose Method 2b if you'd rather not track Payment Program Plans yourself.listPaymentProgramsPresentation with the Partner's partner_ account_ id. Pass locale to receive localized headers, subheaders, and messages; optionally filter by payment_ program_ category_ id (to scope a screen to one category) or by payment_ account_ id (to render the view for a specific Payment Account). The response contains a payment_ program_ categories array and a payment_ programs array.partner_ account_ id to get the canonical enablement records, both active and ended. The presentation response already carries the active ones inline (active_ enablements), so use this call when you also need the ended history.payment_ program_ categories carries a name and a presentation object (display_ order, a localized header, an optional subheader, and an optional category-level message/message_ type, for example, flagging a category as recommended, or warning that a whole category is being phased out). Render a section per category with its presentation. header (and subheader if present), and place the matching programs inside, sorted by their own presentation. display_ order. The presentation endpoint is opinionated by design: respecting the ordering and headers Klarna returns keeps the screen current as Klarna adds, retires, or recategorizes programs.payment_ programs carries enablement_ state (ENABLED or NOT_ ENABLED), localized presentation (header, optional message + message type), availability_ details (lifecycle state and optional decommissioned_ at / replaces_ payment_ program_ ids), and any inline active_ enablements. Use enablement_ state, cross-checked against the enablement list, to show which programs the Partner already has on.
| Do | Don't |
|---|---|
Respect Klarna's display_ at both the category and the program level — the ordering is curated for clarity and conversion. | Override display_ with your own ordering — you'll diverge from Klarna's recommendation and lose the automatic updates that come with the curated view. |
Render the localized header and subheader from the response so each category reads the way Klarna intends. | Drop the header or subheader — that's where Klarna communicates context the program name alone doesn't capture. |
Surface a category-level message above its programs, using the banner style that matches its message_ (e.g. WARNING → warning banner) and falling back to INFO for values you don't recognize. | Hide the category message or render an unrecognized message_ as an error — the enum is open and new values may be added in the future. |
display_ order.
display_ order so the priced view stays consistent with the curated presentation.enablement_ state is ENABLED. An enablement carries enablement_ criteria (country, MCC, Payment Account, optional code), so a program that's already enabled for one set of criteria can still be enabled for another. Only treat a program as already active, and suppress its "Enable" action, when an existing enablement matches the exact same criteria (same payment_ program_ id, country, and payment_ program_ enablement_ code). The presentation response surfaces this, so you can render Klarna's "already active" message instead of an enable affordance.payment_ program_ id and any enablement_ criteria (customer countries, MCCs, Payment Account IDs, optional payment_ program_ enablement_ code). The full request and response shape, idempotency requirements, and field-by-field guidance live in Create Payment Program Enablement.
enablement_ criteria for an existing enablement, end it and create a new one.listPaymentProgramsPresentation with the same parameters and re-render the screen. The refreshed response reflects the new enablement_ state and any updated active_ enablements, so the screen converges in one call. For a canonical, history-aware list of every enablement (including any created outside your portal), use listPaymentProgramEnablements
ENABLED program, show an "End" affordance. The program's active_ enablements array lists each enablement currently in effect, with its payment_ program_ enablement_ id. On confirmation, call endPaymentProgramEnablementpayment_ program_ enablement_ id.


| # | Field |
|---|---|
| 1 | payment_ (Presentation API) |
| 2 | payment_ (Presentation API) |
| 3 | payment_ (Presentation API) |
| 4 | payment_ (Presentation API) |
| 5 | payment_ (Presentation API) |
| 6 | enablement_ (listPaymentProgramEnablements |
| 7 | enablement_ (listPaymentProgramEnablements |


AVAILABLE program moving to DEPRECATED, a new replacement program appearing) or any out-of-band create/end on Klarna's side.enablement_ state and inline active_ enablements per program, so a screen refresh acts as a side-effect reconciliation for the data shown to the Partner. For full historical reconciliation across all enablements for a Partner Account (including ones not in the current presentation view), call listPaymentProgramEnablementsmessage content) based on the locale query parameter you pass. When the requested locale isn't supported, Klarna falls back to en-US. The default value if you omit the parameter is also en-US.| Do | Don't |
|---|---|
Pass the Partner's preferred locale on every presentation call so the response matches the rest of your portal's localization. | Cache the localized response across locales — re-call the endpoint when the Partner switches the portal language. |
Localize the UI labels you add around the Klarna-supplied content (your sell-rate label, your enable/end buttons, your sub-headers) using your own localization stack — Klarna localizes its content, you localize yours. | Translate Klarna's header, subheader, or message content yourself — those strings are owned by Klarna and may change. Wrap them in your UI, but don't rewrite them. |
Treat the en-US fallback as a feature: it guarantees you always have renderable text, even for less common locales. | Treat an unsupported locale as an error or render blanks — Klarna already falls back to en-US, so always render the returned text. |
availability_ details on every program. Use these fields to give Partners a clear, proactive view of what's changing in their Payment Program setup:availability_ details. state: AVAILABLE, DEPRECATED, or DECOMMISSIONED.availability_ details. decommissioned_ at: present when the state is DEPRECATED or DECOMMISSIONED; tells you when the program was or will be retired.availability_ details. replaces_ payment_ program_ ids: present on an AVAILABLE program when enabling it would automatically end one or more existing enablements; tells you which programs the new one supersedes.| State | What it means | What to render |
|---|---|---|
AVAILABLE | The program is offered and can be enabled normally. | Standard enable/end affordance. If replaces_ is present, surface a confirmation step that explains which existing programs will be ended. |
DEPRECATED | The program is being phased out. Existing enablements still work until decommission, but new enablements are typically not accepted. | Highlight the program with the Klarna-supplied message (often message_), display decommissioned_, and prompt the Partner to migrate to the program(s) listed in any AVAILABLE program's replaces_ that points back to this one. |
DECOMMISSIONED | The program is fully retired and any enablement is inert (enablement_ will be NOT_). | Render in a clearly retired style; do not offer an enable affordance. |
| Do | Don't |
|---|---|
Surface migration prompts to Partners before the decommission date — give them time to act. | Leave Partners unaware that a program they've enabled is moving toward decommission — silent retirement is a bad experience. |
Use replaces_ to drive a "switch to" affordance on the new program (or a "migrate from" prompt on the deprecated one). | Construct your own deprecation copy when Klarna provides a message — the curated message is what's been agreed across Acquiring Partners. |
Trust enablement_ for decommissioned programs — Klarna sets it to NOT_ automatically. | Offer an enable affordance for a decommissioned program — its enablement is inert. |
en-US fallback rather than showing blanks.| Symptom | Likely cause | Action |
|---|---|---|
400 Bad Request on presentation call | Invalid payment_, payment_, or malformed locale | Drop the optional filters and retry; verify the locale string matches the BCP 47 format Klarna accepts. |
Response contains an empty payment_ array | The Partner Account has no Payment Programs eligible for presentation, or the filters are too narrow | Remove the filters and retry; if still empty, verify the Partner Account has an active Payment Program Plan. |
| Headers and messages are in English when the Partner expects another language | Requested locale is unsupported or omitted | Confirm the locale parameter is set correctly; Klarna falls back to en-US for unsupported locales. |
enablement_ doesn't update after a successful create | Local cache or stale state on your side | Re-call the presentation endpoint immediately after the create to refresh the view; if the issue persists, reconcile against listPaymentProgramEnablements |
400 Bad Request on create | Required field missing, type mismatch, or payment_ not eligible for the Partner | Validate against the latest presentation response (enablement_ indicates eligibility); retry with the same Klarna-Idempotency-Key. |
| Enablement created but not visible at checkout | Klarna caches not yet refreshed | Wait 15 minutes and retry. |
Enablement state in your portal disagrees with listPaymentProgramEnablements | Out-of-band change made by Klarna | Re-sync from listPaymentProgramEnablements |