> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://mailchimp.com/developer/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://mailchimp.com/developer/_mcp/server.

# Get a contact record

GET https://api.mailchimp.com/3.0/audiences/{audience_id}/contacts/{contact_id}

Retrieve a specific omni-channel contact in an audience.

Reference: https://mailchimp.com/developer/marketing/api/audiences/get-audience-contact

## Authentication

- `Authorization` header (bearer token, required) — Authorization using a Mailchimp API key (a.k.a. Bearer token)
- `Authorization` header (bearer token, required) — Authorization using OAuth

## Request

### Path parameters

- `audience_id` (string, required) — The unique ID for the audience.
- `contact_id` (string, required) — A unique identifier for the contact, which can be a Mailchimp contact ID or a channel hash. A channel hash must follow the format email:[md5_hash] (where the hash is the MD5 of the lowercased email address) or sms:[sha256_hash] (where the hash is the SHA256 of the E.164-formatted phone number).

### Query parameters

- `fields` (list of string, optional) — A comma-separated list of fields to return. Reference parameters of sub-objects with dot notation.
- `exclude_fields` (list of string, optional) — A comma-separated list of fields to exclude. Reference parameters of sub-objects with dot notation.

## Response

### 200

- `audience_id` (string, optional) — The unique ID for the audience.
- `created_at` (datetime, optional) — The date that the contact was created.
- `email_channel` (AudiencesContactEmailChannel, optional)
- `id` (string, optional) — The unique ID for the contact.
- `language` (enum, optional) — The contact's detected language. Empty string when no language has been detected or set.
  - Allowed values: ``, `en`, `ar`, `af`, `be`, `bg`, `ca`, `zh`, `zh_CN`, `hr`, `cs`, `da`, `nl`, `et`, `fa`, `fi`, `fr`, `fr_CA`, `de`, `el`, `he`, `hi`, `hu`, `is`, `id`, `ga`, `it`, `ja`, `km`, `ko`, `lv`, `lt`, `mt`, `ms`, `mk`, `no`, `pl`, `pt`, `pt_PT`, `ro`, `ru`, `sr`, `sk`, `sl`, `es`, `es_ES`, `sw`, `sv`, `ta`, `th`, `tr`, `uk`, `vi`
- `last_updated_at` (datetime, optional) — The date that the contact was last updated.
- `merge_fields` (map from string to AudiencesContactMergeFields, optional, nullable) — A dictionary of merge fields where the keys are the merge tags. See the [Merge Fields documentation](https://mailchimp.com/developer/marketing/docs/merge-fields/#structure) for more about the structure.
- `sms_channel` (AudiencesContactSmsChannel, optional)
- `source` (AudiencesContactSource, optional) — The source from which the parent's entity was created.
- `status` (enum, optional) — The status of a contact.
  - Allowed values: `active`, `archived`
- `tags` (list of string, optional) — The tags assigned to this contact.

## Types

### AudiencesContactEmailChannel

- `effective_subscription_status` (AudiencesContactEmailChannelEffectiveSubscriptionStatus, optional) — A computation performed by the Mailchimp platform, triggered whenever any of its inputs change. Some inputs are controlled by API users, while others are tracked internally by the platform. Computation is based on: audience opt-in configuration (single vs. double opt-in), marketing consent status, and deliverability status (an internal state for a contact, maintained by Mailchimp for a specific marketing channel instance). This new API field is distinct from how contacts are displayed in the UI. See the [Audiences (BETA) documentation](https://mailchimp.com/developer/marketing/docs/audiences-introduction) to learn about supported values.
- `email` (string, optional) — Email address
- `hashed_email` (string, optional) — MD5 hash of the email address
- `marketing_consent` (AudiencesContactEmailChannelMarketingConsent, optional) — A contact's current consent status for email marketing communications. See the [Audiences (BETA) documentation](https://mailchimp.com/developer/marketing/docs/audiences-introduction) to learn about supported values.
- `source` (AudiencesContactEmailChannelSource, optional) — The source from which the parent's entity was created.

### AudiencesContactMergeFields

This object's keys are merge tags (like FNAME). It's values are the values to be added to the merge field.

### AudiencesContactSmsChannel

- `effective_subscription_status` (AudiencesContactSmsChannelEffectiveSubscriptionStatus, optional) — A computation performed by the Mailchimp platform, triggered whenever any of its inputs change. Some inputs are controlled by API users, while others are tracked internally by the platform. Computation is based on: audience opt-in configuration (single vs. double opt-in), marketing consent status, and deliverability status (an internal state for a contact, maintained by Mailchimp for a specific marketing channel instance). This new API field is distinct from how contacts are displayed in the UI. See the [Audiences (BETA) documentation](https://mailchimp.com/developer/marketing/docs/audiences-introduction) to learn about supported values.
- `marketing_consent` (AudiencesContactSmsChannelMarketingConsent, optional) — A contact's current consent status for SMS marketing communications. See the [Audiences (BETA) documentation](https://mailchimp.com/developer/marketing/docs/audiences-introduction) to learn about supported values.
- `sms_phone` (string, optional) — SMS Phone Number
- `source` (AudiencesContactSmsChannelSource, optional) — The source from which the parent's entity was created.
- `hashed_sms_phone` (string, optional) — SHA256 hash of the SMS phone number

### AudiencesContactSource

The source from which the parent's entity was created.

- `name` (string, optional) — The name of the entity's source

### AudiencesContactEmailChannelEffectiveSubscriptionStatus

A computation performed by the Mailchimp platform, triggered whenever any of its inputs change. Some inputs are controlled by API users, while others are tracked internally by the platform. Computation is based on: audience opt-in configuration (single vs. double opt-in), marketing consent status, and deliverability status (an internal state for a contact, maintained by Mailchimp for a specific marketing channel instance). This new API field is distinct from how contacts are displayed in the UI. See the [Audiences (BETA) documentation](https://mailchimp.com/developer/marketing/docs/audiences-introduction) to learn about supported values.

- `value` (enum, optional)
  - Allowed values: `subscribed`, `unsubscribed`, `nonsubscribed`, `pending`

### AudiencesContactEmailChannelMarketingConsent

A contact's current consent status for email marketing communications. See the [Audiences (BETA) documentation](https://mailchimp.com/developer/marketing/docs/audiences-introduction) to learn about supported values.

- `source` (AudiencesContactEmailChannelMarketingConsentSource, optional) — The source from which the parent's entity was created.
- `status` (enum, optional)
  - Allowed values: `consented`, `denied`, `confirmed`, `unknown`
- `captured_at` (datetime, optional) — The ISO 8601 timestamp when the email marketing consent state was recorded; accepted and returned only when status is `confirmed` or `consented`; defaults to the current time if omitted; ignored if older than an existing stored timestamp (staleness guard).

### AudiencesContactEmailChannelSource

The source from which the parent's entity was created.

- `name` (string, optional) — The name of the entity's source

### AudiencesContactMergeFields0

- `addr1` (string, required)
- `city` (string, required)
- `state` (string, required)
- `zip` (string, required)
- `addr2` (string, optional)
- `country` (string, optional)

### AudiencesContactSmsChannelEffectiveSubscriptionStatus

A computation performed by the Mailchimp platform, triggered whenever any of its inputs change. Some inputs are controlled by API users, while others are tracked internally by the platform. Computation is based on: audience opt-in configuration (single vs. double opt-in), marketing consent status, and deliverability status (an internal state for a contact, maintained by Mailchimp for a specific marketing channel instance). This new API field is distinct from how contacts are displayed in the UI. See the [Audiences (BETA) documentation](https://mailchimp.com/developer/marketing/docs/audiences-introduction) to learn about supported values.

- `value` (enum, optional)
  - Allowed values: `subscribed`, `unsubscribed`, `nonsubscribed`, `pending`

### AudiencesContactSmsChannelMarketingConsent

A contact's current consent status for SMS marketing communications. See the [Audiences (BETA) documentation](https://mailchimp.com/developer/marketing/docs/audiences-introduction) to learn about supported values.

- `source` (AudiencesContactSmsChannelMarketingConsentSource, optional) — The source from which the parent's entity was created.
- `status` (enum, optional) — The contact's SMS marketing consent status. Use `confirmed` for double opt-in audiences, `consented` for single opt-in audiences. `denied` is accepted on PATCH/PUT only (not POST) and drives an API-initiated unsubscribe; it cannot be used when creating a new contact.
  - Allowed values: `consented`, `confirmed`, `denied`, `unknown`
- `captured_at` (datetime, optional) — The timestamp when SMS marketing consent was captured (ISO 8601). Only accepted and returned when status is `confirmed`. The timestamp of the consent state change being recorded. Defaults to the current time if not provided. If the contact already has a consent timestamp on record that is equal to or newer than the supplied value, the supplied value is ignored (staleness guard); to update the consent timestamp supply a value strictly newer than the stored one.

### AudiencesContactSmsChannelSource

The source from which the parent's entity was created.

- `name` (string, optional) — The name of the entity's source

### AudiencesContactEmailChannelMarketingConsentSource

The source from which the parent's entity was created.

- `name` (string, optional) — The name of the entity's source

### AudiencesContactSmsChannelMarketingConsentSource

The source from which the parent's entity was created.

- `name` (string, optional) — The name of the entity's source

## Examples

**Response**

```json
{
  "audience_id": "773280e405",
  "created_at": "2024-01-15T09:30:00Z",
  "email_channel": {
    "effective_subscription_status": {
      "value": "subscribed"
    },
    "email": "example@freddiemail.com",
    "hashed_email": "9115d71ba28088047d342e3bcedacd0f",
    "marketing_consent": {
      "source": {
        "name": "string"
      },
      "status": "consented",
      "captured_at": "2024-01-15T10:30:00Z"
    },
    "source": {
      "name": "string"
    }
  },
  "id": "7CCF816ADF6CE1B11AE09BB024A02B9B",
  "language": "en",
  "last_updated_at": "2024-01-15T09:30:00Z",
  "merge_fields": {},
  "sms_channel": {
    "effective_subscription_status": {
      "value": "subscribed"
    },
    "marketing_consent": {
      "source": {
        "name": "string"
      },
      "status": "consented",
      "captured_at": "2024-01-15T10:30:00Z"
    },
    "sms_phone": "+14045550102",
    "source": {
      "name": "string"
    },
    "hashed_sms_phone": "0572084e1f8288816f02cdb7bd930c62400bc8aef510adfaa9eec2b995fa7609"
  },
  "source": {
    "name": "string"
  },
  "status": "active",
  "tags": [
    "string"
  ]
}
```

**SDK Code**

```python
import requests

url = "https://api.mailchimp.com/3.0/audiences/audience_id/contacts/contact_id"

headers = {"Authorization": "Bearer <token>"}

response = requests.get(url, headers=headers)

print(response.json())
```

```javascript
const url = 'https://api.mailchimp.com/3.0/audiences/audience_id/contacts/contact_id';
const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api.mailchimp.com/3.0/audiences/audience_id/contacts/contact_id"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("Authorization", "Bearer <token>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api.mailchimp.com/3.0/audiences/audience_id/contacts/contact_id")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://api.mailchimp.com/3.0/audiences/audience_id/contacts/contact_id")
  .header("Authorization", "Bearer <token>")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://api.mailchimp.com/3.0/audiences/audience_id/contacts/contact_id', [
  'headers' => [
    'Authorization' => 'Bearer <token>',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://api.mailchimp.com/3.0/audiences/audience_id/contacts/contact_id");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer <token>");
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["Authorization": "Bearer <token>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.mailchimp.com/3.0/audiences/audience_id/contacts/contact_id")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```