public static function update(
        string $firstName = null,
        string $middleName = null,
        string $lastName = null,
        string $publicNickName = null,
        Address $addressMain = null,
        Address $addressPostal = null,
        string $avatarUuid = null,
        array $taxResident = null,
        string $documentType = null,
        string $documentNumber = null,
        string $documentCountryOfIssuance = null,
        int $documentFrontAttachmentId = null,
        int $documentBackAttachmentId = null,
        string $dateOfBirth = null,
        string $placeOfBirth = null,
        string $countryOfBirth = null,
        string $nationality = null,
        string $language = null,
        string $region = null,
        string $gender = null,
        string $status = null,
        string $subStatus = null,
        Pointer $legalGuardianAlias = null,
        int $sessionTimeout = null,
        array $cardIds = null,
        array $cardLimits = null,
        Amount $dailyLimitWithoutConfirmationLogin = null,
        array $notificationFilters = null,
        string $displayName = null,
        array $customHeaders = []
    ): BunqResponseInt {
        $apiClient = new ApiClient(static::getApiContext());
        $responseRaw = $apiClient->put(
            vsprintf(
                self::ENDPOINT_URL_UPDATE,
                [static::determineUserId()]
            ),
            [
                self::FIELD_FIRST_NAME => $firstName,
                self::FIELD_MIDDLE_NAME => $middleName,
                self::FIELD_LAST_NAME => $lastName,
                self::FIELD_PUBLIC_NICK_NAME => $publicNickName,
                self::FIELD_ADDRESS_MAIN => $addressMain,
                self::FIELD_ADDRESS_POSTAL => $addressPostal,
                self::FIELD_AVATAR_UUID => $avatarUuid,
                self::FIELD_TAX_RESIDENT => $taxResident,
                self::FIELD_DOCUMENT_TYPE => $documentType,
                self::FIELD_DOCUMENT_NUMBER => $documentNumber,
                self::FIELD_DOCUMENT_COUNTRY_OF_ISSUANCE => $documentCountryOfIssuance,
                self::FIELD_DOCUMENT_FRONT_ATTACHMENT_ID => $documentFrontAttachmentId,
                self::FIELD_DOCUMENT_BACK_ATTACHMENT_ID => $documentBackAttachmentId,
                self::FIELD_DATE_OF_BIRTH => $dateOfBirth,
                self::FIELD_PLACE_OF_BIRTH => $placeOfBirth,
                self::FIELD_COUNTRY_OF_BIRTH => $countryOfBirth,
                self::FIELD_NATIONALITY => $nationality,
                self::FIELD_LANGUAGE => $language,
                self::FIELD_REGION => $region,
                self::FIELD_GENDER => $gender,
                self::FIELD_STATUS => $status,
                self::FIELD_SUB_STATUS => $subStatus,
                self::FIELD_LEGAL_GUARDIAN_ALIAS => $legalGuardianAlias,
                self::FIELD_SESSION_TIMEOUT => $sessionTimeout,
                self::FIELD_CARD_IDS => $cardIds,
                self::FIELD_CARD_LIMITS => $cardLimits,
                self::FIELD_DAILY_LIMIT_WITHOUT_CONFIRMATION_LOGIN => $dailyLimitWithoutConfirmationLogin,
                self::FIELD_NOTIFICATION_FILTERS => $notificationFilters,
                self::FIELD_DISPLAY_NAME => $displayName,
            ],
            $customHeaders
        );

        return BunqResponseInt::castFromBunqResponse(
            static::processForId($responseRaw)
        );
    }