If you think about it, tests themselves are really client code for your class interfaces. So TDDing an API is just carrying that metaphor over to services.
Yes and no. Depends how you "write" those tests. In this case, where you describe the scenarios, it is indeed true. However you can take a different approach – without writing explicit tests (and thus the client code). Rather you just describe your API in a sort of contract and then, as you iterate, you verify the implementation is living up to this contract...