Delete Synced Contact Field
curl --request DELETE \
--url https://api.usesimple.ai/api/v1/contacts/fields/{fieldKey} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.usesimple.ai/api/v1/contacts/fields/{fieldKey}"
headers = {"Authorization": "Bearer <token>"}
response = requests.delete(url, headers=headers)
print(response.text)const options = {method: 'DELETE', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.usesimple.ai/api/v1/contacts/fields/{fieldKey}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.usesimple.ai/api/v1/contacts/fields/{fieldKey}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "DELETE",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.usesimple.ai/api/v1/contacts/fields/{fieldKey}"
req, _ := http.NewRequest("DELETE", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.delete("https://api.usesimple.ai/api/v1/contacts/fields/{fieldKey}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.usesimple.ai/api/v1/contacts/fields/{fieldKey}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Delete.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"key": "<string>",
"deleted": true
}{
"status": "error",
"success": false,
"error": "<string>",
"errors": [
"<string>"
]
}{
"status": "error",
"success": false,
"error": "<string>",
"errors": [
"<string>"
]
}{
"status": "error",
"success": false,
"error": "<string>",
"errors": [
"<string>"
]
}{
"status": "error",
"success": false,
"error": "<string>",
"errors": [
"<string>"
]
}Delete a Synced Contact Field with the API
Delete a contact field your sync defined, along with its stored values, so you can define the same key again with a new type or enum options.
DELETE
/
contacts
/
fields
/
{fieldKey}
Delete Synced Contact Field
curl --request DELETE \
--url https://api.usesimple.ai/api/v1/contacts/fields/{fieldKey} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.usesimple.ai/api/v1/contacts/fields/{fieldKey}"
headers = {"Authorization": "Bearer <token>"}
response = requests.delete(url, headers=headers)
print(response.text)const options = {method: 'DELETE', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.usesimple.ai/api/v1/contacts/fields/{fieldKey}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.usesimple.ai/api/v1/contacts/fields/{fieldKey}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "DELETE",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.usesimple.ai/api/v1/contacts/fields/{fieldKey}"
req, _ := http.NewRequest("DELETE", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.delete("https://api.usesimple.ai/api/v1/contacts/fields/{fieldKey}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.usesimple.ai/api/v1/contacts/fields/{fieldKey}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Delete.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"key": "<string>",
"deleted": true
}{
"status": "error",
"success": false,
"error": "<string>",
"errors": [
"<string>"
]
}{
"status": "error",
"success": false,
"error": "<string>",
"errors": [
"<string>"
]
}{
"status": "error",
"success": false,
"error": "<string>",
"errors": [
"<string>"
]
}{
"status": "error",
"success": false,
"error": "<string>",
"errors": [
"<string>"
]
}A field’s type cannot change after it is created, and enum options cannot be removed. To change either, delete the field with this endpoint, then send the new definition in the
Only fields defined through contact upsert can be deleted. The request is rejected, and nothing is deleted, when the field:
fields of your next Upsert Synced Contact request. If your source sends field definitions with every upsert, update it to send the new definition first, or its next upsert creates the old field again.
Deleting a field also deletes the values stored for it on every contact. Contacts themselves are not affected. A contact has no value for the field again until your source syncs that contact with it.
To avoid that gap, define the new shape under a new key, sync contacts with values for it, then delete the old field once nothing uses it.
curl -X DELETE 'https://api.usesimple.ai/api/v1/contacts/fields/lifecycle_stage' \
-H 'Authorization: Bearer YOUR_API_KEY'
{
"key": "lifecycle_stage",
"deleted": true
}
- is
name,email, orphone_number, which returns422 - was created in Simple, which returns
409 - is used by a contact segment or the call params mapping, which returns
409. Remove it from the segment or mapping first.
401 when authentication fails, 404 when your organization has no field with that key, and 422 when the key is invalid.Authorizations
Your API key, sent as Authorization: Bearer YOUR_API_KEY
Path Parameters
Key of the field to delete.
Required string length:
1 - 63Pattern:
^[a-z][a-z0-9]*(?:_[a-z0-9]+)*$Last modified on October 6, 2026