---
title: "Retrieve Contact"
full: true
_openapi:
  method: GET
  toc: []
  structuredData:
    headings: []
    contents:
      - content: "Retrieves a contact by ID"
_apiData:
  document: "https://reloop.sh/api/contacts/openapi/json"
  operationData: [{"path":"/api/contacts/retrieve/{contact_id}","method":"get"}]
  parameterList: [{"name":"contact_id","type":"string","required":true,"description":"Unique contact identifier","location":"path","example":"cont_123456789"}]
  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_123","name":"Beta Testers"}],"channels":[{"id":"tpc_123","name":"Newsletter","subscription":"opt_in"}],"suppressionReason":null,"suppressedAt":null,"createdAt":"2026-03-23T10:00:00Z","updatedAt":"2026-03-23T10:00:00Z"}},"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":"js","label":"Node.js","source":"import Reloop from 'reloop-email';\n\nconst reloop = new Reloop('re_123456789');\n\nconst { response: contact, error } = await reloop.contacts().get('cont_123456789');\nif (error) throw error;"},{"id":"curl","lang":"bash","label":"cURL","source":"curl https://reloop.sh/api/contacts/retrieve/cont_123456789 \\\n  -H \"x-api-key: re_123456789\""},{"id":"php","lang":"php","label":"PHP","source":"$reloop = Reloop::client('re_123456789');\n\n$reloop->contacts->get('cont_123456789');"},{"id":"python","lang":"python","label":"Python","source":"from reloop_email import Reloop\n\nreloop = Reloop(api_key=\"re_123456789\")\n\nreloop.contacts().get(\"cont_123456789\")"},{"id":"ruby","lang":"ruby","label":"Ruby","source":"require 'net/http'\nrequire 'json'\n\nuri = URI('https://reloop.sh/api/contacts/retrieve/cont_123456789')\nhttp = Net::HTTP.new(uri.host, uri.port)\nhttp.use_ssl = true\n\nrequest = Net::HTTP::Get.new(uri)\nrequest['x-api-key'] = 're_123456789'\n\nresponse = http.request(request)\ncontact = JSON.parse(response.body)"},{"id":"go","lang":"go","label":"Go","source":"import reloopemail \"github.com/reloop-labs/reloop-email\"\n\nfunc main() {\n    reloop, _ := reloopemail.NewClient(reloopemail.ClientOptions{\n        APIKey: \"re_123456789\",\n    })\n    \n    _, _ = reloop.Contacts().Get(\"cont_123456789\")\n}"},{"id":"rust","lang":"rust","label":"Rust","source":"use reloop_email::ReloopEmail;\nuse serde_json::json;\n\n#[tokio::main]\nasync fn main() -> Result<(), Box<dyn std::error::Error>> {\n    let reloop = ReloopEmail::new(\"re_123456789\".to_string(), None);\n    \n    reloop.contacts().get(\"cont_123456789\").await?;\n\n    Ok(())\n}"},{"id":"java","lang":"java","label":"Java","source":"import sh.reloop.email.ReloopEmail;\n\nReloopEmail reloop = ReloopEmail.client(\"re_123456789\");\n\nreloop.contacts().get(\"cont_123456789\");"},{"id":"dotnet","lang":"csharp","label":".NET","source":"using Reloop.Email;\n\nvar reloop = ReloopEmail.Client(\"re_123456789\");\n\nawait reloop.Contacts().GetAsync(\"cont_123456789\");"}]
---
> 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 />
