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

# gist-contacts

> Gist Contacts - manage contacts, tags, segments, events, forms, campaigns, and subscriptions

**Server path:** `/gist-contacts` | **Type:** Application | **PCID required:** Yes

## Tools

| Tool                                                                                                | Description                                         |
| --------------------------------------------------------------------------------------------------- | --------------------------------------------------- |
| [`gist_contacts_batch_create_contacts`](#gist_contacts_batch_create_contacts)                       | Batch create or update contacts                     |
| [`gist_contacts_create_or_update_contact`](#gist_contacts_create_or_update_contact)                 | Create or update a contact                          |
| [`gist_contacts_create_or_update_tag`](#gist_contacts_create_or_update_tag)                         | Create, update, or manage tag-contact associations  |
| [`gist_contacts_delete_contact`](#gist_contacts_delete_contact)                                     | Delete a contact                                    |
| [`gist_contacts_delete_tag`](#gist_contacts_delete_tag)                                             | Delete a tag                                        |
| [`gist_contacts_get_batch_status`](#gist_contacts_get_batch_status)                                 | Get batch import status                             |
| [`gist_contacts_get_campaign`](#gist_contacts_get_campaign)                                         | Retrieve a campaign                                 |
| [`gist_contacts_get_contact`](#gist_contacts_get_contact)                                           | Retrieve a contact by ID                            |
| [`gist_contacts_get_segment`](#gist_contacts_get_segment)                                           | Retrieve a segment                                  |
| [`gist_contacts_get_subscription_type`](#gist_contacts_get_subscription_type)                       | Retrieve a subscription type                        |
| [`gist_contacts_list_campaigns`](#gist_contacts_list_campaigns)                                     | List all campaigns                                  |
| [`gist_contacts_list_contacts`](#gist_contacts_list_contacts)                                       | List all contacts                                   |
| [`gist_contacts_list_events`](#gist_contacts_list_events)                                           | List all events                                     |
| [`gist_contacts_list_form_submissions`](#gist_contacts_list_form_submissions)                       | List form submissions                               |
| [`gist_contacts_list_forms`](#gist_contacts_list_forms)                                             | List all forms                                      |
| [`gist_contacts_list_segments`](#gist_contacts_list_segments)                                       | List all segments                                   |
| [`gist_contacts_list_subscription_types`](#gist_contacts_list_subscription_types)                   | List all subscription types                         |
| [`gist_contacts_list_tags`](#gist_contacts_list_tags)                                               | List all tags                                       |
| [`gist_contacts_manage_campaign_subscription`](#gist_contacts_manage_campaign_subscription)         | Subscribe or unsubscribe a contact from a campaign  |
| [`gist_contacts_manage_subscription_type_contact`](#gist_contacts_manage_subscription_type_contact) | Attach or detach a contact from a subscription type |
| [`gist_contacts_subscribe_contact_to_form`](#gist_contacts_subscribe_contact_to_form)               | Subscribe a contact to a form                       |
| [`gist_contacts_track_event`](#gist_contacts_track_event)                                           | Track a custom event                                |

***

## gist\_contacts\_batch\_create\_contacts

Batch create or update contacts

**Parameters:**

| Parameter  | Type      | Required | Default | Description                                  |
| ---------- | --------- | -------- | ------- | -------------------------------------------- |
| `contacts` | object\[] | Yes      | —       | Array of contact objects to create or update |

<Expandable title="inputSchema">
  ```json theme={null}
  {
    "type": "object",
    "properties": {
      "PCID": {
        "type": "string",
        "description": "Pink Connect ID for the authenticated connection"
      },
      "contacts": {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "email": {
              "type": "string",
              "description": "The email value"
            },
            "user_id": {
              "type": "string",
              "description": "User Id"
            },
            "name": {
              "type": "string",
              "description": "The name value"
            },
            "phone": {
              "type": "string",
              "description": "The phone value"
            },
            "custom_properties": {
              "type": "object",
              "description": "Custom Properties"
            },
            "tags": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "The tags value"
            }
          }
        },
        "description": "Array of contact objects to create or update"
      }
    },
    "required": [
      "PCID",
      "contacts"
    ]
  }
  ```
</Expandable>

***

## gist\_contacts\_create\_or\_update\_contact

Create or update a contact

**Parameters:**

| Parameter                  | Type      | Required | Default | Description                                 |
| -------------------------- | --------- | -------- | ------- | ------------------------------------------- |
| `custom_properties`        | object    | No       | —       | Custom properties as key-value pairs        |
| `email`                    | string    | No       | —       | Contact email address                       |
| `last_seen_ip`             | string    | No       | —       | Last seen IP address                        |
| `last_seen_user_agent`     | string    | No       | —       | Last seen user agent                        |
| `name`                     | string    | No       | —       | Contact name                                |
| `phone`                    | string    | No       | —       | Phone number                                |
| `signed_up_at`             | integer   | No       | —       | Sign-up timestamp (Unix)                    |
| `tags`                     | string\[] | No       | —       | Tag names to add to the contact             |
| `unsubscribed_from_emails` | boolean   | No       | —       | Whether contact is unsubscribed from emails |
| `user_id`                  | string    | No       | —       | External user ID                            |

<Expandable title="inputSchema">
  ```json theme={null}
  {
    "type": "object",
    "properties": {
      "PCID": {
        "type": "string",
        "description": "Pink Connect ID for the authenticated connection"
      },
      "custom_properties": {
        "type": "object",
        "description": "Custom properties as key-value pairs"
      },
      "email": {
        "type": "string",
        "description": "Contact email address"
      },
      "last_seen_ip": {
        "type": "string",
        "description": "Last seen IP address"
      },
      "last_seen_user_agent": {
        "type": "string",
        "description": "Last seen user agent"
      },
      "name": {
        "type": "string",
        "description": "Contact name"
      },
      "phone": {
        "type": "string",
        "description": "Phone number"
      },
      "signed_up_at": {
        "type": "integer",
        "description": "Sign-up timestamp (Unix)"
      },
      "tags": {
        "type": "array",
        "items": {
          "type": "string"
        },
        "description": "Tag names to add to the contact"
      },
      "unsubscribed_from_emails": {
        "type": "boolean",
        "description": "Whether contact is unsubscribed from emails"
      },
      "user_id": {
        "type": "string",
        "description": "External user ID"
      }
    },
    "required": [
      "PCID"
    ]
  }
  ```
</Expandable>

***

## gist\_contacts\_create\_or\_update\_tag

Create, update, or manage tag-contact associations

**Parameters:**

| Parameter  | Type      | Required | Default | Description                                          |
| ---------- | --------- | -------- | ------- | ---------------------------------------------------- |
| `contacts` | object\[] | No       | —       | Contacts to tag or untag                             |
| `id`       | string    | No       | —       | Tag ID (required for update or tag/untag operations) |
| `name`     | string    | Yes      | —       | Tag name                                             |

<Expandable title="inputSchema">
  ```json theme={null}
  {
    "type": "object",
    "properties": {
      "PCID": {
        "type": "string",
        "description": "Pink Connect ID for the authenticated connection"
      },
      "contacts": {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "description": "The id value"
            },
            "email": {
              "type": "string",
              "description": "The email value"
            },
            "user_id": {
              "type": "string",
              "description": "User Id"
            },
            "untag": {
              "type": "boolean",
              "description": "Set to true to remove this tag from the contact"
            }
          }
        },
        "description": "Contacts to tag or untag"
      },
      "id": {
        "type": "string",
        "description": "Tag ID (required for update or tag/untag operations)"
      },
      "name": {
        "type": "string",
        "description": "Tag name"
      }
    },
    "required": [
      "PCID",
      "name"
    ]
  }
  ```
</Expandable>

***

## gist\_contacts\_delete\_contact

Delete a contact

**Parameters:**

| Parameter | Type   | Required | Default | Description |
| --------- | ------ | -------- | ------- | ----------- |
| `id`      | string | Yes      | —       | Contact ID  |

<Expandable title="inputSchema">
  ```json theme={null}
  {
    "type": "object",
    "properties": {
      "PCID": {
        "type": "string",
        "description": "Pink Connect ID for the authenticated connection"
      },
      "id": {
        "type": "string",
        "description": "Contact ID"
      }
    },
    "required": [
      "PCID",
      "id"
    ]
  }
  ```
</Expandable>

***

## gist\_contacts\_delete\_tag

Delete a tag

**Parameters:**

| Parameter | Type   | Required | Default | Description |
| --------- | ------ | -------- | ------- | ----------- |
| `id`      | string | Yes      | —       | Tag ID      |

<Expandable title="inputSchema">
  ```json theme={null}
  {
    "type": "object",
    "properties": {
      "PCID": {
        "type": "string",
        "description": "Pink Connect ID for the authenticated connection"
      },
      "id": {
        "type": "string",
        "description": "Tag ID"
      }
    },
    "required": [
      "PCID",
      "id"
    ]
  }
  ```
</Expandable>

***

## gist\_contacts\_get\_batch\_status

Get batch import status

**Parameters:**

| Parameter  | Type   | Required | Default | Description     |
| ---------- | ------ | -------- | ------- | --------------- |
| `batch_id` | string | Yes      | —       | Batch import ID |

<Expandable title="inputSchema">
  ```json theme={null}
  {
    "type": "object",
    "properties": {
      "PCID": {
        "type": "string",
        "description": "Pink Connect ID for the authenticated connection"
      },
      "batch_id": {
        "type": "string",
        "description": "Batch import ID"
      }
    },
    "required": [
      "PCID",
      "batch_id"
    ]
  }
  ```
</Expandable>

***

## gist\_contacts\_get\_campaign

Retrieve a campaign

**Parameters:**

| Parameter | Type   | Required | Default | Description |
| --------- | ------ | -------- | ------- | ----------- |
| `id`      | string | Yes      | —       | Campaign ID |

<Expandable title="inputSchema">
  ```json theme={null}
  {
    "type": "object",
    "properties": {
      "PCID": {
        "type": "string",
        "description": "Pink Connect ID for the authenticated connection"
      },
      "id": {
        "type": "string",
        "description": "Campaign ID"
      }
    },
    "required": [
      "PCID",
      "id"
    ]
  }
  ```
</Expandable>

***

## gist\_contacts\_get\_contact

Retrieve a contact by ID

**Parameters:**

| Parameter | Type   | Required | Default | Description                      |
| --------- | ------ | -------- | ------- | -------------------------------- |
| `id`      | string | Yes      | —       | Contact ID                       |
| `user_id` | string | No       | —       | Alternative: look up by user\_id |
| `email`   | string | No       | —       | Alternative: look up by email    |

<Expandable title="inputSchema">
  ```json theme={null}
  {
    "type": "object",
    "properties": {
      "PCID": {
        "type": "string",
        "description": "Pink Connect ID for the authenticated connection"
      },
      "id": {
        "type": "string",
        "description": "Contact ID"
      },
      "user_id": {
        "type": "string",
        "description": "Alternative: look up by user_id"
      },
      "email": {
        "type": "string",
        "description": "Alternative: look up by email"
      }
    },
    "required": [
      "PCID",
      "id"
    ]
  }
  ```
</Expandable>

***

## gist\_contacts\_get\_segment

Retrieve a segment

**Parameters:**

| Parameter       | Type    | Required | Default | Description           |
| --------------- | ------- | -------- | ------- | --------------------- |
| `id`            | string  | Yes      | —       | Segment ID            |
| `include_count` | boolean | No       | —       | Include contact count |

<Expandable title="inputSchema">
  ```json theme={null}
  {
    "type": "object",
    "properties": {
      "PCID": {
        "type": "string",
        "description": "Pink Connect ID for the authenticated connection"
      },
      "id": {
        "type": "string",
        "description": "Segment ID"
      },
      "include_count": {
        "type": "boolean",
        "description": "Include contact count"
      }
    },
    "required": [
      "PCID",
      "id"
    ]
  }
  ```
</Expandable>

***

## gist\_contacts\_get\_subscription\_type

Retrieve a subscription type

**Parameters:**

| Parameter              | Type    | Required | Default | Description          |
| ---------------------- | ------- | -------- | ------- | -------------------- |
| `subscription_type_id` | integer | Yes      | —       | Subscription type ID |

<Expandable title="inputSchema">
  ```json theme={null}
  {
    "type": "object",
    "properties": {
      "PCID": {
        "type": "string",
        "description": "Pink Connect ID for the authenticated connection"
      },
      "subscription_type_id": {
        "type": "integer",
        "description": "Subscription type ID"
      }
    },
    "required": [
      "PCID",
      "subscription_type_id"
    ]
  }
  ```
</Expandable>

***

## gist\_contacts\_list\_campaigns

List all campaigns

**Parameters:**

| Parameter  | Type    | Required | Default | Description      |
| ---------- | ------- | -------- | ------- | ---------------- |
| `status`   | string  | No       | —       | Filter by status |
| `page`     | integer | No       | —       | Page number      |
| `per_page` | integer | No       | —       | Results per page |

<Expandable title="inputSchema">
  ```json theme={null}
  {
    "type": "object",
    "properties": {
      "PCID": {
        "type": "string",
        "description": "Pink Connect ID for the authenticated connection"
      },
      "status": {
        "type": "string",
        "description": "Filter by status",
        "enum": [
          "draft",
          "active",
          "paused"
        ]
      },
      "page": {
        "type": "integer",
        "description": "Page number"
      },
      "per_page": {
        "type": "integer",
        "description": "Results per page"
      }
    },
    "required": [
      "PCID"
    ]
  }
  ```
</Expandable>

***

## gist\_contacts\_list\_contacts

List all contacts

**Parameters:**

| Parameter       | Type    | Required | Default | Description                                |
| --------------- | ------- | -------- | ------- | ------------------------------------------ |
| `page`          | integer | No       | —       | Page number                                |
| `per_page`      | integer | No       | —       | Results per page (max 60)                  |
| `order`         | string  | No       | —       | Sort order                                 |
| `order_by`      | string  | No       | —       | Sort field                                 |
| `created_since` | integer | No       | —       | Filter contacts created in the last N days |
| `status`        | string  | No       | —       | Filter by status                           |
| `form_id`       | string  | No       | —       | Filter by form ID                          |
| `email_like`    | string  | No       | —       | Filter by email pattern                    |
| `segment_id`    | string  | No       | —       | Filter by segment ID                       |
| `campaign_id`   | string  | No       | —       | Filter by campaign ID                      |
| `tag_id`        | string  | No       | —       | Filter by tag ID                           |

<Expandable title="inputSchema">
  ```json theme={null}
  {
    "type": "object",
    "properties": {
      "PCID": {
        "type": "string",
        "description": "Pink Connect ID for the authenticated connection"
      },
      "page": {
        "type": "integer",
        "description": "Page number"
      },
      "per_page": {
        "type": "integer",
        "description": "Results per page (max 60)"
      },
      "order": {
        "type": "string",
        "description": "Sort order",
        "enum": [
          "asc",
          "desc"
        ]
      },
      "order_by": {
        "type": "string",
        "description": "Sort field",
        "enum": [
          "created_at",
          "updated_at",
          "last_seen_at",
          "signed_up_at"
        ]
      },
      "created_since": {
        "type": "integer",
        "description": "Filter contacts created in the last N days"
      },
      "status": {
        "type": "string",
        "description": "Filter by status",
        "enum": [
          "active",
          "unsubscribed",
          "bounced"
        ]
      },
      "form_id": {
        "type": "string",
        "description": "Filter by form ID"
      },
      "email_like": {
        "type": "string",
        "description": "Filter by email pattern"
      },
      "segment_id": {
        "type": "string",
        "description": "Filter by segment ID"
      },
      "campaign_id": {
        "type": "string",
        "description": "Filter by campaign ID"
      },
      "tag_id": {
        "type": "string",
        "description": "Filter by tag ID"
      }
    },
    "required": [
      "PCID"
    ]
  }
  ```
</Expandable>

***

## gist\_contacts\_list\_events

List all events

**Parameters:**

| Parameter  | Type    | Required | Default | Description               |
| ---------- | ------- | -------- | ------- | ------------------------- |
| `page`     | integer | No       | —       | Page number               |
| `per_page` | integer | No       | —       | Results per page (max 60) |

<Expandable title="inputSchema">
  ```json theme={null}
  {
    "type": "object",
    "properties": {
      "PCID": {
        "type": "string",
        "description": "Pink Connect ID for the authenticated connection"
      },
      "page": {
        "type": "integer",
        "description": "Page number"
      },
      "per_page": {
        "type": "integer",
        "description": "Results per page (max 60)"
      }
    },
    "required": [
      "PCID"
    ]
  }
  ```
</Expandable>

***

## gist\_contacts\_list\_form\_submissions

List form submissions

**Parameters:**

| Parameter  | Type    | Required | Default | Description               |
| ---------- | ------- | -------- | ------- | ------------------------- |
| `form_id`  | string  | Yes      | —       | Form ID                   |
| `page`     | integer | No       | —       | Page number               |
| `per_page` | integer | No       | —       | Results per page (max 60) |
| `order`    | string  | No       | —       | Sort order                |
| `order_by` | string  | No       | —       | Sort field                |

<Expandable title="inputSchema">
  ```json theme={null}
  {
    "type": "object",
    "properties": {
      "PCID": {
        "type": "string",
        "description": "Pink Connect ID for the authenticated connection"
      },
      "form_id": {
        "type": "string",
        "description": "Form ID"
      },
      "page": {
        "type": "integer",
        "description": "Page number"
      },
      "per_page": {
        "type": "integer",
        "description": "Results per page (max 60)"
      },
      "order": {
        "type": "string",
        "description": "Sort order",
        "enum": [
          "asc",
          "desc"
        ]
      },
      "order_by": {
        "type": "string",
        "description": "Sort field"
      }
    },
    "required": [
      "PCID",
      "form_id"
    ]
  }
  ```
</Expandable>

***

## gist\_contacts\_list\_forms

List all forms

**Parameters:**

| Parameter  | Type    | Required | Default | Description                  |
| ---------- | ------- | -------- | ------- | ---------------------------- |
| `form_id`  | string  | No       | —       | Specific form ID to retrieve |
| `page`     | integer | No       | —       | Page number                  |
| `per_page` | integer | No       | —       | Results per page (max 60)    |
| `order`    | string  | No       | —       | Sort order                   |
| `order_by` | string  | No       | —       | Sort field                   |
| `status`   | string  | No       | —       | Filter by form status        |

<Expandable title="inputSchema">
  ```json theme={null}
  {
    "type": "object",
    "properties": {
      "PCID": {
        "type": "string",
        "description": "Pink Connect ID for the authenticated connection"
      },
      "form_id": {
        "type": "string",
        "description": "Specific form ID to retrieve"
      },
      "page": {
        "type": "integer",
        "description": "Page number"
      },
      "per_page": {
        "type": "integer",
        "description": "Results per page (max 60)"
      },
      "order": {
        "type": "string",
        "description": "Sort order",
        "enum": [
          "asc",
          "desc"
        ]
      },
      "order_by": {
        "type": "string",
        "description": "Sort field"
      },
      "status": {
        "type": "string",
        "description": "Filter by form status",
        "enum": [
          "live",
          "paused",
          "draft"
        ]
      }
    },
    "required": [
      "PCID"
    ]
  }
  ```
</Expandable>

***

## gist\_contacts\_list\_segments

List all segments

**Parameters:**

| Parameter       | Type    | Required | Default | Description                       |
| --------------- | ------- | -------- | ------- | --------------------------------- |
| `page`          | integer | No       | —       | Page number                       |
| `per_page`      | integer | No       | —       | Results per page                  |
| `order`         | string  | No       | —       | Sort order                        |
| `order_by`      | string  | No       | —       | Sort field                        |
| `include_count` | boolean | No       | —       | Include contact count per segment |

<Expandable title="inputSchema">
  ```json theme={null}
  {
    "type": "object",
    "properties": {
      "PCID": {
        "type": "string",
        "description": "Pink Connect ID for the authenticated connection"
      },
      "page": {
        "type": "integer",
        "description": "Page number"
      },
      "per_page": {
        "type": "integer",
        "description": "Results per page"
      },
      "order": {
        "type": "string",
        "description": "Sort order",
        "enum": [
          "asc",
          "desc"
        ]
      },
      "order_by": {
        "type": "string",
        "description": "Sort field"
      },
      "include_count": {
        "type": "boolean",
        "description": "Include contact count per segment"
      }
    },
    "required": [
      "PCID"
    ]
  }
  ```
</Expandable>

***

## gist\_contacts\_list\_subscription\_types

List all subscription types

**Parameters:**

| Parameter  | Type    | Required | Default | Description      |
| ---------- | ------- | -------- | ------- | ---------------- |
| `page`     | integer | No       | —       | Page number      |
| `per_page` | integer | No       | —       | Results per page |

<Expandable title="inputSchema">
  ```json theme={null}
  {
    "type": "object",
    "properties": {
      "PCID": {
        "type": "string",
        "description": "Pink Connect ID for the authenticated connection"
      },
      "page": {
        "type": "integer",
        "description": "Page number"
      },
      "per_page": {
        "type": "integer",
        "description": "Results per page"
      }
    },
    "required": [
      "PCID"
    ]
  }
  ```
</Expandable>

***

## gist\_contacts\_list\_tags

List all tags

**Parameters:**

| Parameter  | Type    | Required | Default | Description      |
| ---------- | ------- | -------- | ------- | ---------------- |
| `page`     | integer | No       | —       | Page number      |
| `per_page` | integer | No       | —       | Results per page |
| `order`    | string  | No       | —       | Sort order       |
| `order_by` | string  | No       | —       | Sort field       |

<Expandable title="inputSchema">
  ```json theme={null}
  {
    "type": "object",
    "properties": {
      "PCID": {
        "type": "string",
        "description": "Pink Connect ID for the authenticated connection"
      },
      "page": {
        "type": "integer",
        "description": "Page number"
      },
      "per_page": {
        "type": "integer",
        "description": "Results per page"
      },
      "order": {
        "type": "string",
        "description": "Sort order",
        "enum": [
          "asc",
          "desc"
        ]
      },
      "order_by": {
        "type": "string",
        "description": "Sort field"
      }
    },
    "required": [
      "PCID"
    ]
  }
  ```
</Expandable>

***

## gist\_contacts\_manage\_campaign\_subscription

Subscribe or unsubscribe a contact from a campaign

**Parameters:**

| Parameter               | Type    | Required | Default | Description                            |
| ----------------------- | ------- | -------- | ------- | -------------------------------------- |
| `email`                 | string  | No       | —       | Contact email                          |
| `id`                    | string  | Yes      | —       | Campaign ID                            |
| `reactivate_if_removed` | boolean | No       | —       | Reactivate if previously removed       |
| `starting_email_index`  | integer | No       | —       | Starting email index (default 0)       |
| `unsubscribed`          | boolean | No       | —       | Set to true to unsubscribe the contact |
| `user_id`               | string  | No       | —       | Contact user ID                        |

<Expandable title="inputSchema">
  ```json theme={null}
  {
    "type": "object",
    "properties": {
      "PCID": {
        "type": "string",
        "description": "Pink Connect ID for the authenticated connection"
      },
      "email": {
        "type": "string",
        "description": "Contact email"
      },
      "id": {
        "type": "string",
        "description": "Campaign ID"
      },
      "reactivate_if_removed": {
        "type": "boolean",
        "description": "Reactivate if previously removed"
      },
      "starting_email_index": {
        "type": "integer",
        "description": "Starting email index (default 0)"
      },
      "unsubscribed": {
        "type": "boolean",
        "description": "Set to true to unsubscribe the contact"
      },
      "user_id": {
        "type": "string",
        "description": "Contact user ID"
      }
    },
    "required": [
      "PCID",
      "id"
    ]
  }
  ```
</Expandable>

***

## gist\_contacts\_manage\_subscription\_type\_contact

Attach or detach a contact from a subscription type

**Parameters:**

| Parameter              | Type    | Required | Default | Description                     |
| ---------------------- | ------- | -------- | ------- | ------------------------------- |
| `subscription_type_id` | integer | Yes      | —       | Subscription type ID            |
| `contact_id`           | string  | No       | —       | Contact ID                      |
| `email`                | string  | No       | —       | Contact email                   |
| `subscribed_status`    | boolean | Yes      | —       | True to attach, false to detach |
| `user_id`              | string  | No       | —       | Contact user ID                 |

<Expandable title="inputSchema">
  ```json theme={null}
  {
    "type": "object",
    "properties": {
      "PCID": {
        "type": "string",
        "description": "Pink Connect ID for the authenticated connection"
      },
      "subscription_type_id": {
        "type": "integer",
        "description": "Subscription type ID"
      },
      "contact_id": {
        "type": "string",
        "description": "Contact ID"
      },
      "email": {
        "type": "string",
        "description": "Contact email"
      },
      "subscribed_status": {
        "type": "boolean",
        "description": "True to attach, false to detach"
      },
      "user_id": {
        "type": "string",
        "description": "Contact user ID"
      }
    },
    "required": [
      "PCID",
      "subscription_type_id",
      "subscribed_status"
    ]
  }
  ```
</Expandable>

***

## gist\_contacts\_subscribe\_contact\_to\_form

Subscribe a contact to a form

**Parameters:**

| Parameter                 | Type    | Required | Default | Description                         |
| ------------------------- | ------- | -------- | ------- | ----------------------------------- |
| `form_id`                 | string  | Yes      | —       | Form ID                             |
| `consent_to_process`      | boolean | No       | —       | Consent to process data             |
| `consent_to_process_text` | string  | No       | —       | Consent text                        |
| `fields`                  | object  | Yes      | —       | Form field name/value pairs         |
| `ip_address`              | string  | No       | —       | Submitter's IP address              |
| `page_title`              | string  | No       | —       | Page title where form was submitted |
| `page_url`                | string  | No       | —       | Page URL where form was submitted   |
| `skip_validation`         | boolean | No       | —       | Skip form field validation          |
| `submitted_at`            | integer | No       | —       | Submission timestamp (Unix ms)      |

<Expandable title="inputSchema">
  ```json theme={null}
  {
    "type": "object",
    "properties": {
      "PCID": {
        "type": "string",
        "description": "Pink Connect ID for the authenticated connection"
      },
      "form_id": {
        "type": "string",
        "description": "Form ID"
      },
      "consent_to_process": {
        "type": "boolean",
        "description": "Consent to process data"
      },
      "consent_to_process_text": {
        "type": "string",
        "description": "Consent text"
      },
      "fields": {
        "type": "object",
        "description": "Form field name/value pairs"
      },
      "ip_address": {
        "type": "string",
        "description": "Submitter's IP address"
      },
      "page_title": {
        "type": "string",
        "description": "Page title where form was submitted"
      },
      "page_url": {
        "type": "string",
        "description": "Page URL where form was submitted"
      },
      "skip_validation": {
        "type": "boolean",
        "description": "Skip form field validation"
      },
      "submitted_at": {
        "type": "integer",
        "description": "Submission timestamp (Unix ms)"
      }
    },
    "required": [
      "PCID",
      "form_id",
      "fields"
    ]
  }
  ```
</Expandable>

***

## gist\_contacts\_track\_event

Track a custom event

**Parameters:**

| Parameter     | Type    | Required | Default | Description                                              |
| ------------- | ------- | -------- | ------- | -------------------------------------------------------- |
| `email`       | string  | No       | —       | Contact email (required if no user\_id or id)            |
| `event_name`  | string  | Yes      | —       | Event name                                               |
| `id`          | string  | No       | —       | Contact ID (required if no email or user\_id)            |
| `occurred_at` | integer | No       | —       | Unix timestamp when the event occurred (defaults to now) |
| `properties`  | object  | No       | —       | Event properties as key-value pairs                      |
| `user_id`     | string  | No       | —       | User ID (required if no email or id)                     |

<Expandable title="inputSchema">
  ```json theme={null}
  {
    "type": "object",
    "properties": {
      "PCID": {
        "type": "string",
        "description": "Pink Connect ID for the authenticated connection"
      },
      "email": {
        "type": "string",
        "description": "Contact email (required if no user_id or id)"
      },
      "event_name": {
        "type": "string",
        "description": "Event name"
      },
      "id": {
        "type": "string",
        "description": "Contact ID (required if no email or user_id)"
      },
      "occurred_at": {
        "type": "integer",
        "description": "Unix timestamp when the event occurred (defaults to now)"
      },
      "properties": {
        "type": "object",
        "description": "Event properties as key-value pairs"
      },
      "user_id": {
        "type": "string",
        "description": "User ID (required if no email or id)"
      }
    },
    "required": [
      "PCID",
      "event_name"
    ]
  }
  ```
</Expandable>
