How do I remove a contact's phone number (& custom field value) using the API?
I have previously added a contact using the API. The contact contains a first name, last name, email, phone number ('other') and a custom field. If the contact's information changes, I would like to be able to remove these values. I can successfully remove the first name and last name using a putContact call; however, I have been unable to remove the phone number or custom field in this manner.
Thank you!
Hello SegmintD,
Thank you for reaching out to Constant Contact API Developer Support. My team is here to assist outside software developers with questions about building into Constant Contact's API.
Based on the information you provided, it sounds like your PUT request may not be including contact subresources. When updating a contact using the PUT request, any properties that are left blank or not included in the request are overwritten with null value - however this does not apply to contact subresources. Any subresources that are not included in the request, such as the “phone_number” or “custom_field” subresources would not be updated in the request. In order to update these subresources, they would need to be included in your PUT request. When removing existing values for these subresources, you would need to include them in the request with blank values. Below I am including documentation on the PUT (update) a Contact request, as well as contact subresources.
PUT (update) a Contact:
https://developer.constantcontact.com/api_reference/index.html#!/Contacts/putContact
Contact Subresources:
https://developer.constantcontact.com/api_guide/contacts_subresources.html
If you have any further questions, please feel free to email webservices@constantcontact.com with your API key and we would be happy to look into this further.
Regards,
Thank you for the response. I have tried sending the subresources using a blank value. The API call succeeds, but no change occurs within the contact. An example of the body generated by our code:
class ContactPutRequest {
emailAddress: class EmailAddressPut {
address: {{{aykeLohJnTdTIh1AZSPW1gGNzgrYcbh71yXmNM1iBm2nvLn5Z5x9si}}}
permissionToSend: implicit
}
firstName: {{{NrxKAayoOX}}}
lastName: {{{yoEytn64h8BClz}}}
updateSource: Account
customFields: [class ContactCustomField {
customFieldId: 397abae4-7481-11ec-b411-fa163eaf1c42
value: {{{kUyYfv9TeomTatKrO431Mk03v1fxS1H3solfxLbfI6W3I40hMQzLFv4QR4qUDHJW}}}
}]
phoneNumbers: [class PhoneNumberPut {
phoneNumber:
kind: other
}]
listMemberships: [4df2e336-71b9-11ec-b411-fa163eaf1c42, 55953f04-73bb-11ec-b55c-fa163e470cab, 93ac28d6-7f8f-11ec-a993-fa163eaf1c42, bd3ef544-77b4-11ec-abf0-fa163ed2816c]
}
Hello SegmintD,
Thank you for reaching out to Constant Contact API Developer Support. My team is here to assist outside software developers with questions about building into Constant Contact's API.
It looks like some of the properties in your request body may not be formatted correctly, which could be preventing those fields from mapping correctly to the corresponding contact fields.
Based on the values in the example you provided, I noticed these potential discrepancies:
On our API Reference page, to the right of the Tester, you can find Body Samples and Body Schemas that show how the (case sensitive) properties should be formatted for each of the endpoints that are listed:
API Reference - PUT (update) a Contact
https://v3.developer.constantcontact.com/api_reference/index.html#!/Contacts/putContact
Please have a look and let us know if you have any other questions! If you’d like us to look at any additional request body examples, you can also contact our team directly and securely via email at webservices@constantcontact.com and reference case number 29446454.
I think that is just a discrepancy between how the body of the call logs in our program and how it reaches the actual API? We use this exact same call to update values in the contacts (for instance, updating a phone number), and it works fine. The only thing that doesn't seem to work is updating the value to be blank. Is there anything else that could be causing the issue?
Thank you!
Hello SegmintD,
Thank you for reaching out to Constant Contact API Developer Support.
I took a look at one of the recent request bodies for one of your PUT calls to /v3/contacts/{contact_id} within our logs, which had the value for the other phone number set to blank and was not passing the properties correctly when being submitted to the API.
I did some testing, and was able to replicate what you were experiencing, that when including a value with "customFields" and "phoneNumbers" those properties are updated, (but "streetAddresses" is not).
28/Jan/2022 :00:04:20 (customer information redacted)
{"customFields":[{"custom_field_id":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx","value":"xxxxxxxxxx"}],"phoneNumbers":[{"phone_number":"","kind":"other"}],"streetAddresses":null,"email_address":{"address":"xxxxxxxxxx","permission_to_send":"implicit","created_at":null,"updated_at":null,"opt_in_date":null,"opt_out_source":null,"opt_out_date":null,"opt_out_reason":null,"confirm_status":null},"first_name":"xxxxxxxxxx","last_name":"xxxxxxxxxx","job_title":null,"company_name":null,"birthday_month":null,"birthday_day":null,"anniversary":null,"update_source":"Account","list_memberships":["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx","xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx","xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx","xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"],"taggings":null,"notes":null}
However, I was also able to replicate that the “other” phone number can only be overwritten with a blank value if the naming conventions of the properties in the request body match those that are specified in the Body Schema for the Contacts endpoint in our API Documentation:
"custom_fields": [
{ "custom_field_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx","value": "" }
],
"phone_numbers": [
{ "phone_number": "", "kind": "other"}
],
"street_addresses": [
{ "kind": "home", "street": "","city": "","state": "","postal_code": "","country": "" }
],
PUT (update) a Contact
https://v3.developer.constantcontact.com/api_reference/index.html#!/Contacts/putContact
Please have a look and let us know if you have any other questions!
I believe I have updated our code to use the snake_case values you indicated (though I still do not think this is the problem since our normal update calls work with our existing generated API code), and I do not think that it solved the problem. Our existing code (and the current code) are capable of updating the value of a custom field or phone number. However we still cannot update the value to a blank value to remove the data from the contact in Constant Contact. Even though we are sending a blank value and receive a 200 response, nothing changes with the contact in ConstantContact.
Hello SegmintD,
Thank you for reaching out to Constant Contact API Developer Support.
I have reviewed the request bodies of a few your most recent PUT calls to /v3/contacts/{contact_id} and found that the naming conventions for properties such as “custom_fields” and “phone_numbers” are still appearing in your original format of “customFields”and “phoneNumbers”.
If you could provide full examples of the recent requests you’ve sent with the updated property naming conventions, including timestamps if possible in an email to webservices@constantcontact.com we would be happy to investigate this further.
Regards,
Thank you for the continued help! We finally got the format to the standard, and that seems to work. Why do some of our calls work with the bodies you see (e.g. using phoneNumbers and not phone_numbers), but these calls to remove a value do not? We have definitely used calls with phoneNumbers to update the value of a phone number without an issue. We only encountered this problem when we tried to remove values which seems strange and inconsistent.
Thank you again!
Hello SegmintD,
Thank you for reaching out to Constant Contact API Developer Support.
I’m glad to hear that you were able to properly remove the phone number and custom field values with the naming conventions outlined in our documentation. While we were able to replicate the behavior you experienced with your original naming conventions updating these properties (but not removing their values if left blank), we can only guarantee that the calls will function as expected if they are made in the format specified in our documentation.
Please let us know if you have any other questions!
Regards,
Announcements
Join our list to be notified of new features and updates to our V3 API.
Sign Up