Update lead
Update lead fields. Custom fields are merged into existing custom fields (not replaced). Keys without the custom_ prefix are accepted for backwards compatibility and are stored with that prefix. Keys cannot contain ..
Email cannot be changed after creation.
curl -X PATCH "https://api.sendkit.ai/v1/leads/example_string" \
-H "Content-Type: application/json" \
-H "X-Api-Key: YOUR_API_KEY" \
-d '{
"jobTitle": "CRO",
"tags": [
"vip",
"enterprise",
"decision-maker"
],
"customFields": {
"custom_revenue": "$50M",
"custom_lastContact": "2025-06-15"
}
}'
import requests
import json
url = "https://api.sendkit.ai/v1/leads/example_string"
headers = {
"Content-Type": "application/json",
"X-Api-Key": "YOUR_API_KEY"
}
data = {
"jobTitle": "CRO",
"tags": [
"vip",
"enterprise",
"decision-maker"
],
"customFields": {
"custom_revenue": "$50M",
"custom_lastContact": "2025-06-15"
}
}
response = requests.patch(url, headers=headers, json=data)
print(response.json())
const response = await fetch("https://api.sendkit.ai/v1/leads/example_string", {
method: "PATCH",
headers: {
"Content-Type": "application/json",
"X-Api-Key": "YOUR_API_KEY"
},
body: JSON.stringify({
"jobTitle": "CRO",
"tags": [
"vip",
"enterprise",
"decision-maker"
],
"customFields": {
"custom_revenue": "$50M",
"custom_lastContact": "2025-06-15"
}
})
});
const data = await response.json();
console.log(data);
package main
import (
"fmt"
"net/http"
"bytes"
"encoding/json"
)
func main() {
data := []byte(`{
"jobTitle": "CRO",
"tags": [
"vip",
"enterprise",
"decision-maker"
],
"customFields": {
"custom_revenue": "$50M",
"custom_lastContact": "2025-06-15"
}
}`)
req, err := http.NewRequest("PATCH", "https://api.sendkit.ai/v1/leads/example_string", bytes.NewBuffer(data))
if err != nil {
panic(err)
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("X-Api-Key", "YOUR_API_KEY")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
fmt.Println("Response Status:", resp.Status)
}
require 'net/http'
require 'json'
uri = URI('https://api.sendkit.ai/v1/leads/example_string')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(uri)
request['Content-Type'] = 'application/json'
request['X-Api-Key'] = 'YOUR_API_KEY'
request.body = '{
"jobTitle": "CRO",
"tags": [
"vip",
"enterprise",
"decision-maker"
],
"customFields": {
"custom_revenue": "$50M",
"custom_lastContact": "2025-06-15"
}
}'
response = http.request(request)
puts response.body
{
"success": true,
"data": {
"_id": "665d4e5f6a7b8c9d0e1f2a3b",
"email": "john@acme.com",
"firstName": "John",
"lastName": "Doe",
"companyName": "Acme Corp",
"jobTitle": "CRO",
"tags": [
"vip",
"enterprise",
"decision-maker"
],
"customFields": {
"custom_industry": "SaaS",
"custom_revenue": "$50M",
"custom_lastContact": "2025-06-15"
},
"createdAt": "2025-06-10T10:30:00.000Z",
"updatedAt": "2025-06-20T09:00:00.000Z"
}
}
{
"success": false,
"error": {
"code": "NOT_FOUND",
"message": "Lead not found"
}
}
/v1/leads/{leadId}Target server for requests. Edit to use your own host.
Platform API key (sk_user_...) or Workspace API key (sk_...)
Lead ID (24-character hex string) or lead email address. Email lookup is supported on GET only; PATCH requires the lead ID.
The media type of the request body
Custom fields to merge into existing custom fields. Keys without the custom_ prefix are accepted for backwards compatibility and are stored with that prefix. Keys cannot contain ..
Request Preview
Response
Response will appear here after sending the request
Authentication
API Key for authentication. Platform API key (sk_user_...) or Workspace API key (sk_...)
Path Parameters
Lead ID (24-character hex string) or lead email address. Email lookup is supported on GET only; PATCH requires the lead ID.
Body
Custom fields to merge into existing custom fields. Keys without the custom_ prefix are accepted for backwards compatibility and are stored with that prefix. Keys cannot contain ..