Contents

POST /reserves/$RESERVE_PUB/attest#

Request signed KYC information about the owner of a reserve. This can be used by a reserve owner to include a proof of their identity in invoices.

Request:

The request body must be a ReserveAttestRequest object.

Response:

200 OK:

The exchange responds with a ReserveAttestResponse object.

400 Bad Request:

The request is malformed. This response comes with a standard ErrorDetail response. Possible error codes include TALER_EC_GENERIC_RESERVE_PUB_MALFORMED or TALER_EC_EXCHANGE_GENERIC_CLOCK_SKEW.

403 Forbidden:

The TALER_SIGNATURE_WALLET_KYC_DETAILS signature is invalid. This response comes with a standard ErrorDetail response with a code of TALER_EC_EXCHANGE_RESERVES_ATTEST_BAD_SIGNATURE.

404 Not found:

The reserve key does not belong to a reserve known to the exchange. This response comes with a standard ErrorDetail response with a code of TALER_EC_EXCHANGE_GENERIC_RESERVE_UNKNOWN.

409 Conflict:

The exchange does not have the requested KYC information.

413 Request entity too large:

The uploaded body is to long, it exceeds the size limit. Returned with an error code of TALER_EC_GENERIC_UPLOAD_EXCEEDS_LIMIT.

500 Internal Server Error:

The server experienced an internal error. This response comes with a standard ErrorDetail response. Possible error codes include TALER_EC_GENERIC_DB_FETCH_FAILED or TALER_EC_GENERIC_JSON_ALLOCATION_FAILURE.

Details:

interface ReserveAttestRequest {
  // Signature of purpose
  // TALER_SIGNATURE_WALLET_ATTEST_DETAILS over
  // a TALER_WalletReserveAttestRequestSignaturePS.
  reserve_sig: EddsaSignature;

  // Client's time for the request.
  request_timestamp: Timestamp;

  // Array of KYC attributes requested.
  details: string[];
}
interface ReserveAttestResponse {
  // Signature of purpose
  // TALER_SIGNATURE_EXCHANGE_RESERVE_ATTEST_DETAILS over
  // a TALER_ExchangeAttestPS.
  exchange_sig: EddsaSignature;

  // Exchange public key used to create the
  // signature.
  exchange_pub: EddsaPublicKey;

  // Time when the exchange created the signature.
  exchange_timestamp: Timestamp;

  // Expiration time for the provided information.
  expiration_time: Timestamp;

  // KYC details (key-value pairs) as requested.
  // The keys will match the elements of the
  // details array from the request.
  attributes: CustomerKycAttributes;
}