{"id":1591,"date":"2025-10-08T14:54:00","date_gmt":"2025-10-08T14:54:00","guid":{"rendered":"http:\/\/gogetmuscle.com\/?p=1591"},"modified":"2025-10-08T17:39:39","modified_gmt":"2025-10-08T17:39:39","slug":"409-conflict-on-createorupdate-call","status":"publish","type":"post","link":"http:\/\/gogetmuscle.com\/index.php\/2025\/10\/08\/409-conflict-on-createorupdate-call\/","title":{"rendered":"409 Conflict on createOrUpdate call"},"content":{"rendered":"

Hey everyone! \ud83d\udc4b<\/span><\/P>

I’m running into this really weird issue with HubSpot’s API and I’m hoping someone here has seen this before or can help me understand what’s going on.<\/P>

## The Situation<\/STRONG><\/P>

I’m trying to use HubSpot’s v1 createOrUpdate API to update an existing contact, but instead of updating it, I’m getting a 409 “Contact already exists” error. This is confusing because… well, that’s exactly what createOrUpdate is supposed to handle, right?<\/P>

Here’s what I’m doing<\/EM>:<\/P>

“`bash
curl –request POST
–url https:\/\/api.hubapi.com\/contacts\/v1\/contact\/createOrUpdate\/email\/john.doe@example.com<\/a>
–header ‘Authorization: Bearer HUBSPOT_API_TOKEN’
–header ‘Content-Type: application\/json’
–data ‘{
“properties”: [
{“property”: “email”, “value”: “john.doe@example.com”},
{“property”: “firstname”, “value”: “John”},
{“property”: “lastname”, “value”: “Doe”},
{“property”: “phone”, “value”: “+1234567890”},
{“property”: “city”, “value”: “New York”},
{“property”: “country”, “value”: “United States”}
]
}’
“`<\/P>

## The Error Response<\/STRONG><\/P>

And here’s what I’m getting back:<\/P>

“`json
{
“message”: “Contact already exists. Existing ID: 123456789”,
“identityProfile”: {
“vid”: 123456789,
“identity”: [
{
“value”: “a1b2c3d4-e5f6-7890-abcd-ef1234567890”,
“type”: “LEAD_GUID”,
“timestamp”: 1759929705399
},
{
“value”: “john.doe@example.com”,
“type”: “EMAIL”,
“timestamp”: 1759930250066,
“isPrimary”: true
},
{
“value”: “j.doe@company.com”,
“type”: “EMAIL”,
“timestamp”: 1759930225502,
“isSecondary”: true
}
],
“linkedVid”: [52408801, 68726151],
“isContact”: true,
“isCanonicalProfile”: true,
“savedAtTimestamp”: 1759930250186,
“mergeInputs”: []
},
“errors”: [
{
“message”: “A contact with email john.doe@example.com already exists. Existing ID: 123456789”,
“in”: “email”
}
],
“status”: “error”,
“correlationId”: “5d9c44a7-6f95-48b2-90aa-03a1f8a201d4”,
“category”: “OBJECT_ALREADY_EXISTS”,
“error”: “CONTACT_EXISTS”
}
“`<\/P>

## What I’ve Tried<\/STRONG><\/P>

I’ve checked and there’s definitely no other account with the original email address – the contact I’m trying to update is unique.<\/P>

The only workaround I’ve found so far is:
1. Change the email in the HubSpot UI (add an underscore or something)
2. Then make the request with the correct data using the changed email as the URL parameter<\/P>

But this is obviously not a sustainable solution! \ud83d\ude05<\/span><\/P>

## My Questions<\/STRONG><\/P>

1. **Has anyone else seen this behavior?** Is this a known issue with the createOrUpdate API?
2. **Am I missing something obvious?** Maybe there’s a different approach I should be using?
3. **Is there a better way to handle this?** The workaround I found is pretty clunky.<\/P>

## What I’m Hoping For<\/P>

Ideally, I’d like to be able to just call the createOrUpdate API and have it work as expected – either create the contact if it doesn’t exist, or update it if it does. That’s the whole point of the API, right?<\/P><\/p>\n","protected":false},"excerpt":{"rendered":"

Hey everyone! \ud83d\udc4bI’m running into this really weird issue with HubSpot’s API and I’m hoping someone here has seen this before or can help me understand what’s going on.## The SituationI’m trying to use HubSpot’s v1 createOrUpdate API to update an existing contact, but instead of updating it, I’m getting a 409 “Contact already exists” […]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[14],"tags":[],"_links":{"self":[{"href":"http:\/\/gogetmuscle.com\/index.php\/wp-json\/wp\/v2\/posts\/1591"}],"collection":[{"href":"http:\/\/gogetmuscle.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/gogetmuscle.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/gogetmuscle.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/gogetmuscle.com\/index.php\/wp-json\/wp\/v2\/comments?post=1591"}],"version-history":[{"count":1,"href":"http:\/\/gogetmuscle.com\/index.php\/wp-json\/wp\/v2\/posts\/1591\/revisions"}],"predecessor-version":[{"id":1592,"href":"http:\/\/gogetmuscle.com\/index.php\/wp-json\/wp\/v2\/posts\/1591\/revisions\/1592"}],"wp:attachment":[{"href":"http:\/\/gogetmuscle.com\/index.php\/wp-json\/wp\/v2\/media?parent=1591"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/gogetmuscle.com\/index.php\/wp-json\/wp\/v2\/categories?post=1591"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/gogetmuscle.com\/index.php\/wp-json\/wp\/v2\/tags?post=1591"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}