Field "to" must be a JSON string [Firebase]

Try explicitly converting $registrationIDs to string.

$message = array(
        'to' => (string)$registrationIDs,
        'data' => array(
                "message" => $messageText,
                "id" => $id,
        ),
);

Edited Answer

The 'to' parameter requires a string - which is the recipient of the message.

The $registrationIDs could be passed a separate parameter (as string array) to 'registration_ids'

Edit your code to something like this:

$recipient = "YOUR_MESSAGE_RECIPIENT";

$message = array(
        'to' => $recipient,
        'registration_ids' => $registrationIDs,
        'data' => array(
                "message" => $messageText,
                "id" => $id,
        ),
);

Where $recipient is

a registration token, notification key, or topic.

Refer this: Firebase Cloud Messaging HTTP Protocol


Try making to as a string:

Content-Type:application/json
Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA

{
  "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
  "data" : {
   ...
 },
}