Provisioning alert rule through API : TypeError

Hello,

After successfully uploading an alert rule. I get the error in my alert rule detail :

[sse.dataQueryError] failed to execute query [B]: invalid: failed to decode request body: request body requires either query or AST

when I try to edit the rule :

Here are the rule uploaded to /api/v1/provisioning/alert-rules, also
when I create an alert rule manually and copy paste the query it works

It seems to be an encoding error somewhere ? I noticed the query stored in grafana.db is encoding “>” as “\u003e” ?

{
    "uid": "ceq4pkf1rturkc",
    "folderUID": "alert-folder-uid",
    "title": "La température des frigidaires sort de la plage [2-8] °C",
    "condition": "B",
    "data": [
        {
            "refId": "A",
            "relativeTimeRange": {
                "from": 900,
                "to": 0
            },
            "datasourceUid": "influxdb-uid",
            "model": {
                "datasource": {
                    "type": "influxdb",
                    "uid": "influxdb-uid"
                },
                "instant": false,
                "intervalMs": 1000,
                "maxDataPoints": 43200,
                "query": "from(bucket: \"lsb-bucket\")\n  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n  |> filter(fn: (r) => \n    r._measurement == \"device\" and \n    r.device_type == \"fridge\" and \n    r._field == \"temperature\"\n  )\n  |> keep(columns: [\"_time\", \"_value\", \"tag\", \"place\", \"room\"])",
                "range": true,
                "refId": "A"
            }
        },
        {
            "refId": "B",
            "relativeTimeRange": {
                "from": 900,
                "to": 0
            },
            "datasourceUid": "influxdb-uid",
            "model": {
                "conditions": [
                    {
                        "evaluator": {
                            "params": [],
                            "type": "gt"
                        },
                        "operator": {
                            "type": "and"
                        },
                        "query": {
                            "params": [
                                "A"
                            ]
                        },
                        "reducer": {
                            "params": [],
                            "type": "last"
                        },
                        "type": "query"
                    }
                ],
                "datasource": {
                    "type": "influxdb",
                    "uid": "influxdb-uid"
                },
                "expression": "A",
                "intervalMs": 1000,
                "maxDataPoints": 43200,
                "reducer": "last",
                "refId": "B",
                "type": "reduce"
            }
        },
        {
            "refId": "C",
            "relativeTimeRange": {
                "from": 900,
                "to": 0
            },
            "datasourceUid": "influxdb-uid",
            "model": {
                "conditions": [
                    {
                        "evaluator": {
                            "params": [
                                2,
                                8
                            ],
                            "type": "outside_range"
                        },
                        "operator": {
                            "type": "and"
                        },
                        "query": {
                            "params": [
                                "B"
                            ]
                        },
                        "reducer": {
                            "params": [],
                            "type": "last"
                        },
                        "type": "query"
                    }
                ],
                "datasource": {
                    "type": "influxdb",
                    "uid": "influxdb-uid"
                },
                "expression": "B",
                "intervalMs": 1000,
                "maxDataPoints": 43200,
                "refId": "B",
                "type": "threshold"
            }
        }
    ],
    "dashboardUid": "fridge-dashboard-uid",
    "panelId": 2,
    "noDataState": "NoData",
    "execErrState": "Error",
    "for": "2m",
    "annotations": {
        "__dashboardUid__": "fridge-dashboard-uid",
        "__panelId__": "2",
        "summary": "Température pour {{ $labels.tag }}.\nValeur atteinte : {{ $values.A.Value }}."
    },
    "isPaused": false,
    "notification_settings": {
        "receiver": "grafana-default-email"
    }
}

Grafana version : Grafana v11.3.7+security-01 (NA)

Here is the alert stored in grafana.db :

sqlite> select data from alert_rule;
[{"refId":"A","queryType":"","relativeTimeRange":{"from":900,"to":0},"datasourceUid":"influxdb-uid","model":{"datasource":{"type":"influxdb","uid":"influxdb-uid"},"instant":false,"intervalMs":1000,"maxDataPoints":43200,"query":"from(bucket: \"lsb-bucket\") |\u003e range(start: v.timeRangeStart, stop: v.timeRangeStop) |\u003e filter(fn: (r) =\u003e r._measurement == \"device\" and r.device_type == \"fridge\" and r._field == \"temperature\") |\u003e keep(columns: [\"_time\", \"_value\", \"tag\", \"place\", \"room\"])","range":true,"refId":"A"}},{"refId":"B","queryType":"","relativeTimeRange":{"from":900,"to":0},"datasourceUid":"influxdb-uid","model":{"conditions":[{"evaluator":{"params":[],"type":"gt"},"operator":{"type":"and"},"query":{"params":["A"]},"reducer":{"params":[],"type":"last"},"type":"query"}],"datasource":{"type":"influxdb","uid":"influxdb-uid"},"expression":"A","intervalMs":1000,"maxDataPoints":43200,"reducer":"last","refId":"B","type":"reduce"}},{"refId":"C","queryType":"","relativeTimeRange":{"from":900,"to":0},"datasourceUid":"influxdb-uid","model":{"conditions":[{"evaluator":{"params":[2,8],"type":"outside_range"},"operator":{"type":"and"},"query":{"params":["B"]},"reducer":{"params":[],"type":"last"},"type":"query"}],"datasource":{"type":"influxdb","uid":"influxdb-uid"},"expression":"B","intervalMs":1000,"maxDataPoints":43200,"refId":"B","type":"threshold"}}]