I am trying to add a new contact from an asp.net form but I am getting "The remote server returned an error: (403) Forbidden."
Public Function AddContact(ByVal UserEmailAddress As String, ByVal ContactListNumber As Integer) As String Try Dim xml As String xml = "<?xml version='1.0' encoding='utf-8' ?>" & _ "<entry xmlns='http://www.w3.org/2005/Atom'>" & _ "<title type='text'></title>" & _ "<updated>2008-07-23T14:21:06.407Z</updated>" & _ "<author></author>" & _ "<id>data:,none</id>" & _ "<summary type='text'>Contact</summary>" & _ "<content type='application/vnd.ctct+xml'>" & _ "<Contact xmlns='http://ws.constantcontact.com/ns/1.0/'>" & _ "<EmailAddress>" & UserEmailAddress.ToString() & "</EmailAddress>" & _ "<OptInSource>ACTION_BY_CONTACT</OptInSource>" & _ "<ContactLists>" & _ "<ContactList id='http://api.constantcontact.com/ws/customers/[username]/lists/" & ContactListNumber.ToString() & "'/>" & _ "</ContactLists>" & _ "</Contact>" & _ "</content>" & _ "</entry>" ' Set up the request Dim request As HttpWebRequest request = WebRequest.Create("https://api.constantcontact.com/ws/customers/[username]/contacts/") Dim byteData As Byte() = UTF8Encoding.UTF8.GetBytes(xml.ToString()) request.Method = "POST" request.ContentType = "application/atom+xml" request.ContentLength = byteData.Length request.Credentials = New NetworkCredential("[api key]%[username]", "[password]") ' Send the request Dim postStream As Stream postStream = request.GetRequestStream() postStream.Write(byteData, 0, byteData.Length) Dim response As HttpWebResponse response = request.GetResponse() Catch ex As WebException Return ex.ToString End Try End Function
I'm not noticing anything right away that would cause a 403, but POSTs to create a new contact should be sent to the URI https://api.constantcontact.com/ws/customers/username/contacts, instead of https://api.constantcontact.com/ws/customers/username/contacts/. Typically this returns a 404, but it's possible this could be causing your error.
Would you be able to try with this alternate URI, and let us know if you're still seeing the same issue?
The 401 error will come up when there is a mismatch between the username in the URI and the username in the authentication, or when the password is incorrect. I would suggest troubleshooting with RESTClient. If that program doesn't help, you can email email@example.com with your full code, and we can troubleshoot privately.