How can I transfer tether(USDT) using omni JSON RPC API? I looked for the information but I couldn't find that. It seemed to be done as I always do for Bitcoin though.

Any idea?
So for Omni layer token you do this omni_send
https://github.com/OmniLayer/omnicore/blob/master/src/omnicore/doc/rpc-api.md#omni_send
This is what you need (at least on Kraken and Bittrex USDT is Omnilayer token). To send Omnilayer transaction you need to have some BTC on the same address for transaction fee. And you also need to know USDT propertyId which is 31 (https://omniexplorer.info/asset/31)

Just in case:

For ETH token you do eth_sendTransaction(different methods are possible like eth_sendRawTransaction) https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sendtransaction. You need to know contract address of the token and it is your parameter to, from is normal address from here is the funny part - token transaction is defined in data. Lets take an example https://etherscan.io/tx/0x6fcf7dc3f6bc2b7e8a9e6b13689d042e659b2d016a3bdf7beffd033ab9b6db1e
this is 2.55 BNB(contract address 0xB8c77482e45F1F44dE1745F52C74426C631bDD52,  parameter to) token transfer(method name encoded in data as first 10 digits 0xa9059cbb) from 0x0861d1b074eb2489dd7878a5d6d869db5896a5f0 (parameter from) to 0x4283f315788b09a357ca83b8134cd48bde8b556f (middle part of data with some padding 0000000000000000000000004283f315788b09a357ca83b8134cd48bde8b556f). Last part of data is token amount in wei. BNB has 18 decimal places and the best way to explain that IMHO is this python assertion:

assert int('0x00000000000000000000000000000000000000000000000023803234a2f38c00', 16) * 1e-18 == 2.55809979