> ## Documentation Index
> Fetch the complete documentation index at: https://docs.zavu.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Contacts

> Create, list, retrieve and update contacts via the Zavu Go SDK. Manage profile metadata, channels and merge suggestions from your code.

Contacts are automatically created when you send messages. You can retrieve and update contact information.

## Get Contact

```go theme={null}
result, err := client.Contacts.Get(context.TODO(), "con_abc123")
if err != nil {
	panic(err)
}

fmt.Println(result.ID)
fmt.Println(result.PhoneNumber)
fmt.Println(result.CountryCode)
fmt.Println(result.AvailableChannels)
fmt.Println(result.DefaultChannel)
```

## Get Contact by Phone

```go theme={null}
result, err := client.Contacts.GetByPhone(context.TODO(), "+14155551234")
if err != nil {
	panic(err)
}

fmt.Println(result.ID)
fmt.Println(result.AvailableChannels) // ["sms", "whatsapp"]
```

## Update Contact

```go theme={null}
result, err := client.Contacts.Update(context.TODO(), "con_abc123", zavudev.ContactUpdateParams{
	DefaultChannel: zavudev.String("whatsapp"),
	Metadata: map[string]string{
		"name": "John Doe",
		"tier": "premium",
	},
})
```

## List Contacts

```go theme={null}
result, err := client.Contacts.List(context.TODO(), zavudev.ContactListParams{
	Limit: zavudev.Int(50),
})
if err != nil {
	panic(err)
}

for _, contact := range result.Items {
	fmt.Println(contact.ID, contact.PhoneNumber)
}

// Filter by phone number
result, err := client.Contacts.List(context.TODO(), zavudev.ContactListParams{
	PhoneNumber: zavudev.String("+1415"),
})

// Pagination
var cursor *string
for {
	result, err := client.Contacts.List(context.TODO(), zavudev.ContactListParams{
		Cursor: cursor,
		Limit:  zavudev.Int(50),
	})
	if err != nil {
		panic(err)
	}

	for _, contact := range result.Items {
		fmt.Println(contact.ID)
	}

	if result.NextCursor == nil {
		break
	}
	cursor = result.NextCursor
}
```

## Phone Introspection

Validate a phone number and check available channels:

```go theme={null}
result, err := client.Introspect.Phone(context.TODO(), zavudev.PhoneIntrospectionParams{
	PhoneNumber: zavudev.String("+14155551234"),
})
if err != nil {
	panic(err)
}

fmt.Println(result.ValidNumber)      // true
fmt.Println(result.CountryCode)      // "US"
fmt.Println(result.NationalFormat)   // "(415) 555-1234"
fmt.Println(result.LineType)         // "mobile"
fmt.Println(result.AvailableChannels) // ["sms", "whatsapp"]
if result.Carrier != nil {
	fmt.Println(result.Carrier.Name) // "Verizon Wireless"
}
```
