Skip to main content
iVentureTeam

pos_payment_provider_cards

A card per payment terminal provider, showing whether its module is installed, with install and setup in the same place.

Siddharth JambukiyaSiddharth JambukiyaOdoo Techno-Functional Consultant
August 27, 2026Updated August 29, 20264 min read
Technical namepos_payment_provider_cards
Viewsform (view widget, <widget> element)
Modulepoint_of_sale, the Point of Sale app
Used in coreThe payment method form in point_of_sale
VersionsOdoo 20.0, Odoo 19.0
No-code setupNo. It is set in view XML and depends on module-specific data
Alternativespos_cashdro_admin_buttons, pos_glory_cash_admin_buttons, lna_checklist

What the terminal provider cards does

Connecting a card terminal to Odoo means installing the right integration module and then configuring a payment method to use it. Those are two screens apart, and knowing which module goes with which terminal is its own piece of knowledge.

This widget collapses both. It shows a card per supported provider, tells you whether that provider's module is installed, offers to install it, and once installed fills the payment method's fields for you.

The provider list is not discovered: it is a table in the source, currently fourteen entries pairing a selection value, a module name and a display name.

What this means for your team

Terminal choice is usually decided by your acquirer rather than by preference, so the real value here is removing the lookup step: which Odoo module corresponds to the terminal your bank supplied.

The hard-coded list is worth knowing about when planning. A provider not in that table is not offered here, which does not mean it cannot be integrated, only that it is not one of the fourteen with a first-party module.

Supported options in Odoo 19

The widget declares no options and takes the standard view widget props. The provider table and the two actions are described below. Read from the payment provider cards source, Odoo 19.0.

OptionTypeWhat it does
the provider tablehard-coded listFourteen entries, each a selection value, a module name and a display name.(since Odoo 19.0)
get_provider_statusserver callAsked once for every provider's module state. Providers missing from the answer are dropped.(since Odoo 19.0)
button_immediate_installserver callInstalls the module. A successful result reloads the page.(since Odoo 19.0)
the three written fieldsrecord update on setupMethod type, terminal selection and name, written without any server call.(since Odoo 19.0)

The filter is protective. After asking the server about every provider's module, the widget keeps only those the server reported on, so a database missing a module simply does not see that card rather than showing a broken one.

Working examples

Placing it

<widget name="pos_payment_provider_cards"/>

No attributes. It reads the payment method from the record.

A table entry

["stripe", "pos_stripe", "Stripe"]
# selection value, module, display name

Fourteen of these in the file.

What setup writes

payment_method_type   = "terminal"
use_payment_terminal  = the selection value
name                  = the display name

Three fields, no server call.

One call, fourteen providers, and a guarded install

The startup sequence is one call for fourteen providers, which is the right shape: asking per provider would be fourteen round trips for a screen that renders once.

What comes back is a list of module states, and the widget joins it against the hard-coded table by module name. Providers with no matching state are dropped. The surviving entries carry the selection value and display name from the table plus the state from the server, merged into one object per card.

Installing is guarded. The record is saved first and the handler returns if that failed, because installing a module reloads the page and unsaved edits would be lost. A disabled flag is raised during the install and cleared in a finally block, so a failure does not leave the buttons permanently dead.

A successful install reloads the whole page rather than refreshing the view, which is necessary because a new module brings new assets that the running page has not loaded.

Setup is the cheap half: it finds the provider in the already loaded state and writes three fields on the record. No server call, because nothing needs to be looked up.

Version compatibility

VersionStatusNotes
Odoo 20.0In developmentNot released. Reworked substantially on the development branch.
Odoo 19.0VerifiedFirst version. Verified against the shipped source.
Odoo 18.0Not availableWidget does not exist.
Odoo 17.0Not availableWidget does not exist.
Odoo 16.0Not availableWidget does not exist.

Upgrade note. The widget is new in Odoo 19. On earlier versions the module and the payment method were configured separately, so an upgrade consolidates the flow without changing any stored configuration.

What is changing in Odoo 20

Odoo 20 is expected at Odoo Experience in Brussels, 24 to 26 September 2026. The development branch is unstable and this may still change; we re-verify this page after the release.

Reworked. The development branch changes the component substantially, including the provider handling. The card grid and the install then configure flow are what to expect to survive; the table's contents are likely to shift as providers are added.

Common problems and fixes

SymptomCause and fix
A provider I use is not listedIt is not one of the fourteen in the hard-coded table. Configure it manually, or use a third-party integration.
A card disappearedThe server did not report that module, so it was filtered out. Expected. Check the module exists in that Odoo edition.
Install does nothingThe record save failed first and the handler returned. Fix the validation error on the payment method.
The page reloads after installingNew modules bring new assets the running page has not loaded. Expected, and necessary.
Buttons stay disabledThey should not; the flag is cleared in a finally block. Reload the page if a customization interfered.
Setup did not fill the nameThe provider was not found in the loaded state. Reload so the status call runs again.

Terminal provider cards vs the alternatives

WidgetBest forKey difference
pos_payment_provider_cardsChoosing, installing and configuring a Point of Sale payment terminal in one placeA hard-coded provider table joined against one module status call, with a guarded install
pos_cashdro_admin_buttonsCashDro diagnosticsA device already configured rather than choosing one
pos_glory_cash_admin_buttonsGlory cash machine setupA live connection rather than module installation
lna_checklistLocal network access prerequisitesA checklist rather than provider cards

Installing the module from the Apps screen and configuring the payment method by hand does exactly the same thing in two more steps, and remains the path for a provider outside the fourteen.

Frequently asked questions

Where does the provider list come from?+
A hard-coded table in the source, currently fourteen entries pairing a selection value, a module name and a display name.
Why is a provider missing?+
Either it is not in that table, or the server did not report its module, in which case the widget filters the card out rather than showing a broken one.
Why does the page reload after installing?+
Installing a module brings new assets that the running page has not loaded, so a view refresh would not be enough.
Does setting up a provider call the server?+
No. It writes three fields on the payment method from data already loaded: the method type, the terminal selection and the name.
Which versions have it?+
Odoo 19 onwards. The development branch reworks it substantially.

Card payments that reconcile themselves

Terminal integration decides whether end of day is a count or a check. We implement Odoo Point of Sale payments with your acquirer's hardware, on versions 16 through 19.

Book a free consultation

How this page was produced

The hard-coded fourteen entry provider table, the single status call, the filter dropping providers the server did not report, the save guard before installing, the disabled flag cleared in a finally block, the full page reload after a successful install and the three fields written on setup were read from the payment provider cards source on the Odoo 19.0 branch. Version coverage comes from the absence of the file on 16.0, 17.0 and 18.0, and a comparison against the public development branch. Spotted an error? Tell us and we will correct the page.