public function whitelist(string $address): WhitelistResponse
    {
        try {
            $response = $this->callHydroApi(
                'post',
                'whitelist',
                [
                    'timeout' => 60,
                    'json' => [
                        'address' => $address
                    ]
                ]
            );

            $data = \GuzzleHttp\json_decode($response->getBody()->getContents(), true);
        } catch (RuntimeException $e) {
            throw AddressWhitelistingFailed::forAddress($address, $e->getMessage());
        } catch (InvalidArgumentException $e) {
            throw AddressWhitelistingFailed::forAddress($address, $e->getMessage());
        } catch (GuzzleException $e) {
            throw AddressWhitelistingFailed::forAddress($address, $e->getMessage());
        } catch (ApiRequestFailed $e) {
            throw AddressWhitelistingFailed::forAddress($address, $e->getMessage());
        }

        return new WhitelistResponse(
            $data['hydro_address_id'],
            $data['transaction_hash']
        );
    }