Taxi is a service that allows users to transfer their assets without owning L-BTC funds to pay for network fees.
Taxi just takes care of that in exchange for a small service fee that the user pays with the same asset he's transferring.
The service exposes a public interface over HTTP/2 (gRPC) and HTTP/1 (RESTful JSON). Users can interact with it to retrieve the list of assets in which taxi's service fee can be paid, or to request topups.
A topup is a transaction for which taxi pays for network fees: when requesting a topup, taxi returns a partial transaction (pset) with a single LBTC input and 2 outputs for service and network fees. The input is signed so that other inputs and outputs can be added by the user at will. He just needs to specify the service fee asset and hint at the final tx size (indicatively) in the request message.