## 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
}
```
