First and foremost, remember that your goal is not to totally eliminate use of your API other than via your client software, but to discourage unwanted use and limit any financial losses caused.
To determine whether measures taken to limit unwanted use are effective, make sure you have good visibility into how many API requests are being handled, how much those requests are costing you, where the requests are coming from, and so on. Periodically check the usage and see if it seems reasonable given the rate of new sign-ups. Rate-limit both the total volume of requests and volume per source IP, etc. Throttle users who are making too many requests.
I don't know what business you are in, but if you know that all your legitimate customers are in a certain country or region, you could use geolocation to block requests coming from other regions.
Distribute your client software with an access key which is different for each download of the software. (Generate an access key and embed it in the client installer on each download.) Track the usage of each access key. Expire access keys after a reasonable period of time or number of uses. (In case a legitimate customer gets stuck with an expired access key, your client software could pop up a message asking them to phone your company to have the key reactivated.) Or, if the key is only needed when the customer is signing up for your service, as you said, you could expire it immediately after they successfully sign up.