public static function create(
        Pointer $counterUserAlias,
        ShareDetail $shareDetail,
        string $status,
        int $monetaryAccountId = null,
        int $draftShareInviteBankId = null,
        string $shareType = null,
        string $startDate = null,
        string $endDate = null,
        array $customHeaders = []
    ): BunqResponseInt {
        $apiClient = new ApiClient(static::getApiContext());
        $responseRaw = $apiClient->post(
            vsprintf(
                self::ENDPOINT_URL_CREATE,
                [static::determineUserId(), static::determineMonetaryAccountId($monetaryAccountId)]
            ),
            [
                self::FIELD_COUNTER_USER_ALIAS => $counterUserAlias,
                self::FIELD_DRAFT_SHARE_INVITE_BANK_ID => $draftShareInviteBankId,
                self::FIELD_SHARE_DETAIL => $shareDetail,
                self::FIELD_STATUS => $status,
                self::FIELD_SHARE_TYPE => $shareType,
                self::FIELD_START_DATE => $startDate,
                self::FIELD_END_DATE => $endDate,
            ],
            $customHeaders
        );

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