Encapsulating data replication in the API adapter would be nice, because your use case does not need to remember to do this. Error handling and order of operations (call API first, then insert into DB) get pushed into the abstraction provided by the adapter. Replicating this data is easy and hidden from the perspective of the caller, but this might be a little surprising. Sometimes "hidden" operations are not desirable for the simple fact they are hidden.
Replicating this data explicitly in the use case is nice, because that logic is right in front of your face. It becomes very easy to understand that we duplicate some data, but it becomes possible for a careless programmer to flip the order of operations in the future. Without understanding the system properly, someone could save data to the database first, and then call the API, only to have the API call fail. Now you have data in your database, but not in the external API.
I would lean towards choosing the solution that guards against accidental bugs in the future caused by changing the order methods are called. These can be excruciating to debug in production, because the failure isn't obvious. Based on this, I would go for solution #2, because it solves "order of operations" issues. You do have a couple of options that might make the code easier to understand:
Use one class that makes explicit calls to the API and then database.
The benefit of this approach is seeing both calls right in front of your face.
The drawback is you are coupling both operations together in the same class.
Create two classes that implement the same interface, making the database class a proxy for the API class:
IExternalApi api = new DatabaseExternalApiProxy(new ExternalApi(), repository);
api.SomeOperation(data);
The proxy class can juggle the order of operations, and you get loose coupling to the external API:
public class DatabaseExternalApiProxy : IExternalApi
{
private IExternalApi api;
private ISomeRepository repository;
public DatabaseExternalApiProxy(IExternalApi api, ISomeRepository repository)
{
this.api = api;
this.repository = repository;
}
public void SomeOperation(data)
{
api.SomeOperation(data);
repository.ReplicateData(data);
}
}