# Trackers

## Create Tracker

**post** `/print-mail/v1/trackers`

Create a Tracker.

### Body Parameters

- `redirectURLTemplate: string`

  The base template for URLs generated by this Tracker.

- `urlExpireAfterDays: 30 or 60 or 90 or 2 more`

  The number of days generated Tracker URLs remain valid.

  - `30`

  - `60`

  - `90`

  - `180`

  - `365`

- `description: optional string`

  An optional string describing this resource. Will be visible in the API and the dashboard.

- `metadata: optional map[unknown]`

  See the section on Metadata.

### Returns

- `id: string`

  A unique ID prefixed with tracker_

- `createdAt: string`

  The UTC time at which this resource was created.

- `live: boolean`

  `true` if this is a live mode resource else `false`.

- `object: "tracker"`

  Always `tracker`.

  - `"tracker"`

- `redirectURLTemplate: string`

  The base template for URLs generated by this Tracker.

- `uniqueVisitCount: number`

  The unique number of interactions the Tracker has had.

- `updatedAt: string`

  The UTC time at which this resource was last updated.

- `urlExpireAfterDays: 30 or 60 or 90 or 2 more`

  The number of days generated Tracker URLs remain valid.

  - `30`

  - `60`

  - `90`

  - `180`

  - `365`

- `visitCount: number`

  The total number of interactions the Tracker has had.

- `description: optional string`

  An optional string describing this resource. Will be visible in the API and the dashboard.

- `metadata: optional map[unknown]`

  See the section on Metadata.

### Example

```http
curl https://api.postgrid.com/print-mail/v1/trackers \
    -H 'Content-Type: application/json' \
    -H "X-API-Key: $POSTGRID_PRINT_MAIL_API_KEY" \
    -d '{
          "redirectURLTemplate": "https://postgrid.com?name={{to.firstName}}",
          "urlExpireAfterDays": 30
        }'
```

#### Response

```json
{
  "id": "tracker_123456789abcdefghijklmnopqrstuvwxyz",
  "object": "tracker",
  "live": false,
  "redirectURLTemplate": "https://postgrid.com?name={{to.firstName}}",
  "urlExpireAfterDays": 30,
  "visitCount": 0,
  "uniqueVisitCount": 0,
  "createdAt": "2020-11-12T23:30:12.581Z",
  "updatedAt": "2020-11-12T23:30:12.581Z"
}
```

## List Trackers

**get** `/print-mail/v1/trackers`

Retrieve a paginated list of Trackers.

### Query Parameters

- `limit: optional number`

- `search: optional string`

  You can supply any string to help narrow down the list of resources. For example, if you pass `"New York"` (quoted), it will return resources that have that string present somewhere in their response. Alternatively, you can supply a structured search query. See the documentation on `StructuredSearchQuery` for more details.

- `skip: optional number`

### Returns

- `data: array of object { id, createdAt, live, 8 more }`

  - `id: string`

    A unique ID prefixed with tracker_

  - `createdAt: string`

    The UTC time at which this resource was created.

  - `live: boolean`

    `true` if this is a live mode resource else `false`.

  - `object: "tracker"`

    Always `tracker`.

    - `"tracker"`

  - `redirectURLTemplate: string`

    The base template for URLs generated by this Tracker.

  - `uniqueVisitCount: number`

    The unique number of interactions the Tracker has had.

  - `updatedAt: string`

    The UTC time at which this resource was last updated.

  - `urlExpireAfterDays: 30 or 60 or 90 or 2 more`

    The number of days generated Tracker URLs remain valid.

    - `30`

    - `60`

    - `90`

    - `180`

    - `365`

  - `visitCount: number`

    The total number of interactions the Tracker has had.

  - `description: optional string`

    An optional string describing this resource. Will be visible in the API and the dashboard.

  - `metadata: optional map[unknown]`

    See the section on Metadata.

- `limit: number`

- `object: "list"`

  - `"list"`

- `skip: number`

- `totalCount: number`

### Example

```http
curl https://api.postgrid.com/print-mail/v1/trackers \
    -H "X-API-Key: $POSTGRID_PRINT_MAIL_API_KEY"
```

#### Response

```json
{
  "object": "list",
  "limit": 10,
  "skip": 0,
  "totalCount": 1,
  "data": [
    {
      "id": "tracker_123456789abcdefghijklmnopqrstuvwxyz",
      "object": "tracker",
      "live": false,
      "redirectURLTemplate": "https://postgrid.com?firstName={{to.firstName}}",
      "urlExpireAfterDays": 90,
      "visitCount": 0,
      "uniqueVisitCount": 0,
      "createdAt": "2020-11-12T23:30:12.581Z",
      "updatedAt": "2020-11-12T23:31:12.581Z"
    }
  ]
}
```

## Update Tracker

**post** `/print-mail/v1/trackers/{id}`

Update a Tracker by ID.

### Path Parameters

- `id: string`

### Body Parameters

- `redirectURLTemplate: string`

  The base template for URLs generated by this Tracker.

- `urlExpireAfterDays: 30 or 60 or 90 or 2 more`

  The number of days generated Tracker URLs remain valid.

  - `30`

  - `60`

  - `90`

  - `180`

  - `365`

- `description: optional string`

  An optional string describing this resource. Will be visible in the API and the dashboard.

- `metadata: optional map[unknown]`

  See the section on Metadata.

### Returns

- `id: string`

  A unique ID prefixed with tracker_

- `createdAt: string`

  The UTC time at which this resource was created.

- `live: boolean`

  `true` if this is a live mode resource else `false`.

- `object: "tracker"`

  Always `tracker`.

  - `"tracker"`

- `redirectURLTemplate: string`

  The base template for URLs generated by this Tracker.

- `uniqueVisitCount: number`

  The unique number of interactions the Tracker has had.

- `updatedAt: string`

  The UTC time at which this resource was last updated.

- `urlExpireAfterDays: 30 or 60 or 90 or 2 more`

  The number of days generated Tracker URLs remain valid.

  - `30`

  - `60`

  - `90`

  - `180`

  - `365`

- `visitCount: number`

  The total number of interactions the Tracker has had.

- `description: optional string`

  An optional string describing this resource. Will be visible in the API and the dashboard.

- `metadata: optional map[unknown]`

  See the section on Metadata.

### Example

```http
curl https://api.postgrid.com/print-mail/v1/trackers/$ID \
    -H 'Content-Type: application/json' \
    -H "X-API-Key: $POSTGRID_PRINT_MAIL_API_KEY" \
    -d '{
          "redirectURLTemplate": "https://postgrid.com?firstName={{to.firstName}}",
          "urlExpireAfterDays": 90
        }'
```

#### Response

```json
{
  "id": "tracker_123456789abcdefghijklmnopqrstuvwxyz",
  "object": "tracker",
  "live": false,
  "redirectURLTemplate": "https://postgrid.com?firstName={{to.firstName}}",
  "urlExpireAfterDays": 90,
  "visitCount": 0,
  "uniqueVisitCount": 0,
  "createdAt": "2020-11-12T23:30:12.581Z",
  "updatedAt": "2020-11-12T23:31:12.581Z"
}
```

## Get Tracker

**get** `/print-mail/v1/trackers/{id}`

Retrieve a Tracker by ID.

### Path Parameters

- `id: string`

### Returns

- `id: string`

  A unique ID prefixed with tracker_

- `createdAt: string`

  The UTC time at which this resource was created.

- `live: boolean`

  `true` if this is a live mode resource else `false`.

- `object: "tracker"`

  Always `tracker`.

  - `"tracker"`

- `redirectURLTemplate: string`

  The base template for URLs generated by this Tracker.

- `uniqueVisitCount: number`

  The unique number of interactions the Tracker has had.

- `updatedAt: string`

  The UTC time at which this resource was last updated.

- `urlExpireAfterDays: 30 or 60 or 90 or 2 more`

  The number of days generated Tracker URLs remain valid.

  - `30`

  - `60`

  - `90`

  - `180`

  - `365`

- `visitCount: number`

  The total number of interactions the Tracker has had.

- `description: optional string`

  An optional string describing this resource. Will be visible in the API and the dashboard.

- `metadata: optional map[unknown]`

  See the section on Metadata.

### Example

```http
curl https://api.postgrid.com/print-mail/v1/trackers/$ID \
    -H "X-API-Key: $POSTGRID_PRINT_MAIL_API_KEY"
```

#### Response

```json
{
  "id": "tracker_123456789abcdefghijklmnopqrstuvwxyz",
  "object": "tracker",
  "live": false,
  "redirectURLTemplate": "https://postgrid.com?firstName={{to.firstName}}",
  "urlExpireAfterDays": 90,
  "visitCount": 0,
  "uniqueVisitCount": 0,
  "createdAt": "2020-11-12T23:30:12.581Z",
  "updatedAt": "2020-11-12T23:31:12.581Z"
}
```

## Delete Tracker

**delete** `/print-mail/v1/trackers/{id}`

Delete a Tracker by ID. Note that this operation cannot be undone.

### Path Parameters

- `id: string`

### Returns

- `id: string`

  A unique ID prefixed with tracker_

- `deleted: true`

  - `true`

- `object: "tracker"`

  Always `tracker`.

  - `"tracker"`

### Example

```http
curl https://api.postgrid.com/print-mail/v1/trackers/$ID \
    -X DELETE \
    -H "X-API-Key: $POSTGRID_PRINT_MAIL_API_KEY"
```

#### Response

```json
{
  "id": "tracker_123456789abcdefghijklmnopqrstuvwxyz",
  "object": "tracker",
  "deleted": true
}
```

## List Tracker Visits

**get** `/print-mail/v1/trackers/{id}/visits`

Retrieve a paginated list of visits for a Tracker.

### Path Parameters

- `id: string`

### Query Parameters

- `limit: optional number`

- `search: optional string`

  You can supply any string to help narrow down the list of resources. For example, if you pass `"New York"` (quoted), it will return resources that have that string present somewhere in their response. Alternatively, you can supply a structured search query. See the documentation on `StructuredSearchQuery` for more details.

- `skip: optional number`

### Returns

- `data: array of object { id, createdAt, device, 6 more }`

  - `id: string`

    A unique ID prefixed with `tracker_visit_`.

  - `createdAt: string`

    The UTC time at which this visit was created.

  - `device: string`

    The type of device associated with the visit.

  - `ipAddress: string`

    The IP address associated with the visit.

  - `live: boolean`

    Indicates if the visit was used in a live order or not.

  - `object: "tracker_visit"`

    Always `tracker_visit`.

    - `"tracker_visit"`

  - `orderID: string`

    The ID of the order where the interaction occurred.

  - `tracker: string`

    The ID of the tracker related to this visit.

  - `updatedAt: string`

    The UTC time at which this visit was last updated.

- `limit: number`

- `object: "list"`

  - `"list"`

- `skip: number`

- `totalCount: number`

### Example

```http
curl https://api.postgrid.com/print-mail/v1/trackers/$ID/visits \
    -H "X-API-Key: $POSTGRID_PRINT_MAIL_API_KEY"
```

#### Response

```json
{
  "object": "list",
  "limit": 10,
  "skip": 0,
  "totalCount": 1,
  "data": [
    {
      "id": "tracker_visit_123456789abcdefghijklmnopqrstuvwxyz",
      "object": "tracker_visit",
      "live": false,
      "tracker": "tracker_123456789abcdefghijklmnopqrstuvwxyz",
      "orderID": "order_123456789abcdefghijklmnopqrstuvwxyz",
      "device": "Device Unknown",
      "ipAddress": "Unknown IP Address",
      "createdAt": "2020-11-12T23:30:12.581Z",
      "updatedAt": "2020-11-12T23:31:12.581Z"
    }
  ]
}
```

## Domain Types

### Tracker Create Response

- `TrackerCreateResponse object { id, createdAt, live, 8 more }`

  - `id: string`

    A unique ID prefixed with tracker_

  - `createdAt: string`

    The UTC time at which this resource was created.

  - `live: boolean`

    `true` if this is a live mode resource else `false`.

  - `object: "tracker"`

    Always `tracker`.

    - `"tracker"`

  - `redirectURLTemplate: string`

    The base template for URLs generated by this Tracker.

  - `uniqueVisitCount: number`

    The unique number of interactions the Tracker has had.

  - `updatedAt: string`

    The UTC time at which this resource was last updated.

  - `urlExpireAfterDays: 30 or 60 or 90 or 2 more`

    The number of days generated Tracker URLs remain valid.

    - `30`

    - `60`

    - `90`

    - `180`

    - `365`

  - `visitCount: number`

    The total number of interactions the Tracker has had.

  - `description: optional string`

    An optional string describing this resource. Will be visible in the API and the dashboard.

  - `metadata: optional map[unknown]`

    See the section on Metadata.

### Tracker List Response

- `TrackerListResponse object { id, createdAt, live, 8 more }`

  - `id: string`

    A unique ID prefixed with tracker_

  - `createdAt: string`

    The UTC time at which this resource was created.

  - `live: boolean`

    `true` if this is a live mode resource else `false`.

  - `object: "tracker"`

    Always `tracker`.

    - `"tracker"`

  - `redirectURLTemplate: string`

    The base template for URLs generated by this Tracker.

  - `uniqueVisitCount: number`

    The unique number of interactions the Tracker has had.

  - `updatedAt: string`

    The UTC time at which this resource was last updated.

  - `urlExpireAfterDays: 30 or 60 or 90 or 2 more`

    The number of days generated Tracker URLs remain valid.

    - `30`

    - `60`

    - `90`

    - `180`

    - `365`

  - `visitCount: number`

    The total number of interactions the Tracker has had.

  - `description: optional string`

    An optional string describing this resource. Will be visible in the API and the dashboard.

  - `metadata: optional map[unknown]`

    See the section on Metadata.

### Tracker Update Response

- `TrackerUpdateResponse object { id, createdAt, live, 8 more }`

  - `id: string`

    A unique ID prefixed with tracker_

  - `createdAt: string`

    The UTC time at which this resource was created.

  - `live: boolean`

    `true` if this is a live mode resource else `false`.

  - `object: "tracker"`

    Always `tracker`.

    - `"tracker"`

  - `redirectURLTemplate: string`

    The base template for URLs generated by this Tracker.

  - `uniqueVisitCount: number`

    The unique number of interactions the Tracker has had.

  - `updatedAt: string`

    The UTC time at which this resource was last updated.

  - `urlExpireAfterDays: 30 or 60 or 90 or 2 more`

    The number of days generated Tracker URLs remain valid.

    - `30`

    - `60`

    - `90`

    - `180`

    - `365`

  - `visitCount: number`

    The total number of interactions the Tracker has had.

  - `description: optional string`

    An optional string describing this resource. Will be visible in the API and the dashboard.

  - `metadata: optional map[unknown]`

    See the section on Metadata.

### Tracker Retrieve Response

- `TrackerRetrieveResponse object { id, createdAt, live, 8 more }`

  - `id: string`

    A unique ID prefixed with tracker_

  - `createdAt: string`

    The UTC time at which this resource was created.

  - `live: boolean`

    `true` if this is a live mode resource else `false`.

  - `object: "tracker"`

    Always `tracker`.

    - `"tracker"`

  - `redirectURLTemplate: string`

    The base template for URLs generated by this Tracker.

  - `uniqueVisitCount: number`

    The unique number of interactions the Tracker has had.

  - `updatedAt: string`

    The UTC time at which this resource was last updated.

  - `urlExpireAfterDays: 30 or 60 or 90 or 2 more`

    The number of days generated Tracker URLs remain valid.

    - `30`

    - `60`

    - `90`

    - `180`

    - `365`

  - `visitCount: number`

    The total number of interactions the Tracker has had.

  - `description: optional string`

    An optional string describing this resource. Will be visible in the API and the dashboard.

  - `metadata: optional map[unknown]`

    See the section on Metadata.

### Tracker Delete Response

- `TrackerDeleteResponse object { id, deleted, object }`

  - `id: string`

    A unique ID prefixed with tracker_

  - `deleted: true`

    - `true`

  - `object: "tracker"`

    Always `tracker`.

    - `"tracker"`

### Tracker Retrieve Visits Response

- `TrackerRetrieveVisitsResponse object { id, createdAt, device, 6 more }`

  - `id: string`

    A unique ID prefixed with `tracker_visit_`.

  - `createdAt: string`

    The UTC time at which this visit was created.

  - `device: string`

    The type of device associated with the visit.

  - `ipAddress: string`

    The IP address associated with the visit.

  - `live: boolean`

    Indicates if the visit was used in a live order or not.

  - `object: "tracker_visit"`

    Always `tracker_visit`.

    - `"tracker_visit"`

  - `orderID: string`

    The ID of the order where the interaction occurred.

  - `tracker: string`

    The ID of the tracker related to this visit.

  - `updatedAt: string`

    The UTC time at which this visit was last updated.
