Définition tirée du Glossaire Symfony2 :
Un service est un terme générique pour tout objet PHP qui exécute une tâche spécifique. Un service est généralement utilisé de manière "globale", comme un objet de connexion à une base de données ou un objet qui délivre des messages électroniques. Dans Symfony2, les services sont souvent configurés et récupérés dans le conteneur de services. Une application qui possède de nombreux services découplés est dite suivre une architecture orientée services.
Je pense que votre exemple est un candidat parfait pour un service.
Vous ne voulez pas copier le code de construction à tous les endroits où vous avez besoin de votre client API. Il est préférable de déléguer cette tâche au conteneur d'injection de dépendances.
De cette façon, la maintenance est plus facile (car la construction se fait à un seul endroit et elle est configurable).
Elle est également plus flexible, car vous pouvez facilement changer la classe du client API sans affecter le code qui l'utilise (tant qu'il implémente la même interface).
Je ne pense pas qu'il y ait une règle d'or. Mais fondamentalement, toutes les classes implémentant une tâche sont de bons candidats pour un service. Les entités, par contre, ne le sont pas, car elles ne sont le plus souvent que des détenteurs de données.
Je recommande toujours la série d'articles de Fabien sur le sujet : http://fabien.potencier.org/article/11/what-is-dependency-injection