1.11.4. Taler Bank Integration API

This chapter describe the APIs that banks need to offer towards Taler wallets to tightly integrate with GNU Taler.

GET /config

Get configuration information about the bank.

Request:

Response:

200 OK:

The exchange responds with a BankVersion object. This request should virtually always be successful.

Details:

interface BankVersion {
  // libtool-style representation of the Bank protocol version, see
  // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning
  // The format is "current:revision:age".
  version: string;

  // Currency used by this bank.
  currency: string;

  // Name of the API.
  name: "taler-bank-integration";
}

1.11.4.1. Withdrawing

Withdrawals with a Taler-integrated bank are based on withdrawal operations. Some user interaction (on the bank’s website or a Taler-enabled ATM) creates a withdrawal operation record in the bank’s database. The wallet can use a unique identifier for the withdrawal operation (the wopid) to interact with the withdrawal operation.

GET ${BANK_API_BASE_URL}/withdrawal-operation/${wopid}

Query information about a withdrawal operation, identified by the wopid.

Request

Query Parameters:
  • long_poll_msOptional. If specified, the bank will wait up to long_poll_ms milliseconds for completion of the transfer before sending the HTTP response. A client must never rely on this behavior, as the bank may return a response immediately.

Response

200 OK:

The withdrawal operation is known to the bank, and details are given in the BankWithdrawalOperationStatus response body.

export class BankWithdrawalOperationStatus {
  // Indicates whether the withdrawal was aborted.
  aborted: boolean;

  // Has the wallet selected parameters for the withdrawal operation
  // (exchange and reserve public key) and successfully sent it
  // to the bank?
  selection_done: boolean;

  // The transfer has been confirmed and registered by the bank.
  // Does not guarantee that the funds have arrived at the exchange already.
  transfer_done: boolean;

  // Amount that will be withdrawn with this operation
  // (raw amount without fee considerations).
  amount: Amount;

  // Bank account of the customer that is withdrawing, as a
  // payto URI.
  sender_wire?: string;

  // Suggestion for an exchange given by the bank.
  suggested_exchange?: string;

  // URL that the user needs to navigate to in order to
  // complete some final confirmation (e.g. 2FA).
  // It may contain withdrawal operation id
  confirm_transfer_url?: string;

  // Wire transfer types supported by the bank.
  wire_types: string[];
}
POST ${BANK_API_BASE_URL}/withdrawal-operation/${wopid}

Request The body of this request must have the format of a BankWithdrawalOperationPostRequest.

Response

200 OK:

The bank has accepted the withdrawal operation parameters chosen by the wallet. The response is a BankWithdrawalOperationPostResponse.

404 Not found:

The bank does not know about a withdrawal operation with the specified wopid.

409 Conflict (New):

The wallet selected a different exchange or reserve public key under the same withdrawal ID.

Details

interface BankWithdrawalOperationPostRequest {

  // Reserve public key.
  reserve_pub: string;

  // Payto address of the exchange selected for the withdrawal.
  selected_exchange: string;
}
interface BankWithdrawalOperationPostResponse {

  // The transfer has been confirmed and registered by the bank.
  // Does not guarantee that the funds have arrived at the exchange already.
  transfer_done: boolean;

  // URL that the user needs to navigate to in order to
  // complete some final confirmation (e.g. 2FA).
  //
  // Only applicable when transfer_done is false.
  // It may contain withdrawal operation id
  confirm_transfer_url?: string;
}