taler-docs

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

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:
Mcore/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).