Some of our customers are experiencing difficulty logging in. We are aware of this issue and are working to resolve it as quickly as we can.

401 error on list creation

Regular Participant

401 error on list creation

I'm using the OAuth method to access a ConstantContact user account.  I can view contacts and lists, but when I try to create a new list via the REST API call it returns a 401 error.  I'm using code from the ctctWrapper.php file to build the XML file.  Is there any info I can use to see what I'm doing wrong?   

Here's some code to show you what I'm doing and if there is something I'm doing wrong.

            //Auth request with stored OAuth Creds

            $list_api_request = OAuthRequest::from_consumer_and_token($oauth_consumer, $authorization_token, 'GET', $webServiceUrl.'lists');

            $list_api_request->sign_request($sig_method, $oauth_consumer, $authorization_token);



            //Send POST with XML to the lists REST API url

            $list_request = curl_init($webServiceUrl.'lists');

curl_setopt($list_request, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");

curl_setopt($list_request, CURLOPT_HEADER, 0);

curl_setopt($list_request, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($list_request, CURLOPT_HTTPHEADER, Array("Content-Type:application/atom+xml", "accept:application/atom+xml", 'Content-Length: ' . strlen($listXML)));

   curl_setopt($list_request, CURLOPT_FAILONERROR, 1);

curl_setopt($list_request, CURLOPT_SSL_VERIFYPEER, 0);

curl_setopt($list_request, CURLOPT_CUSTOMREQUEST, 'POST');

curl_setopt($list_request, CURLOPT_POSTFIELDS, $listXML);

   //Execute cURL request and get return.

$aero79_new_list = curl_exec($list_request);

$aero79_new_list = curl_getinfo($list_request);

$aero79_new_list = curl_error($list_request);



Problem seems to be around an error in creating the OAuth Authenticated URL.  If you see this post in how to Authenticate using OAuth and PHP, you'll see that the OAuth request must be converted to a request URL that Curl can consume, otherwise this will fail.  The change is actually two lines, see lines 7-8 below. 

  1. //Auth request with stored OAuth Creds

  2. $list_api_request = OAuthRequest::from_consumer_and_token($oauth_consumer, $authorization_token, 'GET', $webServiceUrl.'lists');

  3. $list_api_request->sign_request($sig_method, $oauth_consumer, $authorization_token);

  4. $list_api_request->get_normalized_http_method();


  6. //Send POST with XML to the lists REST API url

  7. $request_url  = $list_api_request->to_url();

  8. $session = curl_init($request_url);

  9. curl_setopt($list_request, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");

  10. curl_setopt($list_request, CURLOPT_HEADER, 0);

  11. curl_setopt($list_request, CURLOPT_RETURNTRANSFER, 1);

  12. curl_setopt($list_request, CURLOPT_HTTPHEADER, Array("Content-Type:application/atom+xml", "accept:application/atom+xml", 'Content-Length: ' . strlen($listXML)));

  13. curl_setopt($list_request, CURLOPT_FAILONERROR, 1);

  14. curl_setopt($list_request, CURLOPT_SSL_VERIFYPEER, 0);

  15. curl_setopt($list_request, CURLOPT_CUSTOMREQUEST, 'POST');

  16. curl_setopt($list_request, CURLOPT_POSTFIELDS, $listXML);


  18. //Execute cURL request and get return.

  19. $aero79_new_list = curl_exec($list_request);

  20. $aero79_new_list = curl_getinfo($list_request);

  21. $aero79_new_list = curl_error($list_request);

  22. curl_close($list_request);



Dave Berard
Senior Product Manager, Constant Contact
Developer Portal

View API documentation, code samples, get your API key.

Visit Page