One easy way would be to add a hook_cron to your custom module:
https://api.drupal.org/api/drupal/core%21core.api.php/function/hook_cron/8.2.x
These get run when drupal runs it's periodic cron hook.
Then you could query for nodes that have the ISBN field but lack some other field you would fill-in with a second API call. So you could get a list of nodes that need updating with a query and then run your code to update them.
If you want it to run more frequently you could set a crontab on your server to hit a page callback that triggers a script. So set up a custom route using mymodule.routing.yml and set it up to require a secret key (to prevent DOS attacks), so for example ?accesskey=12345, and if that page is hit with the access key run your script to update the nodes. This way you could run it every minute.
Another alternative to creating a page callback is to create a custom drush command called from a crontab on your server. Creating custom drush commands is very easy.
Another alternative to using a query to identify items that need updating is the queue api. This would allow you to set up a list of items to process, although it doesn't process the queue, you'd still need some sort of cron job to do that.
https://api.drupal.org/api/drupal/core!core.api.php/group/queue/8.2.x
Although a query to find items that need processing from a cron process might be easier in this case.
I would recommend against calling APIs using hook_ENTITY_TYPE_create or hook_ENTITY_TYPE_update. If the API call fails, you can't edit the content. Better to offload it to a process not connected to a page load, such as cron, or a process called from a custom cron job.
For examples of cron hooks look at function hook_cron() in /core/core.api.php
https://api.drupal.org/api/drupal/core!core.api.php/function/hook_cron/8.2.x
this has examples, of using a Drupal queue as well as an entity query.
Here's an example of a type of query where you'd check isbn to see if nodes with isbn filled out have empty data in another field, say, field_api_title:
$db = Drupal::database();
$query = $db->select('node__field_isbn_longer', 'isbn')
->fields('isbn', array('entity_id'));
$query->leftJoin('node__field_api_title', 't', 't.entity_id = isbn.entity_id');
$query->condition('tags.field_api_title_target_id', NULL, 'IS NULL');
$nids = $query->execute()->fetchCol();
A left join allows you to join to tables that are missing data. It will return rows where there is an ISBN, but the api title hasn't been retrieved. Then you can run your code to update those nodes.