Skip to main content

Changes to removing properties and tags via API

Written by Alex Bitca

Starting August 3, 2026, the way you remove customer properties through the API is changing. Sending a property with an empty or null value will no longer unassign it. To remove properties and tags, you will use two new fields, unset_properties and unset_tags, that are available today.

This applies to both endpoints that manage contacts:

  • Create or update customers (POST /api/v2/customers)

  • Send transactional surveys (POST /api/v2/survey)

Adding and updating properties is not changing. Only how you remove them is.

The payloads below are examples. Check the API documentation for the full request format of each endpoint.


What is changing on August 3, 2026

Today, you can remove a property from a contact in two ways:

  1. The legacy way: send the property with an empty string ("") or null value.

  2. The new way: list the property in the unset_properties field.

Both work right now. On August 3, 2026, the legacy way stops. After that date, an empty or null value no longer removes a property, and unset_properties becomes the only way to remove one through the API.

If your integration currently clears properties by sending empty or null values, switch it to unset_properties before August 3, 2026. After that date, those empty values are ignored and the property keeps its existing value.


How property removal works today

Until August 3, sending a property with an empty or null value unassigns it from the contact.

{
"subscribers": [
{
"email": "johnsmith@example.com",
"properties": [
{
"label": "Subscription name",
"value": ""
}
]
}
]
}

This removes the "Subscription name" value from johnsmith@example.com. The property still exists in your account and stays assigned to your other contacts. Only this one contact is affected.

This behavior keeps working until August 3, 2026, then stops.


The new way: unset_properties

unset_properties is an array of property names to remove from the contact. Retently clears exactly those and leaves every other property untouched.

You can add, update, and remove properties in the same request. Anything you do not mention stays as is.

{
"subscribers": [
{
"email": "johnsmith@example.com",
"properties": [
{
"label": "Plan",
"value": "Professional"
}
],
"unset_properties": ["subscription_name", "Renewal date"]
}
]
}

In this request:

  • "Plan" is added or updated to "Professional".

  • "subscription_name" and "Renewal date" are removed from the contact.

  • Every other property on the contact is left untouched.

You can reference a property either by its underscore name (subscription_name) or by its label with spaces and capitals ("Renewal date"). Both formats work.

unset_properties works today, so you can adopt it now and remove the legacy empty or null approach before the August 3 cutover.


Removing tags: unset_tags

unset_tags is an array of tags to remove from a contact without resending the rest. It is available now as an early alternative, so you can adapt before a future update changes how tags behave.

How you use it depends on whether you currently pass the tags field.

If you do not pass the tags field via the API

Use unset_tags to remove specific tags. This fits the case where tags are managed outside the API (through integrations, webhooks, manual edits, or CSV imports) and you need to drop one without touching the rest.

{
"subscribers": [
{
"email": "johnsmith@example.com",
"unset_tags": ["blue"]
}
]
}

This removes the "blue" tag from the contact and leaves every other tag untouched.

If you currently pass the tags field via the API

Keep using it for now. The tags array overwrites a contact's entire tag list, so it already handles removal: any tag you leave out of the array is dropped. The tags field does the job today, and there is nothing you need to change yet.

Use either the tags field or unset_tags, not both. Sending both in the same request is redundant and may not behave as expected. unset_tags is added ahead of time so you can plan your switch before a future update changes how the tags array works. We will notify you before that update launches.


Using these fields on the survey endpoint

Everything above applies to the survey endpoint (POST /api/v2/survey) as well, which manages the same contact data and additionally schedules a survey. Pass unset_properties and unset_tags inside each subscriber, alongside the required campaign id.

{
"campaign": "YOUR_CAMPAIGN_ID",
"subscribers": [
{
"email": "johnsmith@example.com",
"unset_properties": ["subscription_name"],
"unset_tags": ["blue"]
}
]
}


What you need to do before August 3, 2026

  1. Find anywhere your integration removes a property by sending an empty or null value.

  2. Replace that with the unset_properties field, listing the property names to remove.

  3. If you manage tags outside the tags field and need to remove specific ones, you can start using unset_tags. If you already remove tags through the tags field, keep doing that for now (see the tags section above).

Adding and updating properties does not change, so the rest of your payloads stay the same.

After August 3, 2026, empty or null property values are ignored for removal. If you have not switched to unset_properties by then, properties you intended to clear will keep their old values.


Quick reference

  • Add or update a property: include it in the properties array (unchanged).

  • Remove a property, until August 3, 2026: send it with an empty or null value.

  • Remove a property, now and after August 3, 2026: list it in unset_properties.

  • Remove specific tags, if you do not pass the tags field: list them in unset_tags.

  • Remove tags, if you already pass the tags field: keep using tags for now (do not combine it with unset_tags).

  • Leave a property or tag untouched: do not mention it in the request.


Related

Did this answer your question?