# Sender

## Retrieve a sender

`client.Sender.Get(ctx, id) (*SenderRetrieveResponse, error)`

**get** `/v1/senders/{id}`

Retrieves a sender by its ID, archived ones included.

**[Required scope](/using-the-api/scopes/):** `senders:read`

**[Rate limit category](/using-the-api/rate-limits/):** Read

### Parameters

- `id string`

  Unique identifier of the sender to retrieve.

### Returns

- `type SenderRetrieveResponse struct{…}`

  - `ID string`

    Unique identifier of the sender.

  - `ArchivedAt string`

    When the sender was archived, or null if it is active. Archived senders never send.

  - `Channel SenderRetrieveResponseChannel`

    Whether this sender sends email or LinkedIn messages.

    - `const SenderRetrieveResponseChannelEmail SenderRetrieveResponseChannel = "EMAIL"`

    - `const SenderRetrieveResponseChannelLinkedin SenderRetrieveResponseChannel = "LINKEDIN"`

  - `CreatedAt string`

    When the sender was created.

  - `EmailAddress string`

    The address email from this sender is sent from. Null for LinkedIn senders, or when the connected account has no address.

  - `Health SenderRetrieveResponseHealth`

    `HEALTHY` can send. `UNHEALTHY` cannot send until `healthReason` is resolved. `UNVERIFIED` means no health verdict yet: an email sender in this state cannot send until it passes a health check, while a LinkedIn sender is never health-checked, so a working LinkedIn sender is usually `UNVERIFIED` and can send.

    - `const SenderRetrieveResponseHealthUnverified SenderRetrieveResponseHealth = "UNVERIFIED"`

    - `const SenderRetrieveResponseHealthHealthy SenderRetrieveResponseHealth = "HEALTHY"`

    - `const SenderRetrieveResponseHealthUnhealthy SenderRetrieveResponseHealth = "UNHEALTHY"`

  - `HealthReason string`

    Why the sender is `UNHEALTHY` or `UNVERIFIED`, for example `ACCOUNT_DISCONNECTED`, `BOUNCE_THRESHOLD` or `INVITE_LIMIT`; null when healthy.

  - `ObjectType SenderRetrieveResponseObjectType`

    Always `sender`.

    - `const SenderRetrieveResponseObjectTypeSender SenderRetrieveResponseObjectType = "sender"`

  - `Owner string`

    Member ID of the person who owns this sender, or null when no workspace membership can be resolved.

  - `Pacing SenderRetrieveResponsePacing`

    How this sender paces each step type it sends, keyed by sequence step type: `EMAIL` for an email sender; `LINKEDIN_INVITE` and `LINKEDIN_MESSAGE` for a LinkedIn sender.

    - `Email SenderRetrieveResponsePacingEmail`

      Email steps. Present only on an email sender.

      - `DailyLimit int64`

        Most sends of this step type in any rolling 24 hours.

      - `MaxGapSeconds int64`

        Upper bound of the minimum spacing, in seconds. Before each send, a minimum spacing is drawn at random between `minGapSeconds` and this value, and the send waits until that long after the previous one. Sends can be further apart, for example outside the send window or once `dailyLimit` is reached. Null means the minimum spacing is always `minGapSeconds`.

      - `MinGapSeconds int64`

        Lower bound of the minimum spacing between two of its sends, in seconds.

    - `LinkedinInvite SenderRetrieveResponsePacingLinkedinInvite`

      LinkedIn connection requests. Present only on a LinkedIn sender.

      - `DailyLimit int64`

        Most sends of this step type in any rolling 24 hours.

      - `MaxGapSeconds int64`

        Upper bound of the minimum spacing, in seconds. Before each send, a minimum spacing is drawn at random between `minGapSeconds` and this value, and the send waits until that long after the previous one. Sends can be further apart, for example outside the send window or once `dailyLimit` is reached. Null means the minimum spacing is always `minGapSeconds`.

      - `MinGapSeconds int64`

        Lower bound of the minimum spacing between two of its sends, in seconds.

    - `LinkedinMessage SenderRetrieveResponsePacingLinkedinMessage`

      LinkedIn messages. Present only on a LinkedIn sender.

      - `DailyLimit int64`

        Most sends of this step type in any rolling 24 hours.

      - `MaxGapSeconds int64`

        Upper bound of the minimum spacing, in seconds. Before each send, a minimum spacing is drawn at random between `minGapSeconds` and this value, and the send waits until that long after the previous one. Sends can be further apart, for example outside the send window or once `dailyLimit` is reached. Null means the minimum spacing is always `minGapSeconds`.

      - `MinGapSeconds int64`

        Lower bound of the minimum spacing between two of its sends, in seconds.

  - `ReplyToAddress string`

    SMTP senders only: the connected mailbox replies are sent to and read from. Null for other senders.

  - `Transport SenderRetrieveResponseTransport`

    How an email sender sends: `SMTP` through its own mail server, `OAUTH` through its connected Google or Microsoft account. Null for LinkedIn senders.

    - `const SenderRetrieveResponseTransportSmtp SenderRetrieveResponseTransport = "SMTP"`

    - `const SenderRetrieveResponseTransportOAuth SenderRetrieveResponseTransport = "OAUTH"`

### Example

```go
package main

import (
  "context"
  "fmt"

  "github.com/Lightfld/lightfield-go"
  "github.com/Lightfld/lightfield-go/option"
)

func main() {
  client := githubcomlightfldlightfieldgo.NewClient(
    option.WithAPIKey("My API Key"),
  )
  senderRetrieveResponse, err := client.Sender.Get(context.TODO(), "id")
  if err != nil {
    panic(err.Error())
  }
  fmt.Printf("%+v\n", senderRetrieveResponse.ID)
}
```

#### Response

```json
{
  "id": "id",
  "archivedAt": "archivedAt",
  "channel": "EMAIL",
  "createdAt": "createdAt",
  "emailAddress": "emailAddress",
  "health": "UNVERIFIED",
  "healthReason": "healthReason",
  "objectType": "sender",
  "owner": "owner",
  "pacing": {
    "EMAIL": {
      "dailyLimit": -9007199254740991,
      "maxGapSeconds": -9007199254740991,
      "minGapSeconds": -9007199254740991
    },
    "LINKEDIN_INVITE": {
      "dailyLimit": -9007199254740991,
      "maxGapSeconds": -9007199254740991,
      "minGapSeconds": -9007199254740991
    },
    "LINKEDIN_MESSAGE": {
      "dailyLimit": -9007199254740991,
      "maxGapSeconds": -9007199254740991,
      "minGapSeconds": -9007199254740991
    }
  },
  "replyToAddress": "replyToAddress",
  "transport": "SMTP"
}
```

## List senders

`client.Sender.List(ctx, query) (*SenderListResponse, error)`

**get** `/v1/senders`

Returns a paginated list of the email and LinkedIn senders that sequences send from, archived ones included, ordered by `createdAt` descending. Use `offset` and `limit` to paginate, and bracketed filters to narrow the list.

Supported filters: `channel[equal]` (EMAIL, LINKEDIN), `health[equal]` (UNVERIFIED, HEALTHY, UNHEALTHY), `owner[equal]` (a member ID), and `archived[equal]` (true, false). Filters are combined with AND.

**[Required scope](/using-the-api/scopes/):** `senders:read`

**[Rate limit category](/using-the-api/rate-limits/):** Search

### Parameters

- `query SenderListParams`

  - `Limit param.Field[int64]`

    Maximum number of records to return. Defaults to 25, maximum 25.

  - `Offset param.Field[int64]`

    Number of records to skip for pagination. Defaults to 0.

### Returns

- `type SenderListResponse struct{…}`

  - `Data []SenderListResponseData`

    - `ID string`

      Unique identifier of the sender.

    - `ArchivedAt string`

      When the sender was archived, or null if it is active. Archived senders never send.

    - `Channel string`

      Whether this sender sends email or LinkedIn messages.

      - `const SenderListResponseDataChannelEmail SenderListResponseDataChannel = "EMAIL"`

      - `const SenderListResponseDataChannelLinkedin SenderListResponseDataChannel = "LINKEDIN"`

    - `CreatedAt string`

      When the sender was created.

    - `EmailAddress string`

      The address email from this sender is sent from. Null for LinkedIn senders, or when the connected account has no address.

    - `Health string`

      `HEALTHY` can send. `UNHEALTHY` cannot send until `healthReason` is resolved. `UNVERIFIED` means no health verdict yet: an email sender in this state cannot send until it passes a health check, while a LinkedIn sender is never health-checked, so a working LinkedIn sender is usually `UNVERIFIED` and can send.

      - `const SenderListResponseDataHealthUnverified SenderListResponseDataHealth = "UNVERIFIED"`

      - `const SenderListResponseDataHealthHealthy SenderListResponseDataHealth = "HEALTHY"`

      - `const SenderListResponseDataHealthUnhealthy SenderListResponseDataHealth = "UNHEALTHY"`

    - `HealthReason string`

      Why the sender is `UNHEALTHY` or `UNVERIFIED`, for example `ACCOUNT_DISCONNECTED`, `BOUNCE_THRESHOLD` or `INVITE_LIMIT`; null when healthy.

    - `ObjectType string`

      Always `sender`.

      - `const SenderListResponseDataObjectTypeSender SenderListResponseDataObjectType = "sender"`

    - `Owner string`

      Member ID of the person who owns this sender, or null when no workspace membership can be resolved.

    - `Pacing SenderListResponseDataPacing`

      How this sender paces each step type it sends, keyed by sequence step type: `EMAIL` for an email sender; `LINKEDIN_INVITE` and `LINKEDIN_MESSAGE` for a LinkedIn sender.

      - `Email SenderListResponseDataPacingEmail`

        Email steps. Present only on an email sender.

        - `DailyLimit int64`

          Most sends of this step type in any rolling 24 hours.

        - `MaxGapSeconds int64`

          Upper bound of the minimum spacing, in seconds. Before each send, a minimum spacing is drawn at random between `minGapSeconds` and this value, and the send waits until that long after the previous one. Sends can be further apart, for example outside the send window or once `dailyLimit` is reached. Null means the minimum spacing is always `minGapSeconds`.

        - `MinGapSeconds int64`

          Lower bound of the minimum spacing between two of its sends, in seconds.

      - `LinkedinInvite SenderListResponseDataPacingLinkedinInvite`

        LinkedIn connection requests. Present only on a LinkedIn sender.

        - `DailyLimit int64`

          Most sends of this step type in any rolling 24 hours.

        - `MaxGapSeconds int64`

          Upper bound of the minimum spacing, in seconds. Before each send, a minimum spacing is drawn at random between `minGapSeconds` and this value, and the send waits until that long after the previous one. Sends can be further apart, for example outside the send window or once `dailyLimit` is reached. Null means the minimum spacing is always `minGapSeconds`.

        - `MinGapSeconds int64`

          Lower bound of the minimum spacing between two of its sends, in seconds.

      - `LinkedinMessage SenderListResponseDataPacingLinkedinMessage`

        LinkedIn messages. Present only on a LinkedIn sender.

        - `DailyLimit int64`

          Most sends of this step type in any rolling 24 hours.

        - `MaxGapSeconds int64`

          Upper bound of the minimum spacing, in seconds. Before each send, a minimum spacing is drawn at random between `minGapSeconds` and this value, and the send waits until that long after the previous one. Sends can be further apart, for example outside the send window or once `dailyLimit` is reached. Null means the minimum spacing is always `minGapSeconds`.

        - `MinGapSeconds int64`

          Lower bound of the minimum spacing between two of its sends, in seconds.

    - `ReplyToAddress string`

      SMTP senders only: the connected mailbox replies are sent to and read from. Null for other senders.

    - `Transport string`

      How an email sender sends: `SMTP` through its own mail server, `OAUTH` through its connected Google or Microsoft account. Null for LinkedIn senders.

      - `const SenderListResponseDataTransportSmtp SenderListResponseDataTransport = "SMTP"`

      - `const SenderListResponseDataTransportOAuth SenderListResponseDataTransport = "OAUTH"`

  - `Object SenderListResponseObject`

    - `const SenderListResponseObjectList SenderListResponseObject = "list"`

  - `TotalCount int64`

### Example

```go
package main

import (
  "context"
  "fmt"

  "github.com/Lightfld/lightfield-go"
  "github.com/Lightfld/lightfield-go/option"
)

func main() {
  client := githubcomlightfldlightfieldgo.NewClient(
    option.WithAPIKey("My API Key"),
  )
  senderListResponse, err := client.Sender.List(context.TODO(), githubcomlightfldlightfieldgo.SenderListParams{

  })
  if err != nil {
    panic(err.Error())
  }
  fmt.Printf("%+v\n", senderListResponse.Data)
}
```

#### Response

```json
{
  "data": [
    {
      "id": "id",
      "archivedAt": "archivedAt",
      "channel": "EMAIL",
      "createdAt": "createdAt",
      "emailAddress": "emailAddress",
      "health": "UNVERIFIED",
      "healthReason": "healthReason",
      "objectType": "sender",
      "owner": "owner",
      "pacing": {
        "EMAIL": {
          "dailyLimit": -9007199254740991,
          "maxGapSeconds": -9007199254740991,
          "minGapSeconds": -9007199254740991
        },
        "LINKEDIN_INVITE": {
          "dailyLimit": -9007199254740991,
          "maxGapSeconds": -9007199254740991,
          "minGapSeconds": -9007199254740991
        },
        "LINKEDIN_MESSAGE": {
          "dailyLimit": -9007199254740991,
          "maxGapSeconds": -9007199254740991,
          "minGapSeconds": -9007199254740991
        }
      },
      "replyToAddress": "replyToAddress",
      "transport": "SMTP"
    }
  ],
  "object": "list",
  "totalCount": -9007199254740991
}
```

## Update a sender

`client.Sender.Update(ctx, id, body) (*SenderUpdateResponse, error)`

**post** `/v1/senders/{id}`

Replaces a sender's pacing and returns the updated sender. Send exactly the sender's step types, with every value: read the sender first to change only some of them. Concurrent updates are last-write-wins.

Each step type must stay within the ceilings the workspace's own limits have, and `maxGapSeconds` can't be below `minGapSeconds`: `EMAIL` on an OAuth sender `dailyLimit` at least 1 and gaps 60 to 3600 seconds; `EMAIL` on an SMTP sender `dailyLimit` 1 to 100 and gaps 60 to 3600 seconds; `LINKEDIN_INVITE` `dailyLimit` 1 to 30 and gaps 120 to 3600 seconds; `LINKEDIN_MESSAGE` `dailyLimit` 1 to 60 and gaps 120 to 3600 seconds. Out-of-range values, or step types the sender doesn't send, return 400.

Returns 409 if the sender is archived; archived senders can be read but not updated.

**[Required scope](/using-the-api/scopes/):** `senders:update`

**[Rate limit category](/using-the-api/rate-limits/):** Write

### Parameters

- `id string`

  Unique identifier of the sender to update.

- `body SenderUpdateParams`

  - `Pacing param.Field[SenderUpdateParamsPacing]`

    The sender's new pacing, replacing all of its current values. Send exactly the step types the sender's channel sends: `EMAIL` for an email sender; `LINKEDIN_INVITE` and `LINKEDIN_MESSAGE` for a LinkedIn sender.

    - `Email SenderUpdateParamsPacingEmail`

      Email steps. Present only on an email sender.

      - `DailyLimit int64`

        Most sends of this step type in any rolling 24 hours.

      - `MaxGapSeconds int64`

        Upper bound of the minimum spacing, in seconds. Before each send, a minimum spacing is drawn at random between `minGapSeconds` and this value, and the send waits until that long after the previous one. Sends can be further apart, for example outside the send window or once `dailyLimit` is reached. Null means the minimum spacing is always `minGapSeconds`.

      - `MinGapSeconds int64`

        Lower bound of the minimum spacing between two of its sends, in seconds.

    - `LinkedinInvite SenderUpdateParamsPacingLinkedinInvite`

      LinkedIn connection requests. Present only on a LinkedIn sender.

      - `DailyLimit int64`

        Most sends of this step type in any rolling 24 hours.

      - `MaxGapSeconds int64`

        Upper bound of the minimum spacing, in seconds. Before each send, a minimum spacing is drawn at random between `minGapSeconds` and this value, and the send waits until that long after the previous one. Sends can be further apart, for example outside the send window or once `dailyLimit` is reached. Null means the minimum spacing is always `minGapSeconds`.

      - `MinGapSeconds int64`

        Lower bound of the minimum spacing between two of its sends, in seconds.

    - `LinkedinMessage SenderUpdateParamsPacingLinkedinMessage`

      LinkedIn messages. Present only on a LinkedIn sender.

      - `DailyLimit int64`

        Most sends of this step type in any rolling 24 hours.

      - `MaxGapSeconds int64`

        Upper bound of the minimum spacing, in seconds. Before each send, a minimum spacing is drawn at random between `minGapSeconds` and this value, and the send waits until that long after the previous one. Sends can be further apart, for example outside the send window or once `dailyLimit` is reached. Null means the minimum spacing is always `minGapSeconds`.

      - `MinGapSeconds int64`

        Lower bound of the minimum spacing between two of its sends, in seconds.

### Returns

- `type SenderUpdateResponse struct{…}`

  - `ID string`

    Unique identifier of the sender.

  - `ArchivedAt string`

    When the sender was archived, or null if it is active. Archived senders never send.

  - `Channel SenderUpdateResponseChannel`

    Whether this sender sends email or LinkedIn messages.

    - `const SenderUpdateResponseChannelEmail SenderUpdateResponseChannel = "EMAIL"`

    - `const SenderUpdateResponseChannelLinkedin SenderUpdateResponseChannel = "LINKEDIN"`

  - `CreatedAt string`

    When the sender was created.

  - `EmailAddress string`

    The address email from this sender is sent from. Null for LinkedIn senders, or when the connected account has no address.

  - `Health SenderUpdateResponseHealth`

    `HEALTHY` can send. `UNHEALTHY` cannot send until `healthReason` is resolved. `UNVERIFIED` means no health verdict yet: an email sender in this state cannot send until it passes a health check, while a LinkedIn sender is never health-checked, so a working LinkedIn sender is usually `UNVERIFIED` and can send.

    - `const SenderUpdateResponseHealthUnverified SenderUpdateResponseHealth = "UNVERIFIED"`

    - `const SenderUpdateResponseHealthHealthy SenderUpdateResponseHealth = "HEALTHY"`

    - `const SenderUpdateResponseHealthUnhealthy SenderUpdateResponseHealth = "UNHEALTHY"`

  - `HealthReason string`

    Why the sender is `UNHEALTHY` or `UNVERIFIED`, for example `ACCOUNT_DISCONNECTED`, `BOUNCE_THRESHOLD` or `INVITE_LIMIT`; null when healthy.

  - `ObjectType SenderUpdateResponseObjectType`

    Always `sender`.

    - `const SenderUpdateResponseObjectTypeSender SenderUpdateResponseObjectType = "sender"`

  - `Owner string`

    Member ID of the person who owns this sender, or null when no workspace membership can be resolved.

  - `Pacing SenderUpdateResponsePacing`

    How this sender paces each step type it sends, keyed by sequence step type: `EMAIL` for an email sender; `LINKEDIN_INVITE` and `LINKEDIN_MESSAGE` for a LinkedIn sender.

    - `Email SenderUpdateResponsePacingEmail`

      Email steps. Present only on an email sender.

      - `DailyLimit int64`

        Most sends of this step type in any rolling 24 hours.

      - `MaxGapSeconds int64`

        Upper bound of the minimum spacing, in seconds. Before each send, a minimum spacing is drawn at random between `minGapSeconds` and this value, and the send waits until that long after the previous one. Sends can be further apart, for example outside the send window or once `dailyLimit` is reached. Null means the minimum spacing is always `minGapSeconds`.

      - `MinGapSeconds int64`

        Lower bound of the minimum spacing between two of its sends, in seconds.

    - `LinkedinInvite SenderUpdateResponsePacingLinkedinInvite`

      LinkedIn connection requests. Present only on a LinkedIn sender.

      - `DailyLimit int64`

        Most sends of this step type in any rolling 24 hours.

      - `MaxGapSeconds int64`

        Upper bound of the minimum spacing, in seconds. Before each send, a minimum spacing is drawn at random between `minGapSeconds` and this value, and the send waits until that long after the previous one. Sends can be further apart, for example outside the send window or once `dailyLimit` is reached. Null means the minimum spacing is always `minGapSeconds`.

      - `MinGapSeconds int64`

        Lower bound of the minimum spacing between two of its sends, in seconds.

    - `LinkedinMessage SenderUpdateResponsePacingLinkedinMessage`

      LinkedIn messages. Present only on a LinkedIn sender.

      - `DailyLimit int64`

        Most sends of this step type in any rolling 24 hours.

      - `MaxGapSeconds int64`

        Upper bound of the minimum spacing, in seconds. Before each send, a minimum spacing is drawn at random between `minGapSeconds` and this value, and the send waits until that long after the previous one. Sends can be further apart, for example outside the send window or once `dailyLimit` is reached. Null means the minimum spacing is always `minGapSeconds`.

      - `MinGapSeconds int64`

        Lower bound of the minimum spacing between two of its sends, in seconds.

  - `ReplyToAddress string`

    SMTP senders only: the connected mailbox replies are sent to and read from. Null for other senders.

  - `Transport SenderUpdateResponseTransport`

    How an email sender sends: `SMTP` through its own mail server, `OAUTH` through its connected Google or Microsoft account. Null for LinkedIn senders.

    - `const SenderUpdateResponseTransportSmtp SenderUpdateResponseTransport = "SMTP"`

    - `const SenderUpdateResponseTransportOAuth SenderUpdateResponseTransport = "OAUTH"`

### Example

```go
package main

import (
  "context"
  "fmt"

  "github.com/Lightfld/lightfield-go"
  "github.com/Lightfld/lightfield-go/option"
)

func main() {
  client := githubcomlightfldlightfieldgo.NewClient(
    option.WithAPIKey("My API Key"),
  )
  senderUpdateResponse, err := client.Sender.Update(
    context.TODO(),
    "id",
    githubcomlightfldlightfieldgo.SenderUpdateParams{
      Pacing: githubcomlightfldlightfieldgo.SenderUpdateParamsPacing{

      },
    },
  )
  if err != nil {
    panic(err.Error())
  }
  fmt.Printf("%+v\n", senderUpdateResponse.ID)
}
```

#### Response

```json
{
  "id": "id",
  "archivedAt": "archivedAt",
  "channel": "EMAIL",
  "createdAt": "createdAt",
  "emailAddress": "emailAddress",
  "health": "UNVERIFIED",
  "healthReason": "healthReason",
  "objectType": "sender",
  "owner": "owner",
  "pacing": {
    "EMAIL": {
      "dailyLimit": -9007199254740991,
      "maxGapSeconds": -9007199254740991,
      "minGapSeconds": -9007199254740991
    },
    "LINKEDIN_INVITE": {
      "dailyLimit": -9007199254740991,
      "maxGapSeconds": -9007199254740991,
      "minGapSeconds": -9007199254740991
    },
    "LINKEDIN_MESSAGE": {
      "dailyLimit": -9007199254740991,
      "maxGapSeconds": -9007199254740991,
      "minGapSeconds": -9007199254740991
    }
  },
  "replyToAddress": "replyToAddress",
  "transport": "SMTP"
}
```

## Mark a sender healthy

`client.Sender.MarkHealthy(ctx, id, body) (*SenderMarkHealthyResponse, error)`

**post** `/v1/senders/{id}/mark_healthy`

Clears a health reason that sending recorded, so the sender can be picked for new sends again, and returns the updated sender. A sender with nothing to clear is returned unchanged.

Clears `healthReason` `BOUNCE_THRESHOLD`, `RATE_LIMIT`, `INVITE_LIMIT` on an email sender, and `RATE_LIMIT`, `INVITE_LIMIT`, `UNKNOWN` on a LinkedIn sender. Clearing `BOUNCE_THRESHOLD` turns bounce protection off until hard bounces recur. Contacts the sender paused on their own resume once it can send again, unless another sender they are pinned to still cannot. Sequences an earlier LinkedIn limit deactivated stay deactivated until they are resumed.

Returns 409 for any other health reason, which clears only once its cause is fixed, for example reconnecting the account or fixing DNS; for an archived sender; or when the sender's health changed while the request ran.

**[Required scope](/using-the-api/scopes/):** `senders:update`

**[Rate limit category](/using-the-api/rate-limits/):** Write

### Parameters

- `id string`

  Unique identifier of the sender to mark healthy.

- `body SenderMarkHealthyParams`

  - `Body param.Field[SenderMarkHealthyParamsBody]`

### Returns

- `type SenderMarkHealthyResponse struct{…}`

  - `ID string`

    Unique identifier of the sender.

  - `ArchivedAt string`

    When the sender was archived, or null if it is active. Archived senders never send.

  - `Channel SenderMarkHealthyResponseChannel`

    Whether this sender sends email or LinkedIn messages.

    - `const SenderMarkHealthyResponseChannelEmail SenderMarkHealthyResponseChannel = "EMAIL"`

    - `const SenderMarkHealthyResponseChannelLinkedin SenderMarkHealthyResponseChannel = "LINKEDIN"`

  - `CreatedAt string`

    When the sender was created.

  - `EmailAddress string`

    The address email from this sender is sent from. Null for LinkedIn senders, or when the connected account has no address.

  - `Health SenderMarkHealthyResponseHealth`

    `HEALTHY` can send. `UNHEALTHY` cannot send until `healthReason` is resolved. `UNVERIFIED` means no health verdict yet: an email sender in this state cannot send until it passes a health check, while a LinkedIn sender is never health-checked, so a working LinkedIn sender is usually `UNVERIFIED` and can send.

    - `const SenderMarkHealthyResponseHealthUnverified SenderMarkHealthyResponseHealth = "UNVERIFIED"`

    - `const SenderMarkHealthyResponseHealthHealthy SenderMarkHealthyResponseHealth = "HEALTHY"`

    - `const SenderMarkHealthyResponseHealthUnhealthy SenderMarkHealthyResponseHealth = "UNHEALTHY"`

  - `HealthReason string`

    Why the sender is `UNHEALTHY` or `UNVERIFIED`, for example `ACCOUNT_DISCONNECTED`, `BOUNCE_THRESHOLD` or `INVITE_LIMIT`; null when healthy.

  - `ObjectType SenderMarkHealthyResponseObjectType`

    Always `sender`.

    - `const SenderMarkHealthyResponseObjectTypeSender SenderMarkHealthyResponseObjectType = "sender"`

  - `Owner string`

    Member ID of the person who owns this sender, or null when no workspace membership can be resolved.

  - `Pacing SenderMarkHealthyResponsePacing`

    How this sender paces each step type it sends, keyed by sequence step type: `EMAIL` for an email sender; `LINKEDIN_INVITE` and `LINKEDIN_MESSAGE` for a LinkedIn sender.

    - `Email SenderMarkHealthyResponsePacingEmail`

      Email steps. Present only on an email sender.

      - `DailyLimit int64`

        Most sends of this step type in any rolling 24 hours.

      - `MaxGapSeconds int64`

        Upper bound of the minimum spacing, in seconds. Before each send, a minimum spacing is drawn at random between `minGapSeconds` and this value, and the send waits until that long after the previous one. Sends can be further apart, for example outside the send window or once `dailyLimit` is reached. Null means the minimum spacing is always `minGapSeconds`.

      - `MinGapSeconds int64`

        Lower bound of the minimum spacing between two of its sends, in seconds.

    - `LinkedinInvite SenderMarkHealthyResponsePacingLinkedinInvite`

      LinkedIn connection requests. Present only on a LinkedIn sender.

      - `DailyLimit int64`

        Most sends of this step type in any rolling 24 hours.

      - `MaxGapSeconds int64`

        Upper bound of the minimum spacing, in seconds. Before each send, a minimum spacing is drawn at random between `minGapSeconds` and this value, and the send waits until that long after the previous one. Sends can be further apart, for example outside the send window or once `dailyLimit` is reached. Null means the minimum spacing is always `minGapSeconds`.

      - `MinGapSeconds int64`

        Lower bound of the minimum spacing between two of its sends, in seconds.

    - `LinkedinMessage SenderMarkHealthyResponsePacingLinkedinMessage`

      LinkedIn messages. Present only on a LinkedIn sender.

      - `DailyLimit int64`

        Most sends of this step type in any rolling 24 hours.

      - `MaxGapSeconds int64`

        Upper bound of the minimum spacing, in seconds. Before each send, a minimum spacing is drawn at random between `minGapSeconds` and this value, and the send waits until that long after the previous one. Sends can be further apart, for example outside the send window or once `dailyLimit` is reached. Null means the minimum spacing is always `minGapSeconds`.

      - `MinGapSeconds int64`

        Lower bound of the minimum spacing between two of its sends, in seconds.

  - `ReplyToAddress string`

    SMTP senders only: the connected mailbox replies are sent to and read from. Null for other senders.

  - `Transport SenderMarkHealthyResponseTransport`

    How an email sender sends: `SMTP` through its own mail server, `OAUTH` through its connected Google or Microsoft account. Null for LinkedIn senders.

    - `const SenderMarkHealthyResponseTransportSmtp SenderMarkHealthyResponseTransport = "SMTP"`

    - `const SenderMarkHealthyResponseTransportOAuth SenderMarkHealthyResponseTransport = "OAUTH"`

### Example

```go
package main

import (
  "context"
  "fmt"

  "github.com/Lightfld/lightfield-go"
  "github.com/Lightfld/lightfield-go/option"
)

func main() {
  client := githubcomlightfldlightfieldgo.NewClient(
    option.WithAPIKey("My API Key"),
  )
  senderMarkHealthyResponse, err := client.Sender.MarkHealthy(
    context.TODO(),
    "id",
    githubcomlightfldlightfieldgo.SenderMarkHealthyParams{

    },
  )
  if err != nil {
    panic(err.Error())
  }
  fmt.Printf("%+v\n", senderMarkHealthyResponse.ID)
}
```

#### Response

```json
{
  "id": "id",
  "archivedAt": "archivedAt",
  "channel": "EMAIL",
  "createdAt": "createdAt",
  "emailAddress": "emailAddress",
  "health": "UNVERIFIED",
  "healthReason": "healthReason",
  "objectType": "sender",
  "owner": "owner",
  "pacing": {
    "EMAIL": {
      "dailyLimit": -9007199254740991,
      "maxGapSeconds": -9007199254740991,
      "minGapSeconds": -9007199254740991
    },
    "LINKEDIN_INVITE": {
      "dailyLimit": -9007199254740991,
      "maxGapSeconds": -9007199254740991,
      "minGapSeconds": -9007199254740991
    },
    "LINKEDIN_MESSAGE": {
      "dailyLimit": -9007199254740991,
      "maxGapSeconds": -9007199254740991,
      "minGapSeconds": -9007199254740991
    }
  },
  "replyToAddress": "replyToAddress",
  "transport": "SMTP"
}
```

## Domain Types

### Sender List Response

- `type SenderListResponse struct{…}`

  - `Data []SenderListResponseData`

    - `ID string`

      Unique identifier of the sender.

    - `ArchivedAt string`

      When the sender was archived, or null if it is active. Archived senders never send.

    - `Channel string`

      Whether this sender sends email or LinkedIn messages.

      - `const SenderListResponseDataChannelEmail SenderListResponseDataChannel = "EMAIL"`

      - `const SenderListResponseDataChannelLinkedin SenderListResponseDataChannel = "LINKEDIN"`

    - `CreatedAt string`

      When the sender was created.

    - `EmailAddress string`

      The address email from this sender is sent from. Null for LinkedIn senders, or when the connected account has no address.

    - `Health string`

      `HEALTHY` can send. `UNHEALTHY` cannot send until `healthReason` is resolved. `UNVERIFIED` means no health verdict yet: an email sender in this state cannot send until it passes a health check, while a LinkedIn sender is never health-checked, so a working LinkedIn sender is usually `UNVERIFIED` and can send.

      - `const SenderListResponseDataHealthUnverified SenderListResponseDataHealth = "UNVERIFIED"`

      - `const SenderListResponseDataHealthHealthy SenderListResponseDataHealth = "HEALTHY"`

      - `const SenderListResponseDataHealthUnhealthy SenderListResponseDataHealth = "UNHEALTHY"`

    - `HealthReason string`

      Why the sender is `UNHEALTHY` or `UNVERIFIED`, for example `ACCOUNT_DISCONNECTED`, `BOUNCE_THRESHOLD` or `INVITE_LIMIT`; null when healthy.

    - `ObjectType string`

      Always `sender`.

      - `const SenderListResponseDataObjectTypeSender SenderListResponseDataObjectType = "sender"`

    - `Owner string`

      Member ID of the person who owns this sender, or null when no workspace membership can be resolved.

    - `Pacing SenderListResponseDataPacing`

      How this sender paces each step type it sends, keyed by sequence step type: `EMAIL` for an email sender; `LINKEDIN_INVITE` and `LINKEDIN_MESSAGE` for a LinkedIn sender.

      - `Email SenderListResponseDataPacingEmail`

        Email steps. Present only on an email sender.

        - `DailyLimit int64`

          Most sends of this step type in any rolling 24 hours.

        - `MaxGapSeconds int64`

          Upper bound of the minimum spacing, in seconds. Before each send, a minimum spacing is drawn at random between `minGapSeconds` and this value, and the send waits until that long after the previous one. Sends can be further apart, for example outside the send window or once `dailyLimit` is reached. Null means the minimum spacing is always `minGapSeconds`.

        - `MinGapSeconds int64`

          Lower bound of the minimum spacing between two of its sends, in seconds.

      - `LinkedinInvite SenderListResponseDataPacingLinkedinInvite`

        LinkedIn connection requests. Present only on a LinkedIn sender.

        - `DailyLimit int64`

          Most sends of this step type in any rolling 24 hours.

        - `MaxGapSeconds int64`

          Upper bound of the minimum spacing, in seconds. Before each send, a minimum spacing is drawn at random between `minGapSeconds` and this value, and the send waits until that long after the previous one. Sends can be further apart, for example outside the send window or once `dailyLimit` is reached. Null means the minimum spacing is always `minGapSeconds`.

        - `MinGapSeconds int64`

          Lower bound of the minimum spacing between two of its sends, in seconds.

      - `LinkedinMessage SenderListResponseDataPacingLinkedinMessage`

        LinkedIn messages. Present only on a LinkedIn sender.

        - `DailyLimit int64`

          Most sends of this step type in any rolling 24 hours.

        - `MaxGapSeconds int64`

          Upper bound of the minimum spacing, in seconds. Before each send, a minimum spacing is drawn at random between `minGapSeconds` and this value, and the send waits until that long after the previous one. Sends can be further apart, for example outside the send window or once `dailyLimit` is reached. Null means the minimum spacing is always `minGapSeconds`.

        - `MinGapSeconds int64`

          Lower bound of the minimum spacing between two of its sends, in seconds.

    - `ReplyToAddress string`

      SMTP senders only: the connected mailbox replies are sent to and read from. Null for other senders.

    - `Transport string`

      How an email sender sends: `SMTP` through its own mail server, `OAUTH` through its connected Google or Microsoft account. Null for LinkedIn senders.

      - `const SenderListResponseDataTransportSmtp SenderListResponseDataTransport = "SMTP"`

      - `const SenderListResponseDataTransportOAuth SenderListResponseDataTransport = "OAUTH"`

  - `Object SenderListResponseObject`

    - `const SenderListResponseObjectList SenderListResponseObject = "list"`

  - `TotalCount int64`

### Sender Mark Healthy Response

- `type SenderMarkHealthyResponse struct{…}`

  - `ID string`

    Unique identifier of the sender.

  - `ArchivedAt string`

    When the sender was archived, or null if it is active. Archived senders never send.

  - `Channel SenderMarkHealthyResponseChannel`

    Whether this sender sends email or LinkedIn messages.

    - `const SenderMarkHealthyResponseChannelEmail SenderMarkHealthyResponseChannel = "EMAIL"`

    - `const SenderMarkHealthyResponseChannelLinkedin SenderMarkHealthyResponseChannel = "LINKEDIN"`

  - `CreatedAt string`

    When the sender was created.

  - `EmailAddress string`

    The address email from this sender is sent from. Null for LinkedIn senders, or when the connected account has no address.

  - `Health SenderMarkHealthyResponseHealth`

    `HEALTHY` can send. `UNHEALTHY` cannot send until `healthReason` is resolved. `UNVERIFIED` means no health verdict yet: an email sender in this state cannot send until it passes a health check, while a LinkedIn sender is never health-checked, so a working LinkedIn sender is usually `UNVERIFIED` and can send.

    - `const SenderMarkHealthyResponseHealthUnverified SenderMarkHealthyResponseHealth = "UNVERIFIED"`

    - `const SenderMarkHealthyResponseHealthHealthy SenderMarkHealthyResponseHealth = "HEALTHY"`

    - `const SenderMarkHealthyResponseHealthUnhealthy SenderMarkHealthyResponseHealth = "UNHEALTHY"`

  - `HealthReason string`

    Why the sender is `UNHEALTHY` or `UNVERIFIED`, for example `ACCOUNT_DISCONNECTED`, `BOUNCE_THRESHOLD` or `INVITE_LIMIT`; null when healthy.

  - `ObjectType SenderMarkHealthyResponseObjectType`

    Always `sender`.

    - `const SenderMarkHealthyResponseObjectTypeSender SenderMarkHealthyResponseObjectType = "sender"`

  - `Owner string`

    Member ID of the person who owns this sender, or null when no workspace membership can be resolved.

  - `Pacing SenderMarkHealthyResponsePacing`

    How this sender paces each step type it sends, keyed by sequence step type: `EMAIL` for an email sender; `LINKEDIN_INVITE` and `LINKEDIN_MESSAGE` for a LinkedIn sender.

    - `Email SenderMarkHealthyResponsePacingEmail`

      Email steps. Present only on an email sender.

      - `DailyLimit int64`

        Most sends of this step type in any rolling 24 hours.

      - `MaxGapSeconds int64`

        Upper bound of the minimum spacing, in seconds. Before each send, a minimum spacing is drawn at random between `minGapSeconds` and this value, and the send waits until that long after the previous one. Sends can be further apart, for example outside the send window or once `dailyLimit` is reached. Null means the minimum spacing is always `minGapSeconds`.

      - `MinGapSeconds int64`

        Lower bound of the minimum spacing between two of its sends, in seconds.

    - `LinkedinInvite SenderMarkHealthyResponsePacingLinkedinInvite`

      LinkedIn connection requests. Present only on a LinkedIn sender.

      - `DailyLimit int64`

        Most sends of this step type in any rolling 24 hours.

      - `MaxGapSeconds int64`

        Upper bound of the minimum spacing, in seconds. Before each send, a minimum spacing is drawn at random between `minGapSeconds` and this value, and the send waits until that long after the previous one. Sends can be further apart, for example outside the send window or once `dailyLimit` is reached. Null means the minimum spacing is always `minGapSeconds`.

      - `MinGapSeconds int64`

        Lower bound of the minimum spacing between two of its sends, in seconds.

    - `LinkedinMessage SenderMarkHealthyResponsePacingLinkedinMessage`

      LinkedIn messages. Present only on a LinkedIn sender.

      - `DailyLimit int64`

        Most sends of this step type in any rolling 24 hours.

      - `MaxGapSeconds int64`

        Upper bound of the minimum spacing, in seconds. Before each send, a minimum spacing is drawn at random between `minGapSeconds` and this value, and the send waits until that long after the previous one. Sends can be further apart, for example outside the send window or once `dailyLimit` is reached. Null means the minimum spacing is always `minGapSeconds`.

      - `MinGapSeconds int64`

        Lower bound of the minimum spacing between two of its sends, in seconds.

  - `ReplyToAddress string`

    SMTP senders only: the connected mailbox replies are sent to and read from. Null for other senders.

  - `Transport SenderMarkHealthyResponseTransport`

    How an email sender sends: `SMTP` through its own mail server, `OAUTH` through its connected Google or Microsoft account. Null for LinkedIn senders.

    - `const SenderMarkHealthyResponseTransportSmtp SenderMarkHealthyResponseTransport = "SMTP"`

    - `const SenderMarkHealthyResponseTransportOAuth SenderMarkHealthyResponseTransport = "OAUTH"`

### Sender Retrieve Response

- `type SenderRetrieveResponse struct{…}`

  - `ID string`

    Unique identifier of the sender.

  - `ArchivedAt string`

    When the sender was archived, or null if it is active. Archived senders never send.

  - `Channel SenderRetrieveResponseChannel`

    Whether this sender sends email or LinkedIn messages.

    - `const SenderRetrieveResponseChannelEmail SenderRetrieveResponseChannel = "EMAIL"`

    - `const SenderRetrieveResponseChannelLinkedin SenderRetrieveResponseChannel = "LINKEDIN"`

  - `CreatedAt string`

    When the sender was created.

  - `EmailAddress string`

    The address email from this sender is sent from. Null for LinkedIn senders, or when the connected account has no address.

  - `Health SenderRetrieveResponseHealth`

    `HEALTHY` can send. `UNHEALTHY` cannot send until `healthReason` is resolved. `UNVERIFIED` means no health verdict yet: an email sender in this state cannot send until it passes a health check, while a LinkedIn sender is never health-checked, so a working LinkedIn sender is usually `UNVERIFIED` and can send.

    - `const SenderRetrieveResponseHealthUnverified SenderRetrieveResponseHealth = "UNVERIFIED"`

    - `const SenderRetrieveResponseHealthHealthy SenderRetrieveResponseHealth = "HEALTHY"`

    - `const SenderRetrieveResponseHealthUnhealthy SenderRetrieveResponseHealth = "UNHEALTHY"`

  - `HealthReason string`

    Why the sender is `UNHEALTHY` or `UNVERIFIED`, for example `ACCOUNT_DISCONNECTED`, `BOUNCE_THRESHOLD` or `INVITE_LIMIT`; null when healthy.

  - `ObjectType SenderRetrieveResponseObjectType`

    Always `sender`.

    - `const SenderRetrieveResponseObjectTypeSender SenderRetrieveResponseObjectType = "sender"`

  - `Owner string`

    Member ID of the person who owns this sender, or null when no workspace membership can be resolved.

  - `Pacing SenderRetrieveResponsePacing`

    How this sender paces each step type it sends, keyed by sequence step type: `EMAIL` for an email sender; `LINKEDIN_INVITE` and `LINKEDIN_MESSAGE` for a LinkedIn sender.

    - `Email SenderRetrieveResponsePacingEmail`

      Email steps. Present only on an email sender.

      - `DailyLimit int64`

        Most sends of this step type in any rolling 24 hours.

      - `MaxGapSeconds int64`

        Upper bound of the minimum spacing, in seconds. Before each send, a minimum spacing is drawn at random between `minGapSeconds` and this value, and the send waits until that long after the previous one. Sends can be further apart, for example outside the send window or once `dailyLimit` is reached. Null means the minimum spacing is always `minGapSeconds`.

      - `MinGapSeconds int64`

        Lower bound of the minimum spacing between two of its sends, in seconds.

    - `LinkedinInvite SenderRetrieveResponsePacingLinkedinInvite`

      LinkedIn connection requests. Present only on a LinkedIn sender.

      - `DailyLimit int64`

        Most sends of this step type in any rolling 24 hours.

      - `MaxGapSeconds int64`

        Upper bound of the minimum spacing, in seconds. Before each send, a minimum spacing is drawn at random between `minGapSeconds` and this value, and the send waits until that long after the previous one. Sends can be further apart, for example outside the send window or once `dailyLimit` is reached. Null means the minimum spacing is always `minGapSeconds`.

      - `MinGapSeconds int64`

        Lower bound of the minimum spacing between two of its sends, in seconds.

    - `LinkedinMessage SenderRetrieveResponsePacingLinkedinMessage`

      LinkedIn messages. Present only on a LinkedIn sender.

      - `DailyLimit int64`

        Most sends of this step type in any rolling 24 hours.

      - `MaxGapSeconds int64`

        Upper bound of the minimum spacing, in seconds. Before each send, a minimum spacing is drawn at random between `minGapSeconds` and this value, and the send waits until that long after the previous one. Sends can be further apart, for example outside the send window or once `dailyLimit` is reached. Null means the minimum spacing is always `minGapSeconds`.

      - `MinGapSeconds int64`

        Lower bound of the minimum spacing between two of its sends, in seconds.

  - `ReplyToAddress string`

    SMTP senders only: the connected mailbox replies are sent to and read from. Null for other senders.

  - `Transport SenderRetrieveResponseTransport`

    How an email sender sends: `SMTP` through its own mail server, `OAUTH` through its connected Google or Microsoft account. Null for LinkedIn senders.

    - `const SenderRetrieveResponseTransportSmtp SenderRetrieveResponseTransport = "SMTP"`

    - `const SenderRetrieveResponseTransportOAuth SenderRetrieveResponseTransport = "OAUTH"`

### Sender Update Response

- `type SenderUpdateResponse struct{…}`

  - `ID string`

    Unique identifier of the sender.

  - `ArchivedAt string`

    When the sender was archived, or null if it is active. Archived senders never send.

  - `Channel SenderUpdateResponseChannel`

    Whether this sender sends email or LinkedIn messages.

    - `const SenderUpdateResponseChannelEmail SenderUpdateResponseChannel = "EMAIL"`

    - `const SenderUpdateResponseChannelLinkedin SenderUpdateResponseChannel = "LINKEDIN"`

  - `CreatedAt string`

    When the sender was created.

  - `EmailAddress string`

    The address email from this sender is sent from. Null for LinkedIn senders, or when the connected account has no address.

  - `Health SenderUpdateResponseHealth`

    `HEALTHY` can send. `UNHEALTHY` cannot send until `healthReason` is resolved. `UNVERIFIED` means no health verdict yet: an email sender in this state cannot send until it passes a health check, while a LinkedIn sender is never health-checked, so a working LinkedIn sender is usually `UNVERIFIED` and can send.

    - `const SenderUpdateResponseHealthUnverified SenderUpdateResponseHealth = "UNVERIFIED"`

    - `const SenderUpdateResponseHealthHealthy SenderUpdateResponseHealth = "HEALTHY"`

    - `const SenderUpdateResponseHealthUnhealthy SenderUpdateResponseHealth = "UNHEALTHY"`

  - `HealthReason string`

    Why the sender is `UNHEALTHY` or `UNVERIFIED`, for example `ACCOUNT_DISCONNECTED`, `BOUNCE_THRESHOLD` or `INVITE_LIMIT`; null when healthy.

  - `ObjectType SenderUpdateResponseObjectType`

    Always `sender`.

    - `const SenderUpdateResponseObjectTypeSender SenderUpdateResponseObjectType = "sender"`

  - `Owner string`

    Member ID of the person who owns this sender, or null when no workspace membership can be resolved.

  - `Pacing SenderUpdateResponsePacing`

    How this sender paces each step type it sends, keyed by sequence step type: `EMAIL` for an email sender; `LINKEDIN_INVITE` and `LINKEDIN_MESSAGE` for a LinkedIn sender.

    - `Email SenderUpdateResponsePacingEmail`

      Email steps. Present only on an email sender.

      - `DailyLimit int64`

        Most sends of this step type in any rolling 24 hours.

      - `MaxGapSeconds int64`

        Upper bound of the minimum spacing, in seconds. Before each send, a minimum spacing is drawn at random between `minGapSeconds` and this value, and the send waits until that long after the previous one. Sends can be further apart, for example outside the send window or once `dailyLimit` is reached. Null means the minimum spacing is always `minGapSeconds`.

      - `MinGapSeconds int64`

        Lower bound of the minimum spacing between two of its sends, in seconds.

    - `LinkedinInvite SenderUpdateResponsePacingLinkedinInvite`

      LinkedIn connection requests. Present only on a LinkedIn sender.

      - `DailyLimit int64`

        Most sends of this step type in any rolling 24 hours.

      - `MaxGapSeconds int64`

        Upper bound of the minimum spacing, in seconds. Before each send, a minimum spacing is drawn at random between `minGapSeconds` and this value, and the send waits until that long after the previous one. Sends can be further apart, for example outside the send window or once `dailyLimit` is reached. Null means the minimum spacing is always `minGapSeconds`.

      - `MinGapSeconds int64`

        Lower bound of the minimum spacing between two of its sends, in seconds.

    - `LinkedinMessage SenderUpdateResponsePacingLinkedinMessage`

      LinkedIn messages. Present only on a LinkedIn sender.

      - `DailyLimit int64`

        Most sends of this step type in any rolling 24 hours.

      - `MaxGapSeconds int64`

        Upper bound of the minimum spacing, in seconds. Before each send, a minimum spacing is drawn at random between `minGapSeconds` and this value, and the send waits until that long after the previous one. Sends can be further apart, for example outside the send window or once `dailyLimit` is reached. Null means the minimum spacing is always `minGapSeconds`.

      - `MinGapSeconds int64`

        Lower bound of the minimum spacing between two of its sends, in seconds.

  - `ReplyToAddress string`

    SMTP senders only: the connected mailbox replies are sent to and read from. Null for other senders.

  - `Transport SenderUpdateResponseTransport`

    How an email sender sends: `SMTP` through its own mail server, `OAUTH` through its connected Google or Microsoft account. Null for LinkedIn senders.

    - `const SenderUpdateResponseTransportSmtp SenderUpdateResponseTransport = "SMTP"`

    - `const SenderUpdateResponseTransportOAuth SenderUpdateResponseTransport = "OAUTH"`
