gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-wallet-core] 06/08: wip, doesn't compile. now merchant doesn't ha


From: gnunet
Subject: [taler-wallet-core] 06/08: wip, doesn't compile. now merchant doesn't have it's own definition of types... it uses the one defined by taler-util
Date: Tue, 26 Mar 2024 20:58:53 +0100

This is an automated email from the git hooks/post-receive script.

sebasjm pushed a commit to branch master
in repository wallet-core.

commit 5181d060cf09ffc7250c9f1069920da0724e0284
Author: Sebastian <sebasjm@gmail.com>
AuthorDate: Fri Mar 22 15:15:15 2024 -0300

    wip, doesn't compile. now merchant doesn't have it's own definition of 
types... it uses the one defined by taler-util
---
 packages/merchant-backoffice-ui/src/Routing.tsx    |  11 +-
 .../src/components/form/InputCurrency.tsx          |   4 +-
 .../src/components/form/InputPaytoForm.tsx         |   4 +-
 .../src/components/form/InputStock.tsx             |   6 +-
 .../src/components/form/InputTaxes.tsx             |   4 +-
 .../components/product/InventoryProductForm.tsx    |   8 +-
 .../components/product/NonInventoryProductForm.tsx |  14 +-
 .../src/components/product/ProductForm.tsx         |  13 +-
 .../src/components/product/ProductList.tsx         |   9 +-
 .../merchant-backoffice-ui/src/context/instance.ts |   1 -
 .../merchant-backoffice-ui/src/declaration.d.ts    |  26 +--
 .../merchant-backoffice-ui/src/hooks/backend.ts    | 115 +---------
 packages/merchant-backoffice-ui/src/hooks/bank.ts  |  32 +--
 .../src/hooks/instance.test.ts                     | 100 ++++-----
 .../merchant-backoffice-ui/src/hooks/instance.ts   |  51 ++---
 .../merchant-backoffice-ui/src/hooks/merchant.ts   |  32 +--
 .../merchant-backoffice-ui/src/hooks/order.test.ts |  21 +-
 packages/merchant-backoffice-ui/src/hooks/order.ts |  56 ++---
 packages/merchant-backoffice-ui/src/hooks/otp.ts   |  45 ++--
 .../src/hooks/product.test.ts                      |  44 ++--
 .../merchant-backoffice-ui/src/hooks/product.ts    |  34 +--
 .../src/hooks/reserve.test.ts                      | 207 -----------------
 .../merchant-backoffice-ui/src/hooks/reserves.ts   |  94 --------
 .../merchant-backoffice-ui/src/hooks/templates.ts  |  48 ++--
 .../src/hooks/transfer.test.ts                     |  10 +-
 .../merchant-backoffice-ui/src/hooks/transfer.ts   |  26 +--
 packages/merchant-backoffice-ui/src/hooks/urls.ts  | 120 +++-------
 .../merchant-backoffice-ui/src/hooks/webhooks.ts   |  31 +--
 .../src/paths/admin/create/CreatePage.tsx          |  11 +-
 .../src/paths/admin/create/index.tsx               |  10 +-
 .../src/paths/admin/list/TableActive.tsx           |  18 +-
 .../src/paths/admin/list/View.tsx                  |   8 +-
 .../src/paths/admin/list/index.tsx                 |  13 +-
 .../paths/instance/accounts/create/CreatePage.tsx  |   8 +-
 .../src/paths/instance/accounts/create/index.tsx   |   6 +-
 .../src/paths/instance/accounts/list/ListPage.tsx  |  11 +-
 .../src/paths/instance/accounts/list/Table.tsx     |  10 +-
 .../src/paths/instance/accounts/list/index.tsx     |  10 +-
 .../paths/instance/accounts/update/UpdatePage.tsx  |  14 +-
 .../src/paths/instance/accounts/update/index.tsx   |   7 +-
 .../src/paths/instance/details/DetailPage.tsx      |   8 +-
 .../src/paths/instance/details/index.tsx           |   5 +-
 .../src/paths/instance/details/stories.tsx         |   2 +-
 .../paths/instance/kyc/list/ListPage.stories.tsx   |  13 +-
 .../src/paths/instance/kyc/list/ListPage.tsx       |   8 +-
 .../src/paths/instance/kyc/list/index.tsx          |   5 +-
 .../paths/instance/orders/create/CreatePage.tsx    |  75 +++----
 .../src/paths/instance/orders/create/index.tsx     |  13 +-
 .../instance/orders/details/Detail.stories.tsx     |  33 +--
 .../paths/instance/orders/details/DetailPage.tsx   |  75 ++++---
 .../src/paths/instance/orders/details/index.tsx    |  11 +-
 .../paths/instance/orders/list/List.stories.tsx    |  11 +-
 .../src/paths/instance/orders/list/ListPage.tsx    |  12 +-
 .../src/paths/instance/orders/list/Table.tsx       |  13 +-
 .../src/paths/instance/orders/list/index.tsx       |  15 +-
 .../instance/otp_devices/create/CreatePage.tsx     |   6 +-
 .../otp_devices/create/CreatedSuccessfully.tsx     |   4 +-
 .../paths/instance/otp_devices/create/index.tsx    |  11 +-
 .../paths/instance/otp_devices/list/ListPage.tsx   |  11 +-
 .../src/paths/instance/otp_devices/list/Table.tsx  |   9 +-
 .../src/paths/instance/otp_devices/list/index.tsx  |   7 +-
 .../instance/otp_devices/update/UpdatePage.tsx     |   5 +-
 .../paths/instance/otp_devices/update/index.tsx    |  17 +-
 .../paths/instance/products/create/CreatePage.tsx  |   4 +-
 .../src/paths/instance/products/create/index.tsx   |   6 +-
 .../paths/instance/products/list/List.stories.tsx  |   5 +-
 .../src/paths/instance/products/list/Table.tsx     |  19 +-
 .../src/paths/instance/products/list/index.tsx     |  15 +-
 .../instance/products/update/Update.stories.tsx    |   7 +-
 .../paths/instance/products/update/UpdatePage.tsx  |   4 +-
 .../src/paths/instance/products/update/index.tsx   |   9 +-
 .../paths/instance/templates/create/CreatePage.tsx |   6 +-
 .../src/paths/instance/templates/create/index.tsx  |   6 +-
 .../src/paths/instance/templates/list/ListPage.tsx |  15 +-
 .../src/paths/instance/templates/list/Table.tsx    |   9 +-
 .../src/paths/instance/templates/list/index.tsx    |  15 +-
 .../src/paths/instance/templates/qr/QrPage.tsx     |   7 +-
 .../src/paths/instance/templates/qr/index.tsx      |  15 +-
 .../paths/instance/templates/update/UpdatePage.tsx |   6 +-
 .../src/paths/instance/templates/update/index.tsx  |   9 +-
 .../src/paths/instance/templates/use/UsePage.tsx   |   6 +-
 .../src/paths/instance/templates/use/index.tsx     |  11 +-
 .../src/paths/instance/token/index.tsx             |   7 +-
 .../paths/instance/transfers/create/CreatePage.tsx |   6 +-
 .../src/paths/instance/transfers/create/index.tsx  |   9 +-
 .../paths/instance/transfers/list/List.stories.tsx |  15 +-
 .../src/paths/instance/transfers/list/ListPage.tsx |   4 +-
 .../src/paths/instance/transfers/list/Table.tsx    |   9 +-
 .../src/paths/instance/transfers/list/index.tsx    |  10 +-
 .../src/paths/instance/update/Update.stories.tsx   |   4 +-
 .../src/paths/instance/update/UpdatePage.tsx       |  19 +-
 .../src/paths/instance/update/index.tsx            |  13 +-
 .../paths/instance/webhooks/create/CreatePage.tsx  |   4 +-
 .../src/paths/instance/webhooks/create/index.tsx   |   6 +-
 .../src/paths/instance/webhooks/list/ListPage.tsx  |   8 +-
 .../src/paths/instance/webhooks/list/Table.tsx     |   9 +-
 .../src/paths/instance/webhooks/list/index.tsx     |   7 +-
 .../paths/instance/webhooks/update/UpdatePage.tsx  |   4 +-
 .../src/paths/instance/webhooks/update/index.tsx   |   7 +-
 .../src/paths/login/index.tsx                      |   7 +-
 .../merchant-backoffice-ui/src/schemas/index.ts    |   4 +-
 .../merchant-backoffice-ui/src/utils/amount.ts     |   8 +-
 packages/merchant-backoffice-ui/src/utils/table.ts |   1 -
 packages/merchant-backoffice-ui/src/utils/types.ts |   2 +-
 packages/taler-util/src/http-client/merchant.ts    | 246 +++++++++++++++++----
 packages/taler-util/src/http-client/types.ts       |   6 +-
 106 files changed, 935 insertions(+), 1315 deletions(-)

diff --git a/packages/merchant-backoffice-ui/src/Routing.tsx 
b/packages/merchant-backoffice-ui/src/Routing.tsx
index 4ed5850e7..c30b1912a 100644
--- a/packages/merchant-backoffice-ui/src/Routing.tsx
+++ b/packages/merchant-backoffice-ui/src/Routing.tsx
@@ -19,7 +19,7 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
-import { AbsoluteTime, TranslatedString } from "@gnu-taler/taler-util";
+import { AbsoluteTime, TalerErrorDetail, TranslatedString } from 
"@gnu-taler/taler-util";
 import {
   ErrorType,
   HttpError,
@@ -35,7 +35,6 @@ import {
   NotConnectedAppMenu,
   NotificationCard,
 } from "./components/menu/index.js";
-import { MerchantBackend } from "./declaration.js";
 import { useInstanceBankAccounts } from "./hooks/bank.js";
 import { useInstanceKYCDetails } from "./hooks/instance.js";
 import { usePreference } from "./hooks/preference.js";
@@ -164,7 +163,7 @@ export function Routing(_p: Props): VNode {
 
   function ServerErrorRedirectTo(to: InstancePaths | AdminPaths) {
     return function ServerErrorRedirectToImpl(
-      error: HttpError<MerchantBackend.ErrorDetail>,
+      error: HttpError<TalerErrorDetail>,
     ) {
       if (error.type === ErrorType.TIMEOUT) {
         setGlobalNotification({
@@ -179,7 +178,7 @@ export function Routing(_p: Props): VNode {
           description: i18n.str`Diagnostic from ${error.info.url} is 
'${error.message}'`,
           details:
             error.type === ErrorType.CLIENT || error.type === ErrorType.SERVER
-              ? error.payload.detail
+              ? error.payload.hint
               : undefined,
           type: "ERROR",
           to,
@@ -679,7 +678,7 @@ function AdminInstanceUpdatePage({
       <InstanceAdminUpdatePage
         {...rest}
         instanceId={id}
-        onLoadError={(error: HttpError<MerchantBackend.ErrorDetail>) => {
+        onLoadError={(error: HttpError<TalerErrorDetail>) => {
           const notif =
             error.type === ErrorType.TIMEOUT
               ? {
@@ -693,7 +692,7 @@ function AdminInstanceUpdatePage({
                   details:
                     error.type === ErrorType.CLIENT ||
                     error.type === ErrorType.SERVER
-                      ? error.payload.detail
+                      ? error.payload.hint
                       : undefined,
                   type: "ERROR" as const,
                 };
diff --git 
a/packages/merchant-backoffice-ui/src/components/form/InputCurrency.tsx 
b/packages/merchant-backoffice-ui/src/components/form/InputCurrency.tsx
index f60508504..76d38db84 100644
--- a/packages/merchant-backoffice-ui/src/components/form/InputCurrency.tsx
+++ b/packages/merchant-backoffice-ui/src/components/form/InputCurrency.tsx
@@ -20,9 +20,9 @@
  */
 import { useMerchantApiContext } from "@gnu-taler/web-util/browser";
 import { ComponentChildren, h, VNode } from "preact";
-import { Amount } from "../../declaration.js";
 import { InputWithAddon } from "./InputWithAddon.js";
 import { InputProps } from "./useField.js";
+import { AmountString } from "@gnu-taler/taler-util";
 
 export interface Props<T> extends InputProps<T> {
   expand?: boolean;
@@ -57,7 +57,7 @@ export function InputCurrency<T>({
       addonAfter={addonAfter}
       inputType="number"
       expand={expand}
-      toStr={(v?: Amount) => v?.split(":")[1] || ""}
+      toStr={(v?: AmountString) => v?.split(":")[1] || ""}
       fromStr={(v: string) => (!v ? undefined : `${config.currency}:${v}`)}
       inputExtra={{ min: 0 }}
     >
diff --git 
a/packages/merchant-backoffice-ui/src/components/form/InputPaytoForm.tsx 
b/packages/merchant-backoffice-ui/src/components/form/InputPaytoForm.tsx
index 7eba8b0b5..3337e5f57 100644
--- a/packages/merchant-backoffice-ui/src/components/form/InputPaytoForm.tsx
+++ b/packages/merchant-backoffice-ui/src/components/form/InputPaytoForm.tsx
@@ -233,11 +233,11 @@ export function InputPaytoForm<T>({
   }, [str])
 
   // const submit = useCallback((): void => {
-  //   // const accounts: MerchantBackend.BankAccounts.AccountAddDetails[] = 
paytos;
+  //   // const accounts: TalerMerchantApi.AccountAddDetails[] = paytos;
   //   // const alreadyExists =
   //   //   accounts.findIndex((x) => x.payto_uri === paytoURL) !== -1;
   //   // if (!alreadyExists) {
-  //   const newValue: MerchantBackend.BankAccounts.AccountAddDetails = {
+  //   const newValue: TalerMerchantApi.AccountAddDetails = {
   //     payto_uri: paytoURL,
   //   };
   //   if (value.auth) {
diff --git a/packages/merchant-backoffice-ui/src/components/form/InputStock.tsx 
b/packages/merchant-backoffice-ui/src/components/form/InputStock.tsx
index 5c98f7311..e47259732 100644
--- a/packages/merchant-backoffice-ui/src/components/form/InputStock.tsx
+++ b/packages/merchant-backoffice-ui/src/components/form/InputStock.tsx
@@ -18,16 +18,16 @@
  *
  * @author Sebastian Javier Marchano (sebasjm)
  */
-import { useTranslationContext } from "@gnu-taler/web-util/browser";
+import { Location, useTranslationContext } from "@gnu-taler/web-util/browser";
 import { Fragment, h } from "preact";
 import { useLayoutEffect, useState } from "preact/hooks";
-import { MerchantBackend, Timestamp } from "../../declaration.js";
 import { FormErrors, FormProvider } from "./FormProvider.js";
 import { InputDate } from "./InputDate.js";
 import { InputGroup } from "./InputGroup.js";
 import { InputLocation } from "./InputLocation.js";
 import { InputNumber } from "./InputNumber.js";
 import { InputProps, useField } from "./useField.js";
+import { TalerMerchantApi } from "@gnu-taler/taler-util";
 
 export interface Props<T> extends InputProps<T> {
   alreadyExist?: boolean;
@@ -39,7 +39,7 @@ export interface Stock {
   current: number;
   lost: number;
   sold: number;
-  address?: MerchantBackend.Location;
+  address?: TalerMerchantApi.Location;
   nextRestock?: Timestamp;
 }
 
diff --git a/packages/merchant-backoffice-ui/src/components/form/InputTaxes.tsx 
b/packages/merchant-backoffice-ui/src/components/form/InputTaxes.tsx
index 984b496e7..4392c7659 100644
--- a/packages/merchant-backoffice-ui/src/components/form/InputTaxes.tsx
+++ b/packages/merchant-backoffice-ui/src/components/form/InputTaxes.tsx
@@ -22,18 +22,18 @@ import { useTranslationContext } from 
"@gnu-taler/web-util/browser";
 import { h, VNode } from "preact";
 import { useCallback, useState } from "preact/hooks";
 import * as yup from "yup";
-import { MerchantBackend } from "../../declaration.js";
 import { TaxSchema as schema } from "../../schemas/index.js";
 import { FormErrors, FormProvider } from "./FormProvider.js";
 import { Input } from "./Input.js";
 import { InputGroup } from "./InputGroup.js";
 import { InputProps, useField } from "./useField.js";
+import { TalerMerchantApi } from "@gnu-taler/taler-util";
 
 export interface Props<T> extends InputProps<T> {
   isValid?: (e: any) => boolean;
 }
 
-type Entity = MerchantBackend.Tax;
+type Entity = TalerMerchantApi.Tax;
 export function InputTaxes<T>({
   name,
   readonly,
diff --git 
a/packages/merchant-backoffice-ui/src/components/product/InventoryProductForm.tsx
 
b/packages/merchant-backoffice-ui/src/components/product/InventoryProductForm.tsx
index 25b1f0e2d..52ac2a1fe 100644
--- 
a/packages/merchant-backoffice-ui/src/components/product/InventoryProductForm.tsx
+++ 
b/packages/merchant-backoffice-ui/src/components/product/InventoryProductForm.tsx
@@ -16,24 +16,24 @@
 import { useTranslationContext } from "@gnu-taler/web-util/browser";
 import { h, VNode } from "preact";
 import { useState } from "preact/hooks";
-import { MerchantBackend, WithId } from "../../declaration.js";
 import { ProductMap } from "../../paths/instance/orders/create/CreatePage.js";
 import { FormErrors, FormProvider } from "../form/FormProvider.js";
 import { InputNumber } from "../form/InputNumber.js";
 import { InputSearchOnList } from "../form/InputSearchOnList.js";
+import { TalerMerchantApi } from "@gnu-taler/taler-util";
 
 type Form = {
-  product: MerchantBackend.Products.ProductDetail & WithId;
+  product: TalerMerchantApi.ProductDetail & WithId;
   quantity: number;
 };
 
 interface Props {
   currentProducts: ProductMap;
   onAddProduct: (
-    product: MerchantBackend.Products.ProductDetail & WithId,
+    product: TalerMerchantApi.ProductDetail & WithId,
     quantity: number,
   ) => void;
-  inventory: (MerchantBackend.Products.ProductDetail & WithId)[];
+  inventory: (TalerMerchantApi.ProductDetail & WithId)[];
 }
 
 export function InventoryProductForm({
diff --git 
a/packages/merchant-backoffice-ui/src/components/product/NonInventoryProductForm.tsx
 
b/packages/merchant-backoffice-ui/src/components/product/NonInventoryProductForm.tsx
index 8ddd9fa95..a127999fc 100644
--- 
a/packages/merchant-backoffice-ui/src/components/product/NonInventoryProductForm.tsx
+++ 
b/packages/merchant-backoffice-ui/src/components/product/NonInventoryProductForm.tsx
@@ -13,11 +13,11 @@
  You should have received a copy of the GNU General Public License along with
  GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
+import { AmountString, TalerMerchantApi } from "@gnu-taler/taler-util";
 import { useTranslationContext } from "@gnu-taler/web-util/browser";
 import { Fragment, h, VNode } from "preact";
 import { useCallback, useEffect, useState } from "preact/hooks";
 import * as yup from "yup";
-import { MerchantBackend } from "../../declaration.js";
 import { useListener } from "../../hooks/listener.js";
 import { NonInventoryProductSchema as schema } from "../../schemas/index.js";
 import { FormErrors, FormProvider } from "../form/FormProvider.js";
@@ -27,7 +27,7 @@ import { InputImage } from "../form/InputImage.js";
 import { InputNumber } from "../form/InputNumber.js";
 import { InputTaxes } from "../form/InputTaxes.js";
 
-type Entity = MerchantBackend.Product;
+type Entity = TalerMerchantApi.Product;
 
 interface Props {
   onAddProduct: (p: Entity) => Promise<void>;
@@ -46,7 +46,7 @@ export function NonInventoryProductFrom({
   }, [isEditing]);
 
   const [submitForm, addFormSubmitter] = useListener<
-    Partial<MerchantBackend.Product> | undefined
+    Partial<TalerMerchantApi.Product> | undefined
   >((result) => {
     if (result) {
       setShowCreateProduct(false);
@@ -55,7 +55,7 @@ export function NonInventoryProductFrom({
         taxes: result.taxes || [],
         description: result.description || "",
         image: result.image || "",
-        price: result.price || "",
+        price: (result.price || "") as AmountString,
         unit: result.unit || "",
       });
     }
@@ -136,7 +136,7 @@ interface NonInventoryProduct {
   unit: string;
   price: string;
   image: string;
-  taxes: MerchantBackend.Tax[];
+  taxes: TalerMerchantApi.Tax[];
 }
 
 export function ProductForm({ onSubscribe, initial }: ProductProps): VNode {
@@ -144,7 +144,7 @@ export function ProductForm({ onSubscribe, initial }: 
ProductProps): VNode {
     taxes: [],
     ...initial,
   });
-  let errors: FormErrors<Entity> = {};
+  let errors: FormErrors<NonInventoryProduct> = {};
   try {
     schema.validateSync(value, { abortEarly: false });
   } catch (err) {
@@ -159,7 +159,7 @@ export function ProductForm({ onSubscribe, initial }: 
ProductProps): VNode {
   }
 
   const submit = useCallback((): Entity | undefined => {
-    return value as MerchantBackend.Product;
+    return value as TalerMerchantApi.Product;
   }, [value]);
 
   const hasErrors = Object.keys(errors).some(
diff --git 
a/packages/merchant-backoffice-ui/src/components/product/ProductForm.tsx 
b/packages/merchant-backoffice-ui/src/components/product/ProductForm.tsx
index 11344cde3..468e5f635 100644
--- a/packages/merchant-backoffice-ui/src/components/product/ProductForm.tsx
+++ b/packages/merchant-backoffice-ui/src/components/product/ProductForm.tsx
@@ -20,13 +20,12 @@
  */
 
 import {
-  useMerchantApiContext,
-  useTranslationContext,
+  useTranslationContext
 } from "@gnu-taler/web-util/browser";
 import { h } from "preact";
 import { useCallback, useEffect, useState } from "preact/hooks";
 import * as yup from "yup";
-import { MerchantBackend } from "../../declaration.js";
+import { useSessionContext } from "../../context/session.js";
 import {
   ProductCreateSchema as createSchema,
   ProductUpdateSchema as updateSchema,
@@ -39,9 +38,9 @@ import { InputNumber } from "../form/InputNumber.js";
 import { InputStock, Stock } from "../form/InputStock.js";
 import { InputTaxes } from "../form/InputTaxes.js";
 import { InputWithAddon } from "../form/InputWithAddon.js";
-import { useSessionContext } from "../../context/session.js";
+import { AmountString, TalerMerchantApi } from "@gnu-taler/taler-util";
 
-type Entity = MerchantBackend.Products.ProductDetail & { product_id: string };
+type Entity = TalerMerchantApi.ProductDetail & { product_id: string };
 
 interface Props {
   onSubscribe: (c?: () => Entity | undefined) => void;
@@ -55,7 +54,7 @@ export function ProductForm({ onSubscribe, initial, 
alreadyExist }: Props) {
     description_i18n: {},
     taxes: [],
     next_restock: { t_s: "never" },
-    price: ":0",
+    price: ":0" as AmountString,
     ...initial,
     stock:
       !initial || initial.total_stock === -1
@@ -108,7 +107,7 @@ export function ProductForm({ onSubscribe, initial, 
alreadyExist }: Props) {
       delete value.minimum_age;
     }
 
-    return value as MerchantBackend.Products.ProductDetail & {
+    return value as TalerMerchantApi.ProductDetail & {
       product_id: string;
     };
   }, [value]);
diff --git 
a/packages/merchant-backoffice-ui/src/components/product/ProductList.tsx 
b/packages/merchant-backoffice-ui/src/components/product/ProductList.tsx
index d89c5371b..4fff66fd7 100644
--- a/packages/merchant-backoffice-ui/src/components/product/ProductList.tsx
+++ b/packages/merchant-backoffice-ui/src/components/product/ProductList.tsx
@@ -13,18 +13,17 @@
  You should have received a copy of the GNU General Public License along with
  GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
-import { Amounts } from "@gnu-taler/taler-util";
+import { Amounts, TalerMerchantApi } from "@gnu-taler/taler-util";
 import { h, VNode } from "preact";
 import emptyImage from "../../assets/empty.png";
 import { useTranslationContext } from "@gnu-taler/web-util/browser";
-import { MerchantBackend } from "../../declaration.js";
 
 interface Props {
-  list: MerchantBackend.Product[];
+  list: TalerMerchantApi.Product[];
   actions?: {
     name: string;
     tooltip: string;
-    handler: (d: MerchantBackend.Product, index: number) => void;
+    handler: (d: TalerMerchantApi.Product, index: number) => void;
   }[];
 }
 export function ProductList({ list, actions = [] }: Props): VNode {
@@ -60,7 +59,7 @@ export function ProductList({ list, actions = [] }: Props): 
VNode {
               : Amounts.stringify(
                   Amounts.mult(
                     Amounts.parseOrThrow(entry.price),
-                    entry.quantity,
+                    entry.quantity ?? 0
                   ).amount,
                 );
 
diff --git a/packages/merchant-backoffice-ui/src/context/instance.ts 
b/packages/merchant-backoffice-ui/src/context/instance.ts
index f969a99d6..9b67f7170 100644
--- a/packages/merchant-backoffice-ui/src/context/instance.ts
+++ b/packages/merchant-backoffice-ui/src/context/instance.ts
@@ -21,7 +21,6 @@
 
 import { createContext } from "preact";
 import { useContext } from "preact/hooks";
-import { LoginToken } from "../declaration.js";
 
 interface Type {
   id: string;
diff --git a/packages/merchant-backoffice-ui/src/declaration.d.ts 
b/packages/merchant-backoffice-ui/src/declaration.d.ts
index e39257a79..93fecd9c4 100644
--- a/packages/merchant-backoffice-ui/src/declaration.d.ts
+++ b/packages/merchant-backoffice-ui/src/declaration.d.ts
@@ -28,7 +28,7 @@ type ImageDataUrl = string;
 type MerchantUserType = "business" | "individual";
 
 
-export interface WithId {
+interface WithId {
   id: string;
 }
 
@@ -118,7 +118,7 @@ interface LoginToken {
 // must forget after used
 declare const __ac_token: unique symbol;
 
-export namespace ExchangeBackend {
+namespace dead_ExchangeBackend2 {
   interface WireResponse {
     // Master public key of the exchange, must match the key returned in /keys.
     master_public_key: EddsaPublicKey;
@@ -153,7 +153,7 @@ export namespace ExchangeBackend {
     sig: EddsaSignature;
   }
 }
-export namespace MerchantBackend {
+namespace dead_MerchantBackend2 {
   interface ErrorDetail {
     // Numeric error code unique to the condition.
     // The other arguments are specific to the error value reported here.
@@ -344,7 +344,7 @@ export namespace MerchantBackend {
     // Free-form address lines, should not exceed 7 elements.
     address_lines?: string[];
   }
-  namespace Instances {
+  namespace dead_Instances2 {
     //POST /private/instances/$INSTANCE/auth
     interface InstanceAuthConfigurationMessage {
       // Type of authentication.
@@ -570,7 +570,7 @@ export namespace MerchantBackend {
     }
   }
 
-  namespace KYC {
+  namespace dead_KYC {
     //GET /private/instances/$INSTANCE/kyc
     interface AccountKycRedirects {
       // Array of pending KYCs.
@@ -612,7 +612,7 @@ export namespace MerchantBackend {
 
   }
 
-  namespace BankAccounts {
+  namespace dead_BankAccounts {
 
     interface AccountAddDetails {
 
@@ -706,7 +706,7 @@ export namespace MerchantBackend {
 
   }
 
-  namespace Products {
+  namespace dead_Products {
     // POST /private/products
     interface ProductAddDetail {
       // product ID to use.
@@ -865,7 +865,7 @@ export namespace MerchantBackend {
     //   DELETE /private/products/$PRODUCT_ID
   }
 
-  namespace Orders {
+  namespace dead_Orders {
     type MerchantOrderStatusResponse =
       | CheckPaymentPaidResponse
       | CheckPaymentClaimedResponse
@@ -1147,7 +1147,7 @@ export namespace MerchantBackend {
     }
   }
 
-  namespace Rewards {
+  namespace dead_Rewards {
     // GET /private/reserves
     interface RewardReserveStatus {
       // Array of all known reserves (possibly empty!)
@@ -1303,7 +1303,7 @@ export namespace MerchantBackend {
     }
   }
 
-  namespace Transfers {
+  namespace dead_Transfers {
     interface TransferList {
       // list of all the transfers that fit the filter that we know
       transfers: TransferDetails[];
@@ -1355,7 +1355,7 @@ export namespace MerchantBackend {
     }
   }
 
-  namespace OTP {
+  namespace dead_OTP {
     interface OtpDeviceAddDetails {
       // Device ID to use.
       otp_device_id: string;
@@ -1412,7 +1412,7 @@ export namespace MerchantBackend {
 
 
   }
-  namespace Template {
+  namespace dead_Template {
     interface TemplateAddDetails {
       // Template ID to use.
       template_id: string;
@@ -1494,7 +1494,7 @@ export namespace MerchantBackend {
     }
   }
 
-  namespace Webhooks {
+  namespace dead_Webhooks {
     type MerchantWebhookType = "pay" | "refund";
     interface WebhookAddDetails {
       // Webhook ID to use.
diff --git a/packages/merchant-backoffice-ui/src/hooks/backend.ts 
b/packages/merchant-backoffice-ui/src/hooks/backend.ts
index 37dfd8fd6..8eb9b4cf2 100644
--- a/packages/merchant-backoffice-ui/src/hooks/backend.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/backend.ts
@@ -20,24 +20,21 @@
  */
 
 import {
-  AbsoluteTime,
-  AccessToken,
-  HttpStatusCode,
+  TalerErrorDetail,
+  TalerMerchantApi
 } from "@gnu-taler/taler-util";
 import {
   EmptyObject,
-  ErrorType,
   HttpError,
   HttpResponse,
   HttpResponseOk,
   RequestError,
   RequestOptions,
-  useApiContext,
+  useApiContext
 } from "@gnu-taler/web-util/browser";
 import { useCallback, useEffect, useState } from "preact/hooks";
 import { useSWRConfig } from "swr";
 import { useSessionContext } from "../context/session.js";
-import { LoginToken, MerchantBackend, Timestamp } from "../declaration.js";
 
 export function useMatchMutate(): (
   re?: RegExp,
@@ -72,21 +69,21 @@ export function useMatchMutate(): (
 }
 
 export function useBackendInstancesTestForAdmin(): HttpResponse<
-  MerchantBackend.Instances.InstancesResponse,
-  MerchantBackend.ErrorDetail
+  TalerMerchantApi.InstancesResponse,
+  TalerErrorDetail
 > {
   const { request } = useBackendBaseRequest();
 
-  type Type = MerchantBackend.Instances.InstancesResponse;
+  type Type = TalerMerchantApi.InstancesResponse;
 
   const [result, setResult] = useState<
-    HttpResponse<Type, MerchantBackend.ErrorDetail>
+    HttpResponse<Type, TalerErrorDetail>
   >({ loading: true });
 
   useEffect(() => {
     request<Type>(`/management/instances`)
       .then((data) => setResult(data))
-      .catch((error: RequestError<MerchantBackend.ErrorDetail>) =>
+      .catch((error: RequestError<TalerErrorDetail>) =>
         setResult(error.cause),
       );
   }, [request]);
@@ -98,14 +95,14 @@ const CHECK_CONFIG_INTERVAL_OK = 5 * 60 * 1000;
 const CHECK_CONFIG_INTERVAL_FAIL = 2 * 1000;
 
 export function useBackendConfig(): HttpResponse<
-  MerchantBackend.VersionResponse | undefined,
-  RequestError<MerchantBackend.ErrorDetail>
+  TalerMerchantApi.VersionResponse | undefined,
+  RequestError<TalerErrorDetail>
 > {
   const { request } = useBackendBaseRequest();
 
-  type Type = MerchantBackend.VersionResponse;
+  type Type = TalerMerchantApi.VersionResponse;
   type State = {
-    data: HttpResponse<Type, RequestError<MerchantBackend.ErrorDetail>>;
+    data: HttpResponse<Type, RequestError<TalerErrorDetail>>;
     timer: number;
   };
   const [result, setResult] = useState<State>({
@@ -191,94 +188,6 @@ type LoginResult =
       cause: HttpError<EmptyObject>;
     };
 
-export function useCredentialsChecker() {
-  const { request } = useApiContext();
-  //check against instance details endpoint
-  //while merchant backend doesn't have a login endpoint
-  async function requestNewLoginToken(
-    baseUrl: string,
-    token: AccessToken,
-  ): Promise<LoginResult> {
-    const data: MerchantBackend.Instances.LoginTokenRequest = {
-      scope: "write",
-      duration: {
-        d_us: "forever",
-      },
-      refreshable: true,
-    };
-    try {
-      const response =
-        await request<MerchantBackend.Instances.LoginTokenSuccessResponse>(
-          baseUrl,
-          `/private/token`,
-          {
-            method: "POST",
-            token,
-            data,
-          },
-        );
-      return {
-        valid: true,
-        token: response.data.token,
-        expiration: response.data.expiration,
-      };
-    } catch (error) {
-      if (error instanceof RequestError) {
-        return { valid: false, cause: error.cause };
-      }
-
-      return {
-        valid: false,
-        cause: {
-          type: ErrorType.UNEXPECTED,
-          loading: false,
-          info: {
-            hasToken: true,
-            status: 0,
-            options: {},
-            url: `/private/token`,
-            payload: {},
-          },
-          exception: error,
-          message:
-            error instanceof Error ? error.message : "unpexepected error",
-        },
-      };
-    }
-  }
-
-  async function refreshLoginToken(
-    baseUrl: string,
-    token: LoginToken,
-  ): Promise<LoginResult> {
-    if (
-      AbsoluteTime.isExpired(
-        AbsoluteTime.fromProtocolTimestamp(token.expiration),
-      )
-    ) {
-      return {
-        valid: false,
-        cause: {
-          type: ErrorType.CLIENT,
-          status: HttpStatusCode.Unauthorized,
-          message: "login token expired, login again.",
-          info: {
-            hasToken: true,
-            status: 401,
-            options: {},
-            url: `/private/token`,
-            payload: {},
-          },
-          payload: {},
-        },
-      };
-    }
-
-    return requestNewLoginToken(baseUrl, token.token as AccessToken);
-  }
-  return { requestNewLoginToken, refreshLoginToken };
-}
-
 /**
  *
  * @param root the request is intended to the base URL and no the instance URL
diff --git a/packages/merchant-backoffice-ui/src/hooks/bank.ts 
b/packages/merchant-backoffice-ui/src/hooks/bank.ts
index d01b579b9..3cf9c7846 100644
--- a/packages/merchant-backoffice-ui/src/hooks/bank.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/bank.ts
@@ -20,15 +20,15 @@ import {
   RequestError,
 } from "@gnu-taler/web-util/browser";
 import { useEffect, useState } from "preact/hooks";
-import { MerchantBackend } from "../declaration.js";
 import { MAX_RESULT_SIZE, PAGE_SIZE } from "../utils/constants.js";
 import { useBackendInstanceRequest, useMatchMutate } from "./backend.js";
 
 // FIX default import https://github.com/microsoft/TypeScript/issues/49189
 import _useSWR, { SWRHook, mutate } from "swr";
+import { TalerErrorDetail, TalerMerchantApi } from "@gnu-taler/taler-util";
 const useSWR = _useSWR as unknown as SWRHook;
 
-// const MOCKED_ACCOUNTS: Record<string, 
MerchantBackend.BankAccounts.AccountAddDetails> = {
+// const MOCKED_ACCOUNTS: Record<string, TalerMerchantApi.AccountAddDetails> = 
{
 //   "hwire1": {
 //     h_wire: "hwire1",
 //     payto_uri: "payto://fake/iban/123",
@@ -46,7 +46,7 @@ export function useBankAccountAPI(): BankAccountAPI {
   const { request } = useBackendInstanceRequest();
 
   const createBankAccount = async (
-    data: MerchantBackend.BankAccounts.AccountAddDetails,
+    data: TalerMerchantApi.AccountAddDetails,
   ): Promise<HttpResponseOk<void>> => {
     // MOCKED_ACCOUNTS[data.h_wire] = data
     // return Promise.resolve({ ok: true, data: undefined });
@@ -60,7 +60,7 @@ export function useBankAccountAPI(): BankAccountAPI {
 
   const updateBankAccount = async (
     h_wire: string,
-    data: MerchantBackend.BankAccounts.AccountPatchDetails,
+    data: TalerMerchantApi.AccountPatchDetails,
   ): Promise<HttpResponseOk<void>> => {
     // MOCKED_ACCOUNTS[h_wire].credit_facade_credentials = 
data.credit_facade_credentials
     // MOCKED_ACCOUNTS[h_wire].credit_facade_url = data.credit_facade_url
@@ -94,11 +94,11 @@ export function useBankAccountAPI(): BankAccountAPI {
 
 export interface BankAccountAPI {
   createBankAccount: (
-    data: MerchantBackend.BankAccounts.AccountAddDetails,
+    data: TalerMerchantApi.AccountAddDetails,
   ) => Promise<HttpResponseOk<void>>;
   updateBankAccount: (
     id: string,
-    data: MerchantBackend.BankAccounts.AccountPatchDetails,
+    data: TalerMerchantApi.AccountPatchDetails,
   ) => Promise<HttpResponseOk<void>>;
   deleteBankAccount: (id: string) => Promise<HttpResponseOk<void>>;
 }
@@ -114,8 +114,8 @@ export function useInstanceBankAccounts(
   args?: InstanceBankAccountFilter,
   updatePosition?: (id: string) => void,
 ): HttpResponsePaginated<
-  MerchantBackend.BankAccounts.AccountsSummaryResponse,
-  MerchantBackend.ErrorDetail
+  TalerMerchantApi.AccountsSummaryResponse,
+  TalerErrorDetail
 > {
 
   const { fetcher } = useBackendInstanceRequest();
@@ -128,14 +128,14 @@ export function useInstanceBankAccounts(
     error: afterError,
     isValidating: loadingAfter,
   } = useSWR<
-    HttpResponseOk<MerchantBackend.BankAccounts.AccountsSummaryResponse>,
-    RequestError<MerchantBackend.ErrorDetail>
+    HttpResponseOk<TalerMerchantApi.AccountsSummaryResponse>,
+    RequestError<TalerErrorDetail>
   >([`/private/accounts`], fetcher);
 
   const [lastAfter, setLastAfter] = useState<
     HttpResponse<
-      MerchantBackend.BankAccounts.AccountsSummaryResponse,
-      MerchantBackend.ErrorDetail
+      TalerMerchantApi.AccountsSummaryResponse,
+      TalerErrorDetail
     >
   >({ loading: true });
   useEffect(() => {
@@ -179,8 +179,8 @@ export function useInstanceBankAccounts(
 export function useBankAccountDetails(
   h_wire: string,
 ): HttpResponse<
-  MerchantBackend.BankAccounts.BankAccountEntry,
-  MerchantBackend.ErrorDetail
+  TalerMerchantApi.BankAccountEntry,
+  TalerErrorDetail
 > {
   // return {
   //   ok: true,
@@ -192,8 +192,8 @@ export function useBankAccountDetails(
   const { fetcher } = useBackendInstanceRequest();
 
   const { data, error, isValidating } = useSWR<
-    HttpResponseOk<MerchantBackend.BankAccounts.BankAccountEntry>,
-    RequestError<MerchantBackend.ErrorDetail>
+    HttpResponseOk<TalerMerchantApi.BankAccountEntry>,
+    RequestError<TalerErrorDetail>
   >([`/private/accounts/${h_wire}`], fetcher, {
     refreshInterval: 0,
     refreshWhenHidden: false,
diff --git a/packages/merchant-backoffice-ui/src/hooks/instance.test.ts 
b/packages/merchant-backoffice-ui/src/hooks/instance.test.ts
index a1bb3d5d4..f73f07d68 100644
--- a/packages/merchant-backoffice-ui/src/hooks/instance.test.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/instance.test.ts
@@ -19,9 +19,9 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
+import { AccessToken, TalerMerchantApi } from "@gnu-taler/taler-util";
 import * as tests from "@gnu-taler/web-util/testing";
 import { expect } from "chai";
-import { MerchantBackend } from "../declaration.js";
 import {
   useAdminAPI,
   useBackendInstances,
@@ -35,12 +35,10 @@ import {
   API_DELETE_INSTANCE,
   API_GET_CURRENT_INSTANCE,
   API_LIST_INSTANCES,
-  API_NEW_LOGIN,
   API_UPDATE_CURRENT_INSTANCE,
   API_UPDATE_CURRENT_INSTANCE_AUTH,
   API_UPDATE_INSTANCE_BY_ID,
 } from "./urls.js";
-import { AccessToken } from "@gnu-taler/taler-util";
 
 describe("instance api interaction with details", () => {
   it("should evict cache when updating an instance", async () => {
@@ -49,7 +47,7 @@ describe("instance api interaction with details", () => {
     env.addRequestExpectation(API_GET_CURRENT_INSTANCE, {
       response: {
         name: "instance_name",
-      } as MerchantBackend.Instances.QueryInstancesResponse,
+      } as TalerMerchantApi.QueryInstancesResponse,
     });
 
     const hookBehavior = await tests.hookBehaveLikeThis(
@@ -77,16 +75,16 @@ describe("instance api interaction with details", () => {
           env.addRequestExpectation(API_UPDATE_CURRENT_INSTANCE, {
             request: {
               name: "other_name",
-            } as MerchantBackend.Instances.InstanceReconfigurationMessage,
+            } as TalerMerchantApi.InstanceReconfigurationMessage,
           });
           env.addRequestExpectation(API_GET_CURRENT_INSTANCE, {
             response: {
               name: "other_name",
-            } as MerchantBackend.Instances.QueryInstancesResponse,
+            } as TalerMerchantApi.QueryInstancesResponse,
           });
           api.updateInstance({
             name: "other_name",
-          } as MerchantBackend.Instances.InstanceReconfigurationMessage);
+          } as TalerMerchantApi.InstanceReconfigurationMessage);
         },
         ({ query, api }) => {
           expect(env.assertJustExpectedRequestWereMade()).deep.eq({
@@ -110,15 +108,15 @@ describe("instance api interaction with details", () => {
   it("should evict cache when setting the instance's token", async () => {
     const env = new ApiMockEnvironment();
 
-    env.addRequestExpectation(API_GET_CURRENT_INSTANCE, {
-      response: {
-        name: "instance_name",
-        auth: {
-          method: "token",
-          // token: "not-secret",
-        },
-      } as MerchantBackend.Instances.QueryInstancesResponse,
-    });
+    // env.addRequestExpectation(API_GET_CURRENT_INSTANCE, {
+    //   response: {
+    //     name: "instance_name",
+    //     auth: {
+    //       method: "token",
+    //       // token: "not-secret",
+    //     },
+    //   } as TalerMerchantApi.QueryInstancesResponse,
+    // });
 
     const hookBehavior = await tests.hookBehaveLikeThis(
       () => {
@@ -148,26 +146,26 @@ describe("instance api interaction with details", () => {
             request: {
               method: "token",
               token: "secret",
-            } as MerchantBackend.Instances.InstanceAuthConfigurationMessage,
-          });
-          env.addRequestExpectation(API_NEW_LOGIN, {
-            auth: "secret",
-            request: {
-              scope: "write",
-              duration: {
-                "d_us": "forever",
-              },
-              refreshable: true,
-            },            
-          });
+            } as TalerMerchantApi.InstanceAuthConfigurationMessage,
+          });
+          // env.addRequestExpectation(API_NEW_LOGIN, {
+          //   auth: "secret",
+          //   request: {
+          //     scope: "write",
+          //     duration: {
+          //       "d_us": "forever",
+          //     },
+          //     refreshable: true,
+          //   },            
+          // });
           env.addRequestExpectation(API_GET_CURRENT_INSTANCE, {
             response: {
               name: "instance_name",
               auth: {
-                method: "token",
+                type: "token",
                 // token: "secret",
               },
-            } as MerchantBackend.Instances.QueryInstancesResponse,
+            } as TalerMerchantApi.QueryInstancesResponse,
           });
           api.setNewAccessToken(undefined, "secret" as AccessToken);
         },
@@ -200,10 +198,10 @@ describe("instance api interaction with details", () => {
       response: {
         name: "instance_name",
         auth: {
-          method: "token",
+          type: "token",
           // token: "not-secret",
         },
-      } as MerchantBackend.Instances.QueryInstancesResponse,
+      } as TalerMerchantApi.QueryInstancesResponse,
     });
 
     const hookBehavior = await tests.hookBehaveLikeThis(
@@ -234,15 +232,15 @@ describe("instance api interaction with details", () => {
           env.addRequestExpectation(API_UPDATE_CURRENT_INSTANCE_AUTH, {
             request: {
               method: "external",
-            } as MerchantBackend.Instances.InstanceAuthConfigurationMessage,
+            } as TalerMerchantApi.InstanceAuthConfigurationMessage,
           });
           env.addRequestExpectation(API_GET_CURRENT_INSTANCE, {
             response: {
               name: "instance_name",
               auth: {
-                method: "external",
+                type: "external",
               },
-            } as MerchantBackend.Instances.QueryInstancesResponse,
+            } as TalerMerchantApi.QueryInstancesResponse,
           });
 
           api.clearAccessToken(undefined);
@@ -332,7 +330,7 @@ describe("instance admin api interaction with listing", () 
=> {
         instances: [
           {
             name: "instance_name",
-          } as MerchantBackend.Instances.Instance,
+          } as TalerMerchantApi.Instance,
         ],
       },
     });
@@ -366,24 +364,24 @@ describe("instance admin api interaction with listing", 
() => {
           env.addRequestExpectation(API_CREATE_INSTANCE, {
             request: {
               name: "other_name",
-            } as MerchantBackend.Instances.InstanceConfigurationMessage,
+            } as TalerMerchantApi.InstanceConfigurationMessage,
           });
           env.addRequestExpectation(API_LIST_INSTANCES, {
             response: {
               instances: [
                 {
                   name: "instance_name",
-                } as MerchantBackend.Instances.Instance,
+                } as TalerMerchantApi.Instance,
                 {
                   name: "other_name",
-                } as MerchantBackend.Instances.Instance,
+                } as TalerMerchantApi.Instance,
               ],
             },
           });
 
           api.createInstance({
             name: "other_name",
-          } as MerchantBackend.Instances.InstanceConfigurationMessage);
+          } as TalerMerchantApi.InstanceConfigurationMessage);
         },
         ({ query, api }) => {
           expect(env.assertJustExpectedRequestWereMade()).deep.eq({
@@ -419,11 +417,11 @@ describe("instance admin api interaction with listing", 
() => {
           {
             id: "default",
             name: "instance_name",
-          } as MerchantBackend.Instances.Instance,
+          } as TalerMerchantApi.Instance,
           {
             id: "the_id",
             name: "second_instance",
-          } as MerchantBackend.Instances.Instance,
+          } as TalerMerchantApi.Instance,
         ],
       },
     });
@@ -466,7 +464,7 @@ describe("instance admin api interaction with listing", () 
=> {
                 {
                   id: "default",
                   name: "instance_name",
-                } as MerchantBackend.Instances.Instance,
+                } as TalerMerchantApi.Instance,
               ],
             },
           });
@@ -543,7 +541,7 @@ describe("instance admin api interaction with listing", () 
=> {
     //     instances: [{
     //       id: 'default',
     //       name: 'instance_name'
-    //     } as MerchantBackend.Instances.Instance]
+    //     } as TalerMerchantApi.Instance]
     //   },
     // });
 
@@ -573,11 +571,11 @@ describe("instance admin api interaction with listing", 
() => {
           {
             id: "default",
             name: "instance_name",
-          } as MerchantBackend.Instances.Instance,
+          } as TalerMerchantApi.Instance,
           {
             id: "the_id",
             name: "second_instance",
-          } as MerchantBackend.Instances.Instance,
+          } as TalerMerchantApi.Instance,
         ],
       },
     });
@@ -624,7 +622,7 @@ describe("instance admin api interaction with listing", () 
=> {
                 {
                   id: "default",
                   name: "instance_name",
-                } as MerchantBackend.Instances.Instance,
+                } as TalerMerchantApi.Instance,
               ],
             },
           });
@@ -665,7 +663,7 @@ describe("instance management api interaction with 
listing", () => {
           {
             id: "managed",
             name: "instance_name",
-          } as MerchantBackend.Instances.Instance,
+          } as TalerMerchantApi.Instance,
         ],
       },
     });
@@ -700,7 +698,7 @@ describe("instance management api interaction with 
listing", () => {
           env.addRequestExpectation(API_UPDATE_INSTANCE_BY_ID("managed"), {
             request: {
               name: "other_name",
-            } as MerchantBackend.Instances.InstanceReconfigurationMessage,
+            } as TalerMerchantApi.InstanceReconfigurationMessage,
           });
           env.addRequestExpectation(API_LIST_INSTANCES, {
             response: {
@@ -708,14 +706,14 @@ describe("instance management api interaction with 
listing", () => {
                 {
                   id: "managed",
                   name: "other_name",
-                } as MerchantBackend.Instances.Instance,
+                } as TalerMerchantApi.Instance,
               ],
             },
           });
 
           api.updateInstance({
             name: "other_name",
-          } as MerchantBackend.Instances.InstanceConfigurationMessage);
+          } as TalerMerchantApi.InstanceConfigurationMessage);
         },
         ({ query, api }) => {
           expect(env.assertJustExpectedRequestWereMade()).deep.eq({
diff --git a/packages/merchant-backoffice-ui/src/hooks/instance.ts 
b/packages/merchant-backoffice-ui/src/hooks/instance.ts
index dfe97fd61..2da82989b 100644
--- a/packages/merchant-backoffice-ui/src/hooks/instance.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/instance.ts
@@ -16,26 +16,23 @@
 import {
   HttpResponse,
   HttpResponseOk,
-  RequestError,
-  useMerchantApiContext,
+  RequestError
 } from "@gnu-taler/web-util/browser";
-import { MerchantBackend } from "../declaration.js";
 import {
   useBackendBaseRequest,
   useBackendInstanceRequest,
-  useCredentialsChecker,
   useMatchMutate,
 } from "./backend.js";
 
 // FIX default import https://github.com/microsoft/TypeScript/issues/49189
+import { AccessToken, TalerErrorDetail, TalerMerchantApi } from 
"@gnu-taler/taler-util";
 import _useSWR, { SWRHook, useSWRConfig } from "swr";
 import { useSessionContext } from "../context/session.js";
-import { AccessToken } from "@gnu-taler/taler-util";
 const useSWR = _useSWR as unknown as SWRHook;
 
 interface InstanceAPI {
   updateInstance: (
-    data: MerchantBackend.Instances.InstanceReconfigurationMessage,
+    data: TalerMerchantApi.InstanceReconfigurationMessage,
   ) => Promise<void>;
   deleteInstance: () => Promise<void>;
   clearAccessToken: (currentToken: AccessToken | undefined) => Promise<void>;
@@ -50,7 +47,7 @@ export function useAdminAPI(): AdminAPI {
   const mutateAll = useMatchMutate();
 
   const createInstance = async (
-    instance: MerchantBackend.Instances.InstanceConfigurationMessage,
+    instance: TalerMerchantApi.InstanceConfigurationMessage,
   ): Promise<void> => {
     await request(`/management/instances`, {
       method: "POST",
@@ -84,7 +81,7 @@ export function useAdminAPI(): AdminAPI {
 
 export interface AdminAPI {
   createInstance: (
-    data: MerchantBackend.Instances.InstanceConfigurationMessage,
+    data: TalerMerchantApi.InstanceConfigurationMessage,
   ) => Promise<void>;
   deleteInstance: (id: string) => Promise<void>;
   purgeInstance: (id: string) => Promise<void>;
@@ -98,10 +95,9 @@ export function useManagementAPI(instanceId: string): 
InstanceAPI {
     logOut,
   } = useSessionContext();
   const { request } = useBackendBaseRequest();
-  const { requestNewLoginToken } = useCredentialsChecker();
 
   const updateInstance = async (
-    instance: MerchantBackend.Instances.InstanceReconfigurationMessage,
+    instance: TalerMerchantApi.InstanceReconfigurationMessage,
   ): Promise<void> => {
     await request(`/management/instances/${instanceId}`, {
       method: "PATCH",
@@ -166,14 +162,13 @@ export function useInstanceAPI(): InstanceAPI {
   } = useSessionContext();
 
   const { request } = useBackendInstanceRequest();
-  const { requestNewLoginToken } = useCredentialsChecker();
   const { state, logIn, logOut } = useSessionContext();
 
   const adminToken =
     state.status === "loggedIn" && state.isAdmin ? state.token : undefined;
 
   const updateInstance = async (
-    instance: MerchantBackend.Instances.InstanceReconfigurationMessage,
+    instance: TalerMerchantApi.InstanceReconfigurationMessage,
   ): Promise<void> => {
     await request(`/private/`, {
       method: "PATCH",
@@ -239,14 +234,14 @@ export function useInstanceAPI(): InstanceAPI {
 }
 
 export function useInstanceDetails(): HttpResponse<
-  MerchantBackend.Instances.QueryInstancesResponse,
-  MerchantBackend.ErrorDetail
+  TalerMerchantApi.QueryInstancesResponse,
+  TalerErrorDetail
 > {
   const { fetcher } = useBackendInstanceRequest();
 
   const { data, error, isValidating } = useSWR<
-    HttpResponseOk<MerchantBackend.Instances.QueryInstancesResponse>,
-    RequestError<MerchantBackend.ErrorDetail>
+    HttpResponseOk<TalerMerchantApi.QueryInstancesResponse>,
+    RequestError<TalerErrorDetail>
   >([`/private/`], fetcher, {
     refreshInterval: 0,
     refreshWhenHidden: false,
@@ -267,17 +262,17 @@ export function useInstanceDetails(): HttpResponse<
 
 type KYCStatus =
   | { type: "ok" }
-  | { type: "redirect"; status: MerchantBackend.KYC.AccountKycRedirects };
+  | { type: "redirect"; status: TalerMerchantApi.AccountKycRedirects };
 
 export function useInstanceKYCDetails(): HttpResponse<
   KYCStatus,
-  MerchantBackend.ErrorDetail
+  TalerErrorDetail
 > {
   const { fetcher } = useBackendInstanceRequest();
 
   const { data, error } = useSWR<
-    HttpResponseOk<MerchantBackend.KYC.AccountKycRedirects>,
-    RequestError<MerchantBackend.ErrorDetail>
+    HttpResponseOk<TalerMerchantApi.AccountKycRedirects>,
+    RequestError<TalerErrorDetail>
   >([`/private/kyc`], fetcher, {
     refreshInterval: 60 * 1000,
     refreshWhenHidden: false,
@@ -303,14 +298,14 @@ export function useInstanceKYCDetails(): HttpResponse<
 export function useManagedInstanceDetails(
   instanceId: string,
 ): HttpResponse<
-  MerchantBackend.Instances.QueryInstancesResponse,
-  MerchantBackend.ErrorDetail
+  TalerMerchantApi.QueryInstancesResponse,
+  TalerErrorDetail
 > {
   const { request } = useBackendBaseRequest();
 
   const { data, error, isValidating } = useSWR<
-    HttpResponseOk<MerchantBackend.Instances.QueryInstancesResponse>,
-    RequestError<MerchantBackend.ErrorDetail>
+    HttpResponseOk<TalerMerchantApi.QueryInstancesResponse>,
+    RequestError<TalerErrorDetail>
   >([`/management/instances/${instanceId}`], request, {
     refreshInterval: 0,
     refreshWhenHidden: false,
@@ -329,14 +324,14 @@ export function useManagedInstanceDetails(
 }
 
 export function useBackendInstances(): HttpResponse<
-  MerchantBackend.Instances.InstancesResponse,
-  MerchantBackend.ErrorDetail
+  TalerMerchantApi.InstancesResponse,
+  TalerErrorDetail
 > {
   const { request } = useBackendBaseRequest();
 
   const { data, error, isValidating } = useSWR<
-    HttpResponseOk<MerchantBackend.Instances.InstancesResponse>,
-    RequestError<MerchantBackend.ErrorDetail>
+    HttpResponseOk<TalerMerchantApi.InstancesResponse>,
+    RequestError<TalerErrorDetail>
   >(["/management/instances"], request);
 
   if (isValidating) return { loading: true, data: data?.data };
diff --git a/packages/merchant-backoffice-ui/src/hooks/merchant.ts 
b/packages/merchant-backoffice-ui/src/hooks/merchant.ts
index d01b579b9..47d9e5624 100644
--- a/packages/merchant-backoffice-ui/src/hooks/merchant.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/merchant.ts
@@ -20,15 +20,15 @@ import {
   RequestError,
 } from "@gnu-taler/web-util/browser";
 import { useEffect, useState } from "preact/hooks";
-import { MerchantBackend } from "../declaration.js";
 import { MAX_RESULT_SIZE, PAGE_SIZE } from "../utils/constants.js";
 import { useBackendInstanceRequest, useMatchMutate } from "./backend.js";
 
 // FIX default import https://github.com/microsoft/TypeScript/issues/49189
+import { TalerErrorDetail, TalerMerchantApi } from "@gnu-taler/taler-util";
 import _useSWR, { SWRHook, mutate } from "swr";
 const useSWR = _useSWR as unknown as SWRHook;
 
-// const MOCKED_ACCOUNTS: Record<string, 
MerchantBackend.BankAccounts.AccountAddDetails> = {
+// const MOCKED_ACCOUNTS: Record<string, TalerMerchantApi.AccountAddDetails> = 
{
 //   "hwire1": {
 //     h_wire: "hwire1",
 //     payto_uri: "payto://fake/iban/123",
@@ -46,7 +46,7 @@ export function useBankAccountAPI(): BankAccountAPI {
   const { request } = useBackendInstanceRequest();
 
   const createBankAccount = async (
-    data: MerchantBackend.BankAccounts.AccountAddDetails,
+    data: TalerMerchantApi.AccountAddDetails,
   ): Promise<HttpResponseOk<void>> => {
     // MOCKED_ACCOUNTS[data.h_wire] = data
     // return Promise.resolve({ ok: true, data: undefined });
@@ -60,7 +60,7 @@ export function useBankAccountAPI(): BankAccountAPI {
 
   const updateBankAccount = async (
     h_wire: string,
-    data: MerchantBackend.BankAccounts.AccountPatchDetails,
+    data: TalerMerchantApi.AccountPatchDetails,
   ): Promise<HttpResponseOk<void>> => {
     // MOCKED_ACCOUNTS[h_wire].credit_facade_credentials = 
data.credit_facade_credentials
     // MOCKED_ACCOUNTS[h_wire].credit_facade_url = data.credit_facade_url
@@ -94,11 +94,11 @@ export function useBankAccountAPI(): BankAccountAPI {
 
 export interface BankAccountAPI {
   createBankAccount: (
-    data: MerchantBackend.BankAccounts.AccountAddDetails,
+    data: TalerMerchantApi.AccountAddDetails,
   ) => Promise<HttpResponseOk<void>>;
   updateBankAccount: (
     id: string,
-    data: MerchantBackend.BankAccounts.AccountPatchDetails,
+    data: TalerMerchantApi.AccountPatchDetails,
   ) => Promise<HttpResponseOk<void>>;
   deleteBankAccount: (id: string) => Promise<HttpResponseOk<void>>;
 }
@@ -114,8 +114,8 @@ export function useInstanceBankAccounts(
   args?: InstanceBankAccountFilter,
   updatePosition?: (id: string) => void,
 ): HttpResponsePaginated<
-  MerchantBackend.BankAccounts.AccountsSummaryResponse,
-  MerchantBackend.ErrorDetail
+  TalerMerchantApi.AccountsSummaryResponse,
+  TalerErrorDetail
 > {
 
   const { fetcher } = useBackendInstanceRequest();
@@ -128,14 +128,14 @@ export function useInstanceBankAccounts(
     error: afterError,
     isValidating: loadingAfter,
   } = useSWR<
-    HttpResponseOk<MerchantBackend.BankAccounts.AccountsSummaryResponse>,
-    RequestError<MerchantBackend.ErrorDetail>
+    HttpResponseOk<TalerMerchantApi.AccountsSummaryResponse>,
+    RequestError<TalerErrorDetail>
   >([`/private/accounts`], fetcher);
 
   const [lastAfter, setLastAfter] = useState<
     HttpResponse<
-      MerchantBackend.BankAccounts.AccountsSummaryResponse,
-      MerchantBackend.ErrorDetail
+      TalerMerchantApi.AccountsSummaryResponse,
+      TalerErrorDetail
     >
   >({ loading: true });
   useEffect(() => {
@@ -179,8 +179,8 @@ export function useInstanceBankAccounts(
 export function useBankAccountDetails(
   h_wire: string,
 ): HttpResponse<
-  MerchantBackend.BankAccounts.BankAccountEntry,
-  MerchantBackend.ErrorDetail
+  TalerMerchantApi.BankAccountEntry,
+  TalerErrorDetail
 > {
   // return {
   //   ok: true,
@@ -192,8 +192,8 @@ export function useBankAccountDetails(
   const { fetcher } = useBackendInstanceRequest();
 
   const { data, error, isValidating } = useSWR<
-    HttpResponseOk<MerchantBackend.BankAccounts.BankAccountEntry>,
-    RequestError<MerchantBackend.ErrorDetail>
+    HttpResponseOk<TalerMerchantApi.BankAccountEntry>,
+    RequestError<TalerErrorDetail>
   >([`/private/accounts/${h_wire}`], fetcher, {
     refreshInterval: 0,
     refreshWhenHidden: false,
diff --git a/packages/merchant-backoffice-ui/src/hooks/order.test.ts 
b/packages/merchant-backoffice-ui/src/hooks/order.test.ts
index 86f53a342..08fffbcf0 100644
--- a/packages/merchant-backoffice-ui/src/hooks/order.test.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/order.test.ts
@@ -19,9 +19,9 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
+import { AmountString, TalerMerchantApi } from "@gnu-taler/taler-util";
 import * as tests from "@gnu-taler/web-util/testing";
 import { expect } from "chai";
-import { MerchantBackend } from "../declaration.js";
 import { useInstanceOrders, useOrderAPI, useOrderDetails } from "./order.js";
 import { ApiMockEnvironment } from "./testing.js";
 import {
@@ -40,7 +40,7 @@ describe("order api interaction with listing", () => {
     env.addRequestExpectation(API_LIST_ORDERS, {
       qparam: { delta: -20, paid: "yes" },
       response: {
-        orders: [{ order_id: "1" }, { order_id: "2" } as 
MerchantBackend.Orders.OrderHistoryEntry],
+        orders: [{ order_id: "1" }, { order_id: "2" } as 
TalerMerchantApi.OrderHistoryEntry],
       },
     });
 
@@ -72,7 +72,8 @@ describe("order api interaction with listing", () => {
 
           env.addRequestExpectation(API_CREATE_ORDER, {
             request: {
-              order: { amount: "ARS:12", summary: "pay me" },
+              order: { amount: "ARS:12" as AmountString, summary: "pay me" },
+              lock_uuids: []
             },
             response: { order_id: "3" },
           });
@@ -116,7 +117,7 @@ describe("order api interaction with listing", () => {
         order_id: "1",
         amount: "EUR:12",
         refundable: true,
-      } as MerchantBackend.Orders.OrderHistoryEntry] },
+      } as TalerMerchantApi.OrderHistoryEntry] },
     });
 
     const newDate = (d: Date) => {
@@ -202,7 +203,7 @@ describe("order api interaction with listing", () => {
     env.addRequestExpectation(API_LIST_ORDERS, {
       qparam: { delta: -20, paid: "yes" },
       response: {
-        orders: [{ order_id: "1" }, { order_id: "2" } as 
MerchantBackend.Orders.OrderHistoryEntry],
+        orders: [{ order_id: "1" }, { order_id: "2" } as 
TalerMerchantApi.OrderHistoryEntry],
       },
     });
 
@@ -271,7 +272,7 @@ describe("order api interaction with details", () => {
       response: {
         summary: "description",
         refund_amount: "EUR:0",
-      } as unknown as MerchantBackend.Orders.CheckPaymentPaidResponse,
+      } as unknown as TalerMerchantApi.CheckPaymentPaidResponse,
     });
 
     const newDate = (d: Date) => {
@@ -311,12 +312,12 @@ describe("order api interaction with details", () => {
             response: {
               summary: "description",
               refund_amount: "EUR:1",
-            } as unknown as MerchantBackend.Orders.CheckPaymentPaidResponse,
+            } as unknown as TalerMerchantApi.CheckPaymentPaidResponse,
           });
 
           api.refundOrder("1", {
             reason: "double pay",
-            refund: "EUR:1",
+            refund: "EUR:1" as AmountString,
           });
         },
         ({ query, api }) => {
@@ -347,7 +348,7 @@ describe("order api interaction with details", () => {
       response: {
         summary: "description",
         refund_amount: "EUR:0",
-      } as unknown as MerchantBackend.Orders.CheckPaymentPaidResponse,
+      } as unknown as TalerMerchantApi.CheckPaymentPaidResponse,
     });
 
     const newDate = (d: Date) => {
@@ -385,7 +386,7 @@ describe("order api interaction with details", () => {
           env.addRequestExpectation(API_GET_ORDER_BY_ID("1"), {
             response: {
               summary: undefined,
-            } as unknown as MerchantBackend.Orders.CheckPaymentPaidResponse,
+            } as unknown as TalerMerchantApi.CheckPaymentPaidResponse,
           });
 
           api.forgetOrder("1", {
diff --git a/packages/merchant-backoffice-ui/src/hooks/order.ts 
b/packages/merchant-backoffice-ui/src/hooks/order.ts
index efc7bdcbe..39bc1725b 100644
--- a/packages/merchant-backoffice-ui/src/hooks/order.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/order.ts
@@ -20,27 +20,27 @@ import {
   RequestError,
 } from "@gnu-taler/web-util/browser";
 import { useEffect, useState } from "preact/hooks";
-import { MerchantBackend } from "../declaration.js";
 import { MAX_RESULT_SIZE, PAGE_SIZE } from "../utils/constants.js";
 import { useBackendInstanceRequest, useMatchMutate } from "./backend.js";
 
 // FIX default import https://github.com/microsoft/TypeScript/issues/49189
+import { TalerErrorDetail, TalerMerchantApi } from "@gnu-taler/taler-util";
 import _useSWR, { SWRHook } from "swr";
 const useSWR = _useSWR as unknown as SWRHook;
 
 export interface OrderAPI {
   //FIXME: add OutOfStockResponse on 410
   createOrder: (
-    data: MerchantBackend.Orders.PostOrderRequest,
-  ) => Promise<HttpResponseOk<MerchantBackend.Orders.PostOrderResponse>>;
+    data: TalerMerchantApi.PostOrderRequest,
+  ) => Promise<HttpResponseOk<TalerMerchantApi.PostOrderResponse>>;
   forgetOrder: (
     id: string,
-    data: MerchantBackend.Orders.ForgetRequest,
+    data: TalerMerchantApi.ForgetRequest,
   ) => Promise<HttpResponseOk<void>>;
   refundOrder: (
     id: string,
-    data: MerchantBackend.Orders.RefundRequest,
-  ) => Promise<HttpResponseOk<MerchantBackend.Orders.MerchantRefundResponse>>;
+    data: TalerMerchantApi.RefundRequest,
+  ) => Promise<HttpResponseOk<TalerMerchantApi.MerchantRefundResponse>>;
   deleteOrder: (id: string) => Promise<HttpResponseOk<void>>;
   getPaymentURL: (id: string) => Promise<HttpResponseOk<string>>;
 }
@@ -52,9 +52,9 @@ export function useOrderAPI(): OrderAPI {
   const { request } = useBackendInstanceRequest();
 
   const createOrder = async (
-    data: MerchantBackend.Orders.PostOrderRequest,
-  ): Promise<HttpResponseOk<MerchantBackend.Orders.PostOrderResponse>> => {
-    const res = await request<MerchantBackend.Orders.PostOrderResponse>(
+    data: TalerMerchantApi.PostOrderRequest,
+  ): Promise<HttpResponseOk<TalerMerchantApi.PostOrderResponse>> => {
+    const res = await request<TalerMerchantApi.PostOrderResponse>(
       `/private/orders`,
       {
         method: "POST",
@@ -67,10 +67,10 @@ export function useOrderAPI(): OrderAPI {
   };
   const refundOrder = async (
     orderId: string,
-    data: MerchantBackend.Orders.RefundRequest,
-  ): Promise<HttpResponseOk<MerchantBackend.Orders.MerchantRefundResponse>> => 
{
+    data: TalerMerchantApi.RefundRequest,
+  ): Promise<HttpResponseOk<TalerMerchantApi.MerchantRefundResponse>> => {
     mutateAll(/@"\/private\/orders"@/);
-    const res = request<MerchantBackend.Orders.MerchantRefundResponse>(
+    const res = request<TalerMerchantApi.MerchantRefundResponse>(
       `/private/orders/${orderId}/refund`,
       {
         method: "POST",
@@ -85,7 +85,7 @@ export function useOrderAPI(): OrderAPI {
 
   const forgetOrder = async (
     orderId: string,
-    data: MerchantBackend.Orders.ForgetRequest,
+    data: TalerMerchantApi.ForgetRequest,
   ): Promise<HttpResponseOk<void>> => {
     mutateAll(/@"\/private\/orders"@/);
     const res = request<void>(`/private/orders/${orderId}/forget`, {
@@ -110,7 +110,7 @@ export function useOrderAPI(): OrderAPI {
   const getPaymentURL = async (
     orderId: string,
   ): Promise<HttpResponseOk<string>> => {
-    return request<MerchantBackend.Orders.MerchantOrderStatusResponse>(
+    return request<TalerMerchantApi.MerchantOrderStatusResponse>(
       `/private/orders/${orderId}`,
       {
         method: "GET",
@@ -132,14 +132,14 @@ export function useOrderAPI(): OrderAPI {
 export function useOrderDetails(
   oderId: string,
 ): HttpResponse<
-  MerchantBackend.Orders.MerchantOrderStatusResponse,
-  MerchantBackend.ErrorDetail
+  TalerMerchantApi.MerchantOrderStatusResponse,
+  TalerErrorDetail
 > {
   const { fetcher } = useBackendInstanceRequest();
 
   const { data, error, isValidating } = useSWR<
-    HttpResponseOk<MerchantBackend.Orders.MerchantOrderStatusResponse>,
-    RequestError<MerchantBackend.ErrorDetail>
+    HttpResponseOk<TalerMerchantApi.MerchantOrderStatusResponse>,
+    RequestError<TalerErrorDetail>
   >([`/private/orders/${oderId}`], fetcher, {
     refreshInterval: 0,
     refreshWhenHidden: false,
@@ -165,8 +165,8 @@ export function useInstanceOrders(
   args?: InstanceOrderFilter,
   updateFilter?: (d: Date) => void,
 ): HttpResponsePaginated<
-  MerchantBackend.Orders.OrderHistory,
-  MerchantBackend.ErrorDetail
+  TalerMerchantApi.OrderHistory,
+  TalerErrorDetail
 > {
   const { orderFetcher } = useBackendInstanceRequest();
 
@@ -187,8 +187,8 @@ export function useInstanceOrders(
     error: beforeError,
     isValidating: loadingBefore,
   } = useSWR<
-    HttpResponseOk<MerchantBackend.Orders.OrderHistory>,
-    RequestError<MerchantBackend.ErrorDetail>
+    HttpResponseOk<TalerMerchantApi.OrderHistory>,
+    RequestError<TalerErrorDetail>
   >(
     [
       `/private/orders`,
@@ -205,8 +205,8 @@ export function useInstanceOrders(
     error: afterError,
     isValidating: loadingAfter,
   } = useSWR<
-    HttpResponseOk<MerchantBackend.Orders.OrderHistory>,
-    RequestError<MerchantBackend.ErrorDetail>
+    HttpResponseOk<TalerMerchantApi.OrderHistory>,
+    RequestError<TalerErrorDetail>
   >(
     [
       `/private/orders`,
@@ -222,14 +222,14 @@ export function useInstanceOrders(
   //this will save last result
   const [lastBefore, setLastBefore] = useState<
     HttpResponse<
-      MerchantBackend.Orders.OrderHistory,
-      MerchantBackend.ErrorDetail
+      TalerMerchantApi.OrderHistory,
+      TalerErrorDetail
     >
   >({ loading: true });
   const [lastAfter, setLastAfter] = useState<
     HttpResponse<
-      MerchantBackend.Orders.OrderHistory,
-      MerchantBackend.ErrorDetail
+      TalerMerchantApi.OrderHistory,
+      TalerErrorDetail
     >
   >({ loading: true });
   useEffect(() => {
diff --git a/packages/merchant-backoffice-ui/src/hooks/otp.ts 
b/packages/merchant-backoffice-ui/src/hooks/otp.ts
index 76ece7055..4b45dcf06 100644
--- a/packages/merchant-backoffice-ui/src/hooks/otp.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/otp.ts
@@ -20,35 +20,20 @@ import {
   RequestError,
 } from "@gnu-taler/web-util/browser";
 import { useEffect, useState } from "preact/hooks";
-import { MerchantBackend } from "../declaration.js";
 import { MAX_RESULT_SIZE, PAGE_SIZE } from "../utils/constants.js";
 import { useBackendInstanceRequest, useMatchMutate } from "./backend.js";
 
 // FIX default import https://github.com/microsoft/TypeScript/issues/49189
+import { TalerErrorDetail, TalerMerchantApi } from "@gnu-taler/taler-util";
 import _useSWR, { SWRHook } from "swr";
 const useSWR = _useSWR as unknown as SWRHook;
 
-const MOCKED_DEVICES: Record<string, MerchantBackend.OTP.OtpDeviceAddDetails> 
= {
-  "1": {
-    otp_device_description: "first device",
-    otp_algorithm: 1,
-    otp_device_id: "1",
-    otp_key: "123",
-  },
-  "2": {
-    otp_device_description: "second device",
-    otp_algorithm: 0,
-    otp_device_id: "2",
-    otp_key: "456",
-  }
-}
-
 export function useOtpDeviceAPI(): OtpDeviceAPI {
   const mutateAll = useMatchMutate();
   const { request } = useBackendInstanceRequest();
 
   const createOtpDevice = async (
-    data: MerchantBackend.OTP.OtpDeviceAddDetails,
+    data: TalerMerchantApi.OtpDeviceAddDetails,
   ): Promise<HttpResponseOk<void>> => {
     // MOCKED_DEVICES[data.otp_device_id] = data
     // return Promise.resolve({ ok: true, data: undefined });
@@ -62,7 +47,7 @@ export function useOtpDeviceAPI(): OtpDeviceAPI {
 
   const updateOtpDevice = async (
     deviceId: string,
-    data: MerchantBackend.OTP.OtpDevicePatchDetails,
+    data: TalerMerchantApi.OtpDevicePatchDetails,
   ): Promise<HttpResponseOk<void>> => {
     // MOCKED_DEVICES[deviceId].otp_algorithm = data.otp_algorithm
     // MOCKED_DEVICES[deviceId].otp_ctr = data.otp_ctr
@@ -98,11 +83,11 @@ export function useOtpDeviceAPI(): OtpDeviceAPI {
 
 export interface OtpDeviceAPI {
   createOtpDevice: (
-    data: MerchantBackend.OTP.OtpDeviceAddDetails,
+    data: TalerMerchantApi.OtpDeviceAddDetails,
   ) => Promise<HttpResponseOk<void>>;
   updateOtpDevice: (
     id: string,
-    data: MerchantBackend.OTP.OtpDevicePatchDetails,
+    data: TalerMerchantApi.OtpDevicePatchDetails,
   ) => Promise<HttpResponseOk<void>>;
   deleteOtpDevice: (id: string) => Promise<HttpResponseOk<void>>;
 }
@@ -114,8 +99,8 @@ export function useInstanceOtpDevices(
   args?: InstanceOtpDeviceFilter,
   updatePosition?: (id: string) => void,
 ): HttpResponsePaginated<
-  MerchantBackend.OTP.OtpDeviceSummaryResponse,
-  MerchantBackend.ErrorDetail
+  TalerMerchantApi.OtpDeviceSummaryResponse,
+  TalerErrorDetail
 > {
   // return {
   //   ok: true,
@@ -139,14 +124,14 @@ export function useInstanceOtpDevices(
     error: afterError,
     isValidating: loadingAfter,
   } = useSWR<
-    HttpResponseOk<MerchantBackend.OTP.OtpDeviceSummaryResponse>,
-    RequestError<MerchantBackend.ErrorDetail>
+    HttpResponseOk<TalerMerchantApi.OtpDeviceSummaryResponse>,
+    RequestError<TalerErrorDetail>
   >([`/private/otp-devices`], fetcher);
 
   const [lastAfter, setLastAfter] = useState<
     HttpResponse<
-      MerchantBackend.OTP.OtpDeviceSummaryResponse,
-      MerchantBackend.ErrorDetail
+      TalerMerchantApi.OtpDeviceSummaryResponse,
+      TalerErrorDetail
     >
   >({ loading: true });
   useEffect(() => {
@@ -190,8 +175,8 @@ export function useInstanceOtpDevices(
 export function useOtpDeviceDetails(
   deviceId: string,
 ): HttpResponse<
-  MerchantBackend.OTP.OtpDeviceDetails,
-  MerchantBackend.ErrorDetail
+  TalerMerchantApi.OtpDeviceDetails,
+  TalerErrorDetail
 > {
   // return {
   //   ok: true,
@@ -204,8 +189,8 @@ export function useOtpDeviceDetails(
   const { fetcher } = useBackendInstanceRequest();
 
   const { data, error, isValidating } = useSWR<
-    HttpResponseOk<MerchantBackend.OTP.OtpDeviceDetails>,
-    RequestError<MerchantBackend.ErrorDetail>
+    HttpResponseOk<TalerMerchantApi.OtpDeviceDetails>,
+    RequestError<TalerErrorDetail>
   >([`/private/otp-devices/${deviceId}`], fetcher, {
     refreshInterval: 0,
     refreshWhenHidden: false,
diff --git a/packages/merchant-backoffice-ui/src/hooks/product.test.ts 
b/packages/merchant-backoffice-ui/src/hooks/product.test.ts
index fd2b83ecc..64dbd0103 100644
--- a/packages/merchant-backoffice-ui/src/hooks/product.test.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/product.test.ts
@@ -21,7 +21,6 @@
 
 import * as tests from "@gnu-taler/web-util/testing";
 import { expect } from "chai";
-import { MerchantBackend } from "../declaration.js";
 import {
   useInstanceProducts,
   useProductAPI,
@@ -35,6 +34,7 @@ import {
   API_LIST_PRODUCTS,
   API_UPDATE_PRODUCT_BY_ID,
 } from "./urls.js";
+import { TalerMerchantApi } from "@gnu-taler/taler-util";
 
 describe("product api interaction with listing", () => {
   it("should evict cache when creating a product", async () => {
@@ -42,11 +42,11 @@ describe("product api interaction with listing", () => {
 
     env.addRequestExpectation(API_LIST_PRODUCTS, {
       response: {
-        products: [{ product_id: "1234" }],
+        products: [{ product_id: "1234", product_serial: 1 }],
       },
     });
     env.addRequestExpectation(API_GET_PRODUCT_BY_ID("1234"), {
-      response: { price: "ARS:12" } as MerchantBackend.Products.ProductDetail,
+      response: { price: "ARS:12" } as TalerMerchantApi.ProductDetail,
     });
 
     const hookBehavior = await tests.hookBehaveLikeThis(
@@ -70,33 +70,33 @@ describe("product api interaction with listing", () => {
           expect(query.loading).undefined;
           expect(query.ok).true;
           if (!query.ok) return;
-          expect(query.data).deep.equals([{ id: "1234", price: "ARS:12" }]);
+          expect(query.data).deep.equals([{ id: "1234" , price: "ARS:12" }]);
 
           env.addRequestExpectation(API_CREATE_PRODUCT, {
             request: {
               price: "ARS:23",
-            } as MerchantBackend.Products.ProductAddDetail,
+            } as TalerMerchantApi.ProductAddDetail,
           });
 
           env.addRequestExpectation(API_LIST_PRODUCTS, {
             response: {
-              products: [{ product_id: "1234" }, { product_id: "2345" }],
+              products: [{ product_id: "1234", product_serial: 1 }, { 
product_id: "2345", product_serial: 2 }],
             },
           });
           env.addRequestExpectation(API_GET_PRODUCT_BY_ID("1234"), {
             response: {
               price: "ARS:12",
-            } as MerchantBackend.Products.ProductDetail,
+            } as TalerMerchantApi.ProductDetail,
           });
           env.addRequestExpectation(API_GET_PRODUCT_BY_ID("1234"), {
             response: {
               price: "ARS:12",
-            } as MerchantBackend.Products.ProductDetail,
+            } as TalerMerchantApi.ProductDetail,
           });
           env.addRequestExpectation(API_GET_PRODUCT_BY_ID("2345"), {
             response: {
               price: "ARS:23",
-            } as MerchantBackend.Products.ProductDetail,
+            } as TalerMerchantApi.ProductDetail,
           });
 
           api.createProduct({
@@ -140,11 +140,11 @@ describe("product api interaction with listing", () => {
 
     env.addRequestExpectation(API_LIST_PRODUCTS, {
       response: {
-        products: [{ product_id: "1234" }],
+        products: [{ product_id: "1234", product_serial: 1 }],
       },
     });
     env.addRequestExpectation(API_GET_PRODUCT_BY_ID("1234"), {
-      response: { price: "ARS:12" } as MerchantBackend.Products.ProductDetail,
+      response: { price: "ARS:12" } as TalerMerchantApi.ProductDetail,
     });
 
     const hookBehavior = await tests.hookBehaveLikeThis(
@@ -173,18 +173,18 @@ describe("product api interaction with listing", () => {
           env.addRequestExpectation(API_UPDATE_PRODUCT_BY_ID("1234"), {
             request: {
               price: "ARS:13",
-            } as MerchantBackend.Products.ProductPatchDetail,
+            } as TalerMerchantApi.ProductPatchDetail,
           });
 
           env.addRequestExpectation(API_LIST_PRODUCTS, {
             response: {
-              products: [{ product_id: "1234" }],
+              products: [{ product_id: "1234", product_serial: 1 }],
             },
           });
           env.addRequestExpectation(API_GET_PRODUCT_BY_ID("1234"), {
             response: {
               price: "ARS:13",
-            } as MerchantBackend.Products.ProductDetail,
+            } as TalerMerchantApi.ProductDetail,
           });
 
           api.updateProduct("1234", {
@@ -218,14 +218,14 @@ describe("product api interaction with listing", () => {
 
     env.addRequestExpectation(API_LIST_PRODUCTS, {
       response: {
-        products: [{ product_id: "1234" }, { product_id: "2345" }],
+        products: [{ product_id: "1234" , product_serial: 1}, { product_id: 
"2345", product_serial: 2 }],
       },
     });
     env.addRequestExpectation(API_GET_PRODUCT_BY_ID("1234"), {
-      response: { price: "ARS:12" } as MerchantBackend.Products.ProductDetail,
+      response: { price: "ARS:12" } as TalerMerchantApi.ProductDetail,
     });
     env.addRequestExpectation(API_GET_PRODUCT_BY_ID("2345"), {
-      response: { price: "ARS:23" } as MerchantBackend.Products.ProductDetail,
+      response: { price: "ARS:23" } as TalerMerchantApi.ProductDetail,
     });
 
     const hookBehavior = await tests.hookBehaveLikeThis(
@@ -258,14 +258,14 @@ describe("product api interaction with listing", () => {
 
           env.addRequestExpectation(API_LIST_PRODUCTS, {
             response: {
-              products: [{ product_id: "1234" }],
+              products: [{ product_id: "1234", product_serial: 1 }],
             },
           });
 
           env.addRequestExpectation(API_GET_PRODUCT_BY_ID("1234"), {
             response: {
               price: "ARS:12",
-            } as MerchantBackend.Products.ProductDetail,
+            } as TalerMerchantApi.ProductDetail,
           });
           api.deleteProduct("2345");
         },
@@ -300,7 +300,7 @@ describe("product api interaction with details", () => {
     env.addRequestExpectation(API_GET_PRODUCT_BY_ID("12"), {
       response: {
         description: "this is a description",
-      } as MerchantBackend.Products.ProductDetail,
+      } as TalerMerchantApi.ProductDetail,
     });
 
     const hookBehavior = await tests.hookBehaveLikeThis(
@@ -328,13 +328,13 @@ describe("product api interaction with details", () => {
           env.addRequestExpectation(API_UPDATE_PRODUCT_BY_ID("12"), {
             request: {
               description: "other description",
-            } as MerchantBackend.Products.ProductPatchDetail,
+            } as TalerMerchantApi.ProductPatchDetail,
           });
 
           env.addRequestExpectation(API_GET_PRODUCT_BY_ID("12"), {
             response: {
               description: "other description",
-            } as MerchantBackend.Products.ProductDetail,
+            } as TalerMerchantApi.ProductDetail,
           });
 
           api.updateProduct("12", {
diff --git a/packages/merchant-backoffice-ui/src/hooks/product.ts 
b/packages/merchant-backoffice-ui/src/hooks/product.ts
index 345ca5bf2..c0ace0d32 100644
--- a/packages/merchant-backoffice-ui/src/hooks/product.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/product.ts
@@ -18,11 +18,11 @@ import {
   HttpResponseOk,
   RequestError,
 } from "@gnu-taler/web-util/browser";
-import { MerchantBackend, WithId } from "../declaration.js";
 import { useBackendInstanceRequest, useMatchMutate } from "./backend.js";
 
 // FIX default import https://github.com/microsoft/TypeScript/issues/49189
 import _useSWR, { SWRHook, useSWRConfig } from "swr";
+import { TalerErrorDetail, TalerMerchantApi } from "@gnu-taler/taler-util";
 const useSWR = _useSWR as unknown as SWRHook;
 
 export interface ProductAPI {
@@ -30,16 +30,16 @@ export interface ProductAPI {
     id: string,  
   ) => Promise<void>;
   createProduct: (
-    data: MerchantBackend.Products.ProductAddDetail,
+    data: TalerMerchantApi.ProductAddDetail,
   ) => Promise<void>;
   updateProduct: (
     id: string,
-    data: MerchantBackend.Products.ProductPatchDetail,
+    data: TalerMerchantApi.ProductPatchDetail,
   ) => Promise<void>;
   deleteProduct: (id: string) => Promise<void>;
   lockProduct: (
     id: string,
-    data: MerchantBackend.Products.LockRequest,
+    data: TalerMerchantApi.LockRequest,
   ) => Promise<void>;
 }
 
@@ -50,7 +50,7 @@ export function useProductAPI(): ProductAPI {
   const { request } = useBackendInstanceRequest();
 
   const createProduct = async (
-    data: MerchantBackend.Products.ProductAddDetail,
+    data: TalerMerchantApi.ProductAddDetail,
   ): Promise<void> => {
     const res = await request(`/private/products`, {
       method: "POST",
@@ -62,7 +62,7 @@ export function useProductAPI(): ProductAPI {
 
   const updateProduct = async (
     productId: string,
-    data: MerchantBackend.Products.ProductPatchDetail,
+    data: TalerMerchantApi.ProductPatchDetail,
   ): Promise<void> => {
     const r = await request(`/private/products/${productId}`, {
       method: "PATCH",
@@ -81,7 +81,7 @@ export function useProductAPI(): ProductAPI {
 
   const lockProduct = async (
     productId: string,
-    data: MerchantBackend.Products.LockRequest,
+    data: TalerMerchantApi.LockRequest,
   ): Promise<void> => {
     await request(`/private/products/${productId}/lock`, {
       method: "POST",
@@ -105,14 +105,14 @@ export function useProductAPI(): ProductAPI {
 }
 
 export function useInstanceProducts(): HttpResponse<
-  (MerchantBackend.Products.ProductDetail & WithId)[],
-  MerchantBackend.ErrorDetail
+  (TalerMerchantApi.ProductDetail & WithId)[],
+  TalerErrorDetail
 > {
   const { fetcher, multiFetcher } = useBackendInstanceRequest();
 
   const { data: list, error: listError } = useSWR<
-    HttpResponseOk<MerchantBackend.Products.InventorySummaryResponse>,
-    RequestError<MerchantBackend.ErrorDetail>
+    HttpResponseOk<TalerMerchantApi.InventorySummaryResponse>,
+    RequestError<TalerErrorDetail>
   >([`/private/products`], fetcher, {
     refreshInterval: 0,
     refreshWhenHidden: false,
@@ -125,8 +125,8 @@ export function useInstanceProducts(): HttpResponse<
     (p) => `/private/products/${p.product_id}`,
   );
   const { data: products, error: productError } = useSWR<
-    HttpResponseOk<MerchantBackend.Products.ProductDetail>[],
-    RequestError<MerchantBackend.ErrorDetail>
+    HttpResponseOk<TalerMerchantApi.ProductDetail>[],
+    RequestError<TalerErrorDetail>
   >([paths], multiFetcher, {
     refreshInterval: 0,
     refreshWhenHidden: false,
@@ -154,14 +154,14 @@ export function useInstanceProducts(): HttpResponse<
 export function useProductDetails(
   productId: string,
 ): HttpResponse<
-  MerchantBackend.Products.ProductDetail,
-  MerchantBackend.ErrorDetail
+  TalerMerchantApi.ProductDetail,
+  TalerErrorDetail
 > {
   const { fetcher } = useBackendInstanceRequest();
 
   const { data, error, isValidating } = useSWR<
-    HttpResponseOk<MerchantBackend.Products.ProductDetail>,
-    RequestError<MerchantBackend.ErrorDetail>
+    HttpResponseOk<TalerMerchantApi.ProductDetail>,
+    RequestError<TalerErrorDetail>
   >([`/private/products/${productId}`], fetcher, {
     refreshInterval: 0,
     refreshWhenHidden: false,
diff --git a/packages/merchant-backoffice-ui/src/hooks/reserve.test.ts 
b/packages/merchant-backoffice-ui/src/hooks/reserve.test.ts
deleted file mode 100644
index 58472399f..000000000
--- a/packages/merchant-backoffice-ui/src/hooks/reserve.test.ts
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- This file is part of GNU Taler
- (C) 2021-2024 Taler Systems S.A.
-
- GNU Taler is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- GNU 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 General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
- */
-
-/**
- *
- * @author Sebastian Javier Marchano (sebasjm)
- */
-
-import * as tests from "@gnu-taler/web-util/testing";
-import { expect } from "chai";
-import { MerchantBackend } from "../declaration.js";
-import {
-  useInstanceReserves,
-  useReservesAPI,
-} from "./reserves.js";
-import { ApiMockEnvironment } from "./testing.js";
-import {
-  API_CREATE_RESERVE,
-  API_DELETE_RESERVE,
-  API_LIST_RESERVES
-} from "./urls.js";
-
-describe("reserve api interaction with listing", () => {
-  it("should evict cache when creating a reserve", async () => {
-    const env = new ApiMockEnvironment();
-
-    env.addRequestExpectation(API_LIST_RESERVES, {
-      response: {
-        reserves: [
-          {
-            reserve_pub: "11",
-          } as MerchantBackend.Rewards.ReserveStatusEntry,
-        ],
-      },
-    });
-
-    const hookBehavior = await tests.hookBehaveLikeThis(
-      () => {
-        const api = useReservesAPI();
-        const query = useInstanceReserves();
-        return { query, api };
-      },
-      {},
-      [
-        ({ query, api }) => {
-          expect(query.loading).true;
-        },
-        ({ query, api }) => {
-          expect(query.loading).false;
-          expect(query.ok).true;
-          if (!query.ok) return;
-          expect(query.data).deep.equals({
-            reserves: [{ reserve_pub: "11" }],
-          });
-
-          env.addRequestExpectation(API_CREATE_RESERVE, {
-            request: {
-              initial_balance: "ARS:3333",
-              exchange_url: "http://url";,
-              wire_method: "iban",
-            },
-            response: {
-              reserve_pub: "22",
-              accounts: [],
-            },
-          });
-
-          env.addRequestExpectation(API_LIST_RESERVES, {
-            response: {
-              reserves: [
-                {
-                  reserve_pub: "11",
-                } as MerchantBackend.Rewards.ReserveStatusEntry,
-                {
-                  reserve_pub: "22",
-                } as MerchantBackend.Rewards.ReserveStatusEntry,
-              ],
-            },
-          });
-
-          api.createReserve({
-            initial_balance: "ARS:3333",
-            exchange_url: "http://url";,
-            wire_method: "iban",
-          });
-        },
-        ({ query, api }) => {
-          expect(env.assertJustExpectedRequestWereMade()).deep.eq({
-            result: "ok",
-          });
-          expect(query.loading).false;
-          expect(query.ok).true;
-          if (!query.ok) return;
-
-          expect(query.data).deep.equals({
-            reserves: [
-              {
-                reserve_pub: "11",
-              } as MerchantBackend.Rewards.ReserveStatusEntry,
-              {
-                reserve_pub: "22",
-              } as MerchantBackend.Rewards.ReserveStatusEntry,
-            ],
-          });
-        },
-      ],
-      env.buildTestingContext(),
-    );
-
-    expect(hookBehavior).deep.eq({ result: "ok" });
-    expect(env.assertJustExpectedRequestWereMade()).deep.eq({ result: "ok" });
-  });
-
-  it("should evict cache when deleting a reserve", async () => {
-    const env = new ApiMockEnvironment();
-
-    env.addRequestExpectation(API_LIST_RESERVES, {
-      response: {
-        reserves: [
-          {
-            reserve_pub: "11",
-          } as MerchantBackend.Rewards.ReserveStatusEntry,
-          {
-            reserve_pub: "22",
-          } as MerchantBackend.Rewards.ReserveStatusEntry,
-          {
-            reserve_pub: "33",
-          } as MerchantBackend.Rewards.ReserveStatusEntry,
-        ],
-      },
-    });
-
-    const hookBehavior = await tests.hookBehaveLikeThis(
-      () => {
-        const api = useReservesAPI();
-        const query = useInstanceReserves();
-        return { query, api };
-      },
-      {},
-      [
-        ({ query, api }) => {
-          expect(query.loading).true;
-        },
-        ({ query, api }) => {
-          expect(env.assertJustExpectedRequestWereMade()).deep.eq({
-            result: "ok",
-          });
-
-          expect(query.loading).false;
-          expect(query.ok).true;
-          if (!query.ok) return;
-          expect(query.data).deep.equals({
-            reserves: [
-              { reserve_pub: "11" },
-              { reserve_pub: "22" },
-              { reserve_pub: "33" },
-            ],
-          });
-
-          env.addRequestExpectation(API_DELETE_RESERVE("11"), {});
-          env.addRequestExpectation(API_LIST_RESERVES, {
-            response: {
-              reserves: [
-                {
-                  reserve_pub: "22",
-                } as MerchantBackend.Rewards.ReserveStatusEntry,
-                {
-                  reserve_pub: "33",
-                } as MerchantBackend.Rewards.ReserveStatusEntry,
-              ],
-            },
-          });
-
-          api.deleteReserve("11");
-        },
-        ({ query, api }) => {
-          expect(env.assertJustExpectedRequestWereMade()).deep.eq({
-            result: "ok",
-          });
-          expect(query.loading).false;
-          expect(query.ok).true;
-          if (!query.ok) return;
-          expect(query.data).deep.equals({
-            reserves: [{ reserve_pub: "22" }, { reserve_pub: "33" }],
-          });
-        },
-      ],
-      env.buildTestingContext(),
-    );
-
-    expect(hookBehavior).deep.eq({ result: "ok" });
-    expect(env.assertJustExpectedRequestWereMade()).deep.eq({ result: "ok" });
-  });
-});
diff --git a/packages/merchant-backoffice-ui/src/hooks/reserves.ts 
b/packages/merchant-backoffice-ui/src/hooks/reserves.ts
deleted file mode 100644
index 13e4bcce8..000000000
--- a/packages/merchant-backoffice-ui/src/hooks/reserves.ts
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- This file is part of GNU Taler
- (C) 2021-2024 Taler Systems S.A.
-
- GNU Taler is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- GNU 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 General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
- */
-import {
-  HttpResponse,
-  HttpResponseOk,
-  RequestError,
-} from "@gnu-taler/web-util/browser";
-import { MerchantBackend } from "../declaration.js";
-import { useBackendInstanceRequest, useMatchMutate } from "./backend.js";
-
-// FIX default import https://github.com/microsoft/TypeScript/issues/49189
-import _useSWR, { SWRHook, useSWRConfig } from "swr";
-const useSWR = _useSWR as unknown as SWRHook;
-
-export function useReservesAPI(): ReserveMutateAPI {
-  const mutateAll = useMatchMutate();
-  const { mutate } = useSWRConfig();
-  const { request } = useBackendInstanceRequest();
-
-  const createReserve = async (
-    data: MerchantBackend.Rewards.ReserveCreateRequest,
-  ): Promise<
-    HttpResponseOk<MerchantBackend.Rewards.ReserveCreateConfirmation>
-  > => {
-    const res = await 
request<MerchantBackend.Rewards.ReserveCreateConfirmation>(
-      `/private/reserves`,
-      {
-        method: "POST",
-        data,
-      },
-    );
-
-    //evict reserve list query
-    await mutateAll(/.*private\/reserves.*/);
-
-    return res;
-  };
-
-
-  const deleteReserve = async (
-    pub: string,
-  ): Promise<HttpResponse<void, MerchantBackend.ErrorDetail>> => {
-    const res = await request<void>(`/private/reserves/${pub}`, {
-      method: "DELETE",
-    });
-
-    //evict reserve list query
-    await mutateAll(/.*private\/reserves.*/);
-
-    return res;
-  };
-
-  return { createReserve, deleteReserve };
-}
-
-export interface ReserveMutateAPI {
-  createReserve: (
-    data: MerchantBackend.Rewards.ReserveCreateRequest,
-  ) => 
Promise<HttpResponseOk<MerchantBackend.Rewards.ReserveCreateConfirmation>>;
-  deleteReserve: (
-    id: string,
-  ) => Promise<HttpResponse<void, MerchantBackend.ErrorDetail>>;
-}
-
-export function useInstanceReserves(): HttpResponse<
-  MerchantBackend.Rewards.RewardReserveStatus,
-  MerchantBackend.ErrorDetail
-> {
-  const { fetcher } = useBackendInstanceRequest();
-
-  const { data, error, isValidating } = useSWR<
-    HttpResponseOk<MerchantBackend.Rewards.RewardReserveStatus>,
-    RequestError<MerchantBackend.ErrorDetail>
-  >([`/private/reserves`], fetcher);
-
-  if (isValidating) return { loading: true, data: data?.data };
-  if (data) return data;
-  if (error) return error.cause;
-  return { loading: true };
-}
-
diff --git a/packages/merchant-backoffice-ui/src/hooks/templates.ts 
b/packages/merchant-backoffice-ui/src/hooks/templates.ts
index 96671452e..cdcc418ef 100644
--- a/packages/merchant-backoffice-ui/src/hooks/templates.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/templates.ts
@@ -20,11 +20,11 @@ import {
   RequestError,
 } from "@gnu-taler/web-util/browser";
 import { useEffect, useState } from "preact/hooks";
-import { MerchantBackend } from "../declaration.js";
 import { MAX_RESULT_SIZE, PAGE_SIZE } from "../utils/constants.js";
 import { useBackendInstanceRequest, useMatchMutate } from "./backend.js";
 
 // FIX default import https://github.com/microsoft/TypeScript/issues/49189
+import { TalerErrorDetail, TalerMerchantApi } from "@gnu-taler/taler-util";
 import _useSWR, { SWRHook } from "swr";
 const useSWR = _useSWR as unknown as SWRHook;
 
@@ -33,7 +33,7 @@ export function useTemplateAPI(): TemplateAPI {
   const { request } = useBackendInstanceRequest();
 
   const createTemplate = async (
-    data: MerchantBackend.Template.TemplateAddDetails,
+    data: TalerMerchantApi.TemplateAddDetails,
   ): Promise<HttpResponseOk<void>> => {
     const res = await request<void>(`/private/templates`, {
       method: "POST",
@@ -45,7 +45,7 @@ export function useTemplateAPI(): TemplateAPI {
 
   const updateTemplate = async (
     templateId: string,
-    data: MerchantBackend.Template.TemplatePatchDetails,
+    data: TalerMerchantApi.TemplatePatchDetails,
   ): Promise<HttpResponseOk<void>> => {
     const res = await request<void>(`/private/templates/${templateId}`, {
       method: "PATCH",
@@ -67,11 +67,11 @@ export function useTemplateAPI(): TemplateAPI {
 
   const createOrderFromTemplate = async (
     templateId: string,
-    data: MerchantBackend.Template.UsingTemplateDetails,
+    data: TalerMerchantApi.UsingTemplateDetails,
   ): Promise<
-    HttpResponseOk<MerchantBackend.Template.UsingTemplateResponse>
+    HttpResponseOk<TalerMerchantApi.UsingTemplateResponse>
   > => {
-    const res = await request<MerchantBackend.Template.UsingTemplateResponse>(
+    const res = await request<TalerMerchantApi.UsingTemplateResponse>(
       `/templates/${templateId}`,
       {
         method: "POST",
@@ -101,11 +101,11 @@ export function useTemplateAPI(): TemplateAPI {
 
 export interface TemplateAPI {
   createTemplate: (
-    data: MerchantBackend.Template.TemplateAddDetails,
+    data: TalerMerchantApi.TemplateAddDetails,
   ) => Promise<HttpResponseOk<void>>;
   updateTemplate: (
     id: string,
-    data: MerchantBackend.Template.TemplatePatchDetails,
+    data: TalerMerchantApi.TemplatePatchDetails,
   ) => Promise<HttpResponseOk<void>>;
   testTemplateExist: (
     id: string
@@ -113,8 +113,8 @@ export interface TemplateAPI {
   deleteTemplate: (id: string) => Promise<HttpResponseOk<void>>;
   createOrderFromTemplate: (
     id: string,
-    data: MerchantBackend.Template.UsingTemplateDetails,
-  ) => Promise<HttpResponseOk<MerchantBackend.Template.UsingTemplateResponse>>;
+    data: TalerMerchantApi.UsingTemplateDetails,
+  ) => Promise<HttpResponseOk<TalerMerchantApi.UsingTemplateResponse>>;
 }
 
 export interface InstanceTemplateFilter {
@@ -126,8 +126,8 @@ export function useInstanceTemplates(
   args?: InstanceTemplateFilter,
   updatePosition?: (id: string) => void,
 ): HttpResponsePaginated<
-  MerchantBackend.Template.TemplateSummaryResponse,
-  MerchantBackend.ErrorDetail
+  TalerMerchantApi.TemplateSummaryResponse,
+  TalerErrorDetail
 > {
   const { templateFetcher } = useBackendInstanceRequest();
 
@@ -148,8 +148,8 @@ export function useInstanceTemplates(
     error: beforeError,
     isValidating: loadingBefore,
   } = useSWR<
-    HttpResponseOk<MerchantBackend.Template.TemplateSummaryResponse>,
-    RequestError<MerchantBackend.ErrorDetail>>(
+    HttpResponseOk<TalerMerchantApi.TemplateSummaryResponse>,
+    RequestError<TalerErrorDetail>>(
       [
         `/private/templates`,
         args?.position,
@@ -162,22 +162,22 @@ export function useInstanceTemplates(
     error: afterError,
     isValidating: loadingAfter,
   } = useSWR<
-    HttpResponseOk<MerchantBackend.Template.TemplateSummaryResponse>,
-    RequestError<MerchantBackend.ErrorDetail>
+    HttpResponseOk<TalerMerchantApi.TemplateSummaryResponse>,
+    RequestError<TalerErrorDetail>
   >([`/private/templates`, args?.position, -totalAfter], templateFetcher);
 
   //this will save last result
   const [lastBefore, setLastBefore] = useState<
     HttpResponse<
-      MerchantBackend.Template.TemplateSummaryResponse,
-      MerchantBackend.ErrorDetail
+      TalerMerchantApi.TemplateSummaryResponse,
+      TalerErrorDetail
     >
   >({ loading: true });
 
   const [lastAfter, setLastAfter] = useState<
     HttpResponse<
-      MerchantBackend.Template.TemplateSummaryResponse,
-      MerchantBackend.ErrorDetail
+      TalerMerchantApi.TemplateSummaryResponse,
+      TalerErrorDetail
     >
   >({ loading: true });
   useEffect(() => {
@@ -241,14 +241,14 @@ export function useInstanceTemplates(
 export function useTemplateDetails(
   templateId: string,
 ): HttpResponse<
-  MerchantBackend.Template.TemplateDetails,
-  MerchantBackend.ErrorDetail
+  TalerMerchantApi.TemplateDetails,
+  TalerErrorDetail
 > {
   const { templateFetcher } = useBackendInstanceRequest();
 
   const { data, error, isValidating } = useSWR<
-    HttpResponseOk<MerchantBackend.Template.TemplateDetails>,
-    RequestError<MerchantBackend.ErrorDetail>
+    HttpResponseOk<TalerMerchantApi.TemplateDetails>,
+    RequestError<TalerErrorDetail>
   >([`/private/templates/${templateId}`], templateFetcher, {
     refreshInterval: 0,
     refreshWhenHidden: false,
diff --git a/packages/merchant-backoffice-ui/src/hooks/transfer.test.ts 
b/packages/merchant-backoffice-ui/src/hooks/transfer.test.ts
index 2fd11f02e..ee987af7e 100644
--- a/packages/merchant-backoffice-ui/src/hooks/transfer.test.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/transfer.test.ts
@@ -19,12 +19,12 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
+import { AmountString, PaytoString, TalerMerchantApi } from 
"@gnu-taler/taler-util";
 import * as tests from "@gnu-taler/web-util/testing";
 import { expect } from "chai";
-import { MerchantBackend } from "../declaration.js";
-import { API_INFORM_TRANSFERS, API_LIST_TRANSFERS } from "./urls.js";
 import { ApiMockEnvironment } from "./testing.js";
 import { useInstanceTransfers, useTransferAPI } from "./transfer.js";
+import { API_INFORM_TRANSFERS, API_LIST_TRANSFERS } from "./urls.js";
 
 describe("transfer api interaction with listing", () => {
   it("should evict cache when informing a transfer", async () => {
@@ -33,7 +33,7 @@ describe("transfer api interaction with listing", () => {
     env.addRequestExpectation(API_LIST_TRANSFERS, {
       qparam: { limit: -20 },
       response: {
-        transfers: [{ wtid: "2" } as 
MerchantBackend.Transfers.TransferDetails],
+        transfers: [{ wtid: "2" } as TalerMerchantApi.TransferDetails],
       },
     });
 
@@ -83,9 +83,9 @@ describe("transfer api interaction with listing", () => {
 
           api.informTransfer({
             wtid: "3",
-            credit_amount: "EUR:1",
+            credit_amount: "EUR:1" as AmountString,
             exchange_url: "exchange.url",
-            payto_uri: "payto://",
+            payto_uri: "payto://" as PaytoString,
           });
         },
         ({ query, api }) => {
diff --git a/packages/merchant-backoffice-ui/src/hooks/transfer.ts 
b/packages/merchant-backoffice-ui/src/hooks/transfer.ts
index 924bd202f..20062a5e2 100644
--- a/packages/merchant-backoffice-ui/src/hooks/transfer.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/transfer.ts
@@ -20,11 +20,11 @@ import {
   RequestError,
 } from "@gnu-taler/web-util/browser";
 import { useEffect, useState } from "preact/hooks";
-import { MerchantBackend } from "../declaration.js";
 import { MAX_RESULT_SIZE, PAGE_SIZE } from "../utils/constants.js";
 import { useBackendInstanceRequest, useMatchMutate } from "./backend.js";
 
 // FIX default import https://github.com/microsoft/TypeScript/issues/49189
+import { TalerErrorDetail, TalerMerchantApi } from "@gnu-taler/taler-util";
 import _useSWR, { SWRHook } from "swr";
 const useSWR = _useSWR as unknown as SWRHook;
 
@@ -33,7 +33,7 @@ export function useTransferAPI(): TransferAPI {
   const { request } = useBackendInstanceRequest();
 
   const informTransfer = async (
-    data: MerchantBackend.Transfers.TransferInformation,
+    data: TalerMerchantApi.TransferInformation,
   ): Promise<HttpResponseOk<{}>> => {
     const res = await request<{}>(`/private/transfers`, {
       method: "POST",
@@ -49,7 +49,7 @@ export function useTransferAPI(): TransferAPI {
 
 export interface TransferAPI {
   informTransfer: (
-    data: MerchantBackend.Transfers.TransferInformation,
+    data: TalerMerchantApi.TransferInformation,
   ) => Promise<HttpResponseOk<{}>>;
 }
 
@@ -63,8 +63,8 @@ export function useInstanceTransfers(
   args?: InstanceTransferFilter,
   updatePosition?: (id: string) => void,
 ): HttpResponsePaginated<
-  MerchantBackend.Transfers.TransferList,
-  MerchantBackend.ErrorDetail
+  TalerMerchantApi.TransferList,
+  TalerErrorDetail
 > {
   const { transferFetcher } = useBackendInstanceRequest();
 
@@ -85,8 +85,8 @@ export function useInstanceTransfers(
     error: beforeError,
     isValidating: loadingBefore,
   } = useSWR<
-    HttpResponseOk<MerchantBackend.Transfers.TransferList>,
-    RequestError<MerchantBackend.ErrorDetail>
+    HttpResponseOk<TalerMerchantApi.TransferList>,
+    RequestError<TalerErrorDetail>
   >(
     [
       `/private/transfers`,
@@ -102,8 +102,8 @@ export function useInstanceTransfers(
     error: afterError,
     isValidating: loadingAfter,
   } = useSWR<
-    HttpResponseOk<MerchantBackend.Transfers.TransferList>,
-    RequestError<MerchantBackend.ErrorDetail>
+    HttpResponseOk<TalerMerchantApi.TransferList>,
+    RequestError<TalerErrorDetail>
   >(
     [
       `/private/transfers`,
@@ -118,14 +118,14 @@ export function useInstanceTransfers(
   //this will save last result
   const [lastBefore, setLastBefore] = useState<
     HttpResponse<
-      MerchantBackend.Transfers.TransferList,
-      MerchantBackend.ErrorDetail
+      TalerMerchantApi.TransferList,
+      TalerErrorDetail
     >
   >({ loading: true });
   const [lastAfter, setLastAfter] = useState<
     HttpResponse<
-      MerchantBackend.Transfers.TransferList,
-      MerchantBackend.ErrorDetail
+      TalerMerchantApi.TransferList,
+      TalerErrorDetail
     >
   >({ loading: true });
   useEffect(() => {
diff --git a/packages/merchant-backoffice-ui/src/hooks/urls.ts 
b/packages/merchant-backoffice-ui/src/hooks/urls.ts
index 76c117224..95e1c04f3 100644
--- a/packages/merchant-backoffice-ui/src/hooks/urls.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/urls.ts
@@ -18,16 +18,16 @@
  *
  * @author Sebastian Javier Marchano (sebasjm)
  */
+import { TalerMerchantApi } from "@gnu-taler/taler-util";
 import { Query } from "@gnu-taler/web-util/testing";
-import { MerchantBackend } from "../declaration.js";
 
 ////////////////////
 // ORDER
 ////////////////////
 
 export const API_CREATE_ORDER: Query<
-  MerchantBackend.Orders.PostOrderRequest,
-  MerchantBackend.Orders.PostOrderResponse
+  TalerMerchantApi.PostOrderRequest,
+  TalerMerchantApi.PostOrderResponse
 > = {
   method: "POST",
   url: "http://backend/instances/default/private/orders";,
@@ -35,14 +35,14 @@ export const API_CREATE_ORDER: Query<
 
 export const API_GET_ORDER_BY_ID = (
   id: string,
-): Query<unknown, MerchantBackend.Orders.MerchantOrderStatusResponse> => ({
+): Query<unknown, TalerMerchantApi.MerchantOrderStatusResponse> => ({
   method: "GET",
   url: `http://backend/instances/default/private/orders/${id}`,
 });
 
 export const API_LIST_ORDERS: Query<
   unknown,
-  MerchantBackend.Orders.OrderHistory
+  TalerMerchantApi.OrderHistory
 > = {
   method: "GET",
   url: "http://backend/instances/default/private/orders";,
@@ -51,8 +51,8 @@ export const API_LIST_ORDERS: Query<
 export const API_REFUND_ORDER_BY_ID = (
   id: string,
 ): Query<
-  MerchantBackend.Orders.RefundRequest,
-  MerchantBackend.Orders.MerchantRefundResponse
+  TalerMerchantApi.RefundRequest,
+  TalerMerchantApi.MerchantRefundResponse
 > => ({
   method: "POST",
   url: `http://backend/instances/default/private/orders/${id}/refund`,
@@ -60,14 +60,14 @@ export const API_REFUND_ORDER_BY_ID = (
 
 export const API_FORGET_ORDER_BY_ID = (
   id: string,
-): Query<MerchantBackend.Orders.ForgetRequest, unknown> => ({
+): Query<TalerMerchantApi.ForgetRequest, unknown> => ({
   method: "PATCH",
   url: `http://backend/instances/default/private/orders/${id}/forget`,
 });
 
 export const API_DELETE_ORDER = (
   id: string,
-): Query<MerchantBackend.Orders.ForgetRequest, unknown> => ({
+): Query<TalerMerchantApi.ForgetRequest, unknown> => ({
   method: "DELETE",
   url: `http://backend/instances/default/private/orders/${id}`,
 });
@@ -78,14 +78,14 @@ export const API_DELETE_ORDER = (
 
 export const API_LIST_TRANSFERS: Query<
   unknown,
-  MerchantBackend.Transfers.TransferList
+  TalerMerchantApi.TransferList
 > = {
   method: "GET",
   url: "http://backend/instances/default/private/transfers";,
 };
 
 export const API_INFORM_TRANSFERS: Query<
-  MerchantBackend.Transfers.TransferInformation,
+  TalerMerchantApi.TransferInformation,
   {}
 > = {
   method: "POST",
@@ -97,7 +97,7 @@ export const API_INFORM_TRANSFERS: Query<
 ////////////////////
 
 export const API_CREATE_PRODUCT: Query<
-  MerchantBackend.Products.ProductAddDetail,
+  TalerMerchantApi.ProductAddDetail,
   unknown
 > = {
   method: "POST",
@@ -106,7 +106,7 @@ export const API_CREATE_PRODUCT: Query<
 
 export const API_LIST_PRODUCTS: Query<
   unknown,
-  MerchantBackend.Products.InventorySummaryResponse
+  TalerMerchantApi.InventorySummaryResponse
 > = {
   method: "GET",
   url: "http://backend/instances/default/private/products";,
@@ -114,7 +114,7 @@ export const API_LIST_PRODUCTS: Query<
 
 export const API_GET_PRODUCT_BY_ID = (
   id: string,
-): Query<unknown, MerchantBackend.Products.ProductDetail> => ({
+): Query<unknown, TalerMerchantApi.ProductDetail> => ({
   method: "GET",
   url: `http://backend/instances/default/private/products/${id}`,
 });
@@ -122,8 +122,8 @@ export const API_GET_PRODUCT_BY_ID = (
 export const API_UPDATE_PRODUCT_BY_ID = (
   id: string,
 ): Query<
-  MerchantBackend.Products.ProductPatchDetail,
-  MerchantBackend.Products.InventorySummaryResponse
+  TalerMerchantApi.ProductPatchDetail,
+  TalerMerchantApi.InventorySummaryResponse
 > => ({
   method: "PATCH",
   url: `http://backend/instances/default/private/products/${id}`,
@@ -134,68 +134,12 @@ export const API_DELETE_PRODUCT = (id: string): 
Query<unknown, unknown> => ({
   url: `http://backend/instances/default/private/products/${id}`,
 });
 
-////////////////////
-// RESERVES
-////////////////////
-
-export const API_CREATE_RESERVE: Query<
-  MerchantBackend.Rewards.ReserveCreateRequest,
-  MerchantBackend.Rewards.ReserveCreateConfirmation
-> = {
-  method: "POST",
-  url: "http://backend/instances/default/private/reserves";,
-};
-export const API_LIST_RESERVES: Query<
-  unknown,
-  MerchantBackend.Rewards.RewardReserveStatus
-> = {
-  method: "GET",
-  url: "http://backend/instances/default/private/reserves";,
-};
-
-export const API_GET_RESERVE_BY_ID = (
-  pub: string,
-): Query<unknown, MerchantBackend.Rewards.ReserveDetail> => ({
-  method: "GET",
-  url: `http://backend/instances/default/private/reserves/${pub}`,
-});
-
-export const API_GET_REWARD_BY_ID = (
-  pub: string,
-): Query<unknown, MerchantBackend.Rewards.RewardDetails> => ({
-  method: "GET",
-  url: `http://backend/instances/default/private/rewards/${pub}`,
-});
-
-export const API_AUTHORIZE_REWARD_FOR_RESERVE = (
-  pub: string,
-): Query<
-  MerchantBackend.Rewards.RewardCreateRequest,
-  MerchantBackend.Rewards.RewardCreateConfirmation
-> => ({
-  method: "POST",
-  url: 
`http://backend/instances/default/private/reserves/${pub}/authorize-reward`,
-});
-
-export const API_AUTHORIZE_REWARD: Query<
-  MerchantBackend.Rewards.RewardCreateRequest,
-  MerchantBackend.Rewards.RewardCreateConfirmation
-> = {
-  method: "POST",
-  url: `http://backend/instances/default/private/rewards`,
-};
-
-export const API_DELETE_RESERVE = (id: string): Query<unknown, unknown> => ({
-  method: "DELETE",
-  url: `http://backend/instances/default/private/reserves/${id}`,
-});
-
 ////////////////////
 // INSTANCE ADMIN
 ////////////////////
 
 export const API_CREATE_INSTANCE: Query<
-  MerchantBackend.Instances.InstanceConfigurationMessage,
+  TalerMerchantApi.InstanceConfigurationMessage,
   unknown
 > = {
   method: "POST",
@@ -204,21 +148,21 @@ export const API_CREATE_INSTANCE: Query<
 
 export const API_GET_INSTANCE_BY_ID = (
   id: string,
-): Query<unknown, MerchantBackend.Instances.QueryInstancesResponse> => ({
+): Query<unknown, TalerMerchantApi.QueryInstancesResponse> => ({
   method: "GET",
   url: `http://backend/management/instances/${id}`,
 });
 
 export const API_GET_INSTANCE_KYC_BY_ID = (
   id: string,
-): Query<unknown, MerchantBackend.KYC.AccountKycRedirects> => ({
+): Query<unknown, TalerMerchantApi.AccountKycRedirects> => ({
   method: "GET",
   url: `http://backend/management/instances/${id}/kyc`,
 });
 
 export const API_LIST_INSTANCES: Query<
   unknown,
-  MerchantBackend.Instances.InstancesResponse
+  TalerMerchantApi.InstancesResponse
 > = {
   method: "GET",
   url: "http://backend/management/instances";,
@@ -227,7 +171,7 @@ export const API_LIST_INSTANCES: Query<
 export const API_UPDATE_INSTANCE_BY_ID = (
   id: string,
 ): Query<
-  MerchantBackend.Instances.InstanceReconfigurationMessage,
+  TalerMerchantApi.InstanceReconfigurationMessage,
   unknown
 > => ({
   method: "PATCH",
@@ -237,7 +181,7 @@ export const API_UPDATE_INSTANCE_BY_ID = (
 export const API_UPDATE_INSTANCE_AUTH_BY_ID = (
   id: string,
 ): Query<
-  MerchantBackend.Instances.InstanceAuthConfigurationMessage,
+  TalerMerchantApi.InstanceAuthConfigurationMessage,
   unknown
 > => ({
   method: "POST",
@@ -249,25 +193,13 @@ export const API_DELETE_INSTANCE = (id: string): 
Query<unknown, unknown> => ({
   url: `http://backend/management/instances/${id}`,
 });
 
-////////////////////
-// AUTH
-////////////////////
-
-export const API_NEW_LOGIN: Query<
-  MerchantBackend.Instances.LoginTokenRequest,
-  unknown
-> = ({
-  method: "POST",
-  url: `http://backend/private/token`,
-});
-
 ////////////////////
 // INSTANCE
 ////////////////////
 
 export const API_GET_CURRENT_INSTANCE: Query<
   unknown,
-  MerchantBackend.Instances.QueryInstancesResponse
+  TalerMerchantApi.QueryInstancesResponse
 > = {
   method: "GET",
   url: `http://backend/instances/default/private/`,
@@ -275,14 +207,14 @@ export const API_GET_CURRENT_INSTANCE: Query<
 
 export const API_GET_CURRENT_INSTANCE_KYC: Query<
   unknown,
-  MerchantBackend.KYC.AccountKycRedirects
+  TalerMerchantApi.AccountKycRedirects
 > = {
   method: "GET",
   url: `http://backend/instances/default/private/kyc`,
 };
 
 export const API_UPDATE_CURRENT_INSTANCE: Query<
-  MerchantBackend.Instances.InstanceReconfigurationMessage,
+  TalerMerchantApi.InstanceReconfigurationMessage,
   unknown
 > = {
   method: "PATCH",
@@ -290,7 +222,7 @@ export const API_UPDATE_CURRENT_INSTANCE: Query<
 };
 
 export const API_UPDATE_CURRENT_INSTANCE_AUTH: Query<
-  MerchantBackend.Instances.InstanceAuthConfigurationMessage,
+  TalerMerchantApi.InstanceAuthConfigurationMessage,
   unknown
 > = {
   method: "POST",
diff --git a/packages/merchant-backoffice-ui/src/hooks/webhooks.ts 
b/packages/merchant-backoffice-ui/src/hooks/webhooks.ts
index 994bfdbb0..4e62a81c9 100644
--- a/packages/merchant-backoffice-ui/src/hooks/webhooks.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/webhooks.ts
@@ -20,11 +20,11 @@ import {
   RequestError,
 } from "@gnu-taler/web-util/browser";
 import { useEffect, useState } from "preact/hooks";
-import { MerchantBackend } from "../declaration.js";
 import { MAX_RESULT_SIZE, PAGE_SIZE } from "../utils/constants.js";
 import { useBackendInstanceRequest, useMatchMutate } from "./backend.js";
 
 // FIX default import https://github.com/microsoft/TypeScript/issues/49189
+import { TalerErrorDetail, TalerMerchantApi } from "@gnu-taler/taler-util";
 import _useSWR, { SWRHook } from "swr";
 const useSWR = _useSWR as unknown as SWRHook;
 
@@ -33,7 +33,7 @@ export function useWebhookAPI(): WebhookAPI {
   const { request } = useBackendInstanceRequest();
 
   const createWebhook = async (
-    data: MerchantBackend.Webhooks.WebhookAddDetails,
+    data: TalerMerchantApi.WebhookAddDetails,
   ): Promise<HttpResponseOk<void>> => {
     const res = await request<void>(`/private/webhooks`, {
       method: "POST",
@@ -45,7 +45,7 @@ export function useWebhookAPI(): WebhookAPI {
 
   const updateWebhook = async (
     webhookId: string,
-    data: MerchantBackend.Webhooks.WebhookPatchDetails,
+    data: TalerMerchantApi.WebhookPatchDetails,
   ): Promise<HttpResponseOk<void>> => {
     const res = await request<void>(`/private/webhooks/${webhookId}`, {
       method: "PATCH",
@@ -70,11 +70,11 @@ export function useWebhookAPI(): WebhookAPI {
 
 export interface WebhookAPI {
   createWebhook: (
-    data: MerchantBackend.Webhooks.WebhookAddDetails,
+    data: TalerMerchantApi.WebhookAddDetails,
   ) => Promise<HttpResponseOk<void>>;
   updateWebhook: (
     id: string,
-    data: MerchantBackend.Webhooks.WebhookPatchDetails,
+    data: TalerMerchantApi.WebhookPatchDetails,
   ) => Promise<HttpResponseOk<void>>;
   deleteWebhook: (id: string) => Promise<HttpResponseOk<void>>;
 }
@@ -88,8 +88,8 @@ export function useInstanceWebhooks(
   args?: InstanceWebhookFilter,
   updatePosition?: (id: string) => void,
 ): HttpResponsePaginated<
-  MerchantBackend.Webhooks.WebhookSummaryResponse,
-  MerchantBackend.ErrorDetail
+  TalerMerchantApi.WebhookSummaryResponse,
+  TalerErrorDetail
 > {
   const { webhookFetcher } = useBackendInstanceRequest();
 
@@ -104,14 +104,15 @@ export function useInstanceWebhooks(
     error: afterError,
     isValidating: loadingAfter,
   } = useSWR<
-    HttpResponseOk<MerchantBackend.Webhooks.WebhookSummaryResponse>,
-    RequestError<MerchantBackend.ErrorDetail>
+    HttpResponseOk<TalerMerchantApi.WebhookSummaryResponse>,
+    RequestError<TalerErrorDetail>
+
   >([`/private/webhooks`, args?.position, -totalAfter], webhookFetcher);
 
   const [lastAfter, setLastAfter] = useState<
     HttpResponse<
-      MerchantBackend.Webhooks.WebhookSummaryResponse,
-      MerchantBackend.ErrorDetail
+      TalerMerchantApi.WebhookSummaryResponse,
+      TalerErrorDetail
     >
   >({ loading: true });
   useEffect(() => {
@@ -155,14 +156,14 @@ export function useInstanceWebhooks(
 export function useWebhookDetails(
   webhookId: string,
 ): HttpResponse<
-  MerchantBackend.Webhooks.WebhookDetails,
-  MerchantBackend.ErrorDetail
+  TalerMerchantApi.WebhookDetails,
+  TalerErrorDetail
 > {
   const { webhookFetcher } = useBackendInstanceRequest();
 
   const { data, error, isValidating } = useSWR<
-    HttpResponseOk<MerchantBackend.Webhooks.WebhookDetails>,
-    RequestError<MerchantBackend.ErrorDetail>
+    HttpResponseOk<TalerMerchantApi.WebhookDetails>,
+    RequestError<TalerErrorDetail>
   >([`/private/webhooks/${webhookId}`], webhookFetcher, {
     refreshInterval: 0,
     refreshWhenHidden: false,
diff --git 
a/packages/merchant-backoffice-ui/src/paths/admin/create/CreatePage.tsx 
b/packages/merchant-backoffice-ui/src/paths/admin/create/CreatePage.tsx
index 8ce7c1d3a..731ea8939 100644
--- a/packages/merchant-backoffice-ui/src/paths/admin/create/CreatePage.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/admin/create/CreatePage.tsx
@@ -19,6 +19,7 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
+import { Duration, TalerMerchantApi } from "@gnu-taler/taler-util";
 import { useTranslationContext } from "@gnu-taler/web-util/browser";
 import { h, VNode } from "preact";
 import { useState } from "preact/hooks";
@@ -28,20 +29,18 @@ import {
   FormProvider,
 } from "../../../components/form/FormProvider.js";
 import { DefaultInstanceFormFields } from 
"../../../components/instance/DefaultInstanceFormFields.js";
-import { MerchantBackend } from "../../../declaration.js";
+import { SetTokenNewInstanceModal } from "../../../components/modal/index.js";
 import { INSTANCE_ID_REGEX } from "../../../utils/constants.js";
 import { undefinedIfEmpty } from "../../../utils/table.js";
-import { SetTokenNewInstanceModal } from "../../../components/modal/index.js";
-import { Duration } from "@gnu-taler/taler-util";
 
-export type Entity = 
Omit<Omit<MerchantBackend.Instances.InstanceConfigurationMessage, 
"default_pay_delay">, "default_wire_transfer_delay"> & {
+export type Entity = Omit<Omit<TalerMerchantApi.InstanceConfigurationMessage, 
"default_pay_delay">, "default_wire_transfer_delay"> & {
   auth_token?: string;
   default_pay_delay: Duration,
   default_wire_transfer_delay: Duration,
 };
 
 interface Props {
-  onCreate: (d: MerchantBackend.Instances.InstanceConfigurationMessage) => 
Promise<void>;
+  onCreate: (d: TalerMerchantApi.InstanceConfigurationMessage) => 
Promise<void>;
   onBack?: () => void;
   forceId?: string;
 }
@@ -134,7 +133,7 @@ export function CreatePage({ onCreate, onBack, forceId }: 
Props): VNode {
     // delete value.default_pay_delay;
     // delete value.default_wire_transfer_delay;
 
-    return onCreate(newValue as any as 
MerchantBackend.Instances.InstanceConfigurationMessage);
+    return onCreate(newValue as any as 
TalerMerchantApi.InstanceConfigurationMessage);
   };
 
   function updateToken(token: string | null) {
diff --git a/packages/merchant-backoffice-ui/src/paths/admin/create/index.tsx 
b/packages/merchant-backoffice-ui/src/paths/admin/create/index.tsx
index 440cd2b07..99e20dcd7 100644
--- a/packages/merchant-backoffice-ui/src/paths/admin/create/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/admin/create/index.tsx
@@ -17,6 +17,7 @@
  *
  * @author Sebastian Javier Marchano (sebasjm)
  */
+import { TalerMerchantApi } from "@gnu-taler/taler-util";
 import {
   useMerchantApiContext,
   useTranslationContext,
@@ -24,9 +25,8 @@ import {
 import { Fragment, VNode, h } from "preact";
 import { useState } from "preact/hooks";
 import { NotificationCard } from "../../../components/menu/index.js";
-import { MerchantBackend } from "../../../declaration.js";
-import { useAdminAPI } from "../../../hooks/instance.js";
 import { useSessionContext } from "../../../context/session.js";
+import { useAdminAPI } from "../../../hooks/instance.js";
 import { Notification } from "../../../utils/types.js";
 import { CreatePage } from "./CreatePage.js";
 
@@ -35,14 +35,14 @@ interface Props {
   onConfirm: () => void;
   forceId?: string;
 }
-export type Entity = MerchantBackend.Instances.InstanceConfigurationMessage;
+export type Entity = TalerMerchantApi.InstanceConfigurationMessage;
 
 export default function Create({ onBack, onConfirm, forceId }: Props): VNode {
   const { createInstance } = useAdminAPI();
   const [notif, setNotif] = useState<Notification | undefined>(undefined);
   const { i18n } = useTranslationContext();
   const { lib } = useMerchantApiContext();
-  const { state, logIn } = useSessionContext();
+  const { logIn } = useSessionContext();
 
   return (
     <Fragment>
@@ -52,7 +52,7 @@ export default function Create({ onBack, onConfirm, forceId 
}: Props): VNode {
         onBack={onBack}
         forceId={forceId}
         onCreate={async (
-          d: MerchantBackend.Instances.InstanceConfigurationMessage,
+          d: TalerMerchantApi.InstanceConfigurationMessage,
         ) => {
           try {
             await createInstance(d);
diff --git 
a/packages/merchant-backoffice-ui/src/paths/admin/list/TableActive.tsx 
b/packages/merchant-backoffice-ui/src/paths/admin/list/TableActive.tsx
index bc18bb352..a03a2659b 100644
--- a/packages/merchant-backoffice-ui/src/paths/admin/list/TableActive.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/admin/list/TableActive.tsx
@@ -19,17 +19,17 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
+import { TalerMerchantApi } from "@gnu-taler/taler-util";
 import { useTranslationContext } from "@gnu-taler/web-util/browser";
 import { h, VNode } from "preact";
 import { StateUpdater, useEffect, useState } from "preact/hooks";
-import { MerchantBackend } from "../../../declaration.js";
 import { useSessionContext } from "../../../context/session.js";
 
 interface Props {
-  instances: MerchantBackend.Instances.Instance[];
+  instances: TalerMerchantApi.Instance[];
   onUpdate: (id: string) => void;
-  onDelete: (id: MerchantBackend.Instances.Instance) => void;
-  onPurge: (id: MerchantBackend.Instances.Instance) => void;
+  onDelete: (id: TalerMerchantApi.Instance) => void;
+  onPurge: (id: TalerMerchantApi.Instance) => void;
   onCreate: () => void;
   selected?: boolean;
 }
@@ -128,10 +128,10 @@ export function CardTable({
 }
 interface TableProps {
   rowSelection: string[];
-  instances: MerchantBackend.Instances.Instance[];
+  instances: TalerMerchantApi.Instance[];
   onUpdate: (id: string) => void;
-  onDelete: (id: MerchantBackend.Instances.Instance) => void;
-  onPurge: (id: MerchantBackend.Instances.Instance) => void;
+  onDelete: (id: TalerMerchantApi.Instance) => void;
+  onPurge: (id: TalerMerchantApi.Instance) => void;
   rowSelectionHandler: StateUpdater<string[]>;
 }
 
@@ -265,7 +265,7 @@ function EmptyTable(): VNode {
 }
 
 interface Actions {
-  element: MerchantBackend.Instances.Instance;
+  element: TalerMerchantApi.Instance;
   type: "DELETE" | "UPDATE";
 }
 
@@ -274,7 +274,7 @@ function notEmpty<TValue>(value: TValue | null | 
undefined): value is TValue {
 }
 
 function buildActions(
-  instances: MerchantBackend.Instances.Instance[],
+  instances: TalerMerchantApi.Instance[],
   selected: string[],
   action: "DELETE",
 ): Actions[] {
diff --git a/packages/merchant-backoffice-ui/src/paths/admin/list/View.tsx 
b/packages/merchant-backoffice-ui/src/paths/admin/list/View.tsx
index 09ad338d2..940d14334 100644
--- a/packages/merchant-backoffice-ui/src/paths/admin/list/View.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/admin/list/View.tsx
@@ -19,18 +19,18 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
+import { TalerMerchantApi } from "@gnu-taler/taler-util";
 import { useTranslationContext } from "@gnu-taler/web-util/browser";
 import { h, VNode } from "preact";
 import { useState } from "preact/hooks";
-import { MerchantBackend } from "../../../declaration.js";
 import { CardTable as CardTableActive } from "./TableActive.js";
 
 interface Props {
-  instances: MerchantBackend.Instances.Instance[];
+  instances: TalerMerchantApi.Instance[];
   onCreate: () => void;
   onUpdate: (id: string) => void;
-  onDelete: (id: MerchantBackend.Instances.Instance) => void;
-  onPurge: (id: MerchantBackend.Instances.Instance) => void;
+  onDelete: (id: TalerMerchantApi.Instance) => void;
+  onPurge: (id: TalerMerchantApi.Instance) => void;
   selected?: boolean;
 }
 
diff --git a/packages/merchant-backoffice-ui/src/paths/admin/list/index.tsx 
b/packages/merchant-backoffice-ui/src/paths/admin/list/index.tsx
index 561e275ad..d3fa78b65 100644
--- a/packages/merchant-backoffice-ui/src/paths/admin/list/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/admin/list/index.tsx
@@ -19,29 +19,28 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
+import { HttpStatusCode, TalerErrorDetail, TalerMerchantApi } from 
"@gnu-taler/taler-util";
 import {
   ErrorType,
   HttpError,
   useTranslationContext,
 } from "@gnu-taler/web-util/browser";
-import { Fragment, h, VNode } from "preact";
+import { Fragment, VNode, h } from "preact";
 import { useState } from "preact/hooks";
 import { Loading } from "../../../components/exception/loading.js";
 import { NotificationCard } from "../../../components/menu/index.js";
 import { DeleteModal, PurgeModal } from "../../../components/modal/index.js";
-import { MerchantBackend } from "../../../declaration.js";
 import { useAdminAPI, useBackendInstances } from "../../../hooks/instance.js";
 import { Notification } from "../../../utils/types.js";
 import { View } from "./View.js";
-import { HttpStatusCode } from "@gnu-taler/taler-util";
 
 interface Props {
   onCreate: () => void;
   onUpdate: (id: string) => void;
-  instances: MerchantBackend.Instances.Instance[];
+  instances: TalerMerchantApi.Instance[];
   onUnauthorized: () => VNode;
   onNotFound: () => VNode;
-  onLoadError: (error: HttpError<MerchantBackend.ErrorDetail>) => VNode;
+  onLoadError: (error: HttpError<TalerErrorDetail>) => VNode;
 }
 
 export default function Instances({
@@ -53,9 +52,9 @@ export default function Instances({
 }: Props): VNode {
   const result = useBackendInstances();
   const [deleting, setDeleting] =
-    useState<MerchantBackend.Instances.Instance | null>(null);
+    useState<TalerMerchantApi.Instance | null>(null);
   const [purging, setPurging] =
-    useState<MerchantBackend.Instances.Instance | null>(null);
+    useState<TalerMerchantApi.Instance | null>(null);
   const { deleteInstance, purgeInstance } = useAdminAPI();
   const [notif, setNotif] = useState<Notification | undefined>(undefined);
   const { i18n } = useTranslationContext();
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/accounts/create/CreatePage.tsx
 
b/packages/merchant-backoffice-ui/src/paths/instance/accounts/create/CreatePage.tsx
index bf16686f4..dd77d609c 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/accounts/create/CreatePage.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/accounts/create/CreatePage.tsx
@@ -19,6 +19,7 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
+import { TalerMerchantApi } from "@gnu-taler/taler-util";
 import { useTranslationContext } from "@gnu-taler/web-util/browser";
 import { Fragment, h, VNode } from "preact";
 import { useState } from "preact/hooks";
@@ -30,13 +31,12 @@ import {
 import { Input } from "../../../../components/form/Input.js";
 import { InputPaytoForm } from "../../../../components/form/InputPaytoForm.js";
 import { InputSelector } from "../../../../components/form/InputSelector.js";
-import { MerchantBackend } from "../../../../declaration.js";
 import { undefinedIfEmpty } from "../../../../utils/table.js";
 
-type Entity = MerchantBackend.BankAccounts.AccountAddDetails & { 
repeatPassword: string };
+type Entity = TalerMerchantApi.AccountAddDetails & { repeatPassword: string };
 
 interface Props {
-  onCreate: (d: MerchantBackend.BankAccounts.AccountAddDetails) => 
Promise<void>;
+  onCreate: (d: TalerMerchantApi.AccountAddDetails) => Promise<void>;
   onBack?: () => void;
 }
 
@@ -89,7 +89,7 @@ export function CreatePage({ onCreate, onBack }: Props): 
VNode {
   const submitForm = () => {
     if (hasErrors) return Promise.reject();
     const credit_facade_url = !state.credit_facade_url ? undefined : new 
URL("/", state.credit_facade_url).href
-    const credit_facade_credentials: 
MerchantBackend.BankAccounts.FacadeCredentials | undefined =
+    const credit_facade_credentials: TalerMerchantApi.FacadeCredentials | 
undefined =
       credit_facade_url == undefined ? undefined :
         state.credit_facade_credentials?.type === "basic" ? {
           type: "basic",
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/accounts/create/index.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/accounts/create/index.tsx
index a2351964a..b12b95f2f 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/accounts/create/index.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/accounts/create/index.tsx
@@ -19,16 +19,16 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
+import { TalerMerchantApi } from "@gnu-taler/taler-util";
 import { useTranslationContext } from "@gnu-taler/web-util/browser";
 import { Fragment, h, VNode } from "preact";
 import { useState } from "preact/hooks";
 import { NotificationCard } from "../../../../components/menu/index.js";
-import { MerchantBackend } from "../../../../declaration.js";
 import { useBankAccountAPI } from "../../../../hooks/bank.js";
 import { Notification } from "../../../../utils/types.js";
 import { CreatePage } from "./CreatePage.js";
 
-export type Entity = MerchantBackend.BankAccounts.AccountAddDetails;
+export type Entity = TalerMerchantApi.AccountAddDetails;
 interface Props {
   onBack?: () => void;
   onConfirm: () => void;
@@ -46,7 +46,7 @@ export default function CreateValidator({ onConfirm, onBack 
}: Props): VNode {
         onBack={onBack}
         onCreate={(request: Entity) => {
           return createBankAccount(request)
-            .then((d) => {
+            .then(() => {
               onConfirm()
             })
             .catch((error) => {
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/accounts/list/ListPage.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/accounts/list/ListPage.tsx
index 3359d1a95..50cf0fe70 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/accounts/list/ListPage.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/accounts/list/ListPage.tsx
@@ -19,18 +19,17 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
+import { TalerMerchantApi } from "@gnu-taler/taler-util";
 import { h, VNode } from "preact";
-import { MerchantBackend } from "../../../../declaration.js";
-import { useTranslationContext } from "@gnu-taler/web-util/browser";
 import { CardTable } from "./Table.js";
 
 export interface Props {
-  devices: MerchantBackend.BankAccounts.BankAccountEntry[];
+  devices: TalerMerchantApi.BankAccountEntry[];
   onLoadMoreBefore?: () => void;
   onLoadMoreAfter?: () => void;
   onCreate: () => void;
-  onDelete: (e: MerchantBackend.BankAccounts.BankAccountEntry) => void;
-  onSelect: (e: MerchantBackend.BankAccounts.BankAccountEntry) => void;
+  onDelete: (e: TalerMerchantApi.BankAccountEntry) => void;
+  onSelect: (e: TalerMerchantApi.BankAccountEntry) => void;
 }
 
 export function ListPage({
@@ -41,9 +40,7 @@ export function ListPage({
   onLoadMoreBefore,
   onLoadMoreAfter,
 }: Props): VNode {
-  const form = { payto_uri: "" };
 
-  const { i18n } = useTranslationContext();
   return (
     <section class="section is-main-section">
       <CardTable
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/accounts/list/Table.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/accounts/list/Table.tsx
index 95e684b7b..690e3a2fc 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/accounts/list/Table.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/accounts/list/Table.tsx
@@ -19,13 +19,12 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
+import { parsePaytoUri, PaytoType, PaytoUri, PaytoUriBitcoin, PaytoUriIBAN, 
PaytoUriTalerBank, PaytoUriUnknown, TalerMerchantApi } from 
"@gnu-taler/taler-util";
 import { useTranslationContext } from "@gnu-taler/web-util/browser";
 import { Fragment, h, VNode } from "preact";
 import { StateUpdater, useState } from "preact/hooks";
-import { MerchantBackend } from "../../../../declaration.js";
-import { parsePaytoUri, PaytoType, PaytoUri, PaytoUriBitcoin, PaytoUriIBAN, 
PaytoUriTalerBank, PaytoUriUnknown } from "@gnu-taler/taler-util";
 
-type Entity = MerchantBackend.BankAccounts.BankAccountEntry;
+type Entity = TalerMerchantApi.BankAccountEntry;
 
 interface Props {
   accounts: Entity[];
@@ -110,11 +109,6 @@ interface TableProps {
   onLoadMoreAfter?: () => void;
 }
 
-function toggleSelected<T>(id: T): (prev: T[]) => T[] {
-  return (prev: T[]): T[] =>
-    prev.indexOf(id) == -1 ? [...prev, id] : prev.filter((e) => e != id);
-}
-
 function Table({
   accounts,
   onLoadMoreAfter,
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/accounts/list/index.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/accounts/list/index.tsx
index 51139c3f3..72efa08c9 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/accounts/list/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/accounts/list/index.tsx
@@ -19,7 +19,7 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
-import { HttpStatusCode } from "@gnu-taler/taler-util";
+import { HttpStatusCode, TalerErrorDetail, TalerMerchantApi } from 
"@gnu-taler/taler-util";
 import {
   ErrorType,
   HttpError,
@@ -29,15 +29,13 @@ import { Fragment, VNode, h } from "preact";
 import { useState } from "preact/hooks";
 import { Loading } from "../../../../components/exception/loading.js";
 import { NotificationCard } from "../../../../components/menu/index.js";
-import { MerchantBackend } from "../../../../declaration.js";
-import { useInstanceOtpDevices, useOtpDeviceAPI } from 
"../../../../hooks/otp.js";
+import { useBankAccountAPI, useInstanceBankAccounts } from 
"../../../../hooks/bank.js";
 import { Notification } from "../../../../utils/types.js";
 import { ListPage } from "./ListPage.js";
-import { useBankAccountAPI, useInstanceBankAccounts } from 
"../../../../hooks/bank.js";
 
 interface Props {
   onUnauthorized: () => VNode;
-  onLoadError: (error: HttpError<MerchantBackend.ErrorDetail>) => VNode;
+  onLoadError: (error: HttpError<TalerErrorDetail>) => VNode;
   onNotFound: () => VNode;
   onCreate: () => void;
   onSelect: (id: string) => void;
@@ -91,7 +89,7 @@ export default function ListOtpDevices({
         onSelect={(e) => {
           onSelect(e.h_wire);
         }}
-        onDelete={(e: MerchantBackend.BankAccounts.BankAccountEntry) =>
+        onDelete={(e: TalerMerchantApi.BankAccountEntry) =>
           deleteBankAccount(e.h_wire)
             .then(() =>
               setNotif({
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/accounts/update/UpdatePage.tsx
 
b/packages/merchant-backoffice-ui/src/paths/instance/accounts/update/UpdatePage.tsx
index 6b67a79a4..6dd264f29 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/accounts/update/UpdatePage.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/accounts/update/UpdatePage.tsx
@@ -19,6 +19,7 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
+import { TalerMerchantApi } from "@gnu-taler/taler-util";
 import { useTranslationContext } from "@gnu-taler/web-util/browser";
 import { Fragment, h, VNode } from "preact";
 import { useState } from "preact/hooks";
@@ -28,17 +29,16 @@ import {
   FormProvider,
 } from "../../../../components/form/FormProvider.js";
 import { Input } from "../../../../components/form/Input.js";
-import { MerchantBackend, WithId } from "../../../../declaration.js";
-import { InputSelector } from "../../../../components/form/InputSelector.js";
 import { InputPaytoForm } from "../../../../components/form/InputPaytoForm.js";
+import { InputSelector } from "../../../../components/form/InputSelector.js";
 import { undefinedIfEmpty } from "../../../../utils/table.js";
 
-type Entity = MerchantBackend.BankAccounts.BankAccountEntry
+type Entity = TalerMerchantApi.BankAccountEntry
   & WithId;
 
 const accountAuthType = ["unedit", "none", "basic"];
 interface Props {
-  onUpdate: (d: MerchantBackend.BankAccounts.AccountPatchDetails) => 
Promise<void>;
+  onUpdate: (d: TalerMerchantApi.AccountPatchDetails) => Promise<void>;
   onBack?: () => void;
   account: Entity;
 }
@@ -47,7 +47,7 @@ interface Props {
 export function UpdatePage({ account, onUpdate, onBack }: Props): VNode {
   const { i18n } = useTranslationContext();
 
-  const [state, setState] = 
useState<Partial<MerchantBackend.BankAccounts.AccountPatchDetails>>(account);
+  const [state, setState] = 
useState<Partial<TalerMerchantApi.AccountPatchDetails>>(account);
 
   // @ts-expect-error "unedit" is fine since is part of the accountAuthType 
values
   if (state.credit_facade_credentials?.type === "unedit") {
@@ -55,7 +55,7 @@ export function UpdatePage({ account, onUpdate, onBack }: 
Props): VNode {
     state.credit_facade_credentials = undefined
   }
 
-  const errors: FormErrors<MerchantBackend.BankAccounts.AccountPatchDetails> = 
{
+  const errors: FormErrors<TalerMerchantApi.AccountPatchDetails> = {
     credit_facade_url: !state.credit_facade_url ? undefined : 
!isValidURL(state.credit_facade_url) ? i18n.str`invalid url` : undefined,
     credit_facade_credentials: undefinedIfEmpty({
 
@@ -81,7 +81,7 @@ export function UpdatePage({ account, onUpdate, onBack }: 
Props): VNode {
 
     const credit_facade_url = !state.credit_facade_url ? undefined : new 
URL("/", state.credit_facade_url).href
 
-    const credit_facade_credentials: 
MerchantBackend.BankAccounts.FacadeCredentials | undefined =
+    const credit_facade_credentials: TalerMerchantApi.FacadeCredentials | 
undefined =
       credit_facade_url == undefined || state.credit_facade_credentials === 
undefined ? undefined :
         state.credit_facade_credentials.type === "basic" ? {
           type: "basic",
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/accounts/update/index.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/accounts/update/index.tsx
index ca0b692a3..742d13b67 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/accounts/update/index.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/accounts/update/index.tsx
@@ -19,7 +19,7 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
-import { HttpStatusCode } from "@gnu-taler/taler-util";
+import { HttpStatusCode, TalerErrorDetail, TalerMerchantApi } from 
"@gnu-taler/taler-util";
 import {
   ErrorType,
   HttpError,
@@ -29,19 +29,18 @@ import { Fragment, VNode, h } from "preact";
 import { useState } from "preact/hooks";
 import { Loading } from "../../../../components/exception/loading.js";
 import { NotificationCard } from "../../../../components/menu/index.js";
-import { MerchantBackend, WithId } from "../../../../declaration.js";
 import { useBankAccountAPI, useBankAccountDetails } from 
"../../../../hooks/bank.js";
 import { Notification } from "../../../../utils/types.js";
 import { UpdatePage } from "./UpdatePage.js";
 
-export type Entity = MerchantBackend.BankAccounts.AccountPatchDetails & WithId;
+export type Entity = TalerMerchantApi.AccountPatchDetails & WithId;
 
 interface Props {
   onBack?: () => void;
   onConfirm: () => void;
   onUnauthorized: () => VNode;
   onNotFound: () => VNode;
-  onLoadError: (e: HttpError<MerchantBackend.ErrorDetail>) => VNode;
+  onLoadError: (e: HttpError<TalerErrorDetail>) => VNode;
   bid: string;
 }
 export default function UpdateValidator({
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/details/DetailPage.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/details/DetailPage.tsx
index 6e9b51106..3168c7cc4 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/details/DetailPage.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/details/DetailPage.tsx
@@ -24,17 +24,17 @@ import { h, VNode } from "preact";
 import { useState } from "preact/hooks";
 import { FormProvider } from "../../../components/form/FormProvider.js";
 import { Input } from "../../../components/form/Input.js";
-import { MerchantBackend } from "../../../declaration.js";
+import { TalerMerchantApi } from "@gnu-taler/taler-util";
 
-type Entity = MerchantBackend.Instances.InstanceReconfigurationMessage;
+type Entity = TalerMerchantApi.InstanceReconfigurationMessage;
 interface Props {
   onUpdate: () => void;
   onDelete: () => void;
-  selected: MerchantBackend.Instances.QueryInstancesResponse;
+  selected: TalerMerchantApi.QueryInstancesResponse;
 }
 
 function convert(
-  from: MerchantBackend.Instances.QueryInstancesResponse,
+  from: TalerMerchantApi.QueryInstancesResponse,
 ): Entity {
   const defaults = {
     default_wire_fee_amortization: 1,
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/details/index.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/details/index.tsx
index 2a37ee588..b76abee30 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/details/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/details/index.tsx
@@ -18,15 +18,14 @@ import { Fragment, h, VNode } from "preact";
 import { useState } from "preact/hooks";
 import { Loading } from "../../../components/exception/loading.js";
 import { DeleteModal } from "../../../components/modal/index.js";
-import { MerchantBackend } from "../../../declaration.js";
 import { useInstanceAPI, useInstanceDetails } from 
"../../../hooks/instance.js";
 import { DetailPage } from "./DetailPage.js";
-import { HttpStatusCode } from "@gnu-taler/taler-util";
+import { HttpStatusCode, TalerErrorDetail } from "@gnu-taler/taler-util";
 import { useSessionContext } from "../../../context/session.js";
 
 interface Props {
   onUnauthorized: () => VNode;
-  onLoadError: (error: HttpError<MerchantBackend.ErrorDetail>) => VNode;
+  onLoadError: (error: HttpError<TalerErrorDetail>) => VNode;
   onUpdate: () => void;
   onNotFound: () => VNode;
   onDelete: () => void;
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/details/stories.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/details/stories.tsx
index 94e19bb6e..6cd2d9491 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/details/stories.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/details/stories.tsx
@@ -70,7 +70,7 @@ function createExample<Props>(
 export const Example = createExample(TestedComponent, {
   selected: {
     name: "name",
-    auth: { method: "external" },
+    auth: { type: "external" },
     address: {},
     user_type: "business",
     jurisdiction: {},
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/kyc/list/ListPage.stories.tsx
 
b/packages/merchant-backoffice-ui/src/paths/instance/kyc/list/ListPage.stories.tsx
index a914639e5..046636b4b 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/kyc/list/ListPage.stories.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/kyc/list/ListPage.stories.tsx
@@ -19,10 +19,9 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
-import { h, VNode, FunctionalComponent } from "preact";
-import { ListPage as TestedComponent } from "./ListPage.js";
+import { PaytoString } from "@gnu-taler/taler-util";
 import * as tests from "@gnu-taler/web-util/testing";
-import { MerchantBackend } from "../../../../declaration.js";
+import { ListPage as TestedComponent } from "./ListPage.js";
 
 export default {
   title: "Pages/KYC/List",
@@ -40,19 +39,19 @@ export const Example = tests.createExample(TestedComponent, 
{
       {
         aml_status: 0,
         exchange_url: "http://exchange.taler";,
-        payto_uri: "payto://iban/de123123123",
+        payto_uri: "payto://iban/de123123123" as PaytoString,
         kyc_url: "http://exchange.taler/kyc";,
       },
       {
         aml_status: 1,
         exchange_url: "http://exchange.taler";,
-        payto_uri: "payto://iban/de123123123",
+        payto_uri: "payto://iban/de123123123" as PaytoString,
       },
       {
         aml_status: 2,
         exchange_url: "http://exchange.taler";,
-        payto_uri: "payto://iban/de123123123",
+        payto_uri: "payto://iban/de123123123" as PaytoString,
       },
     ],
-  } as MerchantBackend.KYC.AccountKycRedirects,
+  },
 });
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/kyc/list/ListPage.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/kyc/list/ListPage.tsx
index 2ec0137d9..3eeed1d7b 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/kyc/list/ListPage.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/kyc/list/ListPage.tsx
@@ -19,12 +19,12 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
+import { TalerMerchantApi } from "@gnu-taler/taler-util";
 import { useTranslationContext } from "@gnu-taler/web-util/browser";
 import { h, VNode } from "preact";
-import { MerchantBackend } from "../../../../declaration.js";
 
 export interface Props {
-  status: MerchantBackend.KYC.AccountKycRedirects;
+  status: TalerMerchantApi.AccountKycRedirects;
 }
 
 export function ListPage({ status }: Props): VNode {
@@ -85,11 +85,11 @@ export function ListPage({ status }: Props): VNode {
   );
 }
 interface PendingTableProps {
-  entries: MerchantBackend.KYC.MerchantAccountKycRedirect[];
+  entries: TalerMerchantApi.MerchantAccountKycRedirect[];
 }
 
 interface TimedOutTableProps {
-  entries: MerchantBackend.KYC.ExchangeKycTimeout[];
+  entries: TalerMerchantApi.ExchangeKycTimeout[];
 }
 
 function PendingTable({ entries }: PendingTableProps): VNode {
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/kyc/list/index.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/kyc/list/index.tsx
index 664f05f66..555eb47b9 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/kyc/list/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/kyc/list/index.tsx
@@ -22,14 +22,13 @@
 import { ErrorType, HttpError } from "@gnu-taler/web-util/browser";
 import { h, VNode } from "preact";
 import { Loading } from "../../../../components/exception/loading.js";
-import { MerchantBackend } from "../../../../declaration.js";
 import { useInstanceKYCDetails } from "../../../../hooks/instance.js";
 import { ListPage } from "./ListPage.js";
-import { HttpStatusCode } from "@gnu-taler/taler-util";
+import { HttpStatusCode, TalerErrorDetail } from "@gnu-taler/taler-util";
 
 interface Props {
   onUnauthorized: () => VNode;
-  onLoadError: (error: HttpError<MerchantBackend.ErrorDetail>) => VNode;
+  onLoadError: (error: HttpError<TalerErrorDetail>) => VNode;
   onNotFound: () => VNode;
 }
 
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/orders/create/CreatePage.tsx
 
b/packages/merchant-backoffice-ui/src/paths/instance/orders/create/CreatePage.tsx
index fca123773..041ec73e7 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/orders/create/CreatePage.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/orders/create/CreatePage.tsx
@@ -21,8 +21,10 @@
 
 import {
   AbsoluteTime,
+  AmountString,
   Amounts,
   Duration,
+  TalerMerchantApi,
   TalerProtocolDuration,
 } from "@gnu-taler/taler-util";
 import {
@@ -47,16 +49,15 @@ import { InputToggle } from 
"../../../../components/form/InputToggle.js";
 import { InventoryProductForm } from 
"../../../../components/product/InventoryProductForm.js";
 import { NonInventoryProductFrom } from 
"../../../../components/product/NonInventoryProductForm.js";
 import { ProductList } from "../../../../components/product/ProductList.js";
-import { MerchantBackend, WithId } from "../../../../declaration.js";
 import { usePreference } from "../../../../hooks/preference.js";
 import { rate } from "../../../../utils/amount.js";
 import { undefinedIfEmpty } from "../../../../utils/table.js";
 
 interface Props {
-  onCreate: (d: MerchantBackend.Orders.PostOrderRequest) => void;
+  onCreate: (d: TalerMerchantApi.PostOrderRequest) => void;
   onBack?: () => void;
   instanceConfig: InstanceConfig;
-  instanceInventory: (MerchantBackend.Products.ProductDetail & WithId)[];
+  instanceInventory: (TalerMerchantApi.ProductDetail & WithId)[];
 }
 interface InstanceConfig {
   use_stefan: boolean;
@@ -92,7 +93,7 @@ function with_defaults(
 }
 
 interface ProductAndQuantity {
-  product: MerchantBackend.Products.ProductDetail & WithId;
+  product: TalerMerchantApi.ProductDetail & WithId;
   quantity: number;
 }
 export interface ProductMap {
@@ -106,7 +107,7 @@ interface Pricing {
 }
 interface Shipping {
   delivery_date?: Date;
-  delivery_location?: MerchantBackend.Location;
+  delivery_location?: TalerMerchantApi.Location;
   fullfilment_url?: string;
 }
 interface Payments {
@@ -120,7 +121,7 @@ interface Payments {
 }
 interface Entity {
   inventoryProducts: ProductMap;
-  products: MerchantBackend.Product[];
+  products: TalerMerchantApi.Product[];
   pricing: Partial<Pricing>;
   payments: Partial<Payments>;
   shipping: Partial<Shipping>;
@@ -214,43 +215,36 @@ export function CreatePage({
     if (!value.payments) return;
     if (!value.shipping) return;
 
-    const request: MerchantBackend.Orders.PostOrderRequest = {
+    const request: TalerMerchantApi.PostOrderRequest = {
       order: {
         amount: order.pricing.order_price,
         summary: order.pricing.summary,
         products: productList,
         extra: undefinedIfEmpty(value.extra),
-        pay_deadline: !value.payments.pay_deadline
-          ? i18n.str`required`
-          : AbsoluteTime.toProtocolTimestamp(
-              AbsoluteTime.addDuration(
-                AbsoluteTime.now(),
-                value.payments.pay_deadline,
-              ),
-            ), // : undefined,
-        wire_transfer_deadline: value.payments.wire_transfer_deadline
-          ? AbsoluteTime.toProtocolTimestamp(
-              AbsoluteTime.addDuration(
-                AbsoluteTime.now(),
-                value.payments.wire_transfer_deadline,
-              ),
-            )
-          : undefined,
-        refund_deadline: value.payments.refund_deadline
-          ? AbsoluteTime.toProtocolTimestamp(
-              AbsoluteTime.addDuration(
-                AbsoluteTime.now(),
-                value.payments.refund_deadline,
-              ),
-            )
-          : undefined,
+        pay_deadline: AbsoluteTime.toProtocolTimestamp(
+          AbsoluteTime.addDuration(
+            AbsoluteTime.now(),
+            value.payments.pay_deadline!,
+          ),
+        ),
+        wire_transfer_deadline: AbsoluteTime.toProtocolTimestamp(
+          AbsoluteTime.addDuration(
+            AbsoluteTime.now(),
+            value.payments.wire_transfer_deadline!,
+          ),
+        ),
+        refund_deadline: AbsoluteTime.toProtocolTimestamp(
+          AbsoluteTime.addDuration(
+            AbsoluteTime.now(),
+            value.payments.refund_deadline!,
+          ),
+        ),
         auto_refund: value.payments.auto_refund_deadline
           ? Duration.toTalerProtocolDuration(
               value.payments.auto_refund_deadline,
             )
           : undefined,
-        max_fee: value.payments.max_fee as string,
-
+        max_fee: value.payments.max_fee as AmountString,
         delivery_date: value.shipping.delivery_date
           ? { t_s: value.shipping.delivery_date.getTime() / 1000 }
           : undefined,
@@ -269,7 +263,7 @@ export function CreatePage({
   };
 
   const addProductToTheInventoryList = (
-    product: MerchantBackend.Products.ProductDetail & WithId,
+    product: TalerMerchantApi.ProductDetail & WithId,
     quantity: number,
   ) => {
     valueHandler((v) => {
@@ -287,7 +281,7 @@ export function CreatePage({
     });
   };
 
-  const addNewProduct = async (product: MerchantBackend.Product) => {
+  const addNewProduct = async (product: TalerMerchantApi.Product) => {
     return valueHandler((v) => {
       const products = v.products ? [...v.products, product] : [];
       return { ...v, products };
@@ -303,7 +297,7 @@ export function CreatePage({
   };
 
   const [editingProduct, setEditingProduct] = useState<
-    MerchantBackend.Product | undefined
+    TalerMerchantApi.Product | undefined
   >(undefined);
 
   const totalPriceInventory = inventoryList.reduce((prev, cur) => {
@@ -314,7 +308,7 @@ export function CreatePage({
   const totalPriceProducts = productList.reduce((prev, cur) => {
     if (!cur.price) return zero;
     const p = Amounts.parseOrThrow(cur.price);
-    return Amounts.add(prev, Amounts.mult(p, cur.quantity).amount).amount;
+    return Amounts.add(prev, Amounts.mult(p, cur.quantity ?? 0).amount).amount;
   }, zero);
 
   const hasProducts = inventoryList.length > 0 || productList.length > 0;
@@ -343,9 +337,9 @@ export function CreatePage({
     totalPrice.amount,
   );
 
-  const minAgeByProducts = allProducts.reduce(
+  const minAgeByProducts = inventoryList.reduce(
     (cur, prev) =>
-      !prev.minimum_age || cur > prev.minimum_age ? cur : prev.minimum_age,
+      !prev.product.minimum_age || cur > prev.product.minimum_age ? cur : 
prev.product.minimum_age,
     0,
   );
 
@@ -766,7 +760,7 @@ export function CreatePage({
   );
 }
 
-function asProduct(p: ProductAndQuantity): MerchantBackend.Product {
+function asProduct(p: ProductAndQuantity): TalerMerchantApi.Product {
   return {
     product_id: p.product.id,
     image: p.product.image,
@@ -775,7 +769,6 @@ function asProduct(p: ProductAndQuantity): 
MerchantBackend.Product {
     quantity: p.quantity,
     description: p.product.description,
     taxes: p.product.taxes,
-    minimum_age: p.product.minimum_age,
   };
 }
 
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/orders/create/index.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/orders/create/index.tsx
index d2a8619ce..0f8618435 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/orders/create/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/orders/create/index.tsx
@@ -19,29 +19,28 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
+import { HttpStatusCode, TalerErrorDetail, TalerMerchantApi } from 
"@gnu-taler/taler-util";
 import { ErrorType, HttpError } from "@gnu-taler/web-util/browser";
-import { Fragment, h, VNode } from "preact";
+import { Fragment, VNode, h } from "preact";
 import { useState } from "preact/hooks";
 import { Loading } from "../../../../components/exception/loading.js";
 import { NotificationCard } from "../../../../components/menu/index.js";
-import { MerchantBackend } from "../../../../declaration.js";
 import { useInstanceDetails } from "../../../../hooks/instance.js";
 import { useOrderAPI } from "../../../../hooks/order.js";
 import { useInstanceProducts } from "../../../../hooks/product.js";
 import { Notification } from "../../../../utils/types.js";
 import { CreatePage } from "./CreatePage.js";
-import { HttpStatusCode } from "@gnu-taler/taler-util";
 
 export type Entity = {
-  request: MerchantBackend.Orders.PostOrderRequest;
-  response: MerchantBackend.Orders.PostOrderResponse;
+  request: TalerMerchantApi.PostOrderRequest;
+  response: TalerMerchantApi.PostOrderResponse;
 };
 interface Props {
   onBack?: () => void;
   onConfirm: (id: string) => void;
   onUnauthorized: () => VNode;
   onNotFound: () => VNode;
-  onLoadError: (error: HttpError<MerchantBackend.ErrorDetail>) => VNode;
+  onLoadError: (error: HttpError<TalerErrorDetail>) => VNode;
 }
 export default function OrderCreate({
   onConfirm,
@@ -93,7 +92,7 @@ export default function OrderCreate({
 
       <CreatePage
         onBack={onBack}
-        onCreate={(request: MerchantBackend.Orders.PostOrderRequest) => {
+        onCreate={(request: TalerMerchantApi.PostOrderRequest) => {
           createOrder(request)
             .then((r) => {
               return onConfirm(r.data.order_id)
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/orders/details/Detail.stories.tsx
 
b/packages/merchant-backoffice-ui/src/paths/instance/orders/details/Detail.stories.tsx
index 63f0d5dc4..7d4877db9 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/orders/details/Detail.stories.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/orders/details/Detail.stories.tsx
@@ -19,9 +19,9 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
+import { AmountString, TalerMerchantApi } from "@gnu-taler/taler-util";
 import { addDays } from "date-fns";
-import { h, VNode, FunctionalComponent } from "preact";
-import { MerchantBackend } from "../../../../declaration.js";
+import { FunctionalComponent, h } from "preact";
 import { DetailPage as TestedComponent } from "./DetailPage.js";
 
 export default {
@@ -42,14 +42,13 @@ function createExample<Props>(
   return r;
 }
 
-const defaultContractTerm = {
-  amount: "TESTKUDOS:10",
+const defaultContractTerm: TalerMerchantApi.ContractTerms = {
+  amount: "TESTKUDOS:10" as AmountString,
   timestamp: {
     t_s: new Date().getTime() / 1000,
   },
-  auditors: [],
   exchanges: [],
-  max_fee: "TESTKUDOS:1",
+  max_fee: "TESTKUDOS:1" as AmountString,
   merchant: {} as any,
   merchant_base_url: "http://merchant.url/";,
   order_id: "2021.165-03GDFC26Y1NNG",
@@ -66,7 +65,7 @@ const defaultContractTerm = {
   },
   wire_method: "x-taler-bank",
   h_wire: "asd",
-} as MerchantBackend.ContractTerms;
+};
 
 // contract_terms: defaultContracTerm,
 export const Claimed = createExample(TestedComponent, {
@@ -83,15 +82,16 @@ export const PaidNotRefundable = 
createExample(TestedComponent, {
     order_status: "paid",
     contract_terms: defaultContractTerm,
     refunded: false,
-    deposit_total: "TESTKUDOS:10",
-    exchange_ec: 0,
+    deposit_total: "TESTKUDOS:10" as AmountString,
+    exchange_code: 0,
     order_status_url: "http://merchant.backend/status";,
-    exchange_hc: 0,
-    refund_amount: "TESTKUDOS:0",
+    exchange_http_status: 0,
+    refund_amount: "TESTKUDOS:0" as AmountString,
     refund_details: [],
     refund_pending: false,
     wire_details: [],
     wired: false,
+    wire_reports: [],
   },
 });
 
@@ -106,12 +106,13 @@ export const PaidRefundable = 
createExample(TestedComponent, {
       },
     },
     refunded: false,
-    deposit_total: "TESTKUDOS:10",
-    exchange_ec: 0,
+    deposit_total: "TESTKUDOS:10" as AmountString,
+    exchange_code: 0,
     order_status_url: "http://merchant.backend/status";,
-    exchange_hc: 0,
-    refund_amount: "TESTKUDOS:0",
+    exchange_http_status: 0,
+    refund_amount: "TESTKUDOS:0" as AmountString,
     refund_details: [],
+    wire_reports: [],
     refund_pending: false,
     wire_details: [],
     wired: false,
@@ -128,6 +129,6 @@ export const Unpaid = createExample(TestedComponent, {
     },
     summary: "text summary",
     taler_pay_uri: "pay uri",
-    total_amount: "TESTKUDOS:10",
+    total_amount: "TESTKUDOS:10" as AmountString,
   },
 });
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/orders/details/DetailPage.tsx
 
b/packages/merchant-backoffice-ui/src/paths/instance/orders/details/DetailPage.tsx
index 69e9df52e..4ed78b002 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/orders/details/DetailPage.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/orders/details/DetailPage.tsx
@@ -19,7 +19,12 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
-import { AmountJson, Amounts, stringifyRefundUri } from 
"@gnu-taler/taler-util";
+import {
+  AmountJson,
+  Amounts,
+  TalerMerchantApi,
+  stringifyRefundUri,
+} from "@gnu-taler/taler-util";
 import { useTranslationContext } from "@gnu-taler/web-util/browser";
 import { format, formatDistance } from "date-fns";
 import { Fragment, VNode, h } from "preact";
@@ -34,27 +39,29 @@ import { InputLocation } from 
"../../../../components/form/InputLocation.js";
 import { TextField } from "../../../../components/form/TextField.js";
 import { ProductList } from "../../../../components/product/ProductList.js";
 import { useSessionContext } from "../../../../context/session.js";
-import { MerchantBackend } from "../../../../declaration.js";
-import { datetimeFormatForSettings, usePreference } from 
"../../../../hooks/preference.js";
+import {
+  datetimeFormatForSettings,
+  usePreference,
+} from "../../../../hooks/preference.js";
 import { mergeRefunds } from "../../../../utils/amount.js";
 import { RefundModal } from "../list/Table.js";
 import { Event, Timeline } from "./Timeline.js";
 
-type Entity = MerchantBackend.Orders.MerchantOrderStatusResponse;
-type CT = MerchantBackend.ContractTerms;
+type Entity = TalerMerchantApi.MerchantOrderStatusResponse;
+type CT = TalerMerchantApi.ContractTerms;
 
 interface Props {
   onBack: () => void;
   selected: Entity;
   id: string;
-  onRefund: (id: string, value: MerchantBackend.Orders.RefundRequest) => void;
+  onRefund: (id: string, value: TalerMerchantApi.RefundRequest) => void;
 }
 
-type Paid = MerchantBackend.Orders.CheckPaymentPaidResponse & {
+type Paid = TalerMerchantApi.CheckPaymentPaidResponse & {
   refund_taken: string;
 };
-type Unpaid = MerchantBackend.Orders.CheckPaymentUnpaidResponse;
-type Claimed = MerchantBackend.Orders.CheckPaymentClaimedResponse;
+type Unpaid = TalerMerchantApi.CheckPaymentUnpaidResponse;
+type Claimed = TalerMerchantApi.CheckPaymentClaimedResponse;
 
 function ContractTerms({ value }: { value: CT }) {
   const { i18n } = useTranslationContext();
@@ -149,7 +156,7 @@ function ClaimedPage({
   order,
 }: {
   id: string;
-  order: MerchantBackend.Orders.CheckPaymentClaimedResponse;
+  order: TalerMerchantApi.CheckPaymentClaimedResponse;
 }) {
   const events: Event[] = [];
   if (order.contract_terms.timestamp.t_s !== "never") {
@@ -193,7 +200,7 @@ function ClaimedPage({
 
   const [value, valueHandler] = useState<Partial<Claimed>>(order);
   const { i18n } = useTranslationContext();
-  const [settings] = usePreference()
+  const [settings] = usePreference();
 
   return (
     <div>
@@ -237,10 +244,14 @@ function ClaimedPage({
                           <b>
                             <i18n.Translate>claimed at</i18n.Translate>:
                           </b>{" "}
-                          {format(
-                            new Date(order.contract_terms.timestamp.t_s * 
1000),
-                            datetimeFormatForSettings(settings)
-                          )}
+                          {order.contract_terms.timestamp.t_s === "never"
+                            ? "never"
+                            : format(
+                                new Date(
+                                  order.contract_terms.timestamp.t_s * 1000,
+                                ),
+                                datetimeFormatForSettings(settings),
+                              )}
                         </p>
                       </div>
                     </div>
@@ -311,7 +322,7 @@ function PaidPage({
   onRefund,
 }: {
   id: string;
-  order: MerchantBackend.Orders.CheckPaymentPaidResponse;
+  order: TalerMerchantApi.CheckPaymentPaidResponse;
   onRefund: (id: string) => void;
 }) {
   const events: Event[] = [];
@@ -365,8 +376,8 @@ function PaidPage({
   });
   if (order.wire_details && order.wire_details.length) {
     if (order.wire_details.length > 1) {
-      let last: MerchantBackend.Orders.TransactionWireTransfer | null = null;
-      let first: MerchantBackend.Orders.TransactionWireTransfer | null = null;
+      let last: TalerMerchantApi.TransactionWireTransfer | null = null;
+      let first: TalerMerchantApi.TransactionWireTransfer | null = null;
       let total: AmountJson | null = null;
 
       order.wire_details.forEach((w) => {
@@ -410,10 +421,10 @@ function PaidPage({
     }
   }
 
-  const now = new Date()
+  const now = new Date();
   const nextEvent = events.find((e) => {
-    return e.when.getTime() > now.getTime()
-  })
+    return e.when.getTime() > now.getTime();
+  });
 
   const [value, valueHandler] = useState<Partial<Paid>>(order);
   const {
@@ -422,9 +433,10 @@ function PaidPage({
 
   const refundurl = stringifyRefundUri({
     merchantBaseUrl: backendUrl,
-    orderId: order.contract_terms.order_id
-  })
+    orderId: order.contract_terms.order_id,
+  });
   const refundable =
+    order.contract_terms.refund_deadline.t_s !== "never" &&
     new Date().getTime() < order.contract_terms.refund_deadline.t_s * 1000;
   const { i18n } = useTranslationContext();
 
@@ -506,15 +518,16 @@ function PaidPage({
                           textOverflow: "ellipsis",
                         }}
                       >
-                        {nextEvent &&
+                        {nextEvent && (
                           <p>
-                            <i18n.Translate>Next event in </i18n.Translate> 
{formatDistance(
+                            <i18n.Translate>Next event in </i18n.Translate>{" 
"}
+                            {formatDistance(
                               nextEvent.when,
                               new Date(),
                               // "yyyy/MM/dd HH:mm:ss",
                             )}
                           </p>
-                        }
+                        )}
                       </div>
                     </div>
                   </div>
@@ -610,11 +623,11 @@ function UnpaidPage({
   order,
 }: {
   id: string;
-  order: MerchantBackend.Orders.CheckPaymentUnpaidResponse;
+  order: TalerMerchantApi.CheckPaymentUnpaidResponse;
 }) {
   const [value, valueHandler] = useState<Partial<Unpaid>>(order);
   const { i18n } = useTranslationContext();
-  const [settings] = usePreference()
+  const [settings] = usePreference();
   return (
     <div>
       <section class="hero is-hero-bar">
@@ -662,9 +675,9 @@ function UnpaidPage({
                     {order.creation_time.t_s === "never"
                       ? "never"
                       : format(
-                        new Date(order.creation_time.t_s * 1000),
-                        datetimeFormatForSettings(settings)
-                      )}
+                          new Date(order.creation_time.t_s * 1000),
+                          datetimeFormatForSettings(settings),
+                        )}
                   </p>
                 </div>
               </div>
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/orders/details/index.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/orders/details/index.tsx
index dfeaa4447..a7fe1801b 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/orders/details/index.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/orders/details/index.tsx
@@ -13,20 +13,19 @@
  You should have received a copy of the GNU General Public License along with
  GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
+import { HttpStatusCode, TalerErrorDetail } from "@gnu-taler/taler-util";
 import {
-  useTranslationContext,
-  HttpError,
   ErrorType,
+  HttpError,
+  useTranslationContext,
 } from "@gnu-taler/web-util/browser";
-import { Fragment, h, VNode } from "preact";
+import { Fragment, VNode, h } from "preact";
 import { useState } from "preact/hooks";
 import { Loading } from "../../../../components/exception/loading.js";
 import { NotificationCard } from "../../../../components/menu/index.js";
-import { MerchantBackend } from "../../../../declaration.js";
 import { useOrderAPI, useOrderDetails } from "../../../../hooks/order.js";
 import { Notification } from "../../../../utils/types.js";
 import { DetailPage } from "./DetailPage.js";
-import { HttpStatusCode } from "@gnu-taler/taler-util";
 
 export interface Props {
   oid: string;
@@ -34,7 +33,7 @@ export interface Props {
   onBack: () => void;
   onUnauthorized: () => VNode;
   onNotFound: () => VNode;
-  onLoadError: (error: HttpError<MerchantBackend.ErrorDetail>) => VNode;
+  onLoadError: (error: HttpError<TalerErrorDetail>) => VNode;
 }
 
 export default function Update({
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/orders/list/List.stories.tsx
 
b/packages/merchant-backoffice-ui/src/paths/instance/orders/list/List.stories.tsx
index 9df006083..5c9969689 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/orders/list/List.stories.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/orders/list/List.stories.tsx
@@ -19,8 +19,9 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
-import { h, VNode, FunctionalComponent } from "preact";
+import { FunctionalComponent, h } from "preact";
 import { ListPage as TestedComponent } from "./ListPage.js";
+import { AmountString } from "@gnu-taler/taler-util";
 
 export default {
   title: "Pages/Order/List",
@@ -54,7 +55,7 @@ export const Example = createExample(TestedComponent, {
   orders: [
     {
       id: "123",
-      amount: "TESTKUDOS:10",
+      amount: "TESTKUDOS:10" as AmountString,
       paid: false,
       refundable: true,
       row_id: 1,
@@ -66,7 +67,7 @@ export const Example = createExample(TestedComponent, {
     },
     {
       id: "234",
-      amount: "TESTKUDOS:12",
+      amount: "TESTKUDOS:12" as AmountString,
       paid: true,
       refundable: true,
       row_id: 2,
@@ -79,7 +80,7 @@ export const Example = createExample(TestedComponent, {
     },
     {
       id: "456",
-      amount: "TESTKUDOS:1",
+      amount: "TESTKUDOS:1" as AmountString,
       paid: false,
       refundable: false,
       row_id: 3,
@@ -92,7 +93,7 @@ export const Example = createExample(TestedComponent, {
     },
     {
       id: "234",
-      amount: "TESTKUDOS:12",
+      amount: "TESTKUDOS:12" as AmountString,
       paid: false,
       refundable: false,
       row_id: 4,
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/orders/list/ListPage.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/orders/list/ListPage.tsx
index b45d468cb..7b88985dc 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/orders/list/ListPage.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/orders/list/ListPage.tsx
@@ -19,14 +19,14 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
+import { TalerMerchantApi } from "@gnu-taler/taler-util";
 import { useTranslationContext } from "@gnu-taler/web-util/browser";
 import { format } from "date-fns";
-import { h, VNode, Fragment } from "preact";
+import { Fragment, VNode, h } from "preact";
 import { useState } from "preact/hooks";
 import { DatePicker } from "../../../../components/picker/DatePicker.js";
-import { MerchantBackend, WithId } from "../../../../declaration.js";
-import { CardTable } from "./Table.js";
 import { dateFormatForSettings, usePreference } from 
"../../../../hooks/preference.js";
+import { CardTable } from "./Table.js";
 
 export interface ListPageProps {
   onShowAll: () => void;
@@ -46,14 +46,14 @@ export interface ListPageProps {
   jumpToDate?: Date;
   onSelectDate: (date?: Date) => void;
 
-  orders: (MerchantBackend.Orders.OrderHistoryEntry & WithId)[];
+  orders: (TalerMerchantApi.OrderHistoryEntry & WithId)[];
   onLoadMoreBefore?: () => void;
   hasMoreBefore?: boolean;
   hasMoreAfter?: boolean;
   onLoadMoreAfter?: () => void;
 
-  onSelectOrder: (o: MerchantBackend.Orders.OrderHistoryEntry & WithId) => 
void;
-  onRefundOrder: (o: MerchantBackend.Orders.OrderHistoryEntry & WithId) => 
void;
+  onSelectOrder: (o: TalerMerchantApi.OrderHistoryEntry & WithId) => void;
+  onRefundOrder: (o: TalerMerchantApi.OrderHistoryEntry & WithId) => void;
   onCreate: () => void;
 }
 
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/orders/list/Table.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/orders/list/Table.tsx
index cebc4afe6..c3df81b87 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/orders/list/Table.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/orders/list/Table.tsx
@@ -19,13 +19,13 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
-import { Amounts } from "@gnu-taler/taler-util";
+import { Amounts, TalerMerchantApi } from "@gnu-taler/taler-util";
 import {
   useMerchantApiContext,
   useTranslationContext,
 } from "@gnu-taler/web-util/browser";
 import { format } from "date-fns";
-import { h, VNode } from "preact";
+import { VNode, h } from "preact";
 import { StateUpdater, useState } from "preact/hooks";
 import {
   FormErrors,
@@ -36,14 +36,13 @@ import { InputCurrency } from 
"../../../../components/form/InputCurrency.js";
 import { InputGroup } from "../../../../components/form/InputGroup.js";
 import { InputSelector } from "../../../../components/form/InputSelector.js";
 import { ConfirmModal } from "../../../../components/modal/index.js";
-import { MerchantBackend, WithId } from "../../../../declaration.js";
-import { mergeRefunds } from "../../../../utils/amount.js";
 import {
   datetimeFormatForSettings,
   usePreference,
 } from "../../../../hooks/preference.js";
+import { mergeRefunds } from "../../../../utils/amount.js";
 
-type Entity = MerchantBackend.Orders.OrderHistoryEntry & WithId;
+type Entity = TalerMerchantApi.OrderHistoryEntry & WithId;
 interface Props {
   orders: Entity[];
   onRefund: (value: Entity) => void;
@@ -248,8 +247,8 @@ function EmptyTable(): VNode {
 
 interface RefundModalProps {
   onCancel: () => void;
-  onConfirm: (value: MerchantBackend.Orders.RefundRequest) => void;
-  order: MerchantBackend.Orders.MerchantOrderStatusResponse;
+  onConfirm: (value: TalerMerchantApi.RefundRequest) => void;
+  order: TalerMerchantApi.MerchantOrderStatusResponse;
 }
 
 export function RefundModal({
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/orders/list/index.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/orders/list/index.tsx
index 369ef8c8b..cd62685ca 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/orders/list/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/orders/list/index.tsx
@@ -19,16 +19,17 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
+import { HttpStatusCode, TalerErrorDetail, TalerMerchantApi } from 
"@gnu-taler/taler-util";
 import {
   ErrorType,
   HttpError,
   useTranslationContext,
 } from "@gnu-taler/web-util/browser";
-import { Fragment, h, VNode } from "preact";
+import { Fragment, VNode, h } from "preact";
 import { useState } from "preact/hooks";
 import { Loading } from "../../../../components/exception/loading.js";
+import { JumpToElementById } from 
"../../../../components/form/JumpToElementById.js";
 import { NotificationCard } from "../../../../components/menu/index.js";
-import { MerchantBackend } from "../../../../declaration.js";
 import {
   InstanceOrderFilter,
   useInstanceOrders,
@@ -38,12 +39,10 @@ import {
 import { Notification } from "../../../../utils/types.js";
 import { ListPage } from "./ListPage.js";
 import { RefundModal } from "./Table.js";
-import { HttpStatusCode } from "@gnu-taler/taler-util";
-import { JumpToElementById } from 
"../../../../components/form/JumpToElementById.js";
 
 interface Props {
   onUnauthorized: () => VNode;
-  onLoadError: (error: HttpError<MerchantBackend.ErrorDetail>) => VNode;
+  onLoadError: (error: HttpError<TalerErrorDetail>) => VNode;
   onNotFound: () => VNode;
   onSelect: (id: string) => void;
   onCreate: () => void;
@@ -58,7 +57,7 @@ export default function OrderList({
 }: Props): VNode {
   const [filter, setFilter] = useState<InstanceOrderFilter>({ paid: "no" });
   const [orderToBeRefunded, setOrderToBeRefunded] = useState<
-    MerchantBackend.Orders.OrderHistoryEntry | undefined
+    TalerMerchantApi.OrderHistoryEntry | undefined
   >(undefined);
 
   const setNewDate = (date?: Date): void =>
@@ -186,10 +185,10 @@ export default function OrderList({
 interface RefundProps {
   id: string;
   onUnauthorized: () => VNode;
-  onLoadError: (error: HttpError<MerchantBackend.ErrorDetail>) => VNode;
+  onLoadError: (error: HttpError<TalerErrorDetail>) => VNode;
   onNotFound: () => VNode;
   onCancel: () => void;
-  onConfirm: (m: MerchantBackend.Orders.RefundRequest) => void;
+  onConfirm: (m: TalerMerchantApi.RefundRequest) => void;
 }
 
 function RefundModalForTable({
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/create/CreatePage.tsx
 
b/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/create/CreatePage.tsx
index 930a0d82c..d5522c2d4 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/create/CreatePage.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/create/CreatePage.tsx
@@ -20,6 +20,7 @@
  */
 
 import {
+  TalerMerchantApi,
   isRfc3548Base32Charset,
   randomRfc3548Base32Key,
 } from "@gnu-taler/taler-util";
@@ -34,9 +35,8 @@ import {
 import { Input } from "../../../../components/form/Input.js";
 import { InputSelector } from "../../../../components/form/InputSelector.js";
 import { InputWithAddon } from "../../../../components/form/InputWithAddon.js";
-import { MerchantBackend } from "../../../../declaration.js";
 
-type Entity = MerchantBackend.OTP.OtpDeviceAddDetails;
+type Entity = TalerMerchantApi.OtpDeviceAddDetails;
 
 interface Props {
   onCreate: (d: Entity) => Promise<void>;
@@ -112,7 +112,7 @@ export function CreatePage({ onCreate, onBack }: Props): 
VNode {
                 toStr={(v) => algorithmsNames[v]}
                 fromStr={(v) => Number(v)}
               />
-              {state.otp_algorithm && state.otp_algorithm > 0 ? (
+              {state.otp_algorithm  ? (
                 <Fragment>
                   <InputWithAddon<Entity>
                     expand
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/create/CreatedSuccessfully.tsx
 
b/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/create/CreatedSuccessfully.tsx
index 60abc3ca6..b1b4a0cf7 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/create/CreatedSuccessfully.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/create/CreatedSuccessfully.tsx
@@ -14,14 +14,14 @@
  GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 
+import { TalerMerchantApi } from "@gnu-taler/taler-util";
 import { useTranslationContext } from "@gnu-taler/web-util/browser";
 import { VNode, h } from "preact";
 import { QR } from "../../../../components/exception/QR.js";
 import { CreatedSuccessfully as Template } from 
"../../../../components/notifications/CreatedSuccessfully.js";
 import { useSessionContext } from "../../../../context/session.js";
-import { MerchantBackend } from "../../../../declaration.js";
 
-type Entity = MerchantBackend.OTP.OtpDeviceAddDetails;
+type Entity = TalerMerchantApi.OtpDeviceAddDetails;
 
 interface Props {
   entity: Entity;
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/create/index.tsx
 
b/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/create/index.tsx
index f0b419f68..e4501a053 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/create/index.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/create/index.tsx
@@ -19,18 +19,17 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
+import { TalerMerchantApi } from "@gnu-taler/taler-util";
 import { useTranslationContext } from "@gnu-taler/web-util/browser";
 import { Fragment, h, VNode } from "preact";
 import { useState } from "preact/hooks";
 import { NotificationCard } from "../../../../components/menu/index.js";
-import { MerchantBackend } from "../../../../declaration.js";
-import { useWebhookAPI } from "../../../../hooks/webhooks.js";
-import { Notification } from "../../../../utils/types.js";
-import { CreatePage } from "./CreatePage.js";
 import { useOtpDeviceAPI } from "../../../../hooks/otp.js";
+import { Notification } from "../../../../utils/types.js";
 import { CreatedSuccessfully } from "./CreatedSuccessfully.js";
+import { CreatePage } from "./CreatePage.js";
 
-export type Entity = MerchantBackend.OTP.OtpDeviceAddDetails;
+export type Entity = TalerMerchantApi.OtpDeviceAddDetails;
 interface Props {
   onBack?: () => void;
   onConfirm: () => void;
@@ -40,7 +39,7 @@ export default function CreateValidator({ onConfirm, onBack 
}: Props): VNode {
   const { createOtpDevice } = useOtpDeviceAPI();
   const [notif, setNotif] = useState<Notification | undefined>(undefined);
   const { i18n } = useTranslationContext();
-  const [created, setCreated] = 
useState<MerchantBackend.OTP.OtpDeviceAddDetails | null>(null)
+  const [created, setCreated] = useState<TalerMerchantApi.OtpDeviceAddDetails 
| null>(null)
 
   if (created) {
     return <CreatedSuccessfully entity={created} onConfirm={onConfirm} />
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/list/ListPage.tsx
 
b/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/list/ListPage.tsx
index f3b5a2088..9022cc35b 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/list/ListPage.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/list/ListPage.tsx
@@ -19,18 +19,17 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
+import { TalerMerchantApi } from "@gnu-taler/taler-util";
 import { h, VNode } from "preact";
-import { MerchantBackend } from "../../../../declaration.js";
-import { useTranslationContext } from "@gnu-taler/web-util/browser";
 import { CardTable } from "./Table.js";
 
 export interface Props {
-  devices: MerchantBackend.OTP.OtpDeviceEntry[];
+  devices: TalerMerchantApi.OtpDeviceEntry[];
   onLoadMoreBefore?: () => void;
   onLoadMoreAfter?: () => void;
   onCreate: () => void;
-  onDelete: (e: MerchantBackend.OTP.OtpDeviceEntry) => void;
-  onSelect: (e: MerchantBackend.OTP.OtpDeviceEntry) => void;
+  onDelete: (e: TalerMerchantApi.OtpDeviceEntry) => void;
+  onSelect: (e: TalerMerchantApi.OtpDeviceEntry) => void;
 }
 
 export function ListPage({
@@ -41,9 +40,7 @@ export function ListPage({
   onLoadMoreBefore,
   onLoadMoreAfter,
 }: Props): VNode {
-  const form = { payto_uri: "" };
 
-  const { i18n } = useTranslationContext();
   return (
     <section class="section is-main-section">
       <CardTable
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/list/Table.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/list/Table.tsx
index 94091e1a7..7b1ccd4fc 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/list/Table.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/list/Table.tsx
@@ -19,12 +19,12 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
+import { TalerMerchantApi } from "@gnu-taler/taler-util";
 import { useTranslationContext } from "@gnu-taler/web-util/browser";
 import { h, VNode } from "preact";
 import { StateUpdater, useState } from "preact/hooks";
-import { MerchantBackend } from "../../../../declaration.js";
 
-type Entity = MerchantBackend.OTP.OtpDeviceEntry;
+type Entity = TalerMerchantApi.OtpDeviceEntry;
 
 interface Props {
   devices: Entity[];
@@ -109,11 +109,6 @@ interface TableProps {
   onLoadMoreAfter?: () => void;
 }
 
-function toggleSelected<T>(id: T): (prev: T[]) => T[] {
-  return (prev: T[]): T[] =>
-    prev.indexOf(id) == -1 ? [...prev, id] : prev.filter((e) => e != id);
-}
-
 function Table({
   instances,
   onLoadMoreAfter,
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/list/index.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/list/index.tsx
index a3299326c..7fd827956 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/list/index.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/list/index.tsx
@@ -19,7 +19,7 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
-import { HttpStatusCode } from "@gnu-taler/taler-util";
+import { HttpStatusCode, TalerErrorDetail, TalerMerchantApi } from 
"@gnu-taler/taler-util";
 import {
   ErrorType,
   HttpError,
@@ -29,14 +29,13 @@ import { Fragment, VNode, h } from "preact";
 import { useState } from "preact/hooks";
 import { Loading } from "../../../../components/exception/loading.js";
 import { NotificationCard } from "../../../../components/menu/index.js";
-import { MerchantBackend } from "../../../../declaration.js";
 import { useInstanceOtpDevices, useOtpDeviceAPI } from 
"../../../../hooks/otp.js";
 import { Notification } from "../../../../utils/types.js";
 import { ListPage } from "./ListPage.js";
 
 interface Props {
   onUnauthorized: () => VNode;
-  onLoadError: (error: HttpError<MerchantBackend.ErrorDetail>) => VNode;
+  onLoadError: (error: HttpError<TalerErrorDetail>) => VNode;
   onNotFound: () => VNode;
   onCreate: () => void;
   onSelect: (id: string) => void;
@@ -84,7 +83,7 @@ export default function ListOtpDevices({
         onSelect={(e) => {
           onSelect(e.otp_device_id);
         }}
-        onDelete={(e: MerchantBackend.OTP.OtpDeviceEntry) =>
+        onDelete={(e: TalerMerchantApi.OtpDeviceEntry) =>
           deleteOtpDevice(e.otp_device_id)
             .then(() =>
               setNotif({
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/update/UpdatePage.tsx
 
b/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/update/UpdatePage.tsx
index 310810576..35d67cbc6 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/update/UpdatePage.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/update/UpdatePage.tsx
@@ -19,7 +19,7 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
-import { randomRfc3548Base32Key } from "@gnu-taler/taler-util";
+import { randomRfc3548Base32Key, TalerMerchantApi } from 
"@gnu-taler/taler-util";
 import { useTranslationContext } from "@gnu-taler/web-util/browser";
 import { Fragment, h, VNode } from "preact";
 import { useState } from "preact/hooks";
@@ -31,9 +31,8 @@ import {
 import { Input } from "../../../../components/form/Input.js";
 import { InputSelector } from "../../../../components/form/InputSelector.js";
 import { InputWithAddon } from "../../../../components/form/InputWithAddon.js";
-import { MerchantBackend, WithId } from "../../../../declaration.js";
 
-type Entity = MerchantBackend.OTP.OtpDevicePatchDetails & WithId;
+type Entity = TalerMerchantApi.OtpDevicePatchDetails & WithId;
 
 interface Props {
   onUpdate: (d: Entity) => Promise<void>;
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/update/index.tsx
 
b/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/update/index.tsx
index 922a94364..a824c6936 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/update/index.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/update/index.tsx
@@ -19,30 +19,29 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
+import { HttpStatusCode, TalerErrorDetail, TalerMerchantApi } from 
"@gnu-taler/taler-util";
 import {
   ErrorType,
   HttpError,
   useTranslationContext,
 } from "@gnu-taler/web-util/browser";
-import { Fragment, h, VNode } from "preact";
+import { Fragment, VNode, h } from "preact";
 import { useState } from "preact/hooks";
 import { Loading } from "../../../../components/exception/loading.js";
 import { NotificationCard } from "../../../../components/menu/index.js";
-import { MerchantBackend, WithId } from "../../../../declaration.js";
-import { Notification } from "../../../../utils/types.js";
-import { UpdatePage } from "./UpdatePage.js";
-import { HttpStatusCode } from "@gnu-taler/taler-util";
 import { useOtpDeviceAPI, useOtpDeviceDetails } from 
"../../../../hooks/otp.js";
+import { Notification } from "../../../../utils/types.js";
 import { CreatedSuccessfully } from "../create/CreatedSuccessfully.js";
+import { UpdatePage } from "./UpdatePage.js";
 
-export type Entity = MerchantBackend.OTP.OtpDevicePatchDetails & WithId;
+export type Entity = TalerMerchantApi.OtpDevicePatchDetails & WithId;
 
 interface Props {
   onBack?: () => void;
   onConfirm: () => void;
   onUnauthorized: () => VNode;
   onNotFound: () => VNode;
-  onLoadError: (e: HttpError<MerchantBackend.ErrorDetail>) => VNode;
+  onLoadError: (e: HttpError<TalerErrorDetail>) => VNode;
   vid: string;
 }
 export default function UpdateValidator({
@@ -56,7 +55,7 @@ export default function UpdateValidator({
   const { updateOtpDevice } = useOtpDeviceAPI();
   const result = useOtpDeviceDetails(vid);
   const [notif, setNotif] = useState<Notification | undefined>(undefined);
-  const [keyUpdated, setKeyUpdated] = 
useState<MerchantBackend.OTP.OtpDeviceAddDetails | null>(null)
+  const [keyUpdated, setKeyUpdated] = 
useState<TalerMerchantApi.OtpDeviceAddDetails | null>(null)
 
   const { i18n } = useTranslationContext();
 
@@ -87,7 +86,7 @@ export default function UpdateValidator({
           id: vid,
           otp_algorithm: result.data.otp_algorithm,
           otp_device_description: result.data.device_description,
-          otp_key: undefined,
+          otp_key: "",
           otp_ctr: result.data.otp_ctr
         }}
         onBack={onBack}
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/products/create/CreatePage.tsx
 
b/packages/merchant-backoffice-ui/src/paths/instance/products/create/CreatePage.tsx
index 6cbc26d8d..64b174f64 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/products/create/CreatePage.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/products/create/CreatePage.tsx
@@ -19,14 +19,14 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
+import { TalerMerchantApi } from "@gnu-taler/taler-util";
 import { useTranslationContext } from "@gnu-taler/web-util/browser";
 import { h, VNode } from "preact";
 import { AsyncButton } from "../../../../components/exception/AsyncButton.js";
 import { ProductForm } from "../../../../components/product/ProductForm.js";
-import { MerchantBackend } from "../../../../declaration.js";
 import { useListener } from "../../../../hooks/listener.js";
 
-type Entity = MerchantBackend.Products.ProductAddDetail & {
+type Entity = TalerMerchantApi.ProductAddDetail & {
   product_id: string;
 };
 
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/products/create/index.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/products/create/index.tsx
index 5b1b5ecfe..9935a9625 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/products/create/index.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/products/create/index.tsx
@@ -19,16 +19,16 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
+import { TalerMerchantApi } from "@gnu-taler/taler-util";
 import { useTranslationContext } from "@gnu-taler/web-util/browser";
 import { Fragment, h, VNode } from "preact";
 import { useState } from "preact/hooks";
 import { NotificationCard } from "../../../../components/menu/index.js";
-import { MerchantBackend } from "../../../../declaration.js";
 import { useProductAPI } from "../../../../hooks/product.js";
 import { Notification } from "../../../../utils/types.js";
 import { CreatePage } from "./CreatePage.js";
 
-export type Entity = MerchantBackend.Products.ProductAddDetail;
+export type Entity = TalerMerchantApi.ProductAddDetail;
 interface Props {
   onBack?: () => void;
   onConfirm: () => void;
@@ -43,7 +43,7 @@ export default function CreateProduct({ onConfirm, onBack }: 
Props): VNode {
       <NotificationCard notification={notif} />
       <CreatePage
         onBack={onBack}
-        onCreate={(request: MerchantBackend.Products.ProductAddDetail) => {
+        onCreate={(request: TalerMerchantApi.ProductAddDetail) => {
           return createProduct(request)
             .then(() => onConfirm())
             .catch((error) => {
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/products/list/List.stories.tsx
 
b/packages/merchant-backoffice-ui/src/paths/instance/products/list/List.stories.tsx
index a2f996221..580a92cdc 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/products/list/List.stories.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/products/list/List.stories.tsx
@@ -19,7 +19,8 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
-import { h, VNode, FunctionalComponent } from "preact";
+import { AmountString } from "@gnu-taler/taler-util";
+import { FunctionalComponent, h } from "preact";
 import { CardTable as TestedComponent } from "./Table.js";
 
 export default {
@@ -49,7 +50,7 @@ export const Example = createExample(TestedComponent, {
       description: "description1",
       description_i18n: {} as any,
       image: "",
-      price: "TESTKUDOS:10",
+      price: "TESTKUDOS:10" as AmountString,
       taxes: [],
       total_lost: 10,
       total_sold: 5,
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/products/list/Table.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/products/list/Table.tsx
index 2526e4d33..265146c01 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/products/list/Table.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/products/list/Table.tsx
@@ -19,10 +19,10 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
-import { Amounts } from "@gnu-taler/taler-util";
+import { AmountString, Amounts, TalerMerchantApi } from 
"@gnu-taler/taler-util";
 import { useTranslationContext } from "@gnu-taler/web-util/browser";
 import { format } from "date-fns";
-import { ComponentChildren, Fragment, h, VNode } from "preact";
+import { ComponentChildren, Fragment, VNode, h } from "preact";
 import { StateUpdater, useState } from "preact/hooks";
 import emptyImage from "../../../../assets/empty.png";
 import {
@@ -31,10 +31,9 @@ import {
 } from "../../../../components/form/FormProvider.js";
 import { InputCurrency } from "../../../../components/form/InputCurrency.js";
 import { InputNumber } from "../../../../components/form/InputNumber.js";
-import { MerchantBackend, WithId } from "../../../../declaration.js";
 import { dateFormatForSettings, usePreference } from 
"../../../../hooks/preference.js";
 
-type Entity = MerchantBackend.Products.ProductDetail & WithId;
+type Entity = TalerMerchantApi.ProductDetail & WithId;
 
 interface Props {
   instances: Entity[];
@@ -42,7 +41,7 @@ interface Props {
   onSelect: (product: Entity) => void;
   onUpdate: (
     id: string,
-    data: MerchantBackend.Products.ProductPatchDetail,
+    data: TalerMerchantApi.ProductPatchDetail,
   ) => Promise<void>;
   onCreate: () => void;
   selected?: boolean;
@@ -108,7 +107,7 @@ interface TableProps {
   onSelect: (id: Entity) => void;
   onUpdate: (
     id: string,
-    data: MerchantBackend.Products.ProductPatchDetail,
+    data: TalerMerchantApi.ProductPatchDetail,
   ) => Promise<void>;
   onDelete: (id: Entity) => void;
   rowSelectionHandler: StateUpdater<string | undefined>;
@@ -305,7 +304,7 @@ function Table({
 interface FastProductUpdateFormProps {
   product: Entity;
   onUpdate: (
-    data: MerchantBackend.Products.ProductPatchDetail,
+    data: TalerMerchantApi.ProductPatchDetail,
   ) => Promise<void>;
   onCancel: () => void;
 }
@@ -361,7 +360,7 @@ function FastProductWithInfiniteStockUpdateForm({
               onClick={() =>
                 onUpdate({
                   ...product,
-                  price: value.price,
+                  price: value.price as AmountString,
                 })
               }
             >
@@ -446,7 +445,7 @@ function FastProductWithManagedStockUpdateForm({
                 ...product,
                 total_stock: product.total_stock + value.incoming,
                 total_lost: product.total_lost + value.lost,
-                price: value.price,
+                price: value.price as AmountString,
               })
             }
           >
@@ -491,6 +490,6 @@ function difference(price: string, tax: number) {
   ps[1] = `${p - tax}`;
   return ps.join(":");
 }
-function sum(taxes: MerchantBackend.Tax[]) {
+function sum(taxes: TalerMerchantApi.Tax[]) {
   return taxes.reduce((p, c) => p + parseInt(c.tax.split(":")[1], 10), 0);
 }
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/products/list/index.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/products/list/index.tsx
index 6adc221da..1017a9334 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/products/list/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/products/list/index.tsx
@@ -19,32 +19,31 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
+import { HttpStatusCode, TalerErrorDetail, TalerMerchantApi } from 
"@gnu-taler/taler-util";
 import {
   ErrorType,
   HttpError,
   useTranslationContext,
 } from "@gnu-taler/web-util/browser";
-import { h, VNode } from "preact";
+import { VNode, h } from "preact";
 import { useState } from "preact/hooks";
 import { Loading } from "../../../../components/exception/loading.js";
+import { JumpToElementById } from 
"../../../../components/form/JumpToElementById.js";
 import { NotificationCard } from "../../../../components/menu/index.js";
-import { MerchantBackend, WithId } from "../../../../declaration.js";
+import { ConfirmModal } from "../../../../components/modal/index.js";
 import {
   useInstanceProducts,
   useProductAPI,
 } from "../../../../hooks/product.js";
 import { Notification } from "../../../../utils/types.js";
 import { CardTable } from "./Table.js";
-import { HttpStatusCode } from "@gnu-taler/taler-util";
-import { ConfirmModal, DeleteModal } from 
"../../../../components/modal/index.js";
-import { JumpToElementById } from 
"../../../../components/form/JumpToElementById.js";
 
 interface Props {
   onUnauthorized: () => VNode;
   onNotFound: () => VNode;
   onCreate: () => void;
   onSelect: (id: string) => void;
-  onLoadError: (e: HttpError<MerchantBackend.ErrorDetail>) => VNode;
+  onLoadError: (e: HttpError<TalerErrorDetail>) => VNode;
 }
 export default function ProductList({
   onUnauthorized,
@@ -56,7 +55,7 @@ export default function ProductList({
   const result = useInstanceProducts();
   const { deleteProduct, updateProduct, getProduct } = useProductAPI();
   const [deleting, setDeleting] =
-    useState<MerchantBackend.Products.ProductDetail & WithId | null>(null);
+    useState<TalerMerchantApi.ProductDetail & WithId | null>(null);
   const [notif, setNotif] = useState<Notification | undefined>(undefined);
 
   const { i18n } = useTranslationContext();
@@ -107,7 +106,7 @@ export default function ProductList({
             )
         }
         onSelect={(product) => onSelect(product.id)}
-        onDelete={(prod: MerchantBackend.Products.ProductDetail & WithId) =>
+        onDelete={(prod: TalerMerchantApi.ProductDetail & WithId) =>
           setDeleting(prod)
         }
       />
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/products/update/Update.stories.tsx
 
b/packages/merchant-backoffice-ui/src/paths/instance/products/update/Update.stories.tsx
index d1dc9d540..7aa93b186 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/products/update/Update.stories.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/products/update/Update.stories.tsx
@@ -19,7 +19,8 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
-import { h, VNode, FunctionalComponent } from "preact";
+import { AmountString } from "@gnu-taler/taler-util";
+import { FunctionalComponent, h } from "preact";
 import { UpdatePage as TestedComponent } from "./UpdatePage.js";
 
 export default {
@@ -46,7 +47,7 @@ export const WithManagedStock = 
createExample(TestedComponent, {
     description: "description1",
     description_i18n: {} as any,
     image: "",
-    price: "TESTKUDOS:10",
+    price: "TESTKUDOS:10" as AmountString,
     taxes: [],
     total_lost: 10,
     total_sold: 5,
@@ -62,7 +63,7 @@ export const WithInfiniteStock = 
createExample(TestedComponent, {
     description: "description1",
     description_i18n: {} as any,
     image: "",
-    price: "TESTKUDOS:10",
+    price: "TESTKUDOS:10" as AmountString,
     taxes: [],
     total_lost: 10,
     total_sold: 5,
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/products/update/UpdatePage.tsx
 
b/packages/merchant-backoffice-ui/src/paths/instance/products/update/UpdatePage.tsx
index 53aa9d61f..5395ae40f 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/products/update/UpdatePage.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/products/update/UpdatePage.tsx
@@ -19,14 +19,14 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
+import { TalerMerchantApi } from "@gnu-taler/taler-util";
 import { useTranslationContext } from "@gnu-taler/web-util/browser";
 import { h, VNode } from "preact";
 import { AsyncButton } from "../../../../components/exception/AsyncButton.js";
 import { ProductForm } from "../../../../components/product/ProductForm.js";
-import { MerchantBackend } from "../../../../declaration.js";
 import { useListener } from "../../../../hooks/listener.js";
 
-type Entity = MerchantBackend.Products.ProductDetail & { product_id: string };
+type Entity = TalerMerchantApi.ProductDetail & { product_id: string };
 
 interface Props {
   onUpdate: (d: Entity) => Promise<void>;
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/products/update/index.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/products/update/index.tsx
index 2d3e7bd6b..842462c12 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/products/update/index.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/products/update/index.tsx
@@ -19,28 +19,27 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
+import { HttpStatusCode, TalerErrorDetail, TalerMerchantApi } from 
"@gnu-taler/taler-util";
 import {
   ErrorType,
   HttpError,
   useTranslationContext,
 } from "@gnu-taler/web-util/browser";
-import { Fragment, h, VNode } from "preact";
+import { Fragment, VNode, h } from "preact";
 import { useState } from "preact/hooks";
 import { Loading } from "../../../../components/exception/loading.js";
 import { NotificationCard } from "../../../../components/menu/index.js";
-import { MerchantBackend } from "../../../../declaration.js";
 import { useProductAPI, useProductDetails } from 
"../../../../hooks/product.js";
 import { Notification } from "../../../../utils/types.js";
 import { UpdatePage } from "./UpdatePage.js";
-import { HttpStatusCode } from "@gnu-taler/taler-util";
 
-export type Entity = MerchantBackend.Products.ProductAddDetail;
+export type Entity = TalerMerchantApi.ProductAddDetail;
 interface Props {
   onBack?: () => void;
   onConfirm: () => void;
   onUnauthorized: () => VNode;
   onNotFound: () => VNode;
-  onLoadError: (e: HttpError<MerchantBackend.ErrorDetail>) => VNode;
+  onLoadError: (e: HttpError<TalerErrorDetail>) => VNode;
   pid: string;
 }
 export default function UpdateProduct({
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/templates/create/CreatePage.tsx
 
b/packages/merchant-backoffice-ui/src/paths/instance/templates/create/CreatePage.tsx
index b07582252..31e525226 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/templates/create/CreatePage.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/templates/create/CreatePage.tsx
@@ -23,6 +23,7 @@ import {
   AmountString,
   Amounts,
   Duration,
+  TalerMerchantApi,
   assertUnreachable,
 } from "@gnu-taler/taler-util";
 import {
@@ -43,7 +44,6 @@ import { InputSearchOnList } from 
"../../../../components/form/InputSearchOnList
 import { InputTab } from "../../../../components/form/InputTab.js";
 import { InputWithAddon } from "../../../../components/form/InputWithAddon.js";
 import { useSessionContext } from "../../../../context/session.js";
-import { MerchantBackend } from "../../../../declaration.js";
 import { useInstanceOtpDevices } from "../../../../hooks/otp.js";
 
 enum Steps {
@@ -53,7 +53,7 @@ enum Steps {
   NON_FIXED,
 }
 
-// type Entity = MerchantBackend.Template.TemplateAddDetails & { type: Steps };
+// type Entity = TalerMerchantApi.TemplateAddDetails & { type: Steps };
 type Entity = {
   id?: string;
   description?: string;
@@ -66,7 +66,7 @@ type Entity = {
 };
 
 interface Props {
-  onCreate: (d: MerchantBackend.Template.TemplateAddDetails) => Promise<void>;
+  onCreate: (d: TalerMerchantApi.TemplateAddDetails) => Promise<void>;
   onBack?: () => void;
 }
 
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/templates/create/index.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/templates/create/index.tsx
index f76146812..593850268 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/templates/create/index.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/templates/create/index.tsx
@@ -19,16 +19,16 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
+import { TalerMerchantApi } from "@gnu-taler/taler-util";
 import { useTranslationContext } from "@gnu-taler/web-util/browser";
 import { Fragment, h, VNode } from "preact";
 import { useState } from "preact/hooks";
 import { NotificationCard } from "../../../../components/menu/index.js";
-import { MerchantBackend } from "../../../../declaration.js";
 import { useTemplateAPI } from "../../../../hooks/templates.js";
 import { Notification } from "../../../../utils/types.js";
 import { CreatePage } from "./CreatePage.js";
 
-export type Entity = MerchantBackend.Transfers.TransferInformation;
+export type Entity = TalerMerchantApi.TransferInformation;
 interface Props {
   onBack?: () => void;
   onConfirm: () => void;
@@ -44,7 +44,7 @@ export default function CreateTransfer({ onConfirm, onBack }: 
Props): VNode {
       <NotificationCard notification={notif} />
       <CreatePage
         onBack={onBack}
-        onCreate={(request: MerchantBackend.Template.TemplateAddDetails) => {
+        onCreate={(request: TalerMerchantApi.TemplateAddDetails) => {
           return createTemplate(request)
             .then(() => onConfirm())
             .catch((error) => {
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/templates/list/ListPage.tsx
 
b/packages/merchant-backoffice-ui/src/paths/instance/templates/list/ListPage.tsx
index c21f64776..84ff9e0f2 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/templates/list/ListPage.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/templates/list/ListPage.tsx
@@ -19,20 +19,19 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
+import { TalerMerchantApi } from "@gnu-taler/taler-util";
 import { h, VNode } from "preact";
-import { MerchantBackend } from "../../../../declaration.js";
-import { useTranslationContext } from "@gnu-taler/web-util/browser";
 import { CardTable } from "./Table.js";
 
 export interface Props {
-  templates: MerchantBackend.Template.TemplateEntry[];
+  templates: TalerMerchantApi.TemplateEntry[];
   onLoadMoreBefore?: () => void;
   onLoadMoreAfter?: () => void;
   onCreate: () => void;
-  onDelete: (e: MerchantBackend.Template.TemplateEntry) => void;
-  onSelect: (e: MerchantBackend.Template.TemplateEntry) => void;
-  onNewOrder: (e: MerchantBackend.Template.TemplateEntry) => void;
-  onQR: (e: MerchantBackend.Template.TemplateEntry) => void;
+  onDelete: (e: TalerMerchantApi.TemplateEntry) => void;
+  onSelect: (e: TalerMerchantApi.TemplateEntry) => void;
+  onNewOrder: (e: TalerMerchantApi.TemplateEntry) => void;
+  onQR: (e: TalerMerchantApi.TemplateEntry) => void;
 }
 
 export function ListPage({
@@ -45,9 +44,7 @@ export function ListPage({
   onLoadMoreBefore,
   onLoadMoreAfter,
 }: Props): VNode {
-  const form = { payto_uri: "" };
 
-  const { i18n } = useTranslationContext();
   return (
       <CardTable
         templates={templates.map((o) => ({
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/templates/list/Table.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/templates/list/Table.tsx
index 00d7982aa..11caca970 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/templates/list/Table.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/templates/list/Table.tsx
@@ -19,12 +19,12 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
+import { TalerMerchantApi } from "@gnu-taler/taler-util";
 import { useTranslationContext } from "@gnu-taler/web-util/browser";
 import { h, VNode } from "preact";
 import { StateUpdater, useState } from "preact/hooks";
-import { MerchantBackend } from "../../../../declaration.js";
 
-type Entity = MerchantBackend.Template.TemplateEntry;
+type Entity = TalerMerchantApi.TemplateEntry;
 
 interface Props {
   templates: Entity[];
@@ -117,11 +117,6 @@ interface TableProps {
   onLoadMoreAfter?: () => void;
 }
 
-function toggleSelected<T>(id: T): (prev: T[]) => T[] {
-  return (prev: T[]): T[] =>
-    prev.indexOf(id) == -1 ? [...prev, id] : prev.filter((e) => e != id);
-}
-
 function Table({
   instances,
   onLoadMoreAfter,
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/templates/list/index.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/templates/list/index.tsx
index 78f744b39..40ca6ac98 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/templates/list/index.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/templates/list/index.tsx
@@ -19,29 +19,28 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
+import { HttpStatusCode, TalerErrorDetail, TalerMerchantApi } from 
"@gnu-taler/taler-util";
 import {
   ErrorType,
   HttpError,
   useTranslationContext,
 } from "@gnu-taler/web-util/browser";
-import { Fragment, h, VNode } from "preact";
+import { Fragment, VNode, h } from "preact";
 import { useState } from "preact/hooks";
 import { Loading } from "../../../../components/exception/loading.js";
+import { JumpToElementById } from 
"../../../../components/form/JumpToElementById.js";
 import { NotificationCard } from "../../../../components/menu/index.js";
-import { MerchantBackend } from "../../../../declaration.js";
+import { ConfirmModal } from "../../../../components/modal/index.js";
 import {
   useInstanceTemplates,
   useTemplateAPI,
 } from "../../../../hooks/templates.js";
 import { Notification } from "../../../../utils/types.js";
 import { ListPage } from "./ListPage.js";
-import { HttpStatusCode, TranslatedString } from "@gnu-taler/taler-util";
-import { ConfirmModal } from "../../../../components/modal/index.js";
-import { JumpToElementById } from 
"../../../../components/form/JumpToElementById.js";
 
 interface Props {
   onUnauthorized: () => VNode;
-  onLoadError: (error: HttpError<MerchantBackend.ErrorDetail>) => VNode;
+  onLoadError: (error: HttpError<TalerErrorDetail>) => VNode;
   onNotFound: () => VNode;
   onCreate: () => void;
   onSelect: (id: string) => void;
@@ -64,7 +63,7 @@ export default function ListTemplates({
   const { deleteTemplate, testTemplateExist } = useTemplateAPI();
   const result = useInstanceTemplates({ position }, (id) => setPosition(id));
   const [deleting, setDeleting] =
-    useState<MerchantBackend.Template.TemplateEntry | null>(null);
+    useState<TalerMerchantApi.TemplateEntry | null>(null);
 
   if (result.loading) return <Loading />;
   if (!result.ok) {
@@ -108,7 +107,7 @@ export default function ListTemplates({
         onQR={(e) => {
           onQR(e.template_id);
         }}
-        onDelete={(e: MerchantBackend.Template.TemplateEntry) => {
+        onDelete={(e: TalerMerchantApi.TemplateEntry) => {
           setDeleting(e)
         }
         }
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/templates/qr/QrPage.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/templates/qr/QrPage.tsx
index 1aa5bc317..d48e5e956 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/templates/qr/QrPage.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/templates/qr/QrPage.tsx
@@ -19,7 +19,7 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
-import { stringifyPayTemplateUri } from "@gnu-taler/taler-util";
+import { TalerMerchantApi, stringifyPayTemplateUri } from 
"@gnu-taler/taler-util";
 import {
   useMerchantApiContext,
   useTranslationContext,
@@ -34,12 +34,11 @@ import {
 import { Input } from "../../../../components/form/Input.js";
 import { InputCurrency } from "../../../../components/form/InputCurrency.js";
 import { useSessionContext } from "../../../../context/session.js";
-import { MerchantBackend } from "../../../../declaration.js";
 
-type Entity = MerchantBackend.Template.UsingTemplateDetails;
+type Entity = TalerMerchantApi.UsingTemplateDetails;
 
 interface Props {
-  contract: MerchantBackend.Template.TemplateContractDetails;
+  contract: TalerMerchantApi.TemplateContractDetails;
   id: string;
   onBack?: () => void;
 }
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/templates/qr/index.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/templates/qr/index.tsx
index 65ccc2dcc..37f0e5c74 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/templates/qr/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/templates/qr/index.tsx
@@ -19,30 +19,27 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
+import { HttpStatusCode, TalerErrorDetail, TalerMerchantApi } from 
"@gnu-taler/taler-util";
 import {
   ErrorType,
-  HttpError,
-  useTranslationContext,
+  HttpError
 } from "@gnu-taler/web-util/browser";
-import { Fragment, h, VNode } from "preact";
+import { Fragment, VNode, h } from "preact";
 import { useState } from "preact/hooks";
 import { Loading } from "../../../../components/exception/loading.js";
 import { NotificationCard } from "../../../../components/menu/index.js";
-import { MerchantBackend } from "../../../../declaration.js";
 import {
-  useTemplateAPI,
-  useTemplateDetails,
+  useTemplateDetails
 } from "../../../../hooks/templates.js";
 import { Notification } from "../../../../utils/types.js";
 import { QrPage } from "./QrPage.js";
-import { HttpStatusCode } from "@gnu-taler/taler-util";
 
-export type Entity = MerchantBackend.Transfers.TransferInformation;
+export type Entity = TalerMerchantApi.TransferInformation;
 interface Props {
   onBack?: () => void;
   onUnauthorized: () => VNode;
   onNotFound: () => VNode;
-  onLoadError: (e: HttpError<MerchantBackend.ErrorDetail>) => VNode;
+  onLoadError: (e: HttpError<TalerErrorDetail>) => VNode;
   tid: string;
 }
 
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/templates/update/UpdatePage.tsx
 
b/packages/merchant-backoffice-ui/src/paths/instance/templates/update/UpdatePage.tsx
index ae11ad991..f4092b61b 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/templates/update/UpdatePage.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/templates/update/UpdatePage.tsx
@@ -23,6 +23,7 @@ import {
   AmountString,
   Amounts,
   Duration,
+  TalerMerchantApi,
   assertUnreachable
 } from "@gnu-taler/taler-util";
 import { useTranslationContext } from "@gnu-taler/web-util/browser";
@@ -40,7 +41,6 @@ import { InputNumber } from 
"../../../../components/form/InputNumber.js";
 import { InputSearchOnList } from 
"../../../../components/form/InputSearchOnList.js";
 import { InputTab } from "../../../../components/form/InputTab.js";
 import { useSessionContext } from "../../../../context/session.js";
-import { MerchantBackend } from "../../../../declaration.js";
 import { useInstanceOtpDevices } from "../../../../hooks/otp.js";
 
 enum Steps {
@@ -60,9 +60,9 @@ type Entity = {
 };
 
 interface Props {
-  onUpdate: (d: MerchantBackend.Template.TemplatePatchDetails) => 
Promise<void>;
+  onUpdate: (d: TalerMerchantApi.TemplatePatchDetails) => Promise<void>;
   onBack?: () => void;
-  template: MerchantBackend.Template.TemplateDetails;
+  template: TalerMerchantApi.TemplateDetails;
 }
 
 export function UpdatePage({ template, onUpdate, onBack }: Props): VNode {
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/templates/update/index.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/templates/update/index.tsx
index 1975ed479..ba1939914 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/templates/update/index.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/templates/update/index.tsx
@@ -19,32 +19,31 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
+import { HttpStatusCode, TalerErrorDetail, TalerMerchantApi } from 
"@gnu-taler/taler-util";
 import {
   ErrorType,
   HttpError,
   useTranslationContext,
 } from "@gnu-taler/web-util/browser";
-import { Fragment, h, VNode } from "preact";
+import { Fragment, VNode, h } from "preact";
 import { useState } from "preact/hooks";
 import { Loading } from "../../../../components/exception/loading.js";
 import { NotificationCard } from "../../../../components/menu/index.js";
-import { MerchantBackend, WithId } from "../../../../declaration.js";
 import {
   useTemplateAPI,
   useTemplateDetails,
 } from "../../../../hooks/templates.js";
 import { Notification } from "../../../../utils/types.js";
 import { UpdatePage } from "./UpdatePage.js";
-import { HttpStatusCode } from "@gnu-taler/taler-util";
 
-export type Entity = MerchantBackend.Template.TemplatePatchDetails & WithId;
+export type Entity = TalerMerchantApi.TemplatePatchDetails & WithId;
 
 interface Props {
   onBack?: () => void;
   onConfirm: () => void;
   onUnauthorized: () => VNode;
   onNotFound: () => VNode;
-  onLoadError: (e: HttpError<MerchantBackend.ErrorDetail>) => VNode;
+  onLoadError: (e: HttpError<TalerErrorDetail>) => VNode;
   tid: string;
 }
 export default function UpdateTemplate({
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/templates/use/UsePage.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/templates/use/UsePage.tsx
index 93f303537..58e63cc8e 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/templates/use/UsePage.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/templates/use/UsePage.tsx
@@ -19,6 +19,7 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
+import { TalerMerchantApi } from "@gnu-taler/taler-util";
 import { useTranslationContext } from "@gnu-taler/web-util/browser";
 import { h, VNode } from "preact";
 import { useState } from "preact/hooks";
@@ -29,13 +30,12 @@ import {
 } from "../../../../components/form/FormProvider.js";
 import { Input } from "../../../../components/form/Input.js";
 import { InputCurrency } from "../../../../components/form/InputCurrency.js";
-import { MerchantBackend } from "../../../../declaration.js";
 
-type Entity = MerchantBackend.Template.UsingTemplateDetails;
+type Entity = TalerMerchantApi.UsingTemplateDetails;
 
 interface Props {
   id: string;
-  template: MerchantBackend.Template.TemplateDetails;
+  template: TalerMerchantApi.TemplateDetails;
   onCreateOrder: (d: Entity) => Promise<void>;
   onBack?: () => void;
 }
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/templates/use/index.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/templates/use/index.tsx
index 441a5c5e0..64c38c86b 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/templates/use/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/templates/use/index.tsx
@@ -19,31 +19,30 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
+import { HttpStatusCode, TalerErrorDetail, TalerMerchantApi } from 
"@gnu-taler/taler-util";
 import {
   ErrorType,
   HttpError,
   useTranslationContext,
 } from "@gnu-taler/web-util/browser";
-import { Fragment, h, VNode } from "preact";
+import { Fragment, VNode, h } from "preact";
 import { useState } from "preact/hooks";
 import { Loading } from "../../../../components/exception/loading.js";
 import { NotificationCard } from "../../../../components/menu/index.js";
-import { MerchantBackend } from "../../../../declaration.js";
 import {
   useTemplateAPI,
   useTemplateDetails,
 } from "../../../../hooks/templates.js";
 import { Notification } from "../../../../utils/types.js";
 import { UsePage } from "./UsePage.js";
-import { HttpStatusCode } from "@gnu-taler/taler-util";
 
-export type Entity = MerchantBackend.Transfers.TransferInformation;
+export type Entity = TalerMerchantApi.TransferInformation;
 interface Props {
   onBack?: () => void;
   onOrderCreated: (id: string) => void;
   onUnauthorized: () => VNode;
   onNotFound: () => VNode;
-  onLoadError: (e: HttpError<MerchantBackend.ErrorDetail>) => VNode;
+  onLoadError: (e: HttpError<TalerErrorDetail>) => VNode;
   tid: string;
 }
 
@@ -83,7 +82,7 @@ export default function TemplateUsePage({
         id={tid}
         onBack={onBack}
         onCreateOrder={(
-          request: MerchantBackend.Template.UsingTemplateDetails,
+          request: TalerMerchantApi.UsingTemplateDetails,
         ) => {
           return createOrderFromTemplate(tid, request)
             .then((res) => onOrderCreated(res.data.order_id))
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/token/index.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/token/index.tsx
index d7bf7a6d5..50e7d500d 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/token/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/token/index.tsx
@@ -13,20 +13,19 @@
  You should have received a copy of the GNU General Public License along with
  GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
-import { HttpStatusCode } from "@gnu-taler/taler-util";
+import { HttpStatusCode, TalerErrorDetail } from "@gnu-taler/taler-util";
 import { ErrorType, HttpError, useTranslationContext } from 
"@gnu-taler/web-util/browser";
 import { Fragment, VNode, h } from "preact";
 import { useState } from "preact/hooks";
 import { Loading } from "../../../components/exception/loading.js";
 import { NotificationCard } from "../../../components/menu/index.js";
-import { MerchantBackend } from "../../../declaration.js";
 import { useInstanceAPI, useInstanceDetails } from 
"../../../hooks/instance.js";
 import { Notification } from "../../../utils/types.js";
 import { DetailPage } from "./DetailPage.js";
 
 interface Props {
   onUnauthorized: () => VNode;
-  onLoadError: (error: HttpError<MerchantBackend.ErrorDetail>) => VNode;
+  onLoadError: (error: HttpError<TalerErrorDetail>) => VNode;
   onChange: () => void;
   onNotFound: () => VNode;
   onCancel: () => void;
@@ -60,7 +59,7 @@ export default function Token({
     return onLoadError(result);
   }
 
-  const hasToken = result.data.auth.method === "token"
+  const hasToken = result.data.auth.type === "token"
 
   return (
     <Fragment>
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/transfers/create/CreatePage.tsx
 
b/packages/merchant-backoffice-ui/src/paths/instance/transfers/create/CreatePage.tsx
index 576c21cd2..91aabe58e 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/transfers/create/CreatePage.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/transfers/create/CreatePage.tsx
@@ -19,6 +19,7 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
+import { AmountString, TalerMerchantApi } from "@gnu-taler/taler-util";
 import { useTranslationContext } from "@gnu-taler/web-util/browser";
 import { VNode, h } from "preact";
 import { useState } from "preact/hooks";
@@ -30,13 +31,12 @@ import {
 import { Input } from "../../../../components/form/Input.js";
 import { InputCurrency } from "../../../../components/form/InputCurrency.js";
 import { InputSelector } from "../../../../components/form/InputSelector.js";
-import { MerchantBackend } from "../../../../declaration.js";
 import {
   CROCKFORD_BASE32_REGEX,
   URL_REGEX,
 } from "../../../../utils/constants.js";
 
-type Entity = MerchantBackend.Transfers.TransferInformation;
+type Entity = TalerMerchantApi.TransferInformation;
 
 interface Props {
   onCreate: (d: Entity) => Promise<void>;
@@ -51,7 +51,7 @@ export function CreatePage({ accounts, onCreate, onBack }: 
Props): VNode {
     wtid: "",
     // payto_uri: ,
     // exchange_url: 'http://exchange.taler:8081/',
-    credit_amount: ``,
+    credit_amount: `` as AmountString,
   });
 
   const errors: FormErrors<Entity> = {
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/transfers/create/index.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/transfers/create/index.tsx
index 77a8c65fb..e640e47f6 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/transfers/create/index.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/transfers/create/index.tsx
@@ -19,18 +19,17 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
+import { TalerMerchantApi } from "@gnu-taler/taler-util";
 import { useTranslationContext } from "@gnu-taler/web-util/browser";
 import { Fragment, h, VNode } from "preact";
 import { useState } from "preact/hooks";
 import { NotificationCard } from "../../../../components/menu/index.js";
-import { MerchantBackend } from "../../../../declaration.js";
-import { useInstanceDetails } from "../../../../hooks/instance.js";
+import { useInstanceBankAccounts } from "../../../../hooks/bank.js";
 import { useTransferAPI } from "../../../../hooks/transfer.js";
 import { Notification } from "../../../../utils/types.js";
 import { CreatePage } from "./CreatePage.js";
-import { useBankAccountDetails, useInstanceBankAccounts } from 
"../../../../hooks/bank.js";
 
-export type Entity = MerchantBackend.Transfers.TransferInformation;
+export type Entity = TalerMerchantApi.TransferInformation;
 interface Props {
   onBack?: () => void;
   onConfirm: () => void;
@@ -51,7 +50,7 @@ export default function CreateTransfer({ onConfirm, onBack }: 
Props): VNode {
       <CreatePage
         onBack={onBack}
         accounts={accounts}
-        onCreate={(request: MerchantBackend.Transfers.TransferInformation) => {
+        onCreate={(request: TalerMerchantApi.TransferInformation) => {
           return informTransfer(request)
             .then(() => onConfirm())
             .catch((error) => {
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/transfers/list/List.stories.tsx
 
b/packages/merchant-backoffice-ui/src/paths/instance/transfers/list/List.stories.tsx
index ba22cb7d5..def03fe27 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/transfers/list/List.stories.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/transfers/list/List.stories.tsx
@@ -19,7 +19,8 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
-import { h, VNode, FunctionalComponent } from "preact";
+import { AmountString, PaytoString } from "@gnu-taler/taler-util";
+import { FunctionalComponent, h } from "preact";
 import { ListPage as TestedComponent } from "./ListPage.js";
 
 export default {
@@ -50,8 +51,8 @@ export const Example = createExample(TestedComponent, {
   transfers: [
     {
       exchange_url: "http://exchange.url/";,
-      credit_amount: "TESTKUDOS:10",
-      payto_uri: "payto//x-taler-bank/bank:8080/account",
+      credit_amount: "TESTKUDOS:10" as AmountString,
+      payto_uri: "payto//x-taler-bank/bank:8080/account" as PaytoString,
       transfer_serial_id: 123123123,
       wtid: "!@KJELQKWEJ!L@K#!J@",
       confirmed: true,
@@ -62,8 +63,8 @@ export const Example = createExample(TestedComponent, {
     },
     {
       exchange_url: "http://exchange.url/";,
-      credit_amount: "TESTKUDOS:10",
-      payto_uri: "payto//x-taler-bank/bank:8080/account",
+      credit_amount: "TESTKUDOS:10" as AmountString,
+      payto_uri: "payto//x-taler-bank/bank:8080/account" as PaytoString,
       transfer_serial_id: 123123123,
       wtid: "!@KJELQKWEJ!L@K#!J@",
       confirmed: true,
@@ -74,8 +75,8 @@ export const Example = createExample(TestedComponent, {
     },
     {
       exchange_url: "http://exchange.url/";,
-      credit_amount: "TESTKUDOS:10",
-      payto_uri: "payto//x-taler-bank/bank:8080/account",
+      credit_amount: "TESTKUDOS:10" as AmountString,
+      payto_uri: "payto//x-taler-bank/bank:8080/account" as PaytoString,
       transfer_serial_id: 123123123,
       wtid: "!@KJELQKWEJ!L@K#!J@",
       confirmed: true,
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/transfers/list/ListPage.tsx
 
b/packages/merchant-backoffice-ui/src/paths/instance/transfers/list/ListPage.tsx
index 794d37fe6..7b54dc5ed 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/transfers/list/ListPage.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/transfers/list/ListPage.tsx
@@ -23,11 +23,11 @@ import { useTranslationContext } from 
"@gnu-taler/web-util/browser";
 import { h, VNode } from "preact";
 import { FormProvider } from "../../../../components/form/FormProvider.js";
 import { InputSelector } from "../../../../components/form/InputSelector.js";
-import { MerchantBackend } from "../../../../declaration.js";
 import { CardTable } from "./Table.js";
+import { TalerMerchantApi } from "@gnu-taler/taler-util";
 
 export interface Props {
-  transfers: MerchantBackend.Transfers.TransferDetails[];
+  transfers: TalerMerchantApi.TransferDetails[];
   onLoadMoreBefore?: () => void;
   onLoadMoreAfter?: () => void;
   onShowAll: () => void;
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/transfers/list/Table.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/transfers/list/Table.tsx
index 3792db9b0..cf7ebe922 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/transfers/list/Table.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/transfers/list/Table.tsx
@@ -19,14 +19,14 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
+import { TalerMerchantApi } from "@gnu-taler/taler-util";
 import { useTranslationContext } from "@gnu-taler/web-util/browser";
 import { format } from "date-fns";
 import { h, VNode } from "preact";
 import { StateUpdater, useState } from "preact/hooks";
-import { MerchantBackend, WithId } from "../../../../declaration.js";
 import { datetimeFormatForSettings, usePreference } from 
"../../../../hooks/preference.js";
 
-type Entity = MerchantBackend.Transfers.TransferDetails & WithId;
+type Entity = TalerMerchantApi.TransferDetails & WithId;
 
 interface Props {
   transfers: Entity[];
@@ -108,11 +108,6 @@ interface TableProps {
   onLoadMoreAfter?: () => void;
 }
 
-function toggleSelected<T>(id: T): (prev: T[]) => T[] {
-  return (prev: T[]): T[] =>
-    prev.indexOf(id) == -1 ? [...prev, id] : prev.filter((e) => e != id);
-}
-
 function Table({
   instances,
   onLoadMoreAfter,
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/transfers/list/index.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/transfers/list/index.tsx
index 1402df4c1..15706b4c5 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/transfers/list/index.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/transfers/list/index.tsx
@@ -19,20 +19,18 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
+import { HttpStatusCode, TalerErrorDetail } from "@gnu-taler/taler-util";
 import { ErrorType, HttpError } from "@gnu-taler/web-util/browser";
-import { h, VNode } from "preact";
+import { VNode, h } from "preact";
 import { useEffect, useState } from "preact/hooks";
 import { Loading } from "../../../../components/exception/loading.js";
-import { MerchantBackend } from "../../../../declaration.js";
-import { useInstanceDetails } from "../../../../hooks/instance.js";
+import { useInstanceBankAccounts } from "../../../../hooks/bank.js";
 import { useInstanceTransfers } from "../../../../hooks/transfer.js";
 import { ListPage } from "./ListPage.js";
-import { HttpStatusCode } from "@gnu-taler/taler-util";
-import { useInstanceBankAccounts } from "../../../../hooks/bank.js";
 
 interface Props {
   onUnauthorized: () => VNode;
-  onLoadError: (error: HttpError<MerchantBackend.ErrorDetail>) => VNode;
+  onLoadError: (error: HttpError<TalerErrorDetail>) => VNode;
   onNotFound: () => VNode;
   onCreate: () => void;
 }
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/update/Update.stories.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/update/Update.stories.tsx
index 2accb7685..5514b68d9 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/update/Update.stories.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/update/Update.stories.tsx
@@ -19,7 +19,7 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
-import { h, VNode, FunctionalComponent } from "preact";
+import { FunctionalComponent, h } from "preact";
 import { UpdatePage as TestedComponent } from "./UpdatePage.js";
 
 export default {
@@ -43,7 +43,7 @@ function createExample<Props>(
 export const Example = createExample(TestedComponent, {
   selected: {
     name: "name",
-    auth: { method: "external" },
+    auth: { type: "external" },
     address: {},
     user_type: "business",
     use_stefan: true,
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/update/UpdatePage.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/update/UpdatePage.tsx
index f0f0bfac9..cde58967f 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/update/UpdatePage.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/update/UpdatePage.tsx
@@ -19,9 +19,9 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
-import { Duration } from "@gnu-taler/taler-util";
+import { Duration, TalerMerchantApi } from "@gnu-taler/taler-util";
 import { useTranslationContext } from "@gnu-taler/web-util/browser";
-import { h, VNode } from "preact";
+import { VNode, h } from "preact";
 import { useState } from "preact/hooks";
 import { AsyncButton } from "../../../components/exception/AsyncButton.js";
 import {
@@ -29,25 +29,24 @@ import {
   FormProvider,
 } from "../../../components/form/FormProvider.js";
 import { DefaultInstanceFormFields } from 
"../../../components/instance/DefaultInstanceFormFields.js";
-import { MerchantBackend } from "../../../declaration.js";
-import { undefinedIfEmpty } from "../../../utils/table.js";
 import { useSessionContext } from "../../../context/session.js";
+import { undefinedIfEmpty } from "../../../utils/table.js";
 
-export type Entity = 
Omit<Omit<MerchantBackend.Instances.InstanceReconfigurationMessage, 
"default_pay_delay">, "default_wire_transfer_delay"> & {
+export type Entity = 
Omit<Omit<TalerMerchantApi.InstanceReconfigurationMessage, 
"default_pay_delay">, "default_wire_transfer_delay"> & {
   default_pay_delay: Duration,
   default_wire_transfer_delay: Duration,
 };
 
-//MerchantBackend.Instances.InstanceAuthConfigurationMessage
+//TalerMerchantApi.InstanceAuthConfigurationMessage
 interface Props {
-  onUpdate: (d: MerchantBackend.Instances.InstanceReconfigurationMessage) => 
void;
-  selected: MerchantBackend.Instances.QueryInstancesResponse;
+  onUpdate: (d: TalerMerchantApi.InstanceReconfigurationMessage) => void;
+  selected: TalerMerchantApi.QueryInstancesResponse;
   isLoading: boolean;
   onBack: () => void;
 }
 
 function convert(
-  from: MerchantBackend.Instances.QueryInstancesResponse,
+  from: TalerMerchantApi.QueryInstancesResponse,
 ): Entity {
   const { default_pay_delay, default_wire_transfer_delay, ...rest } = from;
 
@@ -107,7 +106,7 @@ export function UpdatePage({
 
   const submit = async (): Promise<void> => {
     const { default_pay_delay, default_wire_transfer_delay, ...rest } = value 
as Required<Entity>;
-    const result: MerchantBackend.Instances.InstanceReconfigurationMessage = {
+    const result: TalerMerchantApi.InstanceReconfigurationMessage = {
       default_pay_delay: Duration.toTalerProtocolDuration(default_pay_delay),
       default_wire_transfer_delay: 
Duration.toTalerProtocolDuration(default_wire_transfer_delay),
       ...rest,
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/update/index.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/update/index.tsx
index de1371974..d28ca0555 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/update/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/update/index.tsx
@@ -13,7 +13,7 @@
  You should have received a copy of the GNU General Public License along with
  GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
-import { HttpStatusCode } from "@gnu-taler/taler-util";
+import { HttpStatusCode, TalerErrorDetail, TalerMerchantApi } from 
"@gnu-taler/taler-util";
 import {
   ErrorType,
   HttpError,
@@ -24,7 +24,6 @@ import { Fragment, VNode, h } from "preact";
 import { useState } from "preact/hooks";
 import { Loading } from "../../../components/exception/loading.js";
 import { NotificationCard } from "../../../components/menu/index.js";
-import { MerchantBackend } from "../../../declaration.js";
 import {
   useInstanceAPI,
   useInstanceDetails,
@@ -40,8 +39,8 @@ export interface Props {
 
   onUnauthorized: () => VNode;
   onNotFound: () => VNode;
-  onLoadError: (e: HttpError<MerchantBackend.ErrorDetail>) => VNode;
-  onUpdateError: (e: HttpError<MerchantBackend.ErrorDetail>) => void;
+  onLoadError: (e: HttpError<TalerErrorDetail>) => VNode;
+  onUpdateError: (e: HttpError<TalerErrorDetail>) => void;
 }
 
 export default function Update(props: Props): VNode {
@@ -67,8 +66,8 @@ function CommonUpdate(
     onUnauthorized,
   }: Props,
   result: HttpResponse<
-    MerchantBackend.Instances.QueryInstancesResponse,
-    MerchantBackend.ErrorDetail
+    TalerMerchantApi.QueryInstancesResponse,
+    TalerErrorDetail
   >,
   updateInstance: any,
 ): VNode {
@@ -98,7 +97,7 @@ function CommonUpdate(
         isLoading={false}
         selected={result.data}
         onUpdate={(
-          d: MerchantBackend.Instances.InstanceReconfigurationMessage,
+          d: TalerMerchantApi.InstanceReconfigurationMessage,
         ): Promise<void> => {
           return updateInstance(d)
             .then(onConfirm)
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/webhooks/create/CreatePage.tsx
 
b/packages/merchant-backoffice-ui/src/paths/instance/webhooks/create/CreatePage.tsx
index 83604711e..8792aabea 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/webhooks/create/CreatePage.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/webhooks/create/CreatePage.tsx
@@ -29,9 +29,9 @@ import {
 } from "../../../../components/form/FormProvider.js";
 import { Input } from "../../../../components/form/Input.js";
 import { InputSelector } from "../../../../components/form/InputSelector.js";
-import { MerchantBackend } from "../../../../declaration.js";
+import { TalerMerchantApi } from "@gnu-taler/taler-util";
 
-type Entity = MerchantBackend.Webhooks.WebhookAddDetails;
+type Entity = TalerMerchantApi.WebhookAddDetails;
 
 interface Props {
   onCreate: (d: Entity) => Promise<void>;
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/webhooks/create/index.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/webhooks/create/index.tsx
index e1b8aa88e..42a432cf0 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/webhooks/create/index.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/webhooks/create/index.tsx
@@ -23,12 +23,12 @@ import { useTranslationContext } from 
"@gnu-taler/web-util/browser";
 import { Fragment, h, VNode } from "preact";
 import { useState } from "preact/hooks";
 import { NotificationCard } from "../../../../components/menu/index.js";
-import { MerchantBackend } from "../../../../declaration.js";
 import { useWebhookAPI } from "../../../../hooks/webhooks.js";
 import { Notification } from "../../../../utils/types.js";
 import { CreatePage } from "./CreatePage.js";
+import { TalerMerchantApi } from "@gnu-taler/taler-util";
 
-export type Entity = MerchantBackend.Webhooks.WebhookAddDetails;
+export type Entity = TalerMerchantApi.WebhookAddDetails;
 interface Props {
   onBack?: () => void;
   onConfirm: () => void;
@@ -44,7 +44,7 @@ export default function CreateWebhook({ onConfirm, onBack }: 
Props): VNode {
       <NotificationCard notification={notif} />
       <CreatePage
         onBack={onBack}
-        onCreate={(request: MerchantBackend.Webhooks.WebhookAddDetails) => {
+        onCreate={(request: TalerMerchantApi.WebhookAddDetails) => {
           return createWebhook(request)
             .then(() => onConfirm())
             .catch((error) => {
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/webhooks/list/ListPage.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/webhooks/list/ListPage.tsx
index be7c575a0..98bd61d8f 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/webhooks/list/ListPage.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/webhooks/list/ListPage.tsx
@@ -20,17 +20,17 @@
  */
 
 import { h, VNode } from "preact";
-import { MerchantBackend } from "../../../../declaration.js";
 import { useTranslationContext } from "@gnu-taler/web-util/browser";
 import { CardTable } from "./Table.js";
+import { TalerMerchantApi } from "@gnu-taler/taler-util";
 
 export interface Props {
-  webhooks: MerchantBackend.Webhooks.WebhookEntry[];
+  webhooks: TalerMerchantApi.WebhookEntry[];
   onLoadMoreBefore?: () => void;
   onLoadMoreAfter?: () => void;
   onCreate: () => void;
-  onDelete: (e: MerchantBackend.Webhooks.WebhookEntry) => void;
-  onSelect: (e: MerchantBackend.Webhooks.WebhookEntry) => void;
+  onDelete: (e: TalerMerchantApi.WebhookEntry) => void;
+  onSelect: (e: TalerMerchantApi.WebhookEntry) => void;
 }
 
 export function ListPage({
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/webhooks/list/Table.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/webhooks/list/Table.tsx
index debbd850b..2cafc7f9a 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/webhooks/list/Table.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/webhooks/list/Table.tsx
@@ -19,12 +19,12 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
+import { TalerMerchantApi } from "@gnu-taler/taler-util";
 import { useTranslationContext } from "@gnu-taler/web-util/browser";
 import { h, VNode } from "preact";
 import { StateUpdater, useState } from "preact/hooks";
-import { MerchantBackend } from "../../../../declaration.js";
 
-type Entity = MerchantBackend.Webhooks.WebhookEntry;
+type Entity = TalerMerchantApi.WebhookEntry;
 
 interface Props {
   webhooks: Entity[];
@@ -109,11 +109,6 @@ interface TableProps {
   onLoadMoreAfter?: () => void;
 }
 
-function toggleSelected<T>(id: T): (prev: T[]) => T[] {
-  return (prev: T[]): T[] =>
-    prev.indexOf(id) == -1 ? [...prev, id] : prev.filter((e) => e != id);
-}
-
 function Table({
   instances,
   onLoadMoreAfter,
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/webhooks/list/index.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/webhooks/list/index.tsx
index c4b773669..17e767337 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/webhooks/list/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/webhooks/list/index.tsx
@@ -28,18 +28,17 @@ import { Fragment, h, VNode } from "preact";
 import { useState } from "preact/hooks";
 import { Loading } from "../../../../components/exception/loading.js";
 import { NotificationCard } from "../../../../components/menu/index.js";
-import { MerchantBackend } from "../../../../declaration.js";
 import {
   useInstanceWebhooks,
   useWebhookAPI,
 } from "../../../../hooks/webhooks.js";
 import { Notification } from "../../../../utils/types.js";
 import { ListPage } from "./ListPage.js";
-import { HttpStatusCode } from "@gnu-taler/taler-util";
+import { HttpStatusCode, TalerErrorDetail, TalerMerchantApi } from 
"@gnu-taler/taler-util";
 
 interface Props {
   onUnauthorized: () => VNode;
-  onLoadError: (error: HttpError<MerchantBackend.ErrorDetail>) => VNode;
+  onLoadError: (error: HttpError<TalerErrorDetail>) => VNode;
   onNotFound: () => VNode;
   onCreate: () => void;
   onSelect: (id: string) => void;
@@ -87,7 +86,7 @@ export default function ListWebhooks({
         onSelect={(e) => {
           onSelect(e.webhook_id);
         }}
-        onDelete={(e: MerchantBackend.Webhooks.WebhookEntry) =>
+        onDelete={(e: TalerMerchantApi.WebhookEntry) =>
           deleteWebhook(e.webhook_id)
             .then(() =>
               setNotif({
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/webhooks/update/UpdatePage.tsx
 
b/packages/merchant-backoffice-ui/src/paths/instance/webhooks/update/UpdatePage.tsx
index be21629d5..6aca62582 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/webhooks/update/UpdatePage.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/webhooks/update/UpdatePage.tsx
@@ -28,9 +28,9 @@ import {
   FormProvider,
 } from "../../../../components/form/FormProvider.js";
 import { Input } from "../../../../components/form/Input.js";
-import { MerchantBackend, WithId } from "../../../../declaration.js";
+import { TalerMerchantApi } from "@gnu-taler/taler-util";
 
-type Entity = MerchantBackend.Webhooks.WebhookPatchDetails & WithId;
+type Entity = TalerMerchantApi.WebhookPatchDetails & WithId;
 
 interface Props {
   onUpdate: (d: Entity) => Promise<void>;
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/webhooks/update/index.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/webhooks/update/index.tsx
index 12374d82a..97b4f44ba 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/webhooks/update/index.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/webhooks/update/index.tsx
@@ -28,23 +28,22 @@ import { Fragment, h, VNode } from "preact";
 import { useState } from "preact/hooks";
 import { Loading } from "../../../../components/exception/loading.js";
 import { NotificationCard } from "../../../../components/menu/index.js";
-import { MerchantBackend, WithId } from "../../../../declaration.js";
 import {
   useWebhookAPI,
   useWebhookDetails,
 } from "../../../../hooks/webhooks.js";
 import { Notification } from "../../../../utils/types.js";
 import { UpdatePage } from "./UpdatePage.js";
-import { HttpStatusCode } from "@gnu-taler/taler-util";
+import { HttpStatusCode, TalerErrorDetail, TalerMerchantApi } from 
"@gnu-taler/taler-util";
 
-export type Entity = MerchantBackend.Webhooks.WebhookPatchDetails & WithId;
+export type Entity = TalerMerchantApi.WebhookPatchDetails & WithId;
 
 interface Props {
   onBack?: () => void;
   onConfirm: () => void;
   onUnauthorized: () => VNode;
   onNotFound: () => VNode;
-  onLoadError: (e: HttpError<MerchantBackend.ErrorDetail>) => VNode;
+  onLoadError: (e: HttpError<TalerErrorDetail>) => VNode;
   tid: string;
 }
 export default function UpdateWebhook({
diff --git a/packages/merchant-backoffice-ui/src/paths/login/index.tsx 
b/packages/merchant-backoffice-ui/src/paths/login/index.tsx
index 1c0b915bd..14322f079 100644
--- a/packages/merchant-backoffice-ui/src/paths/login/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/login/index.tsx
@@ -20,9 +20,7 @@
  */
 
 import {
-  AccessToken,
-  HttpStatusCode,
-  TalerAuthentication,
+  HttpStatusCode
 } from "@gnu-taler/taler-util";
 import {
   useMerchantApiContext,
@@ -32,8 +30,7 @@ import { ComponentChildren, Fragment, VNode, h } from 
"preact";
 import { useState } from "preact/hooks";
 import { NotificationCard } from "../../components/menu/index.js";
 import {
-  DEFAULT_ADMIN_USERNAME,
-  useSessionContext,
+  useSessionContext
 } from "../../context/session.js";
 import { Notification } from "../../utils/types.js";
 
diff --git a/packages/merchant-backoffice-ui/src/schemas/index.ts 
b/packages/merchant-backoffice-ui/src/schemas/index.ts
index dc4517e16..693894ae0 100644
--- a/packages/merchant-backoffice-ui/src/schemas/index.ts
+++ b/packages/merchant-backoffice-ui/src/schemas/index.ts
@@ -19,10 +19,10 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
+import { Amounts } from "@gnu-taler/taler-util";
 import { isAfter, isFuture } from "date-fns";
 import * as yup from "yup";
-import { AMOUNT_REGEX, PAYTO_REGEX } from "../utils/constants.js";
-import { Amounts } from "@gnu-taler/taler-util";
+import { PAYTO_REGEX } from "../utils/constants.js";
 
 yup.setLocale({
   mixed: {
diff --git a/packages/merchant-backoffice-ui/src/utils/amount.ts 
b/packages/merchant-backoffice-ui/src/utils/amount.ts
index fda997619..c94101b4b 100644
--- a/packages/merchant-backoffice-ui/src/utils/amount.ts
+++ b/packages/merchant-backoffice-ui/src/utils/amount.ts
@@ -17,8 +17,8 @@ import {
   amountFractionalBase,
   AmountJson,
   Amounts,
+  TalerMerchantApi,
 } from "@gnu-taler/taler-util";
-import { MerchantBackend } from "../declaration.js";
 
 /**
  * merge refund with the same description and a difference less than one minute
@@ -27,9 +27,9 @@ import { MerchantBackend } from "../declaration.js";
  * @returns list with the new refund, may be merged with the last
  */
 export function mergeRefunds(
-  prev: MerchantBackend.Orders.RefundDetails[],
-  cur: MerchantBackend.Orders.RefundDetails,
-): MerchantBackend.Orders.RefundDetails[] {
+  prev: TalerMerchantApi.RefundDetails[],
+  cur: TalerMerchantApi.RefundDetails,
+): TalerMerchantApi.RefundDetails[] {
   let tail;
 
   if (
diff --git a/packages/merchant-backoffice-ui/src/utils/table.ts 
b/packages/merchant-backoffice-ui/src/utils/table.ts
index 306328aa1..982b68e5e 100644
--- a/packages/merchant-backoffice-ui/src/utils/table.ts
+++ b/packages/merchant-backoffice-ui/src/utils/table.ts
@@ -14,7 +14,6 @@
  GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 
-import { WithId } from "../declaration.js";
 
 /**
  *
diff --git a/packages/merchant-backoffice-ui/src/utils/types.ts 
b/packages/merchant-backoffice-ui/src/utils/types.ts
index f96606a16..9ce6da4d1 100644
--- a/packages/merchant-backoffice-ui/src/utils/types.ts
+++ b/packages/merchant-backoffice-ui/src/utils/types.ts
@@ -23,7 +23,7 @@ export interface KeyValue {
 export interface Notification {
   message: string;
   description?: string | VNode;
-  details?: string | VNode;
+  details?: string | VNode | string;
   type: MessageType;
 }
 
diff --git a/packages/taler-util/src/http-client/merchant.ts 
b/packages/taler-util/src/http-client/merchant.ts
index 688e80c29..3a2b7117d 100644
--- a/packages/taler-util/src/http-client/merchant.ts
+++ b/packages/taler-util/src/http-client/merchant.ts
@@ -128,15 +128,12 @@ export class TalerMerchantInstanceHttpClient {
   /**
    * 
https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-orders-$ORDER_ID-claim
    */
-  async claimOrder(token: AccessToken, orderId: string, body: 
TalerMerchantApi.ClaimRequest) {
+  async claimOrder(orderId: string, body: TalerMerchantApi.ClaimRequest) {
     const url = new URL(`orders/${orderId}/claim`, this.baseUrl);
 
     const resp = await this.httpLib.fetch(url.href, {
       method: "POST",
       body,
-      headers: {
-        Authorization: makeBearerTokenAuthHeader(token),
-      }
     });
 
     switch (resp.status) {
@@ -341,6 +338,7 @@ export class TalerMerchantInstanceHttpClient {
    * 
https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-auth
    */
   async updateCurrentInstanceAuthentication(
+    token: AccessToken,
     body: TalerMerchantApi.InstanceAuthConfigurationMessage,
   ) {
     const url = new URL(`private/auth`, this.baseUrl);
@@ -348,6 +346,9 @@ export class TalerMerchantInstanceHttpClient {
     const resp = await this.httpLib.fetch(url.href, {
       method: "POST",
       body,
+      headers: {
+        Authorization: makeBearerTokenAuthHeader(token),
+      }
     });
 
     //
@@ -365,6 +366,7 @@ export class TalerMerchantInstanceHttpClient {
    * 
https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCE]-private
    */
   async updateCurrentInstance(
+    token: AccessToken,
     body: TalerMerchantApi.InstanceReconfigurationMessage,
   ) {
     const url = new URL(`private`, this.baseUrl);
@@ -372,6 +374,9 @@ export class TalerMerchantInstanceHttpClient {
     const resp = await this.httpLib.fetch(url.href, {
       method: "PATCH",
       body,
+      headers: {
+        Authorization: makeBearerTokenAuthHeader(token),
+      }
     });
     switch (resp.status) {
       case HttpStatusCode.Ok:
@@ -387,11 +392,14 @@ export class TalerMerchantInstanceHttpClient {
    * 
https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private
    *
    */
-  async getCurrentInstance() {
+  async getCurrentInstance(token: AccessToken) {
     const url = new URL(`private`, this.baseUrl);
 
     const resp = await this.httpLib.fetch(url.href, {
       method: "GET",
+      headers: {
+        Authorization: makeBearerTokenAuthHeader(token),
+      }
     });
 
     switch (resp.status) {
@@ -405,7 +413,7 @@ export class TalerMerchantInstanceHttpClient {
   /**
    * 
https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private
    */
-  async deleteCurrentInstance(params: { purge?: boolean }) {
+  async deleteCurrentInstance(token: AccessToken, params: { purge?: boolean }) 
{
     const url = new URL(`private`, this.baseUrl);
 
     if (params.purge) {
@@ -414,6 +422,9 @@ export class TalerMerchantInstanceHttpClient {
 
     const resp = await this.httpLib.fetch(url.href, {
       method: "DELETE",
+      headers: {
+        Authorization: makeBearerTokenAuthHeader(token),
+      }
     });
 
     switch (resp.status) {
@@ -434,6 +445,7 @@ export class TalerMerchantInstanceHttpClient {
    * 
https://docs.taler.net/core/api-merchant.html#get--instances-$INSTANCE-private-kyc
    */
   async getCurrentIntanceKycStatus(
+    token: AccessToken,
     params: TalerMerchantApi.GetKycStatusRequestParams,
   ) {
     const url = new URL(`private/kyc`, this.baseUrl);
@@ -450,6 +462,9 @@ export class TalerMerchantInstanceHttpClient {
 
     const resp = await this.httpLib.fetch(url.href, {
       method: "GET",
+      headers: {
+        Authorization: makeBearerTokenAuthHeader(token),
+      }
     });
 
     switch (resp.status) {
@@ -475,12 +490,15 @@ export class TalerMerchantInstanceHttpClient {
   /**
    * 
https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-accounts
    */
-  async addAccount(body: TalerMerchantApi.AccountAddDetails) {
+  async addAccount(token: AccessToken,body: 
TalerMerchantApi.AccountAddDetails) {
     const url = new URL(`private/accounts`, this.baseUrl);
 
     const resp = await this.httpLib.fetch(url.href, {
       method: "POST",
       body,
+      headers: {
+        Authorization: makeBearerTokenAuthHeader(token),
+      }
     });
 
     switch (resp.status) {
@@ -499,6 +517,7 @@ export class TalerMerchantInstanceHttpClient {
    * 
https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCE]-private-accounts-$H_WIRE
    */
   async updateAccount(
+    token: AccessToken,
     wireAccount: string,
     body: TalerMerchantApi.AccountPatchDetails,
   ) {
@@ -507,6 +526,9 @@ export class TalerMerchantInstanceHttpClient {
     const resp = await this.httpLib.fetch(url.href, {
       method: "PATCH",
       body,
+      headers: {
+        Authorization: makeBearerTokenAuthHeader(token),
+      }
     });
     switch (resp.status) {
       case HttpStatusCode.NoContent:
@@ -544,11 +566,14 @@ export class TalerMerchantInstanceHttpClient {
   /**
    * 
https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-accounts-$H_WIRE
    */
-  async getAccount(wireAccount: string) {
+  async getAccount(token: AccessToken,wireAccount: string) {
     const url = new URL(`private/accounts/${wireAccount}`, this.baseUrl);
 
     const resp = await this.httpLib.fetch(url.href, {
       method: "GET",
+      headers: {
+        Authorization: makeBearerTokenAuthHeader(token),
+      },
     });
 
     switch (resp.status) {
@@ -564,11 +589,14 @@ export class TalerMerchantInstanceHttpClient {
   /**
    * 
https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private-accounts-$H_WIRE
    */
-  async deleteAccount(wireAccount: string) {
+  async deleteAccount(token: AccessToken,wireAccount: string) {
     const url = new URL(`private/accounts/${wireAccount}`, this.baseUrl);
 
     const resp = await this.httpLib.fetch(url.href, {
       method: "DELETE",
+      headers: {
+        Authorization: makeBearerTokenAuthHeader(token),
+      },
     });
 
     switch (resp.status) {
@@ -588,12 +616,15 @@ export class TalerMerchantInstanceHttpClient {
   /**
    * 
https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-products
    */
-  async addProduct(body: TalerMerchantApi.ProductAddDetail) {
+  async addProduct(token: AccessToken,body: TalerMerchantApi.ProductAddDetail) 
{
     const url = new URL(`private/products`, this.baseUrl);
 
     const resp = await this.httpLib.fetch(url.href, {
       method: "POST",
       body,
+      headers: {
+        Authorization: makeBearerTokenAuthHeader(token),
+      }
     });
 
     switch (resp.status) {
@@ -610,6 +641,7 @@ export class TalerMerchantInstanceHttpClient {
    * 
https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCE]-private-products-$PRODUCT_ID
    */
   async updateProduct(
+    token: AccessToken,
     productId: string,
     body: TalerMerchantApi.ProductAddDetail,
   ) {
@@ -618,6 +650,9 @@ export class TalerMerchantInstanceHttpClient {
     const resp = await this.httpLib.fetch(url.href, {
       method: "PATCH",
       body,
+      headers: {
+        Authorization: makeBearerTokenAuthHeader(token),
+      }
     });
 
     switch (resp.status) {
@@ -635,13 +670,16 @@ export class TalerMerchantInstanceHttpClient {
   /**
    * 
https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-products
    */
-  async listProducts(params?: PaginationParams) {
+  async listProducts(token: AccessToken,params?: PaginationParams) {
     const url = new URL(`private/products`, this.baseUrl);
 
     addMerchantPaginationParams(url, params);
 
     const resp = await this.httpLib.fetch(url.href, {
       method: "GET",
+      headers: {
+        Authorization: makeBearerTokenAuthHeader(token),
+      }
     });
 
     switch (resp.status) {
@@ -657,11 +695,14 @@ export class TalerMerchantInstanceHttpClient {
   /**
    * 
https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-products-$PRODUCT_ID
    */
-  async getProduct(productId: string) {
+  async getProduct(token: AccessToken,productId: string) {
     const url = new URL(`private/products/${productId}`, this.baseUrl);
 
     const resp = await this.httpLib.fetch(url.href, {
       method: "GET",
+      headers: {
+        Authorization: makeBearerTokenAuthHeader(token),
+      }
     });
 
     switch (resp.status) {
@@ -677,11 +718,15 @@ export class TalerMerchantInstanceHttpClient {
   /**
    * https://docs.taler.net/core/api-merchant.html#reserving-inventory
    */
-  async lockProduct(productId: string) {
+  async lockProduct(token: AccessToken, productId: string, body: 
TalerMerchantApi.LockRequest) {
     const url = new URL(`private/products/${productId}/lock`, this.baseUrl);
 
     const resp = await this.httpLib.fetch(url.href, {
       method: "POST",
+      body,
+      headers: {
+        Authorization: makeBearerTokenAuthHeader(token),
+      }
     });
 
     switch (resp.status) {
@@ -699,11 +744,14 @@ export class TalerMerchantInstanceHttpClient {
   /**
    * 
https://docs.taler.net/core/api-merchant.html#removing-products-from-inventory
    */
-  async removeProduct(productId: string) {
+  async removeProduct(token: AccessToken,productId: string) {
     const url = new URL(`private/products/${productId}`, this.baseUrl);
 
     const resp = await this.httpLib.fetch(url.href, {
       method: "DELETE",
+      headers: {
+        Authorization: makeBearerTokenAuthHeader(token),
+      }
     });
 
     switch (resp.status) {
@@ -725,12 +773,15 @@ export class TalerMerchantInstanceHttpClient {
   /**
    * 
https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-orders
    */
-  async createOrder(body: TalerMerchantApi.PostOrderRequest) {
+  async createOrder(token: AccessToken,body: 
TalerMerchantApi.PostOrderRequest) {
     const url = new URL(`private/orders`, this.baseUrl);
 
     const resp = await this.httpLib.fetch(url.href, {
       method: "POST",
       body,
+      headers: {
+        Authorization: makeBearerTokenAuthHeader(token),
+      }
     });
     return this.procesOrderCreationResponse(resp)
   }
@@ -759,7 +810,7 @@ export class TalerMerchantInstanceHttpClient {
   /**
    * https://docs.taler.net/core/api-merchant.html#inspecting-orders
    */
-  async listOrders(params: TalerMerchantApi.ListOrdersRequestParams = {}) {
+  async listOrders(token: AccessToken,params: 
TalerMerchantApi.ListOrdersRequestParams = {}) {
     const url = new URL(`private/orders`, this.baseUrl);
 
     if (params.date) {
@@ -787,6 +838,9 @@ export class TalerMerchantInstanceHttpClient {
 
     const resp = await this.httpLib.fetch(url.href, {
       method: "GET",
+      headers: {
+        Authorization: makeBearerTokenAuthHeader(token),
+      }
     });
 
     switch (resp.status) {
@@ -801,6 +855,7 @@ export class TalerMerchantInstanceHttpClient {
    * 
https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-orders-$ORDER_ID
    */
   async getOrder(
+    token: AccessToken,
     orderId: string,
     params: TalerMerchantApi.GetOrderRequestParams = {},
   ) {
@@ -818,6 +873,9 @@ export class TalerMerchantInstanceHttpClient {
 
     const resp = await this.httpLib.fetch(url.href, {
       method: "GET",
+      headers: {
+        Authorization: makeBearerTokenAuthHeader(token),
+      }
     });
 
     switch (resp.status) {
@@ -844,12 +902,15 @@ export class TalerMerchantInstanceHttpClient {
   /**
    * https://docs.taler.net/core/api-merchant.html#private-order-data-cleanup
    */
-  async forgetOrder(orderId: string, body: TalerMerchantApi.ForgetRequest) {
+  async forgetOrder(token: AccessToken,orderId: string, body: 
TalerMerchantApi.ForgetRequest) {
     const url = new URL(`private/orders/${orderId}/forget`, this.baseUrl);
 
     const resp = await this.httpLib.fetch(url.href, {
       method: "PATCH",
       body,
+      headers: {
+        Authorization: makeBearerTokenAuthHeader(token),
+      }
     });
 
     switch (resp.status) {
@@ -871,11 +932,14 @@ export class TalerMerchantInstanceHttpClient {
   /**
    * 
https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private-orders-$ORDER_ID
    */
-  async deleteOrder(orderId: string) {
+  async deleteOrder(token: AccessToken,orderId: string) {
     const url = new URL(`private/orders/${orderId}`, this.baseUrl);
 
     const resp = await this.httpLib.fetch(url.href, {
       method: "DELETE",
+      headers: {
+        Authorization: makeBearerTokenAuthHeader(token),
+      }
     });
 
     switch (resp.status) {
@@ -897,12 +961,15 @@ export class TalerMerchantInstanceHttpClient {
   /**
    * 
https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-orders-$ORDER_ID-refund
    */
-  async addRefund(orderId: string, body: TalerMerchantApi.RefundRequest) {
+  async addRefund(token: AccessToken,orderId: string, body: 
TalerMerchantApi.RefundRequest) {
     const url = new URL(`private/orders/${orderId}/refund`, this.baseUrl);
 
     const resp = await this.httpLib.fetch(url.href, {
       method: "POST",
       body,
+      headers: {
+        Authorization: makeBearerTokenAuthHeader(token),
+      }
     });
 
     switch (resp.status) {
@@ -928,12 +995,15 @@ export class TalerMerchantInstanceHttpClient {
   /**
    * 
https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-transfers
    */
-  async informWireTransfer(body: TalerMerchantApi.TransferInformation) {
+  async informWireTransfer(token: AccessToken,body: 
TalerMerchantApi.TransferInformation) {
     const url = new URL(`private/transfers`, this.baseUrl);
 
     const resp = await this.httpLib.fetch(url.href, {
       method: "POST",
       body,
+      headers: {
+        Authorization: makeBearerTokenAuthHeader(token),
+      }
     });
 
     switch (resp.status) {
@@ -952,6 +1022,7 @@ export class TalerMerchantInstanceHttpClient {
    * 
https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-transfers
    */
   async listWireTransfers(
+    token: AccessToken,
     params: TalerMerchantApi.ListWireTransferRequestParams = {},
   ) {
     const url = new URL(`private/transfers`, this.baseUrl);
@@ -972,6 +1043,9 @@ export class TalerMerchantInstanceHttpClient {
 
     const resp = await this.httpLib.fetch(url.href, {
       method: "GET",
+      headers: {
+        Authorization: makeBearerTokenAuthHeader(token),
+      }
     });
 
     switch (resp.status) {
@@ -985,11 +1059,14 @@ export class TalerMerchantInstanceHttpClient {
   /**
    * 
https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private-transfers-$TID
    */
-  async deleteWireTransfer(transferId: string) {
+  async deleteWireTransfer(token: AccessToken,transferId: string) {
     const url = new URL(`private/transfers/${transferId}`, this.baseUrl);
 
     const resp = await this.httpLib.fetch(url.href, {
       method: "DELETE",
+      headers: {
+        Authorization: makeBearerTokenAuthHeader(token),
+      }
     });
 
     switch (resp.status) {
@@ -1011,12 +1088,15 @@ export class TalerMerchantInstanceHttpClient {
   /**
    * 
https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-otp-devices
    */
-  async addOtpDevice(body: TalerMerchantApi.OtpDeviceAddDetails) {
+  async addOtpDevice(token: AccessToken,body: 
TalerMerchantApi.OtpDeviceAddDetails) {
     const url = new URL(`private/otp-devices`, this.baseUrl);
 
     const resp = await this.httpLib.fetch(url.href, {
       method: "POST",
       body,
+      headers: {
+        Authorization: makeBearerTokenAuthHeader(token),
+      }
     });
 
     switch (resp.status) {
@@ -1033,6 +1113,7 @@ export class TalerMerchantInstanceHttpClient {
    * 
https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCE]-private-otp-devices-$DEVICE_ID
    */
   async updateOtpDevice(
+    token: AccessToken,
     deviceId: string,
     body: TalerMerchantApi.OtpDevicePatchDetails,
   ) {
@@ -1041,6 +1122,9 @@ export class TalerMerchantInstanceHttpClient {
     const resp = await this.httpLib.fetch(url.href, {
       method: "PATCH",
       body,
+      headers: {
+        Authorization: makeBearerTokenAuthHeader(token),
+      }
     });
     switch (resp.status) {
       case HttpStatusCode.NoContent:
@@ -1057,11 +1141,14 @@ export class TalerMerchantInstanceHttpClient {
   /**
    * 
https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-otp-devices
    */
-  async listOtpDevices() {
+  async listOtpDevices(token: AccessToken,) {
     const url = new URL(`private/otp-devices`, this.baseUrl);
 
     const resp = await this.httpLib.fetch(url.href, {
       method: "GET",
+      headers: {
+        Authorization: makeBearerTokenAuthHeader(token),
+      }
     });
     switch (resp.status) {
       case HttpStatusCode.Ok:
@@ -1077,6 +1164,7 @@ export class TalerMerchantInstanceHttpClient {
    * 
https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-otp-devices-$DEVICE_ID
    */
   async getOtpDevice(
+    token: AccessToken,
     deviceId: string,
     params: TalerMerchantApi.GetOtpDeviceRequestParams = {},
   ) {
@@ -1090,6 +1178,9 @@ export class TalerMerchantInstanceHttpClient {
     }
     const resp = await this.httpLib.fetch(url.href, {
       method: "GET",
+      headers: {
+        Authorization: makeBearerTokenAuthHeader(token),
+      }
     });
 
     switch (resp.status) {
@@ -1105,11 +1196,14 @@ export class TalerMerchantInstanceHttpClient {
   /**
    * 
https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private-otp-devices-$DEVICE_ID
    */
-  async deleteOtpDevice(deviceId: string) {
+  async deleteOtpDevice(token: AccessToken,deviceId: string) {
     const url = new URL(`private/otp-devices/${deviceId}`, this.baseUrl);
 
     const resp = await this.httpLib.fetch(url.href, {
       method: "DELETE",
+      headers: {
+        Authorization: makeBearerTokenAuthHeader(token),
+      }
     });
     switch (resp.status) {
       case HttpStatusCode.NoContent:
@@ -1128,12 +1222,15 @@ export class TalerMerchantInstanceHttpClient {
   /**
    * 
https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-templates
    */
-  async addTemplate(body: TalerMerchantApi.TemplateAddDetails) {
+  async addTemplate(token: AccessToken,body: 
TalerMerchantApi.TemplateAddDetails) {
     const url = new URL(`private/templates`, this.baseUrl);
 
     const resp = await this.httpLib.fetch(url.href, {
       method: "POST",
       body,
+      headers: {
+        Authorization: makeBearerTokenAuthHeader(token),
+      }
     });
     switch (resp.status) {
       case HttpStatusCode.NoContent:
@@ -1149,6 +1246,7 @@ export class TalerMerchantInstanceHttpClient {
    * 
https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCE]-private-templates-$TEMPLATE_ID
    */
   async updateTemplate(
+    token: AccessToken,
     templateId: string,
     body: TalerMerchantApi.TemplatePatchDetails,
   ) {
@@ -1157,6 +1255,9 @@ export class TalerMerchantInstanceHttpClient {
     const resp = await this.httpLib.fetch(url.href, {
       method: "PATCH",
       body,
+      headers: {
+        Authorization: makeBearerTokenAuthHeader(token),
+      }
     });
     switch (resp.status) {
       case HttpStatusCode.NoContent:
@@ -1173,11 +1274,14 @@ export class TalerMerchantInstanceHttpClient {
   /**
    * https://docs.taler.net/core/api-merchant.html#inspecting-template
    */
-  async listTemplates() {
+  async listTemplates(token: AccessToken,) {
     const url = new URL(`private/templates`, this.baseUrl);
 
     const resp = await this.httpLib.fetch(url.href, {
       method: "GET",
+      headers: {
+        Authorization: makeBearerTokenAuthHeader(token),
+      }
     });
     switch (resp.status) {
       case HttpStatusCode.Ok:
@@ -1192,11 +1296,14 @@ export class TalerMerchantInstanceHttpClient {
   /**
    * 
https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-templates-$TEMPLATE_ID
    */
-  async getTemplate(templateId: string) {
+  async getTemplate(token: AccessToken,templateId: string) {
     const url = new URL(`private/templates/${templateId}`, this.baseUrl);
 
     const resp = await this.httpLib.fetch(url.href, {
       method: "GET",
+      headers: {
+        Authorization: makeBearerTokenAuthHeader(token),
+      }
     });
     switch (resp.status) {
       case HttpStatusCode.Ok:
@@ -1211,11 +1318,14 @@ export class TalerMerchantInstanceHttpClient {
   /**
    * 
https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private-templates-$TEMPLATE_ID
    */
-  async deleteTemplate(templateId: string) {
+  async deleteTemplate(token: AccessToken,templateId: string) {
     const url = new URL(`private/templates/${templateId}`, this.baseUrl);
 
     const resp = await this.httpLib.fetch(url.href, {
       method: "DELETE",
+      headers: {
+        Authorization: makeBearerTokenAuthHeader(token),
+      }
     });
     switch (resp.status) {
       case HttpStatusCode.NoContent:
@@ -1270,12 +1380,15 @@ export class TalerMerchantInstanceHttpClient {
   /**
    * 
https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCES]-private-webhooks
    */
-  async addWebhook(body: TalerMerchantApi.WebhookAddDetails) {
+  async addWebhook(token: AccessToken,body: 
TalerMerchantApi.WebhookAddDetails) {
     const url = new URL(`private/webhooks`, this.baseUrl);
 
     const resp = await this.httpLib.fetch(url.href, {
       method: "POST",
       body,
+      headers: {
+        Authorization: makeBearerTokenAuthHeader(token),
+      }
     });
 
     switch (resp.status) {
@@ -1292,6 +1405,7 @@ export class TalerMerchantInstanceHttpClient {
    * 
https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCES]-private-webhooks-$WEBHOOK_ID
    */
   async updateWebhook(
+    token: AccessToken,
     webhookId: string,
     body: TalerMerchantApi.WebhookPatchDetails,
   ) {
@@ -1300,6 +1414,9 @@ export class TalerMerchantInstanceHttpClient {
     const resp = await this.httpLib.fetch(url.href, {
       method: "PATCH",
       body,
+      headers: {
+        Authorization: makeBearerTokenAuthHeader(token),
+      }
     });
 
     switch (resp.status) {
@@ -1317,11 +1434,14 @@ export class TalerMerchantInstanceHttpClient {
   /**
    * 
https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCES]-private-webhooks
    */
-  async listWebhooks() {
+  async listWebhooks(token: AccessToken,) {
     const url = new URL(`private/webhooks`, this.baseUrl);
 
     const resp = await this.httpLib.fetch(url.href, {
       method: "GET",
+      headers: {
+        Authorization: makeBearerTokenAuthHeader(token),
+      }
     });
 
     switch (resp.status) {
@@ -1337,11 +1457,14 @@ export class TalerMerchantInstanceHttpClient {
   /**
    * 
https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCES]-private-webhooks-$WEBHOOK_ID
    */
-  async getWebhook(webhookId: string) {
+  async getWebhook(token: AccessToken,webhookId: string) {
     const url = new URL(`private/webhooks/${webhookId}`, this.baseUrl);
 
     const resp = await this.httpLib.fetch(url.href, {
       method: "GET",
+      headers: {
+        Authorization: makeBearerTokenAuthHeader(token),
+      }
     });
     switch (resp.status) {
       case HttpStatusCode.NoContent:
@@ -1356,11 +1479,14 @@ export class TalerMerchantInstanceHttpClient {
   /**
    * 
https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCES]-private-webhooks-$WEBHOOK_ID
    */
-  async removeWebhook(webhookId: string) {
+  async removeWebhook(token: AccessToken,webhookId: string) {
     const url = new URL(`private/webhooks/${webhookId}`, this.baseUrl);
 
     const resp = await this.httpLib.fetch(url.href, {
       method: "DELETE",
+      headers: {
+        Authorization: makeBearerTokenAuthHeader(token),
+      }
     });
     switch (resp.status) {
       case HttpStatusCode.NoContent:
@@ -1379,12 +1505,15 @@ export class TalerMerchantInstanceHttpClient {
   /**
    * 
https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCES]-private-tokenfamilies
    */
-  async createTokenFamily(body: TalerMerchantApi.TokenFamilyCreateRequest) {
+  async createTokenFamily(token: AccessToken,body: 
TalerMerchantApi.TokenFamilyCreateRequest) {
     const url = new URL(`private/tokenfamilies`, this.baseUrl);
 
     const resp = await this.httpLib.fetch(url.href, {
       method: "POST",
       body,
+      headers: {
+        Authorization: makeBearerTokenAuthHeader(token),
+      }
     });
 
     switch (resp.status) {
@@ -1401,6 +1530,7 @@ export class TalerMerchantInstanceHttpClient {
    * 
https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCES]-private-tokenfamilies-$TOKEN_FAMILY_SLUG
    */
   async updateTokenFamily(
+    token: AccessToken,
     tokenSlug: string,
     body: TalerMerchantApi.TokenFamilyUpdateRequest,
   ) {
@@ -1409,6 +1539,9 @@ export class TalerMerchantInstanceHttpClient {
     const resp = await this.httpLib.fetch(url.href, {
       method: "POST",
       body,
+      headers: {
+        Authorization: makeBearerTokenAuthHeader(token),
+      }
     });
     switch (resp.status) {
       case HttpStatusCode.Ok:
@@ -1423,11 +1556,14 @@ export class TalerMerchantInstanceHttpClient {
   /**
    * 
https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCES]-private-tokenfamilies
    */
-  async listTokenFamilies() {
+  async listTokenFamilies(token: AccessToken,) {
     const url = new URL(`private/tokenfamilies`, this.baseUrl);
 
     const resp = await this.httpLib.fetch(url.href, {
       method: "GET",
+      headers: {
+        Authorization: makeBearerTokenAuthHeader(token),
+      }
     });
 
     switch (resp.status) {
@@ -1443,11 +1579,14 @@ export class TalerMerchantInstanceHttpClient {
   /**
    * 
https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCES]-private-tokenfamilies-$TOKEN_FAMILY_SLUG
    */
-  async getTokenFamily(tokenSlug: string) {
+  async getTokenFamily(token: AccessToken,tokenSlug: string) {
     const url = new URL(`private/tokenfamilies/${tokenSlug}`, this.baseUrl);
 
     const resp = await this.httpLib.fetch(url.href, {
       method: "GET",
+      headers: {
+        Authorization: makeBearerTokenAuthHeader(token),
+      }
     });
 
     switch (resp.status) {
@@ -1463,11 +1602,14 @@ export class TalerMerchantInstanceHttpClient {
   /**
    * 
https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCES]-private-tokenfamilies-$TOKEN_FAMILY_SLUG
    */
-  async deleteTokenFamily(tokenSlug: string) {
+  async deleteTokenFamily(token: AccessToken,tokenSlug: string) {
     const url = new URL(`private/tokenfamilies/${tokenSlug}`, this.baseUrl);
 
     const resp = await this.httpLib.fetch(url.href, {
       method: "DELETE",
+      headers: {
+        Authorization: makeBearerTokenAuthHeader(token),
+      }
     });
     switch (resp.status) {
       case HttpStatusCode.NoContent:
@@ -1514,12 +1656,15 @@ export class TalerMerchantManagementHttpClient extends 
TalerMerchantInstanceHttp
   /**
    * https://docs.taler.net/core/api-merchant.html#post--management-instances
    */
-  async createInstance(body: TalerMerchantApi.InstanceConfigurationMessage) {
+  async createInstance(token: AccessToken,body: 
TalerMerchantApi.InstanceConfigurationMessage) {
     const url = new URL(`management/instances`, this.baseUrl);
 
     const resp = await this.httpLib.fetch(url.href, {
       method: "POST",
       body,
+      headers: {
+        Authorization: makeBearerTokenAuthHeader(token),
+      }
     });
 
 
@@ -1539,6 +1684,7 @@ export class TalerMerchantManagementHttpClient extends 
TalerMerchantInstanceHttp
    * 
https://docs.taler.net/core/api-merchant.html#post--management-instances-$INSTANCE-auth
    */
   async updateInstanceAuthentication(
+    token: AccessToken,
     body: TalerMerchantApi.InstanceAuthConfigurationMessage,
   ) {
     const url = new URL(`management/instances`, this.baseUrl);
@@ -1546,6 +1692,9 @@ export class TalerMerchantManagementHttpClient extends 
TalerMerchantInstanceHttp
     const resp = await this.httpLib.fetch(url.href, {
       method: "POST",
       body,
+      headers: {
+        Authorization: makeBearerTokenAuthHeader(token),
+      }
     });
 
     switch (resp.status) {
@@ -1562,6 +1711,7 @@ export class TalerMerchantManagementHttpClient extends 
TalerMerchantInstanceHttp
    * 
https://docs.taler.net/core/api-merchant.html#patch--management-instances-$INSTANCE
    */
   async updateInstance(
+    token: AccessToken,
     instanceId: string,
     body: TalerMerchantApi.InstanceReconfigurationMessage,
   ) {
@@ -1570,6 +1720,9 @@ export class TalerMerchantManagementHttpClient extends 
TalerMerchantInstanceHttp
     const resp = await this.httpLib.fetch(url.href, {
       method: "PATCH",
       body,
+      headers: {
+        Authorization: makeBearerTokenAuthHeader(token),
+      }
     });
     switch (resp.status) {
       case HttpStatusCode.NoContent:
@@ -1584,11 +1737,14 @@ export class TalerMerchantManagementHttpClient extends 
TalerMerchantInstanceHttp
   /**
    * https://docs.taler.net/core/api-merchant.html#get--management-instances
    */
-  async listInstances() {
+  async listInstances(token: AccessToken,) {
     const url = new URL(`management/instances`, this.baseUrl);
 
     const resp = await this.httpLib.fetch(url.href, {
       method: "GET",
+      headers: {
+        Authorization: makeBearerTokenAuthHeader(token),
+      }
     });
 
     switch (resp.status) {
@@ -1603,11 +1759,14 @@ export class TalerMerchantManagementHttpClient extends 
TalerMerchantInstanceHttp
    * 
https://docs.taler.net/core/api-merchant.html#get--management-instances-$INSTANCE
    *
    */
-  async getInstance(instanceId: string) {
+  async getInstance(token: AccessToken,instanceId: string) {
     const url = new URL(`management/instances/${instanceId}`, this.baseUrl);
 
     const resp = await this.httpLib.fetch(url.href, {
       method: "GET",
+      headers: {
+        Authorization: makeBearerTokenAuthHeader(token),
+      }
     });
 
     switch (resp.status) {
@@ -1621,7 +1780,7 @@ export class TalerMerchantManagementHttpClient extends 
TalerMerchantInstanceHttp
   /**
    * 
https://docs.taler.net/core/api-merchant.html#delete--management-instances-$INSTANCE
    */
-  async deleteInstance(instanceId: string, params: { purge?: boolean } = {}) {
+  async deleteInstance(token: AccessToken,instanceId: string, params: { 
purge?: boolean } = {}) {
     const url = new URL(`management/instances/${instanceId}`, this.baseUrl);
 
     if (params.purge) {
@@ -1630,6 +1789,9 @@ export class TalerMerchantManagementHttpClient extends 
TalerMerchantInstanceHttp
 
     const resp = await this.httpLib.fetch(url.href, {
       method: "DELETE",
+      headers: {
+        Authorization: makeBearerTokenAuthHeader(token),
+      }
     });
     switch (resp.status) {
       case HttpStatusCode.NoContent:
@@ -1649,6 +1811,7 @@ export class TalerMerchantManagementHttpClient extends 
TalerMerchantInstanceHttp
    * 
https://docs.taler.net/core/api-merchant.html#get--management-instances-$INSTANCE-kyc
    */
   async getIntanceKycStatus(
+    token: AccessToken,
     instanceId: string,
     params: TalerMerchantApi.GetKycStatusRequestParams,
   ) {
@@ -1666,6 +1829,9 @@ export class TalerMerchantManagementHttpClient extends 
TalerMerchantInstanceHttp
 
     const resp = await this.httpLib.fetch(url.href, {
       method: "GET",
+      headers: {
+        Authorization: makeBearerTokenAuthHeader(token),
+      }
     });
     switch (resp.status) {
       case HttpStatusCode.Accepted:
diff --git a/packages/taler-util/src/http-client/types.ts 
b/packages/taler-util/src/http-client/types.ts
index 7f97f9ff1..8578eecd4 100644
--- a/packages/taler-util/src/http-client/types.ts
+++ b/packages/taler-util/src/http-client/types.ts
@@ -3933,7 +3933,7 @@ export namespace TalerMerchantApi {
     // Minimum age buyer must have (in years).
     minimum_age?: Integer;
   }
-  interface LockRequest {
+  export interface LockRequest {
     // UUID that identifies the frontend performing the lock
     // Must be unique for the lifetime of the lock.
     lock_uuid: string;
@@ -3973,7 +3973,7 @@ export namespace TalerMerchantApi {
     // be used in case different UUIDs were used for different
     // products (i.e. in case the user started with multiple
     // shopping sessions that were combined during checkout).
-    lock_uuids: string[];
+    lock_uuids?: string[];
 
     // Should a token for claiming the order be generated?
     // False can make sense if the ORDER_ID is sufficiently
@@ -5005,7 +5005,7 @@ export namespace TalerMerchantApi {
   }
   // Delivery location, loosely modeled as a subset of
   // ISO20022's PostalAddress25.
-  interface Location {
+  export interface Location {
     // Nation with its own government.
     country?: string;
 

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]