I went through this same scenario back when I was first integrating stripe. I had LOTS of trouble trying to fit that square peg into the round hole and eventually went and asked Stripe about it. They pretty much said what Matt has said...and because it was a key part of my design, it would be foolish to design around something like that. Unsupported, could change at any moment...etc..
My problem sounds the same though. I had inbound payments. Each day the day's charges were transferred to my bank, and I needed my app to know when they had cleared so the funds could be split up. I needed to know what charges were covered in said transfer.
Like Matt suggested, storing locally is a decent way to go. I have a local Charge table, a local Transfer table, and the local StripeEvent table (log events so I don't process events twice).
When my customer makes a payment, I hit Stripe and that is when I create the local Charge record. That data has ChargeId from stripe. Then, I listen to the transfer.paid event. When a transfer.paid comes in, I store the Transfer locally. So now I have a TransferId.
Then comes the balance transactions...retrieve balance transactions, by type of Charge, and filter them to match the transferId (this is all still in the webhook parse). This returns a list of all charges for that transfer. Every item in this list will match an item in your local charge table (at least it better!) ... then I update Charges to save the transferId to each charge.
Let me know if I can clarify any of this...I'm not great at explaining things at 1AM :)