Connect Odoo POS
What this does
Connect your Odoo Point of Sale and the registers you choose do the loyalty work for you. Your staff ring up the sale the way they always do, with one small habit added: they put the customer on the ticket. Passtastic sees the sale and updates the customer's card, usually within seconds — no separate device needed for earning.
A reward the customer has already earned works at the counter too: a full stamp card, an item from your points catalogue, a perk that comes with their level. Your staff pick it on the sale and it comes off, without leaving Odoo.
Two shops, to make it concrete:
- Rolling Pin, a bakery with a stamp card. Every coffee earns a stamp. The cashier finds Marta on the ticket, rings up the flat white, and her card gains a stamp before she has found a table. On the tenth visit the free croissant is waiting on the register's list of rewards.
- Foglia Verde, a deli with points. One point per euro, and the jar of pesto costs 300 points. Luca asks for it, the cashier picks it on the sale, the jar comes off the bill, and a minute later his card shows what is left.
The Odoo connection is part of the Connect your POS pack. It is on during your 14-day free trial and is priced per location; see Pricing. If you remove the pack, the connection pauses: sales stop adding stamps or points on their own, your staff scan as before, and nothing is deleted. On an earlier plan? Your plan keeps what it included; see Understanding plan limits.
What works at the register — and what still needs a scan
At the register your staff can give:
- a full stamp card's reward,
- an item from your points catalogue,
- a perk that comes with the customer's level.
A campaign offer cannot be claimed at the register. A birthday free coffee, a "we miss you" treat, anything you send out as an offer — those are still given the way they always were: your staff open the Passtastic Scanner app, scan the customer's card and confirm the offer there. Keep the scanner app on a phone behind the counter for exactly this.
Which cards can earn from Odoo sales
- Points and level cards earn by the points rule attached to the card, for example one point per euro. A card with no rule attached earns nothing until you set one up.
- Stamp cards earn one stamp per paid sale — or one per qualifying item, if you choose that when you set the program up.
- Coupons, bundles (prepaid stamps / prepaid points) and memberships cannot earn from Odoo sales, so they do not appear in the list of programs you can switch on.
Before you start
- Odoo with Point of Sale, version 17, 18 or 19, and the ability to create an API key. Odoo.sh, on-premise and Community databases all work; on an Odoo Online plan, connecting tells you straight away whether your database answers.
- An Odoo login that can create a user and grant access rights.
- At least one published points, level or stamp card in Passtastic. If you do not have one yet, create it from Programs → New program.
- The free Passtastic Scanner app on a phone or tablet — you will still use it for campaign offers.
Step 1 — Create a user in Odoo and get its API key
Give Passtastic its own Odoo user rather than using your own login. That way you can see what it did, and switching it off later is one click.
1. In Odoo, create a new user — call it something like Passtastic Integration — and give it the point-of-sale access right Point of Sale: Administrator and the address-book access right Contacts. Administrator is needed because Passtastic sets up your loyalty programs, their product tags and the barcode rule for wallet cards in your Odoo, and Odoo only lets a point-of-sale administrator create those. With Point of Sale: User the connection fails.
2. Sign in to Odoo as that user.
3. Click the avatar in the top right, then the personal settings entry Preferences.
4. Open the security section Account Security and click New API Key.
5. When Odoo asks how long the key should last, choose the never-expiring option Persistent Key, then copy the key.
Odoo shows the key once and never again. Copy it before you leave that screen; if you lose it, create a new one.
You will also need three details from the same Odoo: your Odoo address (the web address you open Odoo at, for example `https://yourcompany.odoo.com`), your database name (shown on your Odoo login screen) and that user's login (the email address it signs in with).
Step 2 — Connect Odoo to Passtastic
1. In your Passtastic dashboard, open Settings, then Integrations (under Business).
2. Find Odoo POS and click Connect.
3. Fill in Your Odoo address, Database name, Integration user login and API key, then click Connect Odoo.
Passtastic checks the details against your Odoo and brings back the list of your registers.
Earning starts from here, not from last month. Sales already sitting in your Odoo are not credited backwards. Everything rung up from this moment on earns.
Step 3 — Match your registers to your shops
The page calls each point-of-sale device in Odoo a register, and shows one row per register. For each one, pick the Passtastic shop it stands in, and switch Earns loyalty on for the registers that should count.
- Registers we can match by name are filled in for you. Anything we cannot match starts on Don't use.
- No shop for it yet? Use + New shop… in the same list to create one without leaving the page.
- A register marked Needs attention was not in the list your Odoo sent last time. It still earns and still uses a scan point, so check it is still a register you want counting.
A register that earns counts as a scan point. Scan points are the same allowance your staff scanner apps draw from. You get 2 per business, plus 1 for each extra location, and you can add more in Packs & add-ons. The footer of this step shows how many you have used. Every shop with an earning register includes one staff scanner free, so switching a register off does not always make that number drop.
Step 4 — Which programs earn?
Next you see your loyalty programs. Switch on the ones that should earn from Odoo sales, and for each one decide:
- Earn on — every sale, or only sales that include an item from the Odoo product categories you pick.
- Stamps, on a stamp card — one per sale, or one per qualifying item up to a limit you set.
- What the register gives back, on a stamp card — what comes off when the card is full: Money off (a fixed amount or a percentage), Free product, or Staff handle it if your staff give the reward by hand. Points and level cards have no such choice here: on a points card, the till rewards are the catalogue items set to At the register in Settings → Points & rewards rules; on a level card, the % off at the register (optional) of each level, on the program's own Setup tab.
For points and level cards, check that a points rule is attached. Without one the card earns nothing, however many sales go through.
Switch a stamp card back to Staff handle it and click Save here, or Publish on the card's own Setup tab, and we take its reward off Odoo's list of rewards. A register that is already open keeps offering the old reward until you refresh it: menu (☰ top right) → Reload Data → Limited, as in Step 7.
Switching a program off also takes its reward off Odoo's list, so staff can't pick it at the register. Switch it back on and click Save to bring it back. On a register that's already open, do Reload Data → Limited (Step 7).
Step 5 — Tell Odoo which products a reward can be used on
When you click Save on a program that has a reward set — What the register gives back on a stamp card, or a catalogue item set to At the register on a points card — we create a tag in your Odoo called Passtastic: <your reward name> (on a stamp card, the program's row on the Odoo page shows the exact name). A program with no reward set gets no tag. Every one of these rewards, a free item and money off alike, only comes off products carrying that tag, so it never discounts the whole bill by mistake: “10% off” is 10% off the tagged products.
Put the tag on the products the reward should apply to: in Odoo open the product and add it under Product Tags. One product is enough; add more if the customer may choose.
Give each product only one Passtastic tag. If a product carries two Passtastic rewards (say a Bundle and a membership's free coffee), Odoo's register cannot apply either of them to it: tapping Reward only adds more paid items to the ticket. Use a separate product for each reward, for example Coffee (Bundle) and Coffee (member).
Until you do this, the reward appears on the cashier's screen and takes nothing off. The one reward that needs no tag is a level card's % off at the register: it comes off the whole sale.
Step 6 — Make it instant (optional)
Passtastic asks your Odoo to tell us the moment a sale is paid, which is why sales normally land within seconds. If the user you created does not have the rights to set that up, Passtastic shows you five short steps and the address to paste into Odoo yourself.
Either way nothing is lost: we also check your Odoo every minute, so a sale arrives within a minute even if this step is never done.
Step 7 — Refresh each register once so rewards appear
A register keeps its own copy of your products and loyalty programs, so one that is already open does not know about a reward you have just switched on. On each register, open the menu (☰ top right), choose Reload Data, then Limited. Do this after you connect, and again whenever you switch on another card or change a reward. Finish any sale in progress first: reloading discards an unfinished ticket.
What your staff do at the counter
The one habit: put the customer on the ticket. Staff search for the customer by name, email or phone in Odoo and add them to the sale before taking payment — the same step as putting a customer on any ticket. That is what earns the stamp or the points. A sale with nobody on it earns nothing.
Staff scan the customer's wallet card at the Odoo register (with a barcode scanner on the register) and Odoo puts them on the sale, or they search by name, email or phone. One limit: Odoo keeps one barcode per customer, so if a guest has two of your cards, only the one they use most brings them up. If scanning the other card shows "Unknown Barcode", ask for the other card or search by name. Points, stamps and rewards on both cards work normally once the customer is on the sale.
Giving a reward. Ring up the item first, then put the customer on the ticket, tap Reward and pick the reward. For a free item, Odoo usually adds a second one of that item and takes it off for free, so the ticket shows two: one paid, one free. If the customer only wants the free one, select the paid line, tap Qty and type 1: the free line stays and the total drops to zero. If the customer would rather save the reward, staff pick nothing and it stays on their card.
Campaign offers still use the scanner app. A birthday coffee or a "come back soon" treat is confirmed by scanning the customer's card in the Passtastic Scanner app, then handed over at the counter as usual.
Your members in your Odoo contacts
Your members appear in Odoo on their own. When someone joins your program, Passtastic adds them to your Odoo contacts with their name, email and phone, so your staff find them at the counter with one search. Members who joined before you connected are filled in over the following days. Somebody Odoo already has under the same email or phone is linked, not duplicated.
One exception: a member who gave neither an email address nor a phone number is not added to your contacts — there is nothing to match them on and nothing for staff to search for. Those customers are served the way they always were: scan their card with the Passtastic Scanner app.
Members are added automatically — there is no switch for this. Contacts already created stay in Odoo, and removing a member in Passtastic never deletes their Odoo contact.
Bundles and memberships at the register
Guests can use a Bundle or a Membership benefit at the Odoo register too: a prepaid coffee, or the free tasting that comes with the membership.
Switch it on. On the Odoo page, under Which programs earn?, find the Bundle or Membership card and switch on Redeem at the register. Then, in Odoo, put the tag shown in that row on the products the Bundle or each benefit gives free, under Product Tags, the same way as in Step 5. Finally, reload each register: menu (☰ top right) → Reload Data → Limited, as in Step 7.
At the register. Staff ring up the item, put the guest on the sale by searching for their name, email or phone, tap Reward and pick the Bundle or the benefit. As with any free item, Odoo usually adds a second one and takes it off for free; if the guest only wants the free one, set the paid line back to 1 (Qty, then 1). The Bundle use or the benefit comes off the bill, and the pass updates within about a minute. Each product should carry only one Passtastic tag (see Step 5), or the register cannot apply either reward. A Bundle the guest has not installed on their phone yet can be used too. Staff should give one benefit per receipt; Odoo doesn't stop a second one.
Refunds. Refund the sale in Odoo and the use goes back on the pass. Only a use that was actually taken comes back.
If a guest uses more than they have. This happens when a register was offline, or two registers were used at the same moment. The sale is never refused: the guest keeps what they were given, nothing is taken from their other cards, the extra use is recorded in the customer's history, and you get a notification in the bell in your dashboard.
Store credit cannot be redeemed at the Odoo register yet. For now, staff redeem it with the Passtastic Scanner app.
Refunds
Refund a sale in Odoo and Passtastic takes back what that sale earned, in proportion to what was refunded: refund half the ticket and half the points go. A card never drops below zero — if the customer has already spent those points, it stops at zero. You can switch this off with Take points back on refunds on the Odoo page in Passtastic.
Frequently asked questions
Do I have to add my customers to Odoo myself?
What exactly do you write into my Odoo?
Do refunds take stamps and points back?
Can staff still scan the card with the Passtastic app — won't that give points twice?
What if the customer isn't on the ticket?
We put the wrong customer on a sale. Can we move it?
We refunded a sale where the customer used a reward. What happens to the reward?
What if a new member isn't found at the register?
Troubleshooting
"That key was not accepted by Odoo." The key, the login, or the pair of them is wrong. The key has to belong to the login you typed, so check that you copied the whole key and that the login is the email address that user signs in with. If in doubt, create a fresh key in Odoo under Account Security and paste that one.
"We couldn't reach your Odoo at that address." Use the address you open Odoo at, including `https://`, with nothing after the domain. If your Odoo is on your own server, check it is online and reachable from the internet. If the address is right, check the user you created has Point of Sale: Administrator access (Step 1): Odoo refuses a user with less, and for now that shows up as this message.
"We can see no point-of-sale registers in your Odoo." Either there is no point-of-sale register set up in Odoo yet, or the user you created cannot see it. Give that user Point of Sale: Administrator access and try again.
"This Odoo is already connected to Passtastic." That database is connected to another Passtastic business. Disconnect it there first, then connect it here.
"We recognise this Odoo database, but it is answering at a different address." Your Odoo has moved — a new domain, or from Odoo Online to your own server. Disconnect the old connection first, then connect at the new address. If this is a copy of your Odoo running alongside the live one, connect the live one instead.
A banner says this Odoo user can't create contacts. Earning keeps working, but new members will not appear in your Odoo contacts. Give the user Contacts access in Odoo, then reconnect on the Odoo page and the members are filled in from there.
Points or stamps didn't arrive. Most often the customer was not on the ticket. It can also be timing: allow a minute. If it still has not arrived, check on the Odoo page that the register is switched on to earn and pointed at the right shop, and that the program itself is switched on.
The reward isn't on the register. Refresh that register: menu (☰ top right) → Reload Data → Limited, as in Step 7. Closing and reopening it is not enough — a register keeps its own copy of your loyalty programs. If the reward is still missing, check that the program has a reward set (What the register gives back on a stamp card, a catalogue item set to At the register on a points card, a % off at the register (optional) on a level), that you clicked Save on the Odoo page after setting it, and that the customer has actually earned it.
The program says Odoo refused to set the reward up. Odoo turned the reward down when you saved, and the message shows Odoo's own reason. Check that Odoo is still connected, then click Save on that program again. If the program says instead that the reward isn't complete, finish What the register gives back in that row and save again.
The program says “We couldn’t remove this reward from Odoo, so staff can still pick it at the till.” Staff can still pick the old reward at the till until this is fixed. Check that Odoo is still connected, then click Save on that program again. After that, refresh any register that is already open: menu (☰ top right) → Reload Data → Limited, as in Step 7.
For running loyalty without a POS, or connecting other tools, see POS Systems & Integrations. There is an overview of what Odoo and Passtastic do together on the Odoo integration page.