commit a8c1ebfdc1f586314ca81b654dffe497dd1b57ab
parent 287e071c68dd0b1bcc046bdcb3fb60d91222eff4
Author: Christian Grothoff <christian@grothoff.org>
Date: Wed, 7 May 2025 20:32:47 +0200
clean up spec, remove things that are no longer implemented
Diffstat:
| M | core/api-exchange.rst | | | 624 | +++++++------------------------------------------------------------------------- |
1 file changed, 48 insertions(+), 576 deletions(-)
diff --git a/core/api-exchange.rst b/core/api-exchange.rst
@@ -60,7 +60,7 @@ possibly by using HTTPS.
as well as the list of possible KYC requirements. This endpoint is largely
for the SPA for AML officers. Merchants should use ``/keys`` which also
contains the protocol version and currency.
- This specification corresponds to ``current`` protocol being **v25**.
+ This specification corresponds to ``current`` protocol being **v27**.
**Response:**
@@ -1483,7 +1483,6 @@ Bachelor thesis of Gian Demarmels and Lucien Heuzeveldt,
for details.
-.. note:: This endpoint is available since v26 of the API and is a substitute
for ``/csr-withdraw`` and ``/csr-melt``.
@@ -1650,10 +1649,9 @@ exchange.
.. _withdraw:
.. http:post:: /withdraw
- .. note::
- This endpoint is available starting with API version v26.
- It combines and replaces the endpoints ``/reserves/$RESERVE_PUB/batch-withdraw``
- and ``/reserves/$RESERVE_PUB/age-withdraw``.
+ .. note:: This endpoint is available starting with API version **v26**.
+ It combines and replaces the endpoints ``/reserves/$RESERVE_PUB/batch-withdraw``
+ and ``/reserves/$RESERVE_PUB/age-withdraw``.
Withdraw multiple coins from the same reserve. Note that the client should
commit all of the request details, including the private key of the coins and
@@ -1907,193 +1905,10 @@ exchange.
}
-.. http:post:: /csr-withdraw
-
- .. note:: This endpoint is deprecated starting with API version v26.
- Use ``/blinding-prepare`` instead.
-
- Obtain exchange-side input values in preparation for a
- withdraw step for certain denomination cipher types,
- specifically at this point for Clause-Schnorr blind
- signatures.
-
- **Request:** The request body must be a `WithdrawPrepareRequest` object.
-
- **Response:**
-
- :http:statuscode:`200 OK`:
- The request was successful, and the response is a `WithdrawPrepareResponse`. Note that repeating exactly the same request
- will again yield the same response (assuming none of the denomination is expired).
- :http:statuscode:`404 Not found`:
- The denomination key is not known to the exchange.
- :http:statuscode:`410 Gone`:
- The requested denomination key is not yet or no longer valid.
- It either before the validity start, past the expiration or was revoked. The response is a
- `DenominationGoneMessage`. Clients must evaluate
- the error code provided to understand which of the
- cases this is and handle it accordingly.
-
- **Details:**
-
- .. ts:def:: WithdrawPrepareRequest
-
- interface WithdrawPrepareRequest {
-
- // Nonce to be used by the exchange to derive
- // its private inputs from. Must not have ever
- // been used before.
- nonce: CSNonce;
-
- // Hash of the public key of the denomination the
- // request relates to.
- denom_pub_hash: HashCode;
-
- }
-
- .. ts:def:: WithdrawPrepareResponse
-
- type WithdrawPrepareResponse =
- | ExchangeWithdrawValue;
-
- .. ts:def:: ExchangeWithdrawValue
-
- type ExchangeWithdrawValue = DenomCipher & (
- | ExchangeRsaWithdrawValue
- | ExchangeCsWithdrawValue
- );
-
- .. ts:def:: DenomCipher
-
- interface DenomCipher {
- cipher: "RSA" | "CS";
- }
-
- .. ts:def:: ExchangeRsaWithdrawValue
-
- interface ExchangeRsaWithdrawValue extends DenomCipher {
- cipher: "RSA";
- }
-
- .. ts:def:: ExchangeCsWithdrawValue
-
- interface ExchangeCsWithdrawValue extends DenomCipher {
- cipher: "CS";
-
- // CSR R0 value
- r_pub_0: CSRPublic;
-
- // CSR R1 value
- r_pub_1: CSRPublic;
- }
-
-
-.. http:post:: /reserves/$RESERVE_PUB/batch-withdraw
-
- .. note::
- This endpoint becomes deprecated starting with API version v26.
- Use the ``/withdraw`` endpoint instead, see `withdraw`_.
-
- Withdraw multiple coins from the same reserve. Note that the client should
- commit all of the request details, including the private key of the coins and
- the blinding factors, to disk *before* issuing this request, so that it can
- recover the information if necessary in case of transient failures, like
- power outage, network outage, etc.
-
- **Request:** The request body must be a `BatchWithdrawRequest` object.
-
- **Response:**
-
- :http:statuscode:`200 OK`:
- The request was successful, and the response is a `WithdrawResponse`.
- Note that repeating exactly the same request will again yield the same
- response, so if the network goes down during the transaction or before the
- client can commit the coin signature to disk, the coin is not lost.
- :http:statuscode:`403 Forbidden`:
- A signature is invalid.
- This response comes with a standard `ErrorDetail` response.
- :http:statuscode:`404 Not found`:
- A denomination key or the reserve are not known to the exchange. If the
- denomination key is unknown, this suggests a bug in the wallet as the
- wallet should have used current denomination keys from ``/keys``.
- In this case, the response will be a `DenominationUnknownMessage`.
- If the reserve is unknown, the wallet should not report a hard error yet, but
- instead simply wait for up to a day, as the wire transaction might simply
- not yet have completed and might be known to the exchange in the near future.
- In this case, the wallet should repeat the exact same request later again
- using exactly the same blinded coin.
- :http:statuscode:`409 Conflict`:
- One of the following reasons occured:
-
- 1. The balance of the reserve is not sufficient to withdraw the coins of the
- indicated denominations. The response is `WithdrawError` object.
-
- 2. The reserve has a birthday set and requires a request to ``/age-withdraw`` instead.
- The response comes with a standard `ErrorDetail` response with error-code
- ``TALER_EC_EXCHANGE_RESERVES_AGE_RESTRICTION_REQUIRED``
- and an additional field ``maximum_allowed_age`` for the maximum age (in years)
- that the client can commit to in the call to ``/age-withdraw``
- :http:statuscode:`410 Gone`:
- A requested denomination key is not yet or no longer valid.
- It either before the validity start, past the expiration or was revoked.
- The response is a `DenominationGoneMessage`. Clients must evaluate the
- error code provided to understand which of the cases this is and handle it
- accordingly.
- :http:statuscode:`451 Unavailable for Legal Reasons`:
- This reserve has received funds from a purse or the amount withdrawn
- exceeds another legal threshold and thus the reserve must
- be upgraded to an account (with KYC) before the withdraw can
- complete. Note that this response does NOT affirm that the
- withdraw will ultimately complete with the requested amount.
- The user should be redirected to the provided location to perform
- the required KYC checks to open the account before withdrawing.
- Afterwards, the request should be repeated.
- The response will be an `LegitimizationNeededResponse` object.
-
- Implementation note: internally, we need to
- distinguish between upgrading the reserve to an
- account (due to P2P payment) and identifying the
- owner of the origin bank account (due to exceeding
- the withdraw amount threshold), as we need to create
- a different payto://-URI for the KYC check depending
- on the case.
-
-
- **Details:**
-
- .. ts:def:: BatchWithdrawRequest
-
- interface BatchWithdrawRequest {
- // Array of requests for the individual coins to withdraw.
- planchets: SingleWithdrawRequest[];
-
- }
-
- .. ts:def:: SingleWithdrawRequest
-
- interface SingleWithdrawRequest {
- // Hash of a denomination public key, specifying the type of coin the client
- // would like the exchange to create.
- denom_pub_hash: HashCode;
-
- // Coin's blinded public key, should be (blindly) signed by the exchange's
- // denomination private key.
- coin_ev: CoinEnvelope;
-
- // Signature of `TALER_SingleWithdrawRequestPS` created with
- // the `reserves's private key <reserve-priv>`
- // using purpose ``TALER_SIGNATURE_WALLET_RESERVE_WITHDRAW``.
- reserve_sig: EddsaSignature;
-
- }
-
-
------
Reveal
------
-.. note::
- These endpoints are available starting with API version v27.
-
These endpoints are called by the client
#. after a call to `melt`_.
@@ -2123,6 +1938,8 @@ These endpoints are called by the client
The request body is a `RevealMeltRequest`.
+ This endpoint was introduced in this form in protocol **v27**.
+
:http:statuscode:`200 OK`:
The coin's' secret material matched the commitment and the original request was well-formed.
The response body is a `RevealResponse`.
@@ -2204,6 +2021,8 @@ These endpoints are called by the client
The request body is a `RevealWithdrawRequest`.
+ This endpoint was introduced in this form in protocol **v27**.
+
:http:statuscode:`200 OK`:
The coin's' secret material matched the commitment and the original request was well-formed.
The response body is a `RevealResponse`.
@@ -2358,7 +2177,6 @@ Reserve History
// Union discriminated by the "type" field.
type TransactionHistoryItem =
| AccountSetupTransaction
- | ReserveBatchWithdrawTransaction
| ReserveWithdrawTransaction
| ReserveCreditTransaction
| ReserveClosingTransaction
@@ -2396,39 +2214,6 @@ Reserve History
}
- .. ts:def:: ReserveBatchWithdrawTransaction
-
- // NOTE: This interface is will be phased out after v26
- // of the protocol
- interface ReserveBatchWithdrawTransaction {
- type: "BATCH_WITHDRAW";
-
- // Offset of this entry in the reserve history.
- // Useful to request incremental histories via
- // the "start" query parameter.
- history_offset: Integer;
-
- // Amount withdrawn.
- amount: Amount;
-
- // Hash of the denomination public key of the coin.
- h_denom_pub: HashCode;
-
- // Hash of the blinded coin to be signed.
- h_coin_envelope: HashCode;
-
- // Signature over a `TALER_SingleWithdrawRequestPS`
- // with purpose ``TALER_SIGNATURE_WALLET_RESERVE_WITHDRAW``
- // created with the reserve's private key.
- reserve_sig: EddsaSignature;
-
- // The maximum age committed to, if applicable
- max_age?: Integer;
-
- // Fee that is charged for withdraw.
- withdraw_fee: Amount;
- }
-
.. ts:def:: ReserveWithdrawTransaction
interface ReserveWithdrawTransaction {
@@ -3426,11 +3211,6 @@ proof to the seller for the escrow of sufficient fund.
// EdDSA public key of a coin being double-spent.
coin_pub: EddsaPublicKey;
- // Transaction history for the coin that is
- // being double-spended.
- // DEPRECATED! Will be removed soon. Use
- // GET /coins/$COIN_PUB to get the history!
- history: CoinSpendHistoryItem[];
}
@@ -3448,9 +3228,6 @@ by anyone except the wallet itself.
.. _melt:
.. http:post:: /melt
- .. note::
- This endpoint will become available starting with version v27 of the API.
-
"Melts" a coin. Invalidates the coins and prepares for exchanging of fresh
coins. Taler uses a global parameter ``kappa`` for the cut-and-choose
component of the protocol, for which this request is the commitment. Thus,
@@ -3461,6 +3238,8 @@ by anyone except the wallet itself.
exchange. The exchange MUST return a 307 or 308 redirection to the correct
base URL if this is the case.
+ This endpoint was introduced in this form in protocol **v27**.
+
:http:statuscode:`200 OK`:
The request was successful. The response body is `MeltResponse` in this case.
:http:statuscode:`403 Forbidden`:
@@ -3573,7 +3352,6 @@ by anyone except the wallet itself.
}
-
.. ts:def:: MeltForbiddenResponse
interface MeltForbiddenResponse {
@@ -3590,334 +3368,6 @@ by anyone except the wallet itself.
}
-.. http:post:: /csr-melt
-
- .. note:: This endpoint is deprecated starting with API version v26.
- Use ``/blinding-prepare`` instead.
-
- Obtain exchange-side input values in preparation for a
- melt step for certain denomination cipher types,
- specifically at this point for Clause-Schnorr blind
- signatures.
-
- **Request:** The request body must be a `MeltPrepareRequest` object.
-
- **Response:**
-
- :http:statuscode:`200 OK`:
- The request was successful, and the response is a `MeltPrepareResponse`. Note that repeating exactly the same request
- will again yield the same response (assuming none of the denomination is expired).
- :http:statuscode:`404 Not found`:
- A denomination key is not known to the exchange.
- :http:statuscode:`410 Gone`:
- A requested denomination key is not yet or no longer valid.
- It either before the validity start, past the expiration or was revoked. The response is a
- `DenominationGoneMessage`. Clients must evaluate
- the error code provided to understand which of the
- cases this is and handle it accordingly.
-
- **Details:**
-
- .. ts:def:: MeltPrepareRequest
-
- interface MeltPrepareRequest {
-
- // Master seed for the Clause-schnorr R-value
- // creation.
- // Must not have been used in any prior request.
- rms: RefreshMasterSeed;
-
- // Array of denominations and coin offsets for
- // each of the fresh coins with a CS-cipher
- // denomination.
- nks: MeltPrepareDenomNonce[];
-
- }
-
- .. ts:def:: MeltPrepareDenomNonce
-
- interface MeltPrepareDenomNonce {
-
- // Offset of this coin in the list of
- // fresh coins. May not match the array offset
- // as the fresh coins may include non-CS
- // denominations as well.
- coin_offset: Integer;
-
- // Hash of the public key of the denomination the
- // request relates to. Must be a CS denomination type.
- denom_pub_hash: HashCode;
- }
-
-
- .. ts:def:: MeltPrepareResponse
-
- interface MeltPrepareResponse {
- // Responses for each request, in the same
- // order that was used in the request.
- ewvs: ExchangeWithdrawValue[];
- }
-
-.. _pre26refresh:
-.. http:post:: /coins/$COIN_PUB/melt
-
- .. note::
- This endpoint will become depreciated starting with version v27 of the API.
- Use ``/melt`` instead, see `melt`_.
-
- "Melts" a coin. Invalidates the coins and prepares for exchanging of fresh
- coins. Taler uses a global parameter ``kappa`` for the cut-and-choose
- component of the protocol, for which this request is the commitment. Thus,
- various arguments are given ``kappa``-times in this step. At present ``kappa``
- is always 3.
-
- The new coins are linkable from the private keys of all old coins using the
- ``/refresh/link`` request. While ``/refresh/link`` must be implemented by
- the exchange to achieve taxability, wallets do not really ever need that part
- of the API during normal operation.
-
- The base URL for ``/coins/``-requests may differ from the main base URL of the
- exchange. The exchange MUST return a 307 or 308 redirection to the correct
- base URL if this is the case.
-
- :http:statuscode:`200 OK`:
- The request was successful. The response body is `Pre26MeltResponse` in this case.
- :http:statuscode:`403 Forbidden`:
- One of the signatures is invalid.
- :http:statuscode:`404 Not found`:
- The exchange does not recognize the denomination key as belonging to the exchange,
- or it has expired.
- If the denomination key is unknown, the response will be
- a `DenominationUnknownMessage`.
- :http:statuscode:`409 Conflict`:
- The operation is not allowed as the coin has insufficient
- residual value, or because the same public key of the coin has been
- previously used with a different denomination. Which case it is
- can be decided by looking at the error code
- (``TALER_EC_EXCHANGE_GENERIC_INSUFFICIENT_FUNDS`` or
- ``TALER_EC_EXCHANGE_GENERIC_COIN_CONFLICTING_DENOMINATION_KEY``).
- The response is `MeltForbiddenResponse` in both cases.
- :http:statuscode:`410 Gone`:
- The requested denomination key is not yet or no longer valid.
- It either before the validity start, past the expiration or was revoked. The response is a
- `DenominationGoneMessage`. Clients must evaluate
- the error code provided to understand which of the
- cases this is and handle it accordingly.
-
- **Details:**
-
- .. ts:def:: Pre26MeltRequest
-
- interface Pre26MeltRequest {
-
- // Hash of the denomination public key, to determine total coin value.
- denom_pub_hash: HashCode;
-
- // Signature over the `coin public key <eddsa-coin-pub>` by the denomination.
- denom_sig: DenominationSignature;
-
- // Signature by the `coin <coin-priv>` over the melt commitment.
- confirm_sig: EddsaSignature;
-
- // Amount of the value of the coin that should be melted as part of
- // this refresh operation, including melting fee.
- // melting fee of the old coin
- // + sum over all values of fresh coins
- // + sum over all withdraw fees for the fresh coins
- value_with_fee: Amount;
-
- // Melt commitment. Hash over the various coins to be withdrawn.
- // See also ``TALER_refresh_get_commitment()``.
- rc: HashCode;
-
- // Master seed for the Clause-schnorr R-value
- // creation. Must match the /csr-melt request.
- // Must not have been used in any prior melt request.
- // Must be present if one of the fresh coin's
- // denominations is of type Clause-Schnorr.
- rms?: RefreshMasterSeed;
-
- // IFF the denomination has age restriction support, the client MUST
- // provide the SHA256 hash of the age commitment of the coin.
- // MUST be omitted otherwise.
- age_commitment_hash?: AgeCommitmentHash;
- }
-
- For details about the HKDF used to derive the new coin private keys and
- the blinding factors from ECDHE between the transfer public keys and
- the private key of the melted coin, please refer to the
- implementation in ``libtalerutil``.
-
- .. ts:def:: Pre26MeltResponse
-
- interface Pre26MeltResponse {
- // Which of the ``kappa`` indices does the client not have to reveal.
- noreveal_index: Integer;
-
- // Signature of `TALER_RefreshMeltConfirmationPS` whereby the exchange
- // affirms the successful melt and confirming the ``noreveal_index``.
- exchange_sig: EddsaSignature;
-
- // `Public EdDSA key <sign-key-pub>` of the exchange that was used to generate the signature.
- // Should match one of the exchange's signing keys from ``/keys``. Again given
- // explicitly as the client might otherwise be confused by clock skew as to
- // which signing key was used.
- exchange_pub: EddsaPublicKey;
-
- // Base URL to use for operations on the refresh context
- // (so the reveal operation). If not given,
- // the base URL is the same as the one used for this request.
- // Can be used if the base URL for ``/refreshes/`` differs from that
- // for ``/coins/``, i.e. for load balancing. Clients SHOULD
- // respect the refresh_base_url if provided. Any HTTP server
- // belonging to an exchange MUST generate a 307 or 308 redirection
- // to the correct base URL should a client uses the wrong base
- // URL, or if the base URL has changed since the melt.
- //
- // When melting the same coin twice (technically allowed
- // as the response might have been lost on the network),
- // the exchange may return different values for the ``refresh_base_url``.
- refresh_base_url?: string;
-
- }
-
-
-.. http:post:: /refreshes/$RCH/reveal
-
- .. note::
-
- This endpoint, along with ``/coins/$COIN_PUB/melt``, will become
- depreciated starting with version v27 of the API. Instead, use
- ``/melt`` and ``/reveal-melt``, see `melt`_ and `Reveal`_.
-
- Reveal previously committed values to the exchange, except for the values
- corresponding to the ``noreveal_index`` returned by the ``/coins/``-melt step.
-
- The $RCH is the hash over the refresh commitment from the ``/coins/``-melt step
- (note that the value is calculated independently by both sides and has never
- appeared *explicitly* in the protocol before).
-
- The base URL for ``/refreshes/``-requests may differ from the main base URL of
- the exchange. Clients SHOULD respect the ``refresh_base_url`` returned for the
- coin during melt operations. The exchange MUST return a
- 307 or 308 redirection to the correct base URL if the client failed to
- respect the ``refresh_base_url`` or if the allocation has changed.
-
- Errors such as failing to do proper arithmetic when it comes to calculating
- the total of the coin values and fees are simply reported as bad requests.
- This includes issues such as melting the same coin twice in the same session,
- which is simply not allowed. However, theoretically it is possible to melt a
- coin twice, as long as the ``value_with_fee`` of the two melting operations is
- not larger than the total remaining value of the coin before the melting
- operations. Nevertheless, this is not really useful.
-
- :http:statuscode:`200 OK`:
- The transfer private keys matched the commitment and the original request was well-formed.
- The response body is a `RevealResponse`.
- :http:statuscode:`409 Conflict`:
- There is a problem between the original commitment and the revealed private
- keys. The returned information is proof of the mismatch, and therefore
- rather verbose, as it includes most of the original /refresh/melt request,
- but of course expected to be primarily used for diagnostics.
- The response body is a `RevealConflictResponse`.
- :http:statuscode:`410 Gone`:
- The requested denomination key (for the fresh coins) is not yet or no longer valid.
- It either before the validity start, past the expiration or was revoked. The response is a
- `DenominationGoneMessage`. Clients must evaluate
- the error code provided to understand which of the
- cases this is and handle it accordingly.
-
- **Details:**
-
- Request body contains a JSON object with the following fields:
-
- .. ts:def:: Pre26RevealRequest
-
- interface Pre26RevealRequest {
-
- // Array of ``n`` new hash codes of denomination public keys to order.
- new_denoms_h: HashCode[];
-
- // Array of ``n`` entries with blinded coins,
- // matching the respective entries in ``new_denoms``.
- coin_evs: CoinEnvelope[];
-
- // ``kappa - 1`` transfer private keys (ephemeral ECDHE keys).
- transfer_privs: EddsaPrivateKey[];
-
- // Transfer public key at the ``noreveal_index``.
- transfer_pub: EddsaPublicKey;
-
- // Array of ``n`` signatures made by the wallet using the old coin's private key,
- // used later to verify the /refresh/link response from the exchange.
- // Signs over a `TALER_CoinLinkSignaturePS`.
- link_sigs: EddsaSignature[];
-
- // IFF the corresponding denomination has support for age restriction,
- // the client MUST provide the original age commitment, i. e. the
- // vector of public keys.
- // The size of the vector MUST be the number of age groups as defined by the
- // Exchange in the field ``.age_groups`` of the extension ``age_restriction``.
- old_age_commitment?: Edx25519PublicKey[];
-
- }
-
-
-.. http:get:: /coins/$COIN_PUB/link
-
- Link the old public key of a melted coin to the coin(s) that were exchanged during the refresh operation.
-
- **Request:**
-
- **Response:**
-
- :http:statuscode:`200 OK`:
- All commitments were revealed successfully. The exchange returns an array (typically consisting of only one element), in which each each element of the array contains a `LinkResponse` entry with information about a melting session that the coin was used in.
- :http:statuscode:`404 Not found`:
- The exchange has no linkage data for the given public key, as the coin has not
- yet been involved in a refresh operation.
-
- **Details:**
-
- .. ts:def:: LinkResponse
-
- interface LinkResponse {
- // Transfer ECDHE public key corresponding to the ``coin_pub``, used to
- // compute the blinding factor and private key of the fresh coins.
- transfer_pub: EcdhePublicKey;
-
- // Array with (encrypted/blinded) information for each of the coins
- // exchangeed in the refresh operation.
- new_coins: NewCoinInfo[];
- }
-
- .. ts:def:: NewCoinInfo
-
- interface NewCoinInfo {
- // RSA public key of the exchangeed coin.
- denom_pub: RsaPublicKey;
-
- // Exchange's blinded signature over the fresh coin.
- ev_sig: BlindedDenominationSignature;
-
- // Blinded coin.
- coin_ev : CoinEnvelope;
-
- // Values contributed by the exchange during the
- // withdraw operation (see /csr-melt).
- ewv: ExchangeWithdrawValue;
-
- // Offset of this coin in the refresh operation.
- // Input needed to derive the private key.
- coin_idx: Integer;
-
- // Signature made by the old coin over the refresh request.
- // Signs over a `TALER_CoinLinkSignaturePS`.
- link_sig: EddsaSignature;
-
- }
-
-
------
Recoup
------
@@ -3945,7 +3395,7 @@ in using this API.
Note that the original withdrawal fees will **not** be recouped.
-.. note:: This endpoint is not implemented and the API going to change after v27.
+ .. note:: This endpoint is currently not implemented and the API going to change after **v27**. It is documented here as a placeholder for the documentation of the future endpoint.
**Request:** The request body must be a `RecoupRequest` object.
@@ -4017,6 +3467,38 @@ in using this API.
}
+
+ .. ts:def:: ExchangeWithdrawValue
+
+ type ExchangeWithdrawValue = DenomCipher & (
+ | ExchangeRsaWithdrawValue
+ | ExchangeCsWithdrawValue
+ );
+
+ .. ts:def:: DenomCipher
+
+ interface DenomCipher {
+ cipher: "RSA" | "CS";
+ }
+
+ .. ts:def:: ExchangeRsaWithdrawValue
+
+ interface ExchangeRsaWithdrawValue extends DenomCipher {
+ cipher: "RSA";
+ }
+
+ .. ts:def:: ExchangeCsWithdrawValue
+
+ interface ExchangeCsWithdrawValue extends DenomCipher {
+ cipher: "CS";
+
+ // CSR R0 value
+ r_pub_0: CSRPublic;
+
+ // CSR R1 value
+ r_pub_1: CSRPublic;
+ }
+
.. ts:def:: RecoupWithdrawalConfirmation
interface RecoupWithdrawalConfirmation {
@@ -4038,9 +3520,11 @@ in using this API.
Note that the original refresh fees will **not** be recouped.
-.. note:: This endpoint is not implemented and the API going to change after v27.
+ .. note:: This endpoint is not implemented and the API going to change after **v27**.
+
+ **Request:**
- **Request:** The request body must be a `RecoupRefreshRequest` object.
+ The request body must be a `RecoupRefreshRequest` object.
**Response:**
@@ -4292,12 +3776,6 @@ typically also view the balance.)
// requirement has been evaluated.
requirement_row?: Integer;
- // Current AML state for the target account. Non-zero
- // values indicate that the transfer is blocked due to
- // AML enforcement.
- // Removed in protocol **v20**.
- aml_decision: Integer;
-
// True if the KYC check for the merchant has been
// satisfied. False does not mean that KYC
// is strictly needed, unless also a
@@ -5248,7 +4726,7 @@ regulatory compliance.
This response comes with a standard `ErrorDetail` response.
:http:statuscode:`451 Unavailable for Legal Reasons`:
The wallet must undergo a KYC check. A KYC ID was created.
- The response will be a `LegitimizationNeededResponse` object (changed in protocol **v20**).
+ The response will be a `LegitimizationNeededResponse` object.
**Details:**
@@ -6214,12 +5692,6 @@ and freeze or unfreeze accounts suspected of money laundering.
// Row ID of the record. Used to filter by offset.
rowid: Integer;
- // Name of the provider
- // which was used to collect the attributes. NULL if they were
- // just uploaded via a form by the account owner.
- // Removed in **v20**.
- provider_name?: string;
-
// The collected KYC data. NULL if the attribute data could not
// be decrypted (internal error of the exchange, likely the
// attribute key was changed).