---
title: "Update Contact"
full: true
_openapi:
  method: PATCH
  toc: []
  structuredData:
    headings: []
    contents:
      - content: "Updates an existing contact's information"
_apiData:
  document: "https://reloop.sh/api/contacts/openapi/json"
  operationData: [{"path":"/api/contacts/v1/{contact_id}","method":"patch"}]
  parameterList: [{"name":"contact_id","type":"string","required":true,"description":"Unique contact identifier","location":"path","example":"cont_123456789"},{"name":"email","type":"string","required":false,"description":"Contact email address","location":"body","pattern":"^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$"},{"name":"firstName","type":"string","required":false,"description":"Contact first name","location":"body"},{"name":"lastName","type":"string","required":false,"description":"Contact last name","location":"body"},{"name":"status","type":"\"subscribed\" | \"unsubscribed\" | \"blocked\"","required":false,"description":"","location":"body","enumValues":["subscribed","unsubscribed","blocked"]},{"name":"properties","type":"object","required":false,"description":"Contact properties as key-value pairs to update","location":"body"}]
  responseMap: {"200":{"description":"Response for status 200","schema":{"object":"contact","id":"con_123456789","email":"john.doe@example.com","firstName":"John","lastName":"Doe","status":"subscribed","properties":{"company":"Reloop","role":"Developer"},"groups":[{"id":"grp_123456789","name":"Beta Testers"}],"channels":[{"id":"channel_123456789","name":"Newsletter","subscription":"opt_in"}],"suppressionReason":null,"suppressedAt":null,"suppressionSource":"system","suppressionNote":"example_suppressionNote","createdAt":"2026-03-23T10:00:00.000Z","updatedAt":"2026-03-23T10:00:00.000Z","event":"evt_123456789"}},"400":{"description":"Response for status 400","schema":{"message":"Contact already exists","errors":[{"field":"example_field","message":"Contact already exists"}]}},"403":{"description":"Response for status 403","schema":{"message":"Unauthorized access","why":"A contact with this email already exists in your organization.","fix":"Use a different email address or update the existing contact instead."}},"404":{"description":"Response for status 404","schema":{"message":"Contact not found","why":"A contact with this email already exists in your organization.","fix":"Use a different email address or update the existing contact instead."}}}
  codeSamples: [{"id":"node","lang":"javascript","label":"Node.js","source":"import { Reloop } from \"reloop-email\";\n\nconst reloop = new Reloop({ apiKey: \"rl_123456789\" });\n\nconst { contact, contactError } = await reloop.contacts.update(\"con_123456789\", { firstName: \"Jane\" });\nif (contactError) throw contactError;"},{"id":"curl","lang":"bash","label":"cURL","source":"curl -X PATCH https://reloop.sh/api/contacts/v1/con_123456789 \\\n  -H \"x-api-key: rl_123456789\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"firstName\": \"Jane\"}'"},{"id":"python","lang":"python","label":"Python","source":"from reloop_email import Reloop\n\nreloop = Reloop(api_key=\"rl_123456789\")\n\nresult = reloop.contacts.update(\"con_123456789\", {\n  \"firstName\": \"Jane\",\n})\nif result.contact_error:\n    raise result.contact_error"},{"id":"php","lang":"php","label":"PHP","source":"<?php\n\nrequire 'vendor/autoload.php';\n\nuse Reloop\\Reloop;\n\n$reloop = Reloop::client('rl_123456789');\n\n$contact = $reloop->contacts->update('con_123456789', [\n    'firstName' => 'Jane',\n]);"},{"id":"java","lang":"java","label":"Java","source":"import sh.reloop.ReloopClient;\nReloopClient reloop = new ReloopClient(\"rl_123456789\");\n\nUpdateContactParams params = new UpdateContactParams();\nparams.firstName = \"Jane\";\nvar contact = reloop.contacts.update(\"con_123456789\", params);"},{"id":"dotnet","lang":"csharp","label":".NET","source":"using Reloop;\nusing Reloop.Models;\n\nvar reloop = new ReloopClient(\"rl_123456789\");\n\nawait reloop.Contacts.UpdateAsync(\"con_123456789\", new Dictionary<string, object?> { [\"firstName\"] = \"Jane\" });"},{"id":"go","lang":"go","label":"Go","source":"import reloop \"github.com/reloop-labs/reloop-go\"\n\nclient, _ := reloop.NewClient(reloop.ClientOptions{\n    APIKey: \"rl_123456789\",\n})\n\ncontact, _ := client.Contacts.Update(\"con_123456789\", map[string]interface{\"firstName\": \"Jane\"})"},{"id":"rust","lang":"rust","label":"Rust","source":"use reloop::ReloopClient;\n#[tokio::main]\nasync fn main() -> Result<(), Box<dyn std::error::Error>> {\n    let reloop = ReloopClient::new(\"rl_123456789\".to_string(), None);\n\n    reloop.contacts().update(\"con_123456789\", UpdateContactParams { first_name: Some(\"Jane\".to_string()), ..Default::default() }).await?;\n\n    Ok(())\n}"},{"id":"ruby","lang":"ruby","label":"Ruby","source":"require \"reloop\"\n\nreloop = Reloop::Client.new(api_key: \"rl_123456789\")\n\ncontact = reloop.contacts.update(\"con_123456789\", first_name: \"Jane\")"},{"id":"elixir","lang":"elixir","label":"Elixir","source":"client = Reloop.client(\"rl_123456789\")\n\n{:ok, contact} = Reloop.Services.Contacts.update(client, \"con_123456789\", %{first_name: \"Jane\"})"}]
---
> For the complete documentation index, see [llms-docs.txt](/llms-docs.txt) or the site index [llms.txt](/llms.txt). Full docs corpus: [llms-full-docs.txt](/llms-full-docs.txt). Prefer markdown URLs (append `.md`) for agent consumption. Product skill: [skill.md](/skill.md).


{/* This file was generated by the OpenAPI doc generator. Do not edit this file directly. Run `bun run generate:api-docs` to regenerate. */}

<APIPage />
