Hello, We’ve encountered a serious issue that see...
# ask-questions
b
Hello, We’ve encountered a serious issue that seems to be connected to your recent implementation changes. After investigating, I noticed that the response format for /api/eval/apiKey has been completely changed. As a result, our app can no longer parse the experiment data, which has broken all our experiments. This issue is critical and quite costly for us. Could you please revert to the previous response model and release a fix as soon as possible? Thank you in advance for your quick assistance.
b
@calm-dog-24239 Hi! Could you please ask the team to review this? We are using remote evaluation, and it seems that the Flutter SDK is currently not handling experiment tracking callbacks correctly due to a changed contract.
🙌 1
c
Hi @busy-window-96391. Ok, we will review that.
❤️ 1
b
@calm-dog-24239 Could you please let me know approximately when to expect your response?
c
The only change related to this functionality was that we fixed the deserialization of tracks, since in the Flutter SDK it was using the key
featureResult
instead of
result
(this was fixed in this PR, which hasn’t been released yet). However, this isn’t related to the issue where the data came from the Admin panel in the wrong format, so it seems that the problem is unlikely to be in the Flutter SDK. Please let us know your thoughts on this.
b
I don’t think the problem is in the Flutter SDK. The SDK is receiving the response from the data layer (server) — the issue seems to be there. Could you please check if the tracking callback is working for you now? Also, could you share the response with me via remote evaluation?
c
Oh, got it. Ok, please let check that.
❤️ 1
• On this PR - tracking callback is working • Here response for /api/eval/apiKey { "features": { "sloboda-feature": { "defaultValue": "var_1", "rules": [ { "force": "var_1", "tracks": [ { "experiment": { "variations": [ "var_1", {} ], "key": "sloboda-feature", "coverage": 1, "weights": [ 0.5, 0.5 ], "hashAttribute": "id", "meta": [ { "key": "0", "name": "Control" }, { "key": "1", "name": "Variation 1" } ], "name": "Sloboda Experiment", "phase": "0", "seed": "a23a184c-6dae-4a58-9c17-422cecd055f9", "hashVersion": 2 }, "result": { "value": "var_1", "on": true, "off": false, "source": "experiment", "ruleId": "fr_19g61mmfuukowl", "experiment": { "variations": [ "var_1", "var_2" ], "key": "sloboda-feature", "coverage": 1, "weights": [ 0.5, 0.5 ], "hashAttribute": "id", "meta": [ { "key": "0", "name": "Control" }, { "key": "1", "name": "Variation 1" } ], "name": "Sloboda Experiment", "phase": "0", "seed": "a23a184c-6dae-4a58-9c17-422cecd055f9", "hashVersion": 2 }, "experimentResult": { "key": "0", "featureId": "sloboda-feature", "inExperiment": true, "hashUsed": true, "variationId": 0, "value": "var_1", "hashAttribute": "id", "hashValue": "user_2", "stickyBucketUsed": false, "name": "Control", "bucket": 0.4718 } } } ] } ] } }, "experiments": [], "dateUpdated": "2025-10-28T134936.392Z" }
b
Yes, it is correct response, that’s odd… Ok, I will recheck it on my side and come back with more info. Thanks 🤝
c
Ok, feel free to ask. Looking forward to on your feedback.
🙌 1
h
Hi there, unfortunately the old format (right screenshot) is actually the incorrect format and led to several problems (too much information revealed, problems with tracking callbacks when using prerequisites). We recently patched this. Are you able to update your codebase to reflect the change? Unfortunately we will not be able to revert these changes.
b
I spent quite a lot of time figuring this out, and yes - I’ve confirmed that in version 1.27 everything works as expected, but in 1.28 the response is completely different. However, because of these changes, our experiments are now broken. If we make adjustments on our side, it will require releasing a new version of the app, after which users will need to update. Realistically, it takes around 4-6 months to reach a decent update rate among users. What should we do during this time? Did you notify anyone that you were going to make changes that are critical for running experiments? As I mentioned earlier, this has completely broken our experiments.
P.S. We’ve created our own SDK, but this issue also occurs in the growthbook_sdk_flutter package that you maintain.
h
I believe we didn’t realize this was an unsafe change, but clearly it has affected your application. Are you self-hosting or using cloud?
b
In general, we’re self-hosted.
h
Are you able to revert to 1.27 until you're able to roll out app updates?
b
We are considering this approach now.
🙌 1
c
Hi @busy-megabyte-43386. We have updated this PR with changes to deserialize tracking data so that the tracking callback can be invoked. Looking forward for your feedback.
b
Hi, as I mentioned earlier, we are using our own implementation of the GrowthBook SDK. But In any case, I’ll check your PR.
🙌 1
c
Oh, got it. Ok, we are looking forward for your feedback.
b
We checked version 1.27, and it’s actually even worse… :( If the key value is false, it’s not returned by the endpoint at all - it seems that was the main reason for creating version 1.28. As a result, the core GB feature for running experiments is currently unavailable to us (until we roll out the release to all users, which will take 2–3 months :( ). Due to the data inaccuracies caused by changes in 1.28, we’re canceling all ongoing experiments. A very disappointing and unfortunate experience… @calm-dog-24239 @happy-autumn-40938 FYI
h
@busy-megabyte-43386 would it potentially address the issue for you if we add a flag to serve the old payload format? And not scrub the false values? If so I can rig something up
c
There were some changes: https://github.com/growthbook/growthbook-proxy/pull/96 This PR includes a fix that was previously request. It also contains other changes — in particular, a modification of the trackData response format, which was made to resolve another issue. As a result, you received the needed fix, but at the same time, app broke due to other changes in this PR — specifically because of the change in the trackData format, which caused deserialization to fail in their production version. If we make a new proxy release with the old trackData format, it will fix the issue, but it won’t resolve the other trackData-related issue. So, there is option: Make a new proxy release with the old format — this will help, but leave the other issue unresolved.
b
if we add a flag to serve the old payload format
Hello, it will not help because it is required changes in our side => release
h
I’m talking about a flag on the proxy / remote eval lib
b
Hello guys, We decided to solve this problem on our side and move to a new contract. Kindly ask you not to make any fixes in this way and to inform us in advance about such changes. Thanks for your attention to this issue 🤝
🙌 1
c
Hi @busy-megabyte-43386. Thank you for the update.
❤️ 1