taler-docs

Documentation for GNU Taler components, APIs and protocols
Log | Files | Refs | README | LICENSE

commit de7780bc4dfb7ffe15b46e6be3fd761c0527c828
parent b8f5204435f982bd7a9f12e78f4b64101fd08a31
Author: Florian Dold <florian@dold.me>
Date:   Wed, 18 Feb 2026 15:09:35 +0100

first draft of PoS integration guide

Diffstat:
Mcore/api-merchant.rst | 3+++
Mcore/merchant/post-private-orders.rst | 2++
Aorphaned/gnu-taler-with-oim-inside.md | 25+++++++++++++++++++++++++
Apos-integration.rst | 153+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 183 insertions(+), 0 deletions(-)

diff --git a/core/api-merchant.rst b/core/api-merchant.rst @@ -127,6 +127,8 @@ unless specified otherwise. .. include:: merchant/any-star.rst +.. _merchant-api-authentication: + -------------- Authentication -------------- @@ -754,6 +756,7 @@ Using template .. include:: merchant/post-templates-TEMPLATE_ID.rst +.. _merchant-webhooks: -------- Webhooks diff --git a/core/merchant/post-private-orders.rst b/core/merchant/post-private-orders.rst @@ -1,3 +1,5 @@ +.. _merchant-post-private-orders: + .. http:post:: [/instances/$INSTANCE]/private/orders Create a new order that a customer can pay for. diff --git a/orphaned/gnu-taler-with-oim-inside.md b/orphaned/gnu-taler-with-oim-inside.md @@ -0,0 +1,25 @@ +# GNU Taler ‘with OIM Inside’ + +## Scope of Work +The project will develop an OIM design solution for three features of GNU Taler: + +* send money, +* receive money, and +* point-of-sale payment. + +This will enable users to conduct the following tasks: + +* Send money, using a demo currency, to another demo participant. +* Receive money from another participant. +* Pay for a snack in the GNU Taler store. + +This scoping, and the design results, will be integrated in into the FOSS documentation of GNU Taler. + + +## Design Tasks +* Two documented 'image association' focus group discussions and three individual interviews. With support of our graphic designer, preparation of a complete sketch-level draft layout and presentation of draft to Taler Systems for review. +* Get feedback on possible sound and haptic components. +* Prepare first iteration of clickable prototype, test it with five qualified users, document results, and review with Taler Systems again. +* Prepare second iteration of clickable prototype, test it with five qualified users, document results and conduct final review with Taler Systems. + + diff --git a/pos-integration.rst b/pos-integration.rst @@ -0,0 +1,153 @@ +.. + This file is part of GNU TALER. + Copyright (C) 2026 Taler Systems SA + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU Affero General Public License as published by the Free Software + Foundation; either version 2.1, or (at your option) any later version. + + TALER is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License along with + TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/> + + @author Florian Dold + + +Taler Point of Sale Integration +############################### + +This guide provides an overview of Point of Sale (PoS) terminals can integrate +with Taler to allow payments with electronic cash from Taler Wallets. + + +Architecture Overview +--------------------- + +* Taler wallet: App installed on customer devices (Android, iOS, others) that + holds Taler electronic cash (CHF, EUR, ...) in self-custody. +* Taler exchange: Regulated payment service provider (Taler Operations AG in + Switzerland). Processes electronic cash withdrawals/deposits, payments + from wallet users and to merchants. +* Taler merchant backend: Multi-tenant service that facilitates payments via + the Taler exchange. Can be self-hosted. Taler Operations AG provides `managed + hosting <https://my.taler-ops.ch>`__ for it. +* Taler merchant portal: Web-based user interface for the Taler Merchant Backend +* PoS Terminal: Third party point of sale terminal. The current document describes how + to integrate this PoS terminal with Taler payments. + +Merchant API Basics +------------------- + +A Taler merchant backend offers a HTTP API. Requests to private endpoints are +`authenticated <merchant-api-authentication>` with a bearer token in the +``Authorization: Bearer $TOKEN`` header. + +Some endpoints offered by the Taler merchant backend are publicly accessible, +as they are used by wallets for processing payments. + +Onboarding +---------- + +Option A: External Onboarding +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +* Merchant registers on Taler Merchant Portal and configures their bank account +* Merchant completes KYC process on Taler Merchant Portal +* Merchant configures the PoS terminal to enable access to the Taler merchant by either: + + * (a) using a base URL and API token created in the Taler merchant portal + * (b) using a base URL, login name, password and 2FA code + +* PoS is now ready to accept Taler payments + +In the external onboarding, the merchant has to onboard twice, +once with the PoS provider and once with Taler as a payment method. + +Option B: Integrated Onboarding +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +For the integrated onboarding, the merchant only needs to complete one +onboarding flow with the PoS provider. While more convenient, it comes with +more integration effort. + +This flow requires that the provider of the PoS terminal is operating (or +subcontracting the operation of) a separate `Taler merchant backend <merchant-backend-operator-manual>`. + +The Taler exchange, the regulated payment service provider, will still be +operated separately (i.e. by Taler Operations AG in Switzerland). To simplify the +onboarding for merchants, the PoS terminal provider shares KYC data with the +exchange as part of the onboarding process. + +For the integrated onboarding, the steps for the merchant are: + +* Merchant onboards with PoS terminal and enables Taler support. +* The PoS terminal provider creates a new tenant (=instance) in the Taler + merchant backend via the :http:post:`management/instances` endpoint and + configures it (i.e. setting up contact info for notifications, bank account + info, etc. via the respective endpoints). This is done using + administrative credentials on the merchant backend. +* The PoS provider transmits KYC information for the new merchant to the Taler + exchange. +* PoS is now ready to accept Taler payments. + + +Payments +-------- + +New payments are made via a request to the +:http:post:`[/instances/$INSTANCE]/private/orders` endpoint. + +This creates a new *order* in the Taler Merchant backend, identified by an +order ID (unique within a Taler merchant backend). An order is the +Taler-specific concept for a payment request with associated data and lifecycle +information. + +The :http:get:`[/instances/$INSTANCE]/private/orders/$ORDER_ID` endpoint can be used +to query the status of an order. + +When an order is in the *unpaid* state, the API returns a ``taler_pay_uri``. +This URI should be rendered by the PoS terminal as a QR code. + +Once the user's wallet scans it and successfully downloads information about +it, the order transitions to a **claimed** state. In this state, other +wallets can no longer scan the QR code (and the terminal can stop displaying it). + +When the user confirms the payment and pays successfully, the order transitions +into the *paid* state. + +There are two ways to subscribe to status updates: + +* `Webhooks <merchant-webhooks>`_ +* Long-polling on the :http:get:`[/instances/$INSTANCE]/private/orders/$ORDER_ID` endpoint + +Refunds +------- + +Refunds for paid orders can be given via the +:http:post:`[/instances/$INSTANCE]/private/orders/$ORDER_ID/refund` endpoint. +Note that refunds do not arrive automically in user's wallet: The user either needs +to scan the refund QR code from the ``taler_refund_uri`` field of the response to +accept the refund or manually trigger checking for a refund in their wallet. + +Transaction History +------------------- + +Past orders can be listed via the :http:get:`[/instances/$INSTANCE]/private/orders` endpoint. + +KYC/AML +------- + +When a merchant hits certain transaction thresholds or is flagged for AML +investigation, they may be blocked from accepting further payments and/or may +be blocked from receiving settlement wire transfers. + +In this case, the Taler Merchant Backend will notify them via the +configured contact method(s) such as SMS or E-Mail. + +Furthermore, the :http:get:`[/instances/$INSTANCE]/private/kyc` endpoint may be requested by the PoS terminal +to request information about the KYC status (per merchant bank account and +Taler Exchange). +