The account history api returns the same op twice in some cases
curl -s --data '{"jsonrpc":"2.0", "method":"account_history_api.get_account_history", "params":{"account":"holger80", "start":134134, "limit":2}, "id":1}' https://api.openhive.network
returns
{"jsonrpc":"2.0","result":{"history":[[134132,{"trx_id":"ca950109641db603ee8ebf6f0a4345180643888b","block":36147842,"trx_in_block":23,"op_in_trx":0,"virtual_op":0,"timestamp":"2019-09-05T05:41:39","op":{"type":"custom_json_operation","value":{"required_auths":[],"required_posting_auths":["holger80"],"id":"sm_submit_team","json":"{\"trx_id\":\"20b319ed22c3fd0986b3c68d4743f86548db631c\",\"team_hash\":\"66b00a954a974829cc4965255fbdefb6\"}"}}}],[134133,{"trx_id":"ca950109641db603ee8ebf6f0a4345180643888b","block":36147842,"trx_in_block":23,"op_in_trx":0,"virtual_op":0,"timestamp":"2019-09-05T05:41:39","op":{"type":"custom_json_operation","value":{"required_auths":[],"required_posting_auths":["holger80"],"id":"sm_submit_team","json":"{\"trx_id\":\"20b319ed22c3fd0986b3c68d4743f86548db631c\",\"team_hash\":\"66b00a954a974829cc4965255fbdefb6\"}"}}}],[134134,{"trx_id":"e9c5074422cc613def0eac73eb24be4115833b3b","block":36147843,"trx_in_block":40,"op_in_trx":0,"virtual_op":0,"timestamp":"2019-09-05T05:41:42","op":{"type":"custom_json_operation","value":{"required_auths":[],"required_posting_auths":["holger80"],"id":"sm_team_reveal","json":"{\"trx_id\":\"20b319ed22c3fd0986b3c68d4743f86548db631c\",\"summoner\":\"C-9ZC9UAMG5C\",\"monsters\":[\"C-LG002RSQMO\",\"C-H824YHP4VK\",\"C-J8SJB01ZR4\"],\"secret\":\"FT3UInq5Vj\"}"}}}]]},"id":1}
That's the same operation with the same trx_id returned twice.
Duplicate entries can also consist of a operation and a virtual operation, as a limit_order_create and fill_order operation.