Pranshu Kashyap
Pranshu Kashyap

Reputation: 125

The Resource submitted could not be validated: Mailchimp Status 400

I have been trying to make a Simple Newsletter signup Form where I am Taking basic details from the User and sending that data to Mailchimp using API's. I am facing the problem in sending POST HTTPS Request. Tried reading different answers but not able to solve problems.

Here's the screenshot of the Issue.

enter image description here

Code :

app.post("/", function (req, res) {
    const firstName = req.body.fname;
    const lastName = req.body.lname;
    const email = req.body.email;
    const data = {
        members: [
            {
                email_address : email,
                status: "subscribed",
                merge_fields: {
                    FIRSTNAME: firstName,
                    LASTNAME: lastName
                }
            }
        ]
    };
    var jsonDATA = JSON.stringify(data);

    const url = "https://us1.api.mailchimp.com/3.0/lists/<My_LIST_ID>/members/";  //Removed List Id for now to post Question. 
    const options = {
        method: "POST",
        auth: "pranshukas:MY_API_KEY"  //Removed API_KEY to post the Question 
    }


    const request = https.request(url, options, function (response) {
        response.on("data", function (data) {
            console.log(JSON.parse(data));
        })
    });

    request.write(jsonDATA);
    request.end();
});

I also tried using POSTMAN and there I am able to successfully send the Request to the Server and add details. But facing a Problem when I am implementing on my local server.

Please Help me out I know I am making some mistake in making post HTTPS request but stuck where.

Upvotes: 1

Views: 340

Answers (1)

Michael Dahan
Michael Dahan

Reputation: 128

Looks like you have some problem with the email address input, The email address field is blank and it should be populated with the email address.

Also, I think you can delete the group name(members) from the URL

const url = "https://us1.api.mailchimp.com/3.0/lists/<My_LIST_ID>/";

As recommendation i think you should add a failure route, in case of failure.

just for example: You can make two different routes/pages for success and failure.
you can add this inside the const request anonymous function after having this routes.

if(response.statusCode === 200) {
  res.sendFile(__dirname + "/success.html");
} else {
  res.sendFile(__dirname + "/failure.html");
}

Upvotes: 1

Related Questions