Odoo Payment Provider Not Showing in SAR: Fix Guide
A practical guide to configuring an Odoo payment provider for SAR and GCC currencies, why Tabby and Tamara vanish at checkout, and how to read the API log when a call fails.
You installed the module, pasted the keys, opened checkout, and nothing is there. Or the card option shows and the BNPL option does not. In almost every case this is not a broken module. It is one of the filters Odoo applies before it renders a single payment option.
This guide walks the same order Odoo walks internally: currency, provider state, company, country, amount. Then it covers what to do when the option does appear and the gateway call fails.
How Odoo decides what to show at checkout
Odoo builds the payment list on the checkout page by filtering providers against the current order. In recent versions the helper is called _get_compatible_providers. Before that it was _get_compatible_acquirers.
That helper asks a series of questions in sequence. Is the provider enabled? Does it belong to the same company as the order? Does it support the order currency? Does it serve the customer country? Is the amount within the allowed range? Any single no removes the provider from the page.
The important part: Odoo does not tell you which question failed. The option simply is not rendered. So the fix is to walk the filters one at a time.
Step 1: Activate the currency first
On a fresh Odoo database most currencies exist but are inactive. If your database was created with a different country or a generic chart of accounts, SAR itself may be sitting inactive.
Go to Accounting, then Configuration, then Currencies. Remove the Active filter in the search bar so you see the full list, then activate the currency you actually sell in: SAR, AED, KWD, BHD, QAR or OMR.
If you do not have the Accounting app, turn on developer mode and reach the same list from General Settings.
Decimal places matter for KWD, BHD and OMR
The Kuwaiti dinar, the Bahraini dinar and the Omani rial use three decimal places, not two. Odoo stores that on the currency record.
Leave it at two and you get rounding drift between what Odoo displays and what the gateway receives. Some gateways reject the request outright because the amount does not match the expected minor unit. Fix this before your first real order, because correcting it after you have posted journal entries is far more painful.
Step 2: Find out which currency the cart is really using
This is where most people get lost. Your company currency is not necessarily your order currency.
The pricelist decides
The currency on a sales order comes from the pricelist applied to that visitor, not from the company. If you have a USD pricelist attached to a country group, and a visitor arrives from a country inside that group, the cart flips to USD. A provider that only supports SAR then disappears, correctly.
Open Website, then Configuration, and look at which pricelists are selectable on the site and what currency each one carries.
The fastest test: add a product to the cart, open the draft sales order in the back office, and read its Currency field. That value, and nothing else, is what the payment filter uses.
Multi company
A provider record belongs to one company. A website that sells under a different company will never see it. Check that the Company field on the provider matches the company behind the website.
Step 3: State and published are two different switches
In Odoo 14 through 16 the menu reads Payment Acquirers. From Odoo 17 it reads Payment Providers, with a separate Payment Methods list.
A provider has three states.
- Disabled: never appears, anywhere.
- Test mode: appears with a visible test warning and runs against sandbox credentials. Plenty of shops go live in this state and then wonder why no money arrives.
- Enabled: the production state, and it expects production keys.
Published is separate
Payment providers carry a website published flag like any other publishable record. A provider can be fully enabled, visible to you in the back office, and still invisible to a shopper because it was never published.
Open the provider record, confirm the publish toggle, then test the shop in a private window while logged out. Testing as the administrator misleads you, because an admin sometimes sees what a visitor does not.
Step 4: The remaining filters
After currency and state, four things are worth checking.
- Countries: if you set a country list on the provider, any customer with an address outside it loses the option. Leave it empty unless you have a reason.
- Maximum Amount: a real field in Odoo, usually set once during testing and then forgotten. A small value quietly hides the option on larger carts.
- Payment methods: from Odoo 17 onward, a provider with no enabled payment method attached will not render.
- Journal: a provider without a properly configured accounting journal can appear and then fail at confirmation. Set it on the configuration tab.
If you run more than one website in the same database, also check any website restriction on the provider record. Pinning it to one site hides it from the others.
Step 5: The provider side currency guard
Tabby and Tamara operate in GCC currencies: SAR, AED, KWD, BHD, QAR and OMR. If the cart is in USD or EUR, the correct behaviour is for the option to disappear rather than appear and then fail at the gateway.
In Tabby & Tamara for Odoo that guard is built in. The provider declares its supported currencies and hides itself automatically in anything outside the list. So if you meet an unsupported currency, a missing option is the expected outcome, not a fault.
The same install covers four surfaces, website checkout, portal invoices, portal quotations and the Point of Sale, which saves you repeating this diagnosis in four places with four different modules.
When the option shows and the call fails
This is a different problem. The button is there, the customer clicks it, and either the redirect errors or nothing happens. Now you need to see what was actually sent.
The API log in Tabby & Tamara for Odoo records every gateway call with the endpoint, the status code, the request and the response, with secrets redacted. Read it like this.
- 401 or 403: wrong key, or a sandbox key pasted into a provider that is in production state, or the reverse.
- 400 with validation detail: usually amount, currency or customer data. Recheck the currency decimal places and the phone number format.
- Rejected by the provider: sometimes the merchant account itself is not enabled for that currency or that country. That is resolved with Tabby or Tamara, not inside Odoo.
- No log entry at all: the request never left Odoo, so go back to the currency and state filters.
Before any of that, use the Test Connection button. One call tells you whether the credentials are accepted and saves you thirty minutes of guessing.
Point of Sale is a separate path
People configure the website, then find the cashier still has no option. POS has its own configuration. The payment method must be added to the POS config record itself, and the currency here follows the company, not a website pricelist.
In the module the cashier picks Tabby or Tamara, a QR popup opens, the customer scans and approves on their phone, and the server polls the gateway and captures automatically on authorisation. The Validate button stays locked until capture actually succeeds, so goods do not leave the counter on an unconfirmed payment.
A ten minute triage order
If you are in a hurry, work this list top down.
- Activate the currency and check its decimal places.
- Open a test sales order and read its currency.
- Confirm the provider is enabled, published and on the right company.
- Clear the country restriction and temporarily clear Maximum Amount.
- Confirm an enabled payment method and a journal.
- Open the shop in a private window.
- If it renders and fails, hit Test Connection, then read the API log.
Nine times out of ten the answer is in the first three steps.
What no module can fix for you
Be clear on the boundaries before you buy anything. A module connects your keys to the gateway. It does not issue you a merchant account. You still need your own Tabby merchant account through merchant.tabby.ai and your own Tamara merchant account, with their documents and their approval process.
Instalment counts and fee rates are agreed between you and Tabby or Tamara, not set by any Odoo module. And this is an independent integration by Kerneltics built against the public APIs, with no affiliation with or endorsement by either company.
The technical half, making the option appear when it should, disappear when it should, and leave a readable trail when it fails, is fully in your control, and that is exactly what this guide covers.
Frequently asked
Why is Tabby not showing at my Odoo checkout?
Usually one of four things: the currency is not activated in Odoo, the cart currency is not a supported GCC currency, the provider is disabled or not published on the website, or a country restriction or Maximum Amount is set on the provider record. Check them in that order first.
Which currencies do Tabby and Tamara support in Odoo?
SAR, AED, KWD, BHD, QAR and OMR. Any currency outside that list causes the option to hide automatically, which is correct behaviour rather than a fault.
My company currency is SAR, so why is the cart in another currency?
Because the sales order currency comes from the pricelist applied to the visitor, not from the company. Open the draft sales order in the back office and read its Currency field, since that is the value the payment filter uses.
How do I find out why a payment call failed after the option appears?
Use the Test Connection button first to confirm the credentials, then open the API log and read the status code. A 401 or 403 means a wrong key or a sandbox key used in production mode, and a 400 usually points at the amount, the currency or the customer data.
Does the module get me a Tabby or Tamara merchant account?
No. You need your own Tabby merchant account through merchant.tabby.ai and your own Tamara account, with their documents and approval. The module only connects your keys, and it is an independent integration by Kerneltics with no affiliation with or endorsement by either company.
Does it work on Odoo Community and in Point of Sale?
Yes, it supports Community and Enterprise on Odoo 14.0 through 19.0, and covers website checkout, portal invoices, portal quotations and Point of Sale in one install. For POS you must add the payment method to the POS configuration record itself.