Put JSON to API Endpoint using WifiNina Library

I have an Uno Wifi v2 board and I'm using WiFiNINA to connect to an API on the Internet. I can perform GET requests to the API without any issues but when I attempt to perform PUT requests I get errors.

connected to server
HTTP/1.1 400 Bad Request
Server: awselb/2.0
Date: Sat, 29 Jul 2023 01:17:50 GMT
Content-Type: text/html
Content-Length: 122
Connection: close

Here is all of the code:

/*

This example puts data to a secure API endpoint

*/

#include <SPI.h>
#include <WiFiNINA.h>

#include "arduino_secrets.h"
char ssid[] = SECRET_SSID;        // your network SSID (name)
char pass[] = SECRET_PASS;    // your network password (use for WPA, or use as key for WEP)
int keyIndex = 0;            // your network key Index number (needed only for WEP)

int status = WL_IDLE_STATUS;
char server[] = SERVER;

WiFiSSLClient client;

void setup() {

  Serial.begin(9600);

  while (!Serial) {

    ; // wait for serial port to connect. Needed for native USB port only

  }

  // check for the WiFi module:

  if (WiFi.status() == WL_NO_MODULE) {

    Serial.println("Communication with WiFi module failed!");

    // don't continue

    while (true);

  }

  String fv = WiFi.firmwareVersion();

  if (fv < WIFI_FIRMWARE_LATEST_VERSION) {

    Serial.println("Please upgrade the firmware");

  }

  // attempt to connect to WiFi network:

  while (status != WL_CONNECTED) {

    Serial.print("Attempting to connect to SSID: ");

    Serial.println(ssid);

    // Connect to WPA/WPA2 network. Change this line if using open or WEP network:

    status = WiFi.begin(ssid, pass);

    // wait 10 seconds for connection:

    delay(10000);

  }

  Serial.println("Connected to wifi");

  printWiFiStatus();

  Serial.println("\nStarting connection to server...");

  if (client.connect(server, 443)) {

    Serial.println("connected to server");

    client.println("Content-Type: application/json");

    client.println("User-Agent: ArduinoWiFi/1.1");

    client.println("PUT / HTTP/1.1");

    client.println('{"id":"78918", "name":"Pizza", "price":"12.45"}');

    client.println("Connection: close");

    client.println();

  }
}

void loop() {

  // if there are incoming bytes available

  // from the server, read them and print them:

  while (client.available()) {

    char c = client.read();

    Serial.write(c);

  }

  // if the server's disconnected, stop the client:

  if (!client.connected()) {

    Serial.println();

    Serial.println("disconnecting from server.");

    client.stop();

    // do nothing forevermore:

    while (true);

  }
}

void printWiFiStatus() {

  // print the SSID of the network you're attached to:

  Serial.print("SSID: ");

  Serial.println(WiFi.SSID());

  // print your board's IP address:

  IPAddress ip = WiFi.localIP();

  Serial.print("IP Address: ");

  Serial.println(ip);

  // print the received signal strength:

  long rssi = WiFi.RSSI();

  Serial.print("signal strength (RSSI):");

  Serial.print(rssi);

  Serial.println(" dBm");
}

I need Content-Type to change to application/json and I need the payload sent with the request. How can I do this with the WifiNina library?

How about you post all of your code here. How to get the best out of this forum - Using Arduino / Installation & Troubleshooting - Arduino Forum

I've updated it to include all of my code. Thanks!

curl work with the API like so:

curl -d '{"id":"2", "name":"Test", "price":"2.45"}' -H "Content-Type: application/json" -X POST $API_URL

This solution: How to POST JSON data from NANO 33 IOT? - #9 by Klaus_K worked for me. It uses the HTTP library instead of WifiNina to send the data.