Outgoing child chain transactions require a fee denominated in the child chain token. Unlike when using NXT, 0 is a valid fee for sponsored child chain transactions.
For normal transactions, let the server calculate the child transaction fee, a value of feeNQT=-1 should be used, and a new feeRateNQTPerFXT parameter must be supplied, to indicate the exchange rate of child token NQT per whole ARDR to use when calculating the fee (since minimum fees can only be calculated in the parent chain token ARDR).
If feeRateNQTPerFXT is also set to -1, the server will query the currently known bundlers rates for this child chain, also subject to the minBundlerBalanceFXT limit on effective bundler account balance, and use the best one for the fee calculation.
Transaction fee in ARDR varies depending on the status of the recipient account, sendMoney to a new account will charge higher fee than sendMoney to an existing account so don't make any assumption about the ARDR fee the bundler will have to pay to bundle your transactions, unless you check first if the recipient account is new.
One way to do this is to invoke the getAccount API on the recipient account and check for errorCode 5 in the response, then predict the fee according to the current minimum fee specifications.
A more robust approach is to submit the transaction when setting the broadcast parameter to false then read the minimumFeeFQT field from the response which indicates the minimum required fee in ARDR the bundler will pay for this transaction.
Bundlers rates cannot be trusted blindly as they may change based on market conditions, the returned transaction JSON including the fees calculated should be reviewed by the user.
The bundler rate used will be returned in the bundlerRateNQTPerFXT JSON field, -1 if no bundlers are known for the chain.