> ## 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.

# Senders

> Manage sender profiles with the Go SDK

Senders are phone numbers or identities used to send messages. Each project can have multiple senders with one designated as default.

## List Senders

```go theme={null}
result, err := client.Senders.List(context.TODO(), zavudev.SenderListParams{})
if err != nil {
	panic(err)
}

for _, sender := range result.Items {
	fmt.Println(sender.ID, sender.Name, sender.PhoneNumber)
	if sender.IsDefault {
		fmt.Println("(Default sender)")
	}
}

// With pagination
result, err := client.Senders.List(context.TODO(), zavudev.SenderListParams{
	Limit:  zavudev.Int(50),
	Cursor: zavudev.String("cursor_xxx"),
})
```

## Get Sender

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

fmt.Println(result.ID)
fmt.Println(result.Name)
fmt.Println(result.PhoneNumber)
fmt.Println(result.IsDefault)
```

## Create Sender

```go theme={null}
result, err := client.Senders.Create(context.TODO(), zavudev.SenderCreateParams{
	Name:         zavudev.String("Marketing"),
	PhoneNumber:  zavudev.String("+15551234567"),
	SetAsDefault: zavudev.Bool(true),
})
if err != nil {
	panic(err)
}

fmt.Println(result.ID) // snd_xxx
```

### With Webhook

```go theme={null}
result, err := client.Senders.Create(context.TODO(), zavudev.SenderCreateParams{
	Name:        zavudev.String("Marketing"),
	PhoneNumber: zavudev.String("+15551234567"),
	WebhookURL:  zavudev.String("https://your-app.com/webhooks"),
	WebhookEvents: []string{
		"message.inbound",
		"message.delivered",
		"message.failed",
	},
})
if err != nil {
	panic(err)
}

// Webhook secret is only returned on create
if result.Webhook != nil && result.Webhook.Secret != "" {
	fmt.Println("Save this secret:", result.Webhook.Secret)
}
```

## Update Sender

```go theme={null}
result, err := client.Senders.Update(context.TODO(), "snd_abc123", zavudev.SenderUpdateParams{
	Name:         zavudev.String("Support"),
	SetAsDefault: zavudev.Bool(true),
})
```

### Update Webhook Configuration

```go theme={null}
result, err := client.Senders.Update(context.TODO(), "snd_abc123", zavudev.SenderUpdateParams{
	WebhookURL: zavudev.String("https://new-url.com/webhooks"),
	WebhookEvents: []string{
		"message.inbound",
	},
	WebhookActive: zavudev.Bool(true),
})
```

### Disable Webhook

```go theme={null}
result, err := client.Senders.Update(context.TODO(), "snd_abc123", zavudev.SenderUpdateParams{
	WebhookActive: zavudev.Bool(false),
})
```

### Remove Webhook

```go theme={null}
result, err := client.Senders.Update(context.TODO(), "snd_abc123", zavudev.SenderUpdateParams{
	WebhookURL: nil,
})
```

## Delete Sender

```go theme={null}
err := client.Senders.Delete(context.TODO(), "snd_abc123")
if err != nil {
	panic(err)
}
```

<Note>
  You cannot delete the default sender. Set another sender as default first.
</Note>

## Regenerate Webhook Secret

If your webhook secret is compromised, generate a new one:

```go theme={null}
result, err := client.Senders.RegenerateWebhookSecret(context.TODO(), "snd_abc123")
if err != nil {
	panic(err)
}

fmt.Println("New secret:", result.Secret)
```

<Warning>
  After regenerating the secret, update your webhook handler to use the new secret. The old secret will no longer work.
</Warning>

## WhatsApp Business Profile

Manage the WhatsApp Business Profile for senders with a connected WhatsApp Business Account.

### Get Profile

```go theme={null}
response, err := client.Senders.GetProfile(context.TODO(), "snd_abc123")
if err != nil {
	panic(err)
}

fmt.Println(response.Profile.About)
fmt.Println(response.Profile.Description)
fmt.Println(response.Profile.Address)
fmt.Println(response.Profile.Email)
fmt.Println(response.Profile.Websites)
fmt.Println(response.Profile.Vertical)
fmt.Println(response.Profile.ProfilePictureURL)
```

### Update Profile

```go theme={null}
response, err := client.Senders.UpdateProfile(context.TODO(), "snd_abc123", zavudev.WhatsAppBusinessProfileUpdateParams{
	About:       zavudev.String("Your trusted online store"),
	Description: zavudev.String("Best products at competitive prices"),
	Address:     zavudev.String("123 Main St, San Francisco, CA"),
	Email:       zavudev.String("support@example.com"),
	Websites:    []string{"https://example.com"},
	Vertical:    zavudev.String("RETAIL"),
})
```

### Upload Profile Picture

```go theme={null}
response, err := client.Senders.UploadProfilePicture(context.TODO(), "snd_abc123", zavudev.WhatsAppBusinessProfilePictureParams{
	ImageURL: zavudev.String("https://example.com/logo.png"),
	MimeType: zavudev.String("image/png"),
})
```

<Note>
  Profile methods are only available for senders with a WhatsApp Business Account connected.
</Note>

## Using Senders in Messages

Specify a sender when sending a message:

```go theme={null}
result, err := client.Messages.Send(context.TODO(), zavudev.MessageSendParams{
	To:         zavudev.String("+14155551234"),
	Text:       zavudev.String("Hello!"),
	ZavuSender: zavudev.String("snd_abc123"),
})
```

If no sender is specified, the default sender is used.
