{
  "swagger": "2.0",
  "info": {
    "title": "SigParser IPAAS API",
    "description": "\n\n\nAuthentication\n===================\n\nAPI Key\n-----------\n\nYou can go into the SigParser application and generate an API key if you have the right subscription and have the right role. Some roles aren't allowed to generate API keys.\n\nPass the API key using one of these two methods:\n1. Set the header **x-api-key** to your API key value, or\n2. Set the header **Authorization** to `Bearer <your-api-key>` (note the space after Bearer)\n\n\nOAuth 2.0 Authorization Code Flow\n-----------------------------------\n\nSigParser supports the **OAuth 2.0 Authorization Code** flow for iPaaS platforms (Zapier, Make, Boomi, Claude, etc.) and any third-party application that needs to access SigParser data on behalf of users.\n\nBoth **confidential clients** (server-side apps that can securely store a `client_secret`) and **public clients** (mobile apps or SPAs using PKCE) are supported.\n\n---\n\n### Step 1 — Register Your Application\n\nSelf-register your application to receive a `client_id` and `client_secret`. Multiple redirect URIs are supported per client.\n\n**POST https://app.sigparser.com/oauth/register**\n\nRequest body (`Content-Type: application/json`):\n\n```json\n{\n  \"client_name\": \"My Integration App\",\n  \"redirect_uris\": [\n    \"https://myapp.com/oauth/callback\",\n    \"https://myapp.com/oauth/callback-alt\"\n  ]\n}\n```\n\nResponse:\n\n```json\n{\n  \"client_id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n  \"client_secret\": \"...\",\n  \"client_name\": \"My Integration App\",\n  \"redirect_uris\": [\"https://myapp.com/oauth/callback\", \"https://myapp.com/oauth/callback-alt\"]\n}\n```\n\n- Store your `client_id` permanently — it identifies your application.\n- Store your `client_secret` securely (server-side only). It cannot be retrieved after registration.\n- All `redirect_uris` must use **HTTPS** (or `http://localhost` for local development).\n\n---\n\n### Step 2 — Redirect the User to Authorize\n\nSend the user to the SigParser login/authorization page. After they approve, they'll be redirected back to your app with an authorization code.\n\n**Confidential clients** (server-side, using `client_secret`):\n\n```\nhttps://app.sigparser.com/Home/Login?client_id={client_id}&redirect_uri={redirect_uri}&state={state}\n```\n\n**Public clients** (PKCE — recommended for mobile/SPA):\n\n```\nhttps://app.sigparser.com/Home/Login?client_id={client_id}&redirect_uri={redirect_uri}&state={state}&code_challenge={code_challenge}&code_challenge_method=S256\n```\n\n| Parameter | Required | Description |\n|---|---|---|\n| `client_id` | ✓ | Your registered client ID |\n| `redirect_uri` | ✓ | Must exactly match one of your registered `redirect_uris` |\n| `state` | Recommended | Random value to protect against CSRF attacks |\n| `code_challenge` | PKCE only | `BASE64URL(SHA256(code_verifier))` — see PKCE section below |\n| `code_challenge_method` | PKCE only | Must be `S256` |\n\nAfter the user approves, they are sent to your `redirect_uri` with a short-lived authorization code:\n\n```\nhttps://myapp.com/oauth/callback?code={authorization_code}&state={state}\n```\n\n---\n\n### Step 3 — Exchange the Code for an Access Token\n\n**POST https://app.sigparser.com/api/Ipaas/token**\n\n> ⚠️ **Important:** Set `Content-Type: application/x-www-form-urlencoded`\n\nUse `client_secret` **or** `code_verifier` depending on which method you used in Step 2 — not both.\n\n**Confidential clients** (using `client_secret`):\n\n| Parameter | Value |\n|---|---|\n| `grant_type` | `authorization_code` |\n| `client_id` | Your client ID |\n| `client_secret` | Your client secret |\n| `code` | The authorization code from Step 2 |\n| `redirect_uri` | The exact same redirect URI used in Step 2 |\n\n**Public clients** (PKCE — using `code_verifier`):\n\n| Parameter | Value |\n|---|---|\n| `grant_type` | `authorization_code` |\n| `client_id` | Your client ID |\n| `code_verifier` | The original random string used to generate `code_challenge` in Step 2 |\n| `code` | The authorization code from Step 2 |\n| `redirect_uri` | The exact same redirect URI used in Step 2 |\n\nSuccessful response:\n\n```json\n{ \"access_token\": \"...\", \"username\": \"user@example.com\" }\n```\n\n| Field | Description |\n|---|---|\n| `access_token` | Use for all requests to `https://ipaas.sigparser.com` |\n| `username` | The authorized user's email address |\n\n---\n\n### Step 4 — Make Authenticated API Requests\n\nPass the `access_token` on every request to `https://ipaas.sigparser.com` using **one** of:\n\n```\nx-api-key: {access_token}\nAuthorization: Bearer {access_token}\n```\n\n**Validate Connectivity**\n\n```\nGET https://ipaas.sigparser.com/api/User/Me\n```\n\nReturns the email address of the authenticated user. Use this to confirm the token is working after your OAuth flow completes.\n\n---\n\n### Step 5 — Revoke Access (Optional)\n\n```\nDELETE https://ipaas.sigparser.com/api/User/Invalidate\n```\n\nPermanently revokes the `access_token`. This can only be called once and cannot be undone.\n\n---\n\n### PKCE Reference (RFC 7636)\n\nPKCE (Proof Key for Code Exchange) prevents authorization code interception attacks. It is **strongly recommended for public clients** (mobile apps, single-page apps) that cannot safely store a `client_secret`, and is optional for confidential server-side clients.\n\n1. Generate a cryptographically random **`code_verifier`** — a URL-safe string between 43 and 128 characters.\n2. Compute the **`code_challenge`**: `BASE64URL(SHA256(ASCII(code_verifier)))`\n3. Send `code_challenge` and `code_challenge_method=S256` in the authorization URL (Step 2).\n4. Send the original `code_verifier` (not the challenge) when exchanging the code for a token (Step 3).\n\n> Only **`S256`** is supported. The `plain` method is not accepted.\n\nMCP Server\n=============\nSigParser exposes an MCP (Model Context Protocol) server at `https://ipaas.sigparser.com/api/mcp` that allows AI tools to query your data in a self discoverable way. The API is designed to be used by AI agents like ChatGPT, Claude, Hunley AI and others that support the MCP standard.\n\nThrottling\n=======================\n\nAPI requests are thottled to 120 per minute. If you need more, contact us.\n\n",
    "version": "v2"
  },
  "host": "ipaas.sigparser.com",
  "schemes": [
    "https"
  ],
  "paths": {
    "/api/v2/companies": {
      "post": {
        "tags": [
          "Companies"
        ],
        "summary": "Inserts or updates a company by domain.",
        "description": "How to use this API:\n----------------\n- All fields are optional. If a field is not provided in the request it will not be updated.\n- To clear or delete a field value, pass null to the field.\n\nThe following fields can be set on the company:\n----------------\n- **record_status**: Status of the company. (e.g. Valid)\n    - Valid values: \"Valid\", \"Approved\", \"Ignore\", \"Other\", \"Coworker\"\n- **company_employees_range**: Company's publicly stated range of employees. (e.g. 1001-5000)\n    - Valid values: \"1-10\", \"11-50\", \"51-200\", \"201-500\", \"501-1000\", \"1001-5000\", \"5001-10000\", \"10001+\"\n- **company_founded**: The year this company was founded. (e.g. 2001)\n    - Valid values: Valid years (non-negative years)\n- **company_linkedin**: Url for company's LinkedIn profile page. (e.g. https://www.linkedin/company/examplecompany)\n- **company_name**: The best name SigParser has found or that has been set by a user. (e.g. Dragnet Technologies)\n- **company_phone**: Primary phone number provided for this company. (e.g. 212-456-7890)\n- **company_website**: Company's publicly stated website. (e.g. https://www.examplecompany.com)\n- **email_domain_type**: The type of the Company's email domain.\n    - Valid values: \"Automated\", \"Company\", \"Education\", \"Fake\", \"Government\", \"Invalid\", \"Military\", \"Organization\", \"Public\"\n- **industry**: The company's industry (LinkedIn taxonomy). Setting this auto-populates the derived `industry_id`, `industry_top_level`, and `industry_all_levels` response fields and also syncs the legacy `industry_name`, `industry_group`, and `primary_industry` columns. New integrations should set this. (e.g. Software Development)\n- **industry_name** *(legacy)*: Legacy industry name. Still accepted on upsert for backwards compat; new integrations should use `industry`.\n- **industry_primary** *(legacy)*: Legacy industry value. Still accepted on upsert for backwards compat; new integrations should use `industry`.\n- **location_name**: Name of the company location that you're updating or adding. (e.g. HQ)\n- **location_full**: Full location for the company. (e.g. 123 Main St, Suite 100, San Francisco, CA 12345, USA)\n- **location_street**: Street of the company location (e.g. 123 Main St)\n- **location_line_2**: Second line of the company location (e.g. Suite 100)\n- **location_city**: City of the company location (e.g. San Diego)\n- **location_state**: State of the company location (e.g. CA)\n- **location_postalcode**: Postal code of the company location (e.g. 92101)\n- **location_country**: Country of the company location (e.g. United States)\n- **location_region**: Region of the company location (e.g. North America)\n- **location_continent**: Continent of the company location (e.g. North America)\n- Any custom fields\n    - See the example request below to see how to set custom fields based on custom field type.",
        "consumes": [
          "application/json-patch+json",
          "application/json",
          "text/json",
          "application/*+json"
        ],
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "in": "body",
            "name": "body",
            "schema": {
              "example": "{\n    \"domain\": \"fake.com\",\n    \"company_name\": \"Fake Name\",\n    \"industry\": \"Software Development\",\n    \"cf_text_field\": \"Text Value\",\n    \"cf_number_field\": 123,\n    \"cf_date_field\": \"10/20/2022\",\n    \"cf_boolean_field\": true,\n    \"cf_single_select_field\": [\n        \"Option 1\"\n    ],\n    \"cf_multi_select_field\": [\n        \"Option 1\",\n        \"Option 2\"\n    ],\n    \"source_date_override\": \"10/20/2022\",\n}"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/OutputUpsertModelV2`1<OutputCompanyExampleModelV2>"
            }
          }
        }
      },
      "get": {
        "tags": [
          "Companies"
        ],
        "summary": "Fetch a company by domain.",
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "domain",
            "description": "The domain of the company to include in the response.",
            "type": "string"
          },
          {
            "in": "query",
            "name": "take",
            "description": "Number of records to return. Default is 100. Max is 1000.",
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/OutputListModelV2`1<OutputCompanyExampleModelV2>"
            }
          }
        }
      }
    },
    "/api/v2/companies/locations": {
      "get": {
        "tags": [
          "Companies"
        ],
        "summary": "Fetch all locations for a company by domain.",
        "description": "Returns all locations associated with the company identified by the provided domain.\nThis includes the primary location and any additional locations the company has.\nResults are ordered by creation date descending (newest first). Use `is_primary_location`\nto identify the primary location — because pagination is ordered by creation date, the\nprimary location is not guaranteed to appear first across pages.",
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "domain",
            "description": "The domain of the company to get locations for.",
            "type": "string"
          },
          {
            "in": "query",
            "name": "take",
            "description": "Number of records to return. Default is 100. Max is 1000.",
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/OutputListModelV2`1<OutputCompanyLocationModelV2>"
            }
          }
        }
      }
    },
    "/api/v2/companies/search": {
      "get": {
        "tags": [
          "Companies"
        ],
        "summary": "Fetch companies by search criteria.",
        "description": "This endpoint supports OData filtering and ordering. You can use OData query options to filter and sort results.\nAll fields returned by the `/api/v2/companies/fields` endpoint can be used in filter expressions.\n------------\n            \nThe following OData operators are supported:\n------------\n- **eq** (equals)\n    - **NOTE: case-insensitive (except for custom single-select picklist options)**\n- **ne** (not equals)\n- **gt** (greater than)\n- **ge** (greater than or equal to)\n- **lt** (less than)\n- **le** (less than or equal to)\n- **contains** (field contains substring, case-insensitive)\n- **and** (all conditions must be true)\n- **or** (at least one condition must be true)\n\nOrdering:\n------------\nYou can also specify an **orderby** parameter to sort the results. Multiple fields can be specified separated by commas.\n- **orderby** syntax: `field1 desc, field2 asc`\n- If not specified, results are sorted by the default pagination order\n- **asc** = ascending order (default if direction not specified)\n- **desc** = descending order\n\nExamples:\n------------\n- **Filter companies by industry**\n    - `filter=industry_primary eq 'Information Technology'`\n- **Filter companies that reside in the United States or Canada**\n    - `filter=location_country eq 'United States' or location_country eq 'Canada'`\n- **Filter companies with more than 100 contacts**\n    - `filter=contact_count gt 100`\n- **Filter and order companies by contact count (descending) and name (ascending)**\n    - `filter=contact_count gt 0&orderby=contact_count desc, company_name asc`",
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "filter",
            "description": "The search query to use to filter the companies by.",
            "type": "string"
          },
          {
            "in": "query",
            "name": "orderby",
            "description": "The order by clause to sort the results. Multiple fields can be specified separated by commas.",
            "type": "string"
          },
          {
            "in": "query",
            "name": "take",
            "description": "Number of records to return. Default is 100. Max is 1000.",
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/OutputListModelV2`1<OutputCompanyExampleModelV2>"
            }
          }
        }
      }
    },
    "/api/v2/companies/search/groupby": {
      "get": {
        "tags": [
          "Companies"
        ],
        "summary": "Group companies by a specific field. Returns the count and percentage for each group value.",
        "description": "The **field** parameter must be a field where `can_group_by` is `true`. Use the `/api/v2/companies/fields` endpoint to see which fields have `can_group_by = true`.\n            \nThe **filter** parameter uses the same OData syntax as the `/api/v2/companies/search` endpoint. All fields returned by the `/api/v2/companies/fields` endpoint can be used in the filter.\n            \nExamples:\n-----------\n- **Group companies by status**\n    - `field=record_status`\n- **Group filtered companies by industry**\n    - `filter=record_status eq 'Valid'&field=industry_name&orderby=desc`\n- **Group companies by size range, lowest count first**\n    - `field=company_size_range&orderby=asc`",
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "filter",
            "description": "The search query to use to filter the companies by before grouping.",
            "type": "string"
          },
          {
            "in": "query",
            "name": "field",
            "description": "The field to group by. Must be a valid, groupable field.",
            "type": "string"
          },
          {
            "in": "query",
            "name": "orderby",
            "description": "Sort direction for groups. \"desc\" shows highest counts first, \"asc\" shows lowest counts first.",
            "type": "string"
          },
          {
            "in": "query",
            "name": "percentage_decimal_places",
            "description": "Number of decimal places for the percentage value (0-6).",
            "type": "integer",
            "format": "int32"
          },
          {
            "in": "query",
            "name": "exclude_empty",
            "description": "Exclude groups where the field value is empty or null. Default is false.",
            "type": "boolean"
          },
          {
            "in": "query",
            "name": "take",
            "description": "Number of groups to return. Default is 100. Max is 1000.",
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/OutputListModelV2`1<OutputGroupByItemV2>"
            }
          }
        }
      }
    },
    "/api/v2/companies/delta/all": {
      "get": {
        "tags": [
          "Companies"
        ],
        "summary": "Fetch all companies that have changed from the beginning of time or from now.",
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "start_now",
            "description": "Should results be returned starting from now or in the beginning of time. Default is false.",
            "type": "boolean"
          },
          {
            "in": "query",
            "name": "order_by",
            "description": "Which direction to order the results by. Default is asc. Options are asc or desc.",
            "type": "string"
          },
          {
            "in": "query",
            "name": "take",
            "description": "Number of records to return. Default is 100. Max is 1000.",
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/OutputListModelV2`1<OutputCompanyExampleModelV2>"
            }
          }
        }
      }
    },
    "/api/v2/companies/delta/details": {
      "get": {
        "tags": [
          "Companies"
        ],
        "summary": "Fetch all companies that were likely changed by a user from the beginning of time or from now.",
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "start_now",
            "description": "Should results be returned starting from now or in the beginning of time. Default is false.",
            "type": "boolean"
          },
          {
            "in": "query",
            "name": "order_by",
            "description": "Which direction to order the results by. Default is asc. Options are asc or desc.",
            "type": "string"
          },
          {
            "in": "query",
            "name": "take",
            "description": "Number of records to return. Default is 100. Max is 1000.",
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/OutputListModelV2`1<OutputCompanyExampleModelV2>"
            }
          }
        }
      }
    },
    "/api/v2/companies/delta/fields": {
      "get": {
        "tags": [
          "Companies"
        ],
        "summary": "Fetch all changes that have happened to a specific set of fields on all companies from the beginning of time or from now.",
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "fields",
            "description": "A CSV list of fields the user would like to track.\nOnly trackable fields are supported.\nStatistic fields are not trackable this way.\n            \nTrackable contact fields include:\n----------------\n- **company_employees_range**\n- **company_founded**\n- **company_linkedin**\n- **company_name**\n- **company_phone**\n- **company_website**\n- **email_domain_type**\n- **web_domain_type**\n- **web_host_type**\n- **industry_primary**\n- **location_city**\n- **location_state**\n- **location_country**\n- **location_latitude**\n- **location_longitude**\n- Any custom fields\n    - **NOTE**: use the API names that you defined when you created the custom field(s) on SigParser",
            "type": "string"
          },
          {
            "in": "query",
            "name": "start_now",
            "description": "Should results be returned starting from now or in the beginning of time. Default is false.",
            "type": "boolean"
          },
          {
            "in": "query",
            "name": "order_by",
            "description": "Which direction to order the results by. Default is asc. Options are asc or desc.",
            "type": "string"
          },
          {
            "in": "query",
            "name": "take",
            "description": "Number of records to return. Default is 100. Max is 1000.",
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/OutputListModelV2`1<OutputCompanyDeltaFieldsModelV2>"
            }
          }
        }
      }
    },
    "/api/v2/companies/fields": {
      "get": {
        "tags": [
          "Companies"
        ],
        "summary": "Fetch a list of all the company fields available in the iPAAS API.",
        "description": "Notable field types include:\n-----------\n- text\n- date\n- text[] (array of text)\n- boolean\n- number",
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/DragnetTech.EventProcessors.iPAAS.V2.Companies.OutputCompanyFieldModelV2"
              }
            }
          }
        }
      }
    },
    "/api/v2/companies/statistics/interactions/monthly": {
      "get": {
        "tags": [
          "Companies"
        ],
        "summary": "Get monthly interaction statistics for a company.",
        "description": "Returns aggregated interaction metrics broken down by month for a specific company domain.\nUseful for generating sparkline charts showing interaction trends over time.\n\nThe data is aggregated by calendar month (starting on the 1st of each month).\nResults are ordered by month ascending (oldest first).",
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "domain",
            "description": "The domain of the company to get monthly statistics for.",
            "type": "string"
          },
          {
            "in": "query",
            "name": "start_month",
            "description": "Filter statistics to only include months starting from this date (inclusive).",
            "type": "string",
            "format": "date-time"
          },
          {
            "in": "query",
            "name": "end_month",
            "description": "Filter statistics to only include months ending at this date (inclusive).",
            "type": "string",
            "format": "date-time"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/DragnetTech.EventProcessors.iPAAS.V2.Companies.OutputCompanyMonthlyStatisticsModelV2"
              }
            }
          }
        }
      }
    },
    "/api/v2/contacts": {
      "post": {
        "tags": [
          "Contacts"
        ],
        "summary": "Inserts or updates a contact by email address.",
        "description": "How to use this API:\n----------------\n- All fields are optional. If a field is not provided in the request it will not be updated.\n- To clear or delete a field value, pass null to the field.\n\nThe following fields can be set on the contact:\n----------------\n- **record_status**: Status of the contact. (e.g. Valid)\n    - Valid values: \"Valid\", \"Approved\", \"Ignore\", \"Other\", \"Coworker\"\n- **email_address_type**: Type of email address. (e.g. Person)\n    - Valid values: \"Person\", \"Non-Person\"\n- **job_title**: Job title for the contact. (e.g. VP of Operations)\n- **job_level**: Indicates the seniority or position of the contact within the organization. (e.g. Director)\n    - Valid values: \"C-Level\", \"Executive\", \"Director\", \"Management\", \"Contributor\"\n- **job_function**: Indicates the primary area of responsibility or expertise of the contact within the organization. (e.g. Engineering & Technology Development)\n    - Valid values: \"Administrative & Business Support\", \"Consulting & Professional Services\", \"Customer Success & Support\", \"Data Science & Analytics\", \"Engineering & Technology Development\", \"Executive Leadership\", \"Finance & Accounting\", \"Human Resources\", \"Information Technology (IT) & Security\", \"Legal & Compliance\", \"Marketing & Communications\", \"Operations\", \"Product Management\", \"Sales & Business Development\", \"Strategy & Corporate Development\"\n- **name_full**: Full name for the contact. (e.g. Dr. John Michael Smith Jr.)\n- **name_prefix**: Prefix for the contact's name. (e.g. Dr.)\n- **name_first**: First name for the contact. (e.g. John)\n- **name_middle**: Middle name for the contact. (e.g. Michael)\n- **name_last**: Last name for the contact. (e.g. Smith)\n- **name_suffix**: Suffix for the contact's name. (e.g. Jr.)\n- **phone_direct**: Direct phone number for the contact. (e.g. 555-555-5555)\n- **phone_fax**: Fax number for the contact. (e.g. 555-555-5555)\n- **phone_home**: Home phone number for the contact. (e.g. 555-555-5555)\n- **phone_mobile**: Mobile phone number for the contact. (e.g. 555-555-5555)\n- **phone_office**: Work phone number for the contact. (e.g. 555-555-5555)\n- **profile_linkedin_url**: LinkedIn URL for the contact. (e.g. https://www.linkedin.com/in/johnsmith)\n- **profile_twitter_url**: Twitter URL for the contact. (e.g. https://twitter.com/johnsmith)\n- **location_name**: Name of the location for the contact. (e.g. San Francisco Office)\n- **location_full**: Full location for the contact. (e.g. 123 Main St, Suite 100, San Francisco, CA 12345, USA)\n- **location_street**: Street location for the contact. (e.g. 123 Main St)\n- **location_line_2**: Second line of the location for the contact derived from latest email signature, file import, or user update. (e.g. Suite 100)\n- **location_city**: City for the contact. (e.g. San Francisco)\n- **location_state**: State for the contact. (e.g. CA)\n- **location_postalcode**: Postal code for the contact. (e.g. 12345)\n- **location_country**: Country for the contact. (e.g. USA)\n- **location_region**: Region of the location (e.g. San Diego County)\n- **location_continent**: Continent of the location (e.g. North America)\n- Any custom fields\n    - See the example request below to see how to set custom fields based on custom field type.",
        "consumes": [
          "application/json-patch+json",
          "application/json",
          "text/json",
          "application/*+json"
        ],
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "in": "body",
            "name": "body",
            "schema": {
              "example": "{\n    \"email\": \"fake@fake.com\",\n    \"name_full\": \"Fake Name\",\n    \"cf_text_field\": \"Text Value\",\n    \"cf_number_field\": 123,\n    \"cf_date_field\": \"10/20/2022\",\n    \"cf_boolean_field\": true,\n    \"cf_single_select_field\": [\n        \"Option 1\"\n    ],\n    \"cf_multi_select_field\": [\n        \"Option 1\", \n        \"Option 2\"\n    ],\n    \"source_date_override\": \"10/20/2022\"\n}"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/OutputUpsertModelV2`1<OutputContactExampleModelV2>"
            }
          }
        }
      },
      "get": {
        "tags": [
          "Contacts"
        ],
        "summary": "Fetch a contact by email address or contacts under a specific domain.",
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "email",
            "description": "The email address of the contact to include in the response.",
            "type": "string"
          },
          {
            "in": "query",
            "name": "domain",
            "description": "The domain of the contact(s) to include in the response.",
            "type": "string"
          },
          {
            "in": "query",
            "name": "take",
            "description": "Number of records to return. Default is 100. Max is 1000.",
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/OutputListModelV2`1<OutputContactExampleModelV2>"
            }
          }
        }
      }
    },
    "/api/v2/contacts/search": {
      "get": {
        "tags": [
          "Contacts"
        ],
        "summary": "Fetch contacts by search criteria.",
        "description": "This endpoint supports OData filtering and ordering. You can use OData query options to filter and sort the results.\nAll fields returned by the `/api/v2/contacts/fields` endpoint can be used in filter expressions.\n------------\n            \nThe following OData operators are supported:\n------------\n- **eq** (equals)\n    - **NOTE: case-insensitive (except for custom single-select picklist options)**\n- **ne** (not equals)\n- **gt** (greater than)\n- **ge** (greater than or equal to)\n- **lt** (less than)\n- **le** (less than or equal to)\n- **contains** (field contains substring, case-insensitive)\n- **and** (all conditions must be true)\n- **or** (at least one condition must be true)\n\nOrdering:\n------------\nYou can also specify an **orderby** parameter to sort the results. Multiple fields can be specified separated by commas.\n- **orderby** syntax: `field1 desc, field2 asc`\n- If not specified, results are sorted by the default pagination order\n- **asc** = ascending order (default if direction not specified)\n- **desc** = descending order\n\nExamples:\n------------\n- **Filter contacts by first name and last name**\n    - `filter=name_first eq 'John' and name_last eq 'Doe'`\n- **Filter contacts by email address**\n    - `filter=email_address eq 'test@test.com'`\n- **Filter contacts with greater than 1 interaction**\n    - `filter=interactions_total gt 1`\n- **Filter and order contacts by email count (descending) and name (ascending)**\n    - `filter=interactions_total gt 0&orderby=stat_emails_from desc, name_first asc`",
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "filter",
            "description": "The search query to use to filter the contacts by.",
            "type": "string"
          },
          {
            "in": "query",
            "name": "orderby",
            "description": "The order by clause to sort the results. Multiple fields can be specified separated by commas.",
            "type": "string"
          },
          {
            "in": "query",
            "name": "take",
            "description": "Number of records to return. Default is 100. Max is 1000.",
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/OutputListModelV2`1<OutputContactExampleModelV2>"
            }
          }
        }
      }
    },
    "/api/v2/contacts/search/groupby": {
      "get": {
        "tags": [
          "Contacts"
        ],
        "summary": "Group contacts by a specific field. Returns the count and percentage for each group value.",
        "description": "The **field** parameter must be a field where `can_group_by` is `true`. Use the `/api/v2/contacts/fields` endpoint to see which fields have `can_group_by = true`.\n            \nThe **filter** parameter uses the same OData syntax as the `/api/v2/contacts/search` endpoint. All fields returned by the `/api/v2/contacts/fields` endpoint can be used in the filter.\n            \nExamples:\n-----------\n- **Group contacts by status**\n    - `field=record_status`\n- **Group filtered contacts by country**\n    - `filter=record_status eq 'Valid'&field=location_country&orderby=desc`\n- **Group contacts by job level, lowest count first**\n    - `field=job_level&orderby=asc`",
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "filter",
            "description": "The search query to use to filter the contacts by before grouping.",
            "type": "string"
          },
          {
            "in": "query",
            "name": "field",
            "description": "The field to group by. Must be a valid, groupable field.",
            "type": "string"
          },
          {
            "in": "query",
            "name": "orderby",
            "description": "Sort direction for groups. \"desc\" shows highest counts first, \"asc\" shows lowest counts first.",
            "type": "string"
          },
          {
            "in": "query",
            "name": "percentage_decimal_places",
            "description": "Number of decimal places for the percentage value (0-6).",
            "type": "integer",
            "format": "int32"
          },
          {
            "in": "query",
            "name": "exclude_empty",
            "description": "Exclude groups where the field value is empty or null. Default is false.",
            "type": "boolean"
          },
          {
            "in": "query",
            "name": "take",
            "description": "Number of groups to return. Default is 100. Max is 1000.",
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/OutputListModelV2`1<OutputGroupByItemV2>"
            }
          }
        }
      }
    },
    "/api/v2/contacts/delta/all": {
      "get": {
        "tags": [
          "Contacts"
        ],
        "summary": "Fetch all contacts that have changed from the beginning of time or from now.",
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "start_now",
            "description": "Should results be returned starting from now or in the beginning of time. Default is false.",
            "type": "boolean"
          },
          {
            "in": "query",
            "name": "order_by",
            "description": "Which direction to order the results by. Default is asc. Options are asc or desc.",
            "type": "string"
          },
          {
            "in": "query",
            "name": "take",
            "description": "Number of records to return. Default is 100. Max is 1000.",
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/OutputListModelV2`1<OutputContactExampleModelV2>"
            }
          }
        }
      }
    },
    "/api/v2/contacts/delta/details": {
      "get": {
        "tags": [
          "Contacts"
        ],
        "summary": "Fetch all contacts that were likely changed by a user from the beginning of time or from now.",
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "start_now",
            "description": "Should results be returned starting from now or in the beginning of time. Default is false.",
            "type": "boolean"
          },
          {
            "in": "query",
            "name": "order_by",
            "description": "Which direction to order the results by. Default is asc. Options are asc or desc.",
            "type": "string"
          },
          {
            "in": "query",
            "name": "take",
            "description": "Number of records to return. Default is 100. Max is 1000.",
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/OutputListModelV2`1<OutputContactExampleModelV2>"
            }
          }
        }
      }
    },
    "/api/v2/contacts/delta/fields": {
      "get": {
        "tags": [
          "Contacts"
        ],
        "summary": "Fetch all changes that have happened to a specific set of fields on all contacts from the beginning of time or from now.",
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "fields",
            "description": "A CSV list of fields the user would like to track.\nOnly trackable fields are supported.\nStatistic fields are not trackable this way.\n            \nTrackable contact fields include:\n----------------\n- **email_address_type**\n- **email_signature**\n- **email_display_name**\n- **job_title**\n- **name_full**\n- **phone_direct**\n- **phone_fax**\n- **phone_home**\n- **phone_mobile**\n- **phone_work**\n- **profile_linkedin_url**\n- **profile_twitter_url**\n- **location_city**\n- **location_state**\n- **location_country**\n- **location_latitude**\n- **location_longitude**\n- Any custom fields",
            "type": "string"
          },
          {
            "in": "query",
            "name": "start_now",
            "description": "Should results be returned starting from now or in the beginning of time. Default is false.",
            "type": "boolean"
          },
          {
            "in": "query",
            "name": "order_by",
            "description": "Which direction to order the results by. Default is asc. Options are asc or desc.",
            "type": "string"
          },
          {
            "in": "query",
            "name": "take",
            "description": "Number of records to return. Default is 100. Max is 1000.",
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/OutputListModelV2`1<OutputContactDeltaFieldsModelV2>"
            }
          }
        }
      }
    },
    "/api/v2/contacts/fields": {
      "get": {
        "tags": [
          "Contacts"
        ],
        "summary": "Fetch a list of all the contact fields details available in the iPAAS API.",
        "description": "Notable field types include:\n-----------\n- text\n- date\n- text[] (array of text)\n- boolean\n- number",
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/DragnetTech.EventProcessors.iPAAS.V2.Contacts.OutputContactFieldModelV2"
              }
            }
          }
        }
      }
    },
    "/api/v2/contacts/statistics/interactions/monthly": {
      "get": {
        "tags": [
          "Contacts"
        ],
        "summary": "Get monthly interaction statistics for a contact.",
        "description": "Returns aggregated interaction metrics broken down by month for a specific contact.\nUseful for generating sparkline charts showing interaction trends over time.\n\nThe data is aggregated by calendar month (starting on the 1st of each month).\nResults are ordered by month ascending (oldest first).",
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "email",
            "description": "The email address of the contact to get monthly statistics for.",
            "type": "string"
          },
          {
            "in": "query",
            "name": "start_month",
            "description": "Filter statistics to only include months starting from this date (inclusive).",
            "type": "string",
            "format": "date-time"
          },
          {
            "in": "query",
            "name": "end_month",
            "description": "Filter statistics to only include months ending at this date (inclusive).",
            "type": "string",
            "format": "date-time"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/DragnetTech.EventProcessors.iPAAS.V2.Contacts.OutputContactMonthlyStatisticsModelV2"
              }
            }
          }
        }
      }
    },
    "/api/v2/contacts/enrich/email": {
      "post": {
        "tags": [
          "Contacts"
        ],
        "summary": "Enriches an existing contact with email validation data.",
        "description": "Enriches an existing contact with email validation data from a third-party provider.\nThe contact must already exist in SigParser. This operation costs 1 credit.",
        "consumes": [
          "application/json-patch+json",
          "application/json",
          "text/json",
          "application/*+json"
        ],
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "in": "body",
            "name": "body",
            "schema": {
              "$ref": "#/definitions/DragnetTech.EventProcessors.iPAAS.V2.Contacts.RequestContactsEnrichEmailModelV2"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/DragnetTech.EventProcessors.iPAAS.V2.Contacts.OutputContactEnrichEmailModelV2"
            }
          }
        }
      }
    },
    "/api/v2/contacts/enrich/job": {
      "post": {
        "tags": [
          "Contacts"
        ],
        "summary": "Enriches an existing contact with job and LinkedIn profile data.",
        "description": "This endpoint enriches contacts with current and past job experiences from their personal LinkedIn profile.\nThe contact must already exist in SigParser. This operation costs 10 credits.",
        "consumes": [
          "application/json-patch+json",
          "application/json",
          "text/json",
          "application/*+json"
        ],
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "in": "body",
            "name": "body",
            "schema": {
              "$ref": "#/definitions/DragnetTech.EventProcessors.iPAAS.V2.Contacts.RequestContactsEnrichJobModelV2"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/DragnetTech.EventProcessors.iPAAS.V2.Contacts.OutputContactEnrichJobModelV2"
            }
          }
        }
      }
    },
    "/api/v2/emails": {
      "get": {
        "tags": [
          "Emails"
        ],
        "summary": "Fetch emails by email address or domain.",
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "email",
            "description": "The email address of the email",
            "type": "string"
          },
          {
            "in": "query",
            "name": "domain",
            "description": "The domain connected to the email address",
            "type": "string"
          },
          {
            "in": "query",
            "name": "take",
            "description": "Number of records to return. Default is 100. Max is 1000.",
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/OutputListModelV2`1<OutputEmailModelV2>"
            }
          }
        }
      }
    },
    "/api/v2/emails/delta": {
      "get": {
        "tags": [
          "Emails"
        ],
        "summary": "Fetch all emails that have been ingested from the beginning of time or from now. Emails are sorted by ingestion_date.",
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "start_now",
            "description": "Should results be returned starting from now or in the beginning of time. Default is false.",
            "type": "boolean"
          },
          {
            "in": "query",
            "name": "order_by",
            "description": "Which direction to order the results by. Default is asc. Options are asc or desc.",
            "type": "string"
          },
          {
            "in": "query",
            "name": "take",
            "description": "Number of records to return. Default is 100. Max is 1000.",
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/OutputListModelV2`1<OutputEmailModelV2>"
            }
          }
        }
      }
    },
    "/api/v2/emails/body": {
      "get": {
        "tags": [
          "Emails"
        ],
        "summary": "Fetch the body of an email across all the mailboxes.",
        "description": "This API is only available to specific customers. If you would like access to this API, please contact us.",
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "id",
            "description": "ID of the email message to retrieve.",
            "type": "string"
          },
          {
            "in": "query",
            "name": "select",
            "description": "Comma-separated list of body fields to return. Available fields: `text`, `html`.\nOmit, leave empty, or pass `*` to return both. When LLMs are the downstream consumer,\n`text` is usually enough and uses far fewer tokens. The `text` field is always\npopulated whenever it's returned — if the mailbox only had an HTML body we derive the\ntext from it on the fly.",
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/DragnetTech.EventProcessors.iPAAS.V2.Emails.OutputEmailBodyModelV2"
            }
          }
        }
      }
    },
    "/api/v2/emails/attachment": {
      "get": {
        "tags": [
          "Emails"
        ],
        "summary": "Fetch the attachment of an email across all the mailboxes by email id and attachment file name.",
        "description": "This API is only available to specific customers. If you would like access to this API, please contact us.",
        "parameters": [
          {
            "in": "query",
            "name": "id",
            "description": "ID of the email message to retrieve attachment(s) from.",
            "type": "string"
          },
          {
            "in": "query",
            "name": "file_name",
            "description": "Name of the attachment file to retrieve from the email message.",
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v2/graph/contacts": {
      "get": {
        "tags": [
          "Graph"
        ],
        "summary": "Get the all-time graphs between contacts for the specified email address or domain.",
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "primary_contact_email",
            "description": "The email address of the coworker or contact email address to get relationships for.",
            "type": "string"
          },
          {
            "in": "query",
            "name": "primary_contact_domain",
            "description": "The domain of the coworker or contact email address to get relationships for.",
            "type": "string"
          },
          {
            "in": "query",
            "name": "related_contact_email",
            "description": "The email address of the related coworker or contact email address to get relationships for.",
            "type": "string"
          },
          {
            "in": "query",
            "name": "related_contact_status",
            "description": "The status of the related coworker or contact email address to get relationships for.",
            "type": "string"
          },
          {
            "in": "query",
            "name": "include_indirect",
            "description": "Whether to include indirect relationships in the results. Default is true.",
            "type": "boolean"
          },
          {
            "in": "query",
            "name": "take",
            "description": "Number of records to return. Default is 100. Max is 1000.",
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/OutputListModelV2`1<OutputGraphContactModelV2>"
            }
          }
        }
      }
    },
    "/api/v2/graph/contacts/delta": {
      "get": {
        "tags": [
          "Graph"
        ],
        "summary": "A delta sync of the recent all-time graphs between contacts.",
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "include_indirect",
            "description": "Whether to include indirect relationships in the results. Default is true.",
            "type": "boolean"
          },
          {
            "in": "query",
            "name": "start_now",
            "description": "Should results be returned starting from now or in the beginning of time. Default is false.",
            "type": "boolean"
          },
          {
            "in": "query",
            "name": "order_by",
            "description": "Which direction to order the results by. Default is asc. Options are asc or desc.",
            "type": "string"
          },
          {
            "in": "query",
            "name": "take",
            "description": "Number of records to return. Default is 100. Max is 1000.",
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/OutputListModelV2`1<OutputGraphContactModelV2>"
            }
          }
        }
      }
    },
    "/api/v2/graph/contacts/daily": {
      "get": {
        "tags": [
          "Graph"
        ],
        "summary": "Get the daily graphs between contacts for the specified email address or domain.",
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "primary_contact_email",
            "description": "The email address of the coworker or contact email address to get relationships for.",
            "type": "string"
          },
          {
            "in": "query",
            "name": "primary_contact_domain",
            "description": "The domain of the coworker or contact email address to get relationships for.",
            "type": "string"
          },
          {
            "in": "query",
            "name": "related_contact_email",
            "description": "The email address of the related coworker or contact email address to get relationships for.",
            "type": "string"
          },
          {
            "in": "query",
            "name": "related_contact_status",
            "description": "The status of the related coworker or contact email address to get relationships for.",
            "type": "string"
          },
          {
            "in": "query",
            "name": "include_indirect",
            "description": "Whether to include indirect relationships in the results. Default is true.",
            "type": "boolean"
          },
          {
            "in": "query",
            "name": "take",
            "description": "Number of records to return. Default is 100. Max is 1000.",
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/OutputListModelV2`1<OutputGraphContactDailyModelV2>"
            }
          }
        }
      }
    },
    "/api/v2/graph/contacts/daily/delta": {
      "get": {
        "tags": [
          "Graph"
        ],
        "summary": "A delta sync of the recent daily graphs between contacts.",
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "include_indirect",
            "description": "Whether to include indirect relationships in the results. Default is true.",
            "type": "boolean"
          },
          {
            "in": "query",
            "name": "start_now",
            "description": "Should results be returned starting from now or in the beginning of time. Default is false.",
            "type": "boolean"
          },
          {
            "in": "query",
            "name": "order_by",
            "description": "Which direction to order the results by. Default is asc. Options are asc or desc.",
            "type": "string"
          },
          {
            "in": "query",
            "name": "take",
            "description": "Number of records to return. Default is 100. Max is 1000.",
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/OutputListModelV2`1<OutputGraphContactDailyModelV2>"
            }
          }
        }
      }
    },
    "/api/v2/graph/companies": {
      "get": {
        "tags": [
          "Graph"
        ],
        "summary": "Get the all-time graphs between contacts and companies for the specified domain.",
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "primary_contact_domain",
            "description": "The domain of the company to get relationships for.",
            "type": "string"
          },
          {
            "in": "query",
            "name": "primary_contact_status",
            "description": "The status of the coworker or contact to get relationships for.",
            "type": "string"
          },
          {
            "in": "query",
            "name": "related_company_domain",
            "description": "The domain of the related company to get relationships for.",
            "type": "string"
          },
          {
            "in": "query",
            "name": "related_company_status",
            "description": "The status of the related company to get relationships for.",
            "type": "string"
          },
          {
            "in": "query",
            "name": "include_indirect",
            "description": "Whether to include indirect relationships in the results. Default is true.",
            "type": "boolean"
          },
          {
            "in": "query",
            "name": "take",
            "description": "Number of records to return. Default is 100. Max is 1000.",
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/OutputListModelV2`1<OutputGraphCompanyModelV2>"
            }
          }
        }
      }
    },
    "/api/v2/graph/companies/daily": {
      "get": {
        "tags": [
          "Graph"
        ],
        "summary": "Get the daily graphs between contacts and companies for the specified domain.",
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "primary_contact_domain",
            "description": "The domain of the company to get relationships for.",
            "type": "string"
          },
          {
            "in": "query",
            "name": "primary_contact_status",
            "description": "The status of the coworker or contact to get relationships for.",
            "type": "string"
          },
          {
            "in": "query",
            "name": "related_company_domain",
            "description": "The domain of the related company to get relationships for.",
            "type": "string"
          },
          {
            "in": "query",
            "name": "related_company_status",
            "description": "The status of the related company to get relationships for.",
            "type": "string"
          },
          {
            "in": "query",
            "name": "include_indirect",
            "description": "Whether to include indirect relationships in the results. Default is true.",
            "type": "boolean"
          },
          {
            "in": "query",
            "name": "take",
            "description": "Number of records to return. Default is 100. Max is 1000.",
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/OutputListModelV2`1<OutputGraphCompanyDailyModelV2>"
            }
          }
        }
      }
    },
    "/api/v2/graph/companies/daily/delta": {
      "get": {
        "tags": [
          "Graph"
        ],
        "summary": "A delta sync of the recent daily graphs between contacts and companies.",
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "include_indirect",
            "description": "Whether to include indirect relationships in the results. Default is true.",
            "type": "boolean"
          },
          {
            "in": "query",
            "name": "start_now",
            "description": "Should results be returned starting from now or in the beginning of time. Default is false.",
            "type": "boolean"
          },
          {
            "in": "query",
            "name": "order_by",
            "description": "Which direction to order the results by. Default is asc. Options are asc or desc.",
            "type": "string"
          },
          {
            "in": "query",
            "name": "take",
            "description": "Number of records to return. Default is 100. Max is 1000.",
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/OutputListModelV2`1<OutputGraphCompanyDailyModelV2>"
            }
          }
        }
      }
    },
    "/api/v2/interactions": {
      "get": {
        "tags": [
          "Interactions"
        ],
        "summary": "Fetch email and meeting interactions by associated email, domain, date ranges, and/or interaction type.",
        "description": "How to use this API:\n---------------\n- You can specify whether you just want to fetch email interactions, meeting interactions, or both. By default, it will fetch both.\n- Make sure to specify either the email or domain parameter.\n- **NOTE**: This API should mainly be used to fetch the latest interactions and should not be used to page through all interactions. **(if you need to fetch all interactions, please use the Emails/Meetings APIs)**\n            \nResponse Formats:\n---------------\n- Email Interaction\n```\n{\n    \"id\": \"{ID OF THIS EMAIL}\",\n    \"date\": \"{DATE OF THE EMAIL}\",\n    \"type\": \"email\",\n    \"email\": {EMAIL PROPERTIES},\n}\n```\n            \n- Meeting Interaction\n```\n{\n    \"id\": \"{ID OF THIS MEETING}\",\n    \"date\": \"{DATE OF THE MEETING}\",\n    \"type\": \"meeting\",\n    \"meeting\": {MEETING PROPERTIES},\n}\n```\n            \nSubject Tags (Email & Meeting Tagging):\n---------------\n- For teams with the Email & Meeting Tagging feature enabled, the email and meeting objects include two extra fields: `subject_categories` (the Subject Categories that matched the subject line) and `subject_label_words` (the configured Subject Tag Words that were found in the subject line).\n- Teams without the feature do not see these fields at all.\n- Tags are computed when an email or meeting is ingested, so records ingested before the feature was configured will have empty lists.\n- Use the `subject_category` parameter to return only interactions whose Subject Categories include that category. The parameter requires the feature to be enabled; otherwise the request returns an error.",
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "email",
            "description": "The email address to filter interactions by.",
            "type": "string"
          },
          {
            "in": "query",
            "name": "domain",
            "description": "The domain to filter interactions by.",
            "type": "string"
          },
          {
            "in": "query",
            "name": "start_date",
            "description": "The start date range to filter interactions by.",
            "type": "string"
          },
          {
            "in": "query",
            "name": "end_date",
            "description": "The end date range to filter interactions by.",
            "type": "string"
          },
          {
            "in": "query",
            "name": "type",
            "description": "The type of interaction to filter by (email, meeting, or all).",
            "type": "string"
          },
          {
            "in": "query",
            "name": "subject_category",
            "description": "Return only interactions whose Subject Categories include this category, based on your team's\nSubject Line Tagging configuration. Requires the Email & Meeting Tagging feature to be enabled\nfor your team; otherwise the request returns an error.",
            "type": "string"
          },
          {
            "in": "query",
            "name": "take",
            "description": "Number of records to return. Default is 100. Max is 1000.",
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/OutputListModelV2`1<OutputInteractionModelV2>"
            }
          }
        }
      }
    },
    "/api/v2/meetings": {
      "get": {
        "tags": [
          "Meetings"
        ],
        "summary": "Fetch meetings that are associated to an email address or a domain.",
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "email",
            "description": "",
            "type": "string"
          },
          {
            "in": "query",
            "name": "domain",
            "description": "",
            "type": "string"
          },
          {
            "in": "query",
            "name": "take",
            "description": "Number of records to return. Default is 100. Max is 1000.",
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/OutputListModelV2`1<OutputMeetingModelV2>"
            }
          }
        }
      }
    },
    "/api/v2/meetings/delta": {
      "get": {
        "tags": [
          "Meetings"
        ],
        "summary": "Fetch all meetings that have been ingested from the beginning of time or from now.",
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "start_now",
            "description": "Should results be returned starting from now or in the beginning of time. Default is false.",
            "type": "boolean"
          },
          {
            "in": "query",
            "name": "order_by",
            "description": "Which direction to order the results by. Default is asc. Options are asc or desc.",
            "type": "string"
          },
          {
            "in": "query",
            "name": "take",
            "description": "Number of records to return. Default is 100. Max is 1000.",
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/OutputListModelV2`1<OutputMeetingModelV2>"
            }
          }
        }
      }
    },
    "/.well-known/oauth-protected-resource": {
      "get": {
        "tags": [
          "OAuthMetadata"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/.well-known/oauth-protected-resource/api/mcp": {
      "get": {
        "tags": [
          "OAuthMetadata"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/.well-known/openai-apps-challenge": {
      "get": {
        "tags": [
          "OAuthMetadata"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v2/parse/email/contact/json": {
      "post": {
        "tags": [
          "Parse"
        ],
        "summary": "Email signature parser JSON (stateless)",
        "description": "Capture the email signature details for the sender of an email. This also will detect inline phone numbers such as \"My phone number is 777-333-4444\".\n            \nOnly use JSON as a last resort\n--------------\nUse MIME or MSG endpoints if you have either of those formats available to you. MIME and MSG just require passing the contents. JSON requires mapping the fields properly and this is where most people have issues with the API.\n            \nStateless\n---------------\n            \nThis is a stateless API meaning we don't store any of the data within the email. We store some statistics about the call but none of the email content will be store. \n\nMapping Tips\n--------------\nIf you don't have those as options then you can build the JSON structure representing your email and pass it.\n            \nYou must set the **from_address** field for each email, and it must match the signature of the email. We do a lot to try and avoid false matches and this can cause signature match rejections. \n            \nCommon Troubleshooting\n-------------------------\n**Does the from_address match the signature?**\n            \nSigParser is very defensive when attempting to identify a signature to ensure quality data. If the email address in the from_address field doesn't match the email signature then the signature won't be identified.\n            \n**Does the from_name match the signature?**\n            \nWhile from_name isn't required it is required that when it is provided that it not be a different person on the email chain. \n\n**Are you setting htmlbody and plainbody properly?**\n            \nAlmost all email clients will provide you with both the HTML body and the plain text body. You need to use both. Some emails only have HTML, some have plain text and some have both. SigParser will choose which to use, but you should be sure to pass both if available.\n\n**Did you properly escape the JSON strings?**\n\nA common issue is not escaping the JSON strings properly before sending the data to SigParser.",
        "consumes": [
          "application/json-patch+json",
          "application/json",
          "text/json",
          "application/*+json"
        ],
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "in": "body",
            "name": "body",
            "schema": {
              "$ref": "#/definitions/iPaasAPI.Models.Parse.EmailInputModel"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/iPaasAPI.Models.Parse.EmailSignatureV2Model"
            }
          }
        }
      }
    },
    "/api/v2/parse/email/contact/mime": {
      "post": {
        "tags": [
          "Parse"
        ],
        "summary": "Email signature parser MIME/EML (stateless)",
        "description": "Capture the email signature details for the sender of an email. This also will detect inline phone numbers such as \"My phone number is 777-333-4444\".\n\nStateless\n---------------\n            \nThis is a stateless API meaning we don't store any of the data within the email. We store some statistics about the call but none of the email content will be store. \n            \nMessage Body\n-------------\nThe message body should contain the MIME encoded contents only. Do not pass JSON.\n            \n*FYI: EML files are just MIME encoded files.*\n\nA MIME email looks like this:\n            \n```\nMIME-Version: 1.0\nDate: Thu, 9 Sep 2021 15:21:50 -0700\nMessage-ID: <CAL5Lp9VjUOJyab=+3XQ0ymZMLHT4uC8KGRo1GDLrCQjh07oL6Q@mail.gmail.com>\nSubject: Test email\nFrom: Paul Mendoza <pmendoza@sigparser.com>\nTo: Outlook Tester <outlook.tester@salesforceemail.com>\nContent-Type: multipart/alternative; boundary=\"000000000000cd5df405cb976cd0\"\n\n--000000000000cd5df405cb976cd0\nContent-Type: text/plain; charset=\"UTF-8\"\n\nThis is a test email.\n\nThanks\n*Paul Mendoza*, Principal Software Engineer\n\n--000000000000cd5df405cb976cd0\nContent-Type: text/html; charset=\"UTF-8\"\nContent-Transfer-Encoding: quoted-printable\n\n<div dir=3D\"ltr\">This is a test email.=C2=A0<div><br></div><div>Thanks<br c=\nlear=3D\"all\"><div><div dir=3D\"ltr\" class=3D\"gmail_signature\" data-smartmail=\n=3D\"gmail_signature\"><div dir=3D\"ltr\"><div dir=3D\"ltr\"><div dir=3D\"ltr\"><di=\nv dir=3D\"ltr\"><div dir=3D\"ltr\"><div dir=3D\"ltr\"><div dir=3D\"ltr\"><font colo=\nr=3D\"#3d85c6\" face=3D\"tahoma, sans-serif\" style=3D\"font-size:12.8px\"><b>Pau=\nl Mendoza</b></font><font color=3D\"#3d85c6\" face=3D\"tahoma, sans-serif\" sty=\nle=3D\"font-size:12.8px;font-weight:bold\">,=C2=A0</font><font color=3D\"#3d85=\nc6\" face=3D\"tahoma, sans-serif\"><span style=3D\"font-size:12.8px\">Principal =\nSoftware Engineer</span></font></div></div></div></div></div></div></div></=\ndiv></div></div></div>\n\n--000000000000cd5df405cb976cd0--\n\n```",
        "consumes": [
          "multipart/form-data"
        ],
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "in": "formData",
            "name": "mimeFile",
            "type": "file"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/iPaasAPI.Models.Parse.EmailSignatureV2Model"
            }
          }
        }
      }
    },
    "/api/v2/parse/email/contact/msg": {
      "post": {
        "tags": [
          "Parse"
        ],
        "summary": "Email signature parser for MSG (stateless)",
        "description": "Capture the email signature details for the sender of an email. This also will detect inline phone numbers such as \"My phone number is 777-333-4444\". \n\nMSG files are an export format from Microsoft Outlook and Exchange exports in some cases. They are binary, so you can't look at the files, but they should open in Outlook.\n            \nStateless\n---------------\n            \nThis is a stateless API meaning we don't store any of the data within the email. We store some statistics about the call but none of the email content will be store. \n            \nMessage Body\n-------------\nThe message body should contain the MSG encoded contents only. Do not pass JSON.",
        "consumes": [
          "multipart/form-data"
        ],
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "in": "formData",
            "name": "msgFile",
            "type": "file"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/iPaasAPI.Models.Parse.EmailSignatureV2Model"
            }
          }
        }
      }
    },
    "/api/v2/parse/email/message/json": {
      "post": {
        "tags": [
          "Parse"
        ],
        "summary": "Split email JSON (stateless)",
        "description": "Parse the email into sections. Also, useful if you need to get an email with the email signature stripped off. \n            \nOnly use JSON as a last resort\n--------------\nUse MIME or MSG endpoints if you have either of those formats available to you. MIME and MSG just require passing the contents. JSON requires mapping the fields properly and this is where most people have issues with the API.\n            \nStateless\n---------------\n            \nThis is a stateless API meaning we don't store any of the data within the email. We store some statistics about the call but none of the email content will be store. \n\nMapping Tips\n--------------\nIf you don't have those as options then you can build the JSON structure representing your email and pass it.\n            \nYou must set the **from_address** field for each email, and it must match the signature of the email. We do a lot to try and avoid false matches and this can cause signature match rejections. \n            \nCommon Troubleshooting\n-------------------------\n**Does the from_address match the signature?**\n            \nSigParser is very defensive when attempting to identify a signature to ensure quality data. If the email address in the from_address field doesn't match the email signature then the signature won't be identified.\n            \n**Does the from_name match the signature?**\n            \nWhile from_name isn't required it is required that when it is provided that it not be a different person on the email chain. \n\n**Are you setting htmlbody and plainbody properly?**\n            \nAlmost all email clients will provide you with both the HTML body and the plain text body. You need to use both. Some emails only have HTML, some have plain text and some have both. SigParser will choose which to use, but you should be sure to pass both if available.\n\n**Did you properly escape the JSON strings?**\n\nA common issue is not escaping the JSON strings properly before sending the data to SigParser.",
        "consumes": [
          "application/json-patch+json",
          "application/json",
          "text/json",
          "application/*+json"
        ],
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "in": "body",
            "name": "body",
            "schema": {
              "$ref": "#/definitions/iPaasAPI.Models.Parse.EmailInputModel"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/iPaasAPI.Models.Parse.CleanedBodyOutput"
            }
          }
        }
      }
    },
    "/api/v2/parse/email/message/mime": {
      "post": {
        "tags": [
          "Parse"
        ],
        "summary": "Split email EML/MIME (stateless)",
        "description": "Parse the email into sections. Useful if you need to get an email with the email signature stripped off.\n\nMessage Body\n-------------\nThe message body form field should contain the MIME encoded contents only. Do not pass JSON.\n            \n*FYI: EML files are just MIME encoded files.*\n\nA MIME email looks like this:\n            \n```\nMIME-Version: 1.0\nDate: Thu, 9 Sep 2021 15:21:50 -0700\nMessage-ID: <CAL5Lp9VjUOJyab=+3XQ0ymZMLHT4uC8KGRo1GDLrCQjh07oL6Q@mail.gmail.com>\nSubject: Test email\nFrom: Paul Mendoza <pmendoza@sigparser.com>\nTo: Outlook Tester <outlook.tester@salesforceemail.com>\nContent-Type: multipart/alternative; boundary=\"000000000000cd5df405cb976cd0\"\n\n--000000000000cd5df405cb976cd0\nContent-Type: text/plain; charset=\"UTF-8\"\n\nThis is a test email.\n\nThanks\n*Paul Mendoza*, Principal Software Engineer\n\n--000000000000cd5df405cb976cd0\nContent-Type: text/html; charset=\"UTF-8\"\nContent-Transfer-Encoding: quoted-printable\n\n<div dir=3D\"ltr\">This is a test email.=C2=A0<div><br></div><div>Thanks<br c=\nlear=3D\"all\"><div><div dir=3D\"ltr\" class=3D\"gmail_signature\" data-smartmail=\n=3D\"gmail_signature\"><div dir=3D\"ltr\"><div dir=3D\"ltr\"><div dir=3D\"ltr\"><di=\nv dir=3D\"ltr\"><div dir=3D\"ltr\"><div dir=3D\"ltr\"><div dir=3D\"ltr\"><font colo=\nr=3D\"#3d85c6\" face=3D\"tahoma, sans-serif\" style=3D\"font-size:12.8px\"><b>Pau=\nl Mendoza</b></font><font color=3D\"#3d85c6\" face=3D\"tahoma, sans-serif\" sty=\nle=3D\"font-size:12.8px;font-weight:bold\">,=C2=A0</font><font color=3D\"#3d85=\nc6\" face=3D\"tahoma, sans-serif\"><span style=3D\"font-size:12.8px\">Principal =\nSoftware Engineer</span></font></div></div></div></div></div></div></div></=\ndiv></div></div></div>\n\n--000000000000cd5df405cb976cd0--\n```",
        "consumes": [
          "multipart/form-data"
        ],
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "in": "formData",
            "name": "mimeFile",
            "type": "file"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/iPaasAPI.Models.Parse.CleanedBodyOutput"
            }
          }
        }
      }
    },
    "/api/v2/parse/email/message/msg": {
      "post": {
        "tags": [
          "Parse"
        ],
        "summary": "Split email MSG (stateless)",
        "description": "Parse the email into sections. Useful if you need to get an email with the email signature stripped off.\n            \nMSG files are an export format from Microsoft Outlook and Exchange exports in some cases. They are binary, so you can't look at the files, but they should open in Outlook.\n            \nStateless\n---------------\n            \nThis is a stateless API meaning we don't store any of the data within the email. We store some statistics about the call but none of the email content will be store. \n            \nMessage Body\n-------------\nThe message body should contain the MSG encoded contents only. Do not pass JSON.",
        "consumes": [
          "multipart/form-data"
        ],
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "in": "formData",
            "name": "msgFile",
            "type": "file"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/iPaasAPI.Models.Parse.CleanedBodyOutput"
            }
          }
        }
      }
    },
    "/api/v2/parse/feedback": {
      "post": {
        "tags": [
          "Parse"
        ],
        "summary": "Report parsing feedback",
        "description": "Submit feedback on a parsing issue to SigParser's algorithm development team. This will be added to our queue of emails to investigate.\n            \nThe email will be stored by SigParser and the development/support teams will be able to see and investigate the issue. You can pass the SIGNATURE only as the emailcontents if you need to.\n            \nParameters\n--------------------\nThese parameters must all be supplied as FORM values.\n            \n- **emailcontents** - File upload of the JSON, MIME or MSG version of the email. This should be what you submitted to one of the APIs.\n- **filetype** - Either MSG, MIME, JSON or SIGNATURE. This should be the format of the file you're uploading.\n- **command** - Either \"Contact\" for the signature parsing APIs or \"Message\" for the message splitting APIs.\n- **description** - Details about the parsing error. For example, what was the bad value and what did the user expect?\n- **feedback_email** - What email address should the feedback about this parsing error be sent to?",
        "consumes": [
          "multipart/form-data"
        ],
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "in": "formData",
            "name": "emailcontents",
            "description": "File contents for MSG or EML file.",
            "type": "file"
          },
          {
            "in": "formData",
            "name": "filetype",
            "description": "Either MSG, MIME, JSON or SIGNATURE. This should be the format of the file you're uploading.",
            "type": "string",
            "format": "text"
          },
          {
            "in": "formData",
            "name": "command",
            "description": "Either \"Contact\" for the signature parsing APIs or \"Message\" for the message splitting APIs.",
            "type": "string",
            "format": "text"
          },
          {
            "in": "formData",
            "name": "description",
            "description": "Details about the parsing error. For example, what was the bad value and what did the user expect?",
            "type": "string",
            "format": "text"
          },
          {
            "in": "formData",
            "name": "feedback_email",
            "description": "What email address should feedback about this parsing error be sent to?",
            "type": "string",
            "format": "text"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/iPaasAPI.Models.Parse.FeedbackResponseModel"
            }
          }
        }
      }
    },
    "/api/v2/user/users": {
      "get": {
        "tags": [
          "User"
        ],
        "summary": "Fetch data about all users in your team.",
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/DragnetTech.EventProcessors.iPAAS.V2.Users.OutputUserModelV2"
              }
            }
          }
        }
      }
    },
    "/api/v2/user/me": {
      "get": {
        "tags": [
          "User"
        ],
        "summary": "Fetch user information [ Username , EnterpriseId ]",
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/iPaasAPI.Models.User.ReturnMe"
            }
          }
        }
      }
    },
    "/api/v2/user/invalidate": {
      "delete": {
        "tags": [
          "User"
        ],
        "summary": "Revoke the data access API key for this request. Doesn't revoke the email parsing API key. OAuth provider's should try to call this when disconnecting a connection if possible.",
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/iPaasAPI.Models.User.ReturnMe"
            }
          }
        }
      }
    },
    "/.well-known/mcp": {
      "get": {
        "tags": [
          "WellKnownDiscovery"
        ],
        "summary": "SEP-1960: lightweight manifest of the server's endpoint(s) and authentication, so a client learns\nwhere to connect and how to authenticate before the full MCP initialization handshake.",
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/.well-known/mcp/server-card.json": {
      "get": {
        "tags": [
          "WellKnownDiscovery"
        ],
        "summary": "SEP-1649: rich server card. Includes the full tool list (names, descriptions, annotations, and input\nschemas) pulled straight from the registered tools, so it mirrors what tools/list returns.",
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/.well-known/api-catalog": {
      "get": {
        "tags": [
          "WellKnownDiscovery"
        ],
        "summary": "RFC 9727 API catalog (Linkset, application/linkset+json): a top-level index tying together the\nOpenAPI/Swagger definition and the MCP discovery documents under this origin.",
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "definitions": {
    "DragnetTech.EventProcessors.iPAAS.V2.Companies.OutputCompanyDeltaFieldsModelV2": {
      "type": "object",
      "properties": {
        "record_id": {
          "format": "uuid",
          "description": "Internal ID for the company in SigParser that the field update occurred on.",
          "type": "string"
        },
        "domain": {
          "description": "The domain of the company that the field update occurred on.",
          "type": "string",
          "example": "updatedcompany.com"
        },
        "field_name": {
          "description": "The name of the field that was updated.",
          "type": "string",
          "example": "company_name"
        },
        "date_updated": {
          "format": "date-time",
          "description": "The date and time the field was updated.",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "previous_value": {
          "description": "The previous value of the field before the update.",
          "type": "string",
          "example": "OldCompanyName"
        },
        "new_value": {
          "description": "The new value of the field after the update.",
          "type": "string",
          "example": "NewCompanyName"
        },
        "update_type": {
          "description": "The type of update that was made to the field.",
          "type": "string",
          "example": "'user_input' / 'field_rule' / etc."
        },
        "quality_score": {
          "format": "int32",
          "description": "The quality score of the field update.\nThe higher the score, the more likely the update will occur.",
          "type": "integer",
          "example": 90
        },
        "enriched_by": {
          "description": "If this update was made through enrichment,\nthis field will contain the type of enrichment done.",
          "type": "string",
          "example": "SigParser AI, SigParser Regex, etc."
        }
      },
      "additionalProperties": false
    },
    "DragnetTech.EventProcessors.iPAAS.V2.Companies.OutputCompanyExampleModelV2": {
      "type": "object",
      "properties": {
        "record_created_date": {
          "format": "date-time",
          "description": "When the company was created in SigParser.",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "record_id": {
          "format": "uuid",
          "description": "Internal ID for the company in SigParser.",
          "type": "string",
          "example": "a3b8c4d1-92e7-4f60-8c5a-7d2e91b4f3a8"
        },
        "record_last_modified": {
          "format": "date-time",
          "description": "Numeric value representing when this record was last modified. \nThis has precision down to the millisecond, so you shouldn't convert it to a date with less precision.",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "record_last_modified_details": {
          "format": "date-time",
          "description": "Numeric value representing when the details of this record were last modified.\nThis has precision down to the millisecond, so you shouldn't convert it to a date with less precision.",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "record_status": {
          "description": "Valid, Other, Coworker, Private, Ignore.\n\nOther possible values may be added later.",
          "type": "string",
          "example": "Valid"
        },
        "company_employees_range": {
          "description": "Company's publicly stated range of employees.",
          "type": "string",
          "example": "1000-5000"
        },
        "company_founded": {
          "format": "int32",
          "description": "The year this company was founded",
          "type": "integer",
          "example": 2001
        },
        "company_linkedin": {
          "description": "Url for company's LinkedIn profile page.",
          "type": "string",
          "example": "https://www.linkedin/company/examplecompay"
        },
        "company_name": {
          "description": "The best name SigParser has found or that has been set by a user.",
          "type": "string",
          "example": "Dragnet Technologies"
        },
        "company_phone": {
          "description": "Primary phone number provided for this company",
          "type": "string",
          "example": "212-456-7890"
        },
        "company_website": {
          "description": "Company Website Url.",
          "type": "string",
          "example": "https://www.example.io"
        },
        "contacts_count": {
          "format": "int32",
          "description": "Number of Valid or Other contacts on this account. Coworker, Private and Ignore contacts are ignored when counting.",
          "type": "integer",
          "example": 321
        },
        "email_domain": {
          "description": "The email domain name for this company. \nThis is a primary key for the table so if the company has multiple domain names then there will be a Company record for each domain.",
          "type": "string",
          "example": "dragnettech.com"
        },
        "email_domain_country": {
          "description": "The country code for the email domain.",
          "type": "string",
          "example": "US"
        },
        "email_domain_type": {
          "description": "The type of email domain.",
          "type": "string",
          "example": "Public / Company / Government"
        },
        "web_domain_type": {
          "description": "The type of the company's website domain — the website-side sibling of `email_domain_type`,\nwith the same value set.",
          "type": "string",
          "example": "Company / Public / Government"
        },
        "web_host_type": {
          "description": "When the company's website is not the company's own site, the category of what it points at, such as\nWebsite Builder, Domain Provider, Social Profile, Email Marketing, Link Shortener, Government, Sports League, Shared Application or Business Network.\nSigParser curates the categories, so the set can grow. Empty for a normal company website. Read-only.",
          "type": "string",
          "example": "Social Profile"
        },
        "industry_primary": {
          "description": "Legacy industry value. Kept for backwards compatibility — new integrations should use `industry`.",
          "type": "string",
          "example": "Accounting"
        },
        "industry_name": {
          "description": "Legacy field. The specific industry name of the company (from industry catalog). New integrations should use `industry`.",
          "type": "string",
          "example": "Software Development"
        },
        "industry_group": {
          "description": "Legacy field. The industry group of the company (from industry catalog). New integrations should use `industry_top_level`.",
          "type": "string",
          "example": "Technology"
        },
        "industry": {
          "description": "The company's industry (LinkedIn taxonomy). Canonical writable field.\nSetting this on upsert auto-populates `industry_id`, `industry_top_level`, and `industry_all_levels`.",
          "type": "string",
          "example": "Software Development"
        },
        "industry_id": {
          "format": "int32",
          "description": "LinkedIn industry ID. Read-only — derived from `industry`.",
          "type": "integer",
          "example": 4
        },
        "industry_top_level": {
          "description": "Top-level industry category. Read-only — derived from `industry`.",
          "type": "string",
          "example": "Technology, Information and Media"
        },
        "industry_all_levels": {
          "description": "Full industry hierarchy as an ordered array, top-level first, leaf last. Read-only — derived from `industry`.",
          "type": "array",
          "items": {
            "type": "string"
          },
          "example": [
            "Technology, Information and Media",
            "Technology, Information and Internet",
            "Software Development"
          ]
        },
        "location_count": {
          "format": "int32",
          "description": "Number of locations for this company.",
          "type": "integer",
          "example": 1
        },
        "location_street": {
          "description": "Address captured from an email signature.",
          "type": "string",
          "example": "888 Grand Ave"
        },
        "location_line_2": {
          "description": "Contact's Address Line 2 derived from latest email signature, file import, or user update.",
          "type": "string",
          "example": "Ste 100"
        },
        "location_city": {
          "description": "Location captured from one of the following sources in this order: Email signature, phone number, website domain. Other sources may be added later if available.",
          "type": "string",
          "example": "San Diego"
        },
        "location_state": {
          "description": "Location captured from one of the following sources in this order: Email signature, phone number, website domain. Other sources may be added later if available.",
          "type": "string",
          "example": "California"
        },
        "location_state_code": {
          "description": "Location captured from one of the following sources in this order: Email signature, phone number, website domain. Other sources may be added later if available.",
          "type": "string",
          "example": "CA"
        },
        "location_postalcode": {
          "description": "Postal code for the location captured from one of the following sources in this order: Email signature, phone number, website domain. Other sources may be added later if available.",
          "type": "string",
          "example": "92556"
        },
        "location_country": {
          "description": "Location captured from one of the following sources in this order: Email signature, phone number, website domain. Other sources may be added later if available.",
          "type": "string",
          "example": "United States"
        },
        "location_country_code_2": {
          "description": "Location captured from one of the following sources in this order: Email signature, phone number, website domain. Other sources may be added later if available.",
          "type": "string",
          "example": "US"
        },
        "location_country_code_3": {
          "description": "Location captured from one of the following sources in this order: Email signature, phone number, website domain. Other sources may be added later if available.",
          "type": "string",
          "example": "USA"
        },
        "location_region": {
          "description": "Region of the location.",
          "type": "string",
          "example": "San Diego County"
        },
        "location_continent": {
          "description": "Continent of the location.",
          "type": "string",
          "example": "North America"
        },
        "location_latitude": {
          "format": "double",
          "description": "Geocode from the location.",
          "type": "number",
          "example": -34.23423
        },
        "location_longitude": {
          "format": "double",
          "description": "Geocode from the location.",
          "type": "number",
          "example": 33.444233
        },
        "interactions_emails_from": {
          "format": "int32",
          "description": "Total emails sent from contacts at this company to coworkers.",
          "type": "integer"
        },
        "interactions_emails_from_latest": {
          "format": "date-time",
          "description": "The date of the most recent email sent from contacts at this company to coworkers.",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "interactions_emails_included": {
          "format": "int32",
          "description": "Total emails sent to coworkers that included contacts at this company.",
          "type": "integer"
        },
        "interactions_emails_included_latest": {
          "format": "date-time",
          "description": "The date of the most recent email sent to coworkers that included contacts at this company.",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "interactions_emails_to": {
          "format": "int32",
          "description": "Total emails sent from coworkers to contacts at this company.",
          "type": "integer"
        },
        "interactions_emails_to_latest": {
          "format": "date-time",
          "description": "The date of the most recent email sent from coworkers to contacts at this company.",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "interactions_meetings_completed": {
          "format": "int32",
          "description": "Number of past meetings with this company's employees.",
          "type": "integer"
        },
        "interactions_meetings_latest": {
          "format": "date-time",
          "description": "The date of the most recent meeting with this company.",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "interactions_meetings_next": {
          "format": "date-time",
          "description": "The date of the next meeting with this company.",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "interactions_meetings_upcoming": {
          "format": "int32",
          "description": "Number of upcoming meetings with this company's employees.",
          "type": "integer"
        },
        "interactions_total": {
          "format": "int32",
          "description": "Total interactions with this company.",
          "type": "integer"
        },
        "interactions_total_first": {
          "format": "date-time",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "interactions_total_latest": {
          "format": "date-time",
          "description": "Last time there was an email or a meeting with this company.",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "relationship_primary": {
          "description": "The email address of the Coworker with either the Most Active, First, Latest or Strongest relationship.\nHow the value is determined is based the settings in your environment.",
          "type": "string",
          "example": "james@mycompany.com"
        },
        "relationship_primary_name": {
          "description": "Name of the primary relationship Coworker for this company.",
          "type": "string",
          "example": "Alice Brown"
        },
        "relationship_strongest": {
          "description": "Email address of someone in your company with the best relationship with this account.",
          "type": "string",
          "example": "john@mycompany.com"
        },
        "relationship_strongest_name": {
          "description": "Name of the Coworker with the strongest relationship with this company.",
          "type": "string",
          "example": "John Smith"
        },
        "relationship_most_active": {
          "description": "The internal contact who has the most active relationship with this company.",
          "type": "string",
          "example": "john@mycompany.com"
        },
        "relationship_most_active_name": {
          "description": "Name of the Coworker with the most interactions with this company.",
          "type": "string",
          "example": "Mary Jones"
        },
        "relationship_first": {
          "description": "The internal contact who first established communications with this company.",
          "type": "string",
          "example": "john@mycompany.com"
        },
        "relationship_first_name": {
          "description": "Name of the Coworker with the first interaction with this company.",
          "type": "string",
          "example": "Mark Johnson"
        },
        "relationship_latest": {
          "description": "The internal contact who has most recently interacted with this company.",
          "type": "string",
          "example": "john@mycompany.com"
        },
        "relationship_latest_name": {
          "description": "Name of the Coworker with the latest interaction with this company.",
          "type": "string",
          "example": "Steve Wilson"
        },
        "relationships_coworkers_count": {
          "format": "int32",
          "description": "The number of internal contacts who have an established relationship with a contact at this company.",
          "type": "integer"
        },
        "relationships_coworkers_emailaddresses": {
          "description": "Email addresses of the top 5 Coworkers (internal) to your company who know this contact the best based on interactions.",
          "type": "array",
          "items": {
            "type": "string"
          },
          "example": [
            "john@mycompany.com",
            "mary@mycompany.com"
          ]
        },
        "relationships_coworkers_names": {
          "description": "Names of the top Coworkers (internal) who have a relationship with this company.",
          "type": "array",
          "items": {
            "type": "string"
          },
          "example": [
            "John Smith",
            "Mary Jones"
          ]
        },
        "relationships_company_count": {
          "format": "int32",
          "description": "Total number of relationships with this company.",
          "type": "integer"
        },
        "relationships_company_emailaddresses": {
          "description": "Email addresses of the top 5 contacts who work at the same company who have been on emails and meetings.",
          "type": "array",
          "items": {
            "type": "string"
          },
          "example": [
            "mark@domain.com"
          ]
        },
        "relationships_company_names": {
          "description": "Names of the top contacts at this company who have a relationship with this company.",
          "type": "array",
          "items": {
            "type": "string"
          },
          "example": [
            "Mark Johnson"
          ]
        },
        "relationships_other_count": {
          "format": "int32",
          "description": "A count of relationships with this company that are not internal contacts and not within the same company.",
          "type": "integer"
        },
        "relationships_other_emailaddresses": {
          "description": "Email addresses of the top 5 people who have been on emails with this contact from other companies.",
          "type": "array",
          "items": {
            "type": "string"
          },
          "example": [
            "steve@another-company.com"
          ]
        },
        "relationships_other_names": {
          "description": "Names of people that are not a Coworker or Contact at the Company that have a relationship with this company.",
          "type": "array",
          "items": {
            "type": "string"
          },
          "example": [
            "Steve Wilson"
          ]
        },
        "crm_company_id": {
          "description": "ID of the CRM account/company.",
          "type": "string",
          "example": "0011234567890ABC"
        },
        "crm_company_name": {
          "description": "Name of the company in the CRM system.",
          "type": "string",
          "example": "Acme Corporation"
        },
        "crm_company_link": {
          "description": "URL link to the CRM company/account that can be used in a browser.",
          "type": "string",
          "example": "https://example.salesforce.com/0011234567890ABC"
        },
        "custom_text_field": {
          "description": "Custom text field.",
          "type": "string",
          "example": "Text Value"
        },
        "custom_number_field": {
          "format": "int32",
          "description": "Custom number field.",
          "type": "integer",
          "example": 123
        },
        "custom_date_field": {
          "format": "date-time",
          "description": "Custom date field.",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "custom_boolean_field": {
          "description": "Custom boolean field.",
          "type": "boolean",
          "example": true
        },
        "custom_single_select_field": {
          "description": "Custom single-select field.",
          "type": "array",
          "items": {
            "type": "string"
          },
          "example": [
            "Option 1"
          ]
        },
        "custom_multi_select_field": {
          "description": "Custom multi-select field.",
          "type": "array",
          "items": {
            "type": "string"
          },
          "example": [
            "Option 1",
            "Option 2"
          ]
        }
      },
      "additionalProperties": false
    },
    "DragnetTech.EventProcessors.iPAAS.V2.Companies.OutputCompanyFieldModelV2": {
      "type": "object",
      "properties": {
        "id": {
          "description": "The ID for the field (as referenced in the APIs)",
          "type": "string",
          "example": "record_id"
        },
        "name": {
          "description": "The name of the field",
          "type": "string",
          "example": "SigParser Company ID"
        },
        "type": {
          "description": "The type of the field (string, number, date, etc.)",
          "type": "string",
          "example": "text"
        },
        "description": {
          "description": "The description of the field (this is what's shown in the tooltips on SigParser)",
          "type": "string",
          "example": "A SigParser generated ID value that is unique for each Company record"
        },
        "can_update": {
          "description": "Whether the field can be updated or not",
          "type": "boolean",
          "example": false
        },
        "can_group_by": {
          "description": "Whether this field can be used as the field parameter in the search/groupby endpoint",
          "type": "boolean",
          "example": false
        },
        "options": {
          "description": "If this is a single or multi-select field, this will contain the possible options for the field",
          "type": "array",
          "items": {
            "type": "string"
          },
          "example": [
            "Option 1",
            "Option 2",
            "Option 3"
          ]
        },
        "is_custom": {
          "description": "Whether this is a user-defined custom field. Custom field values are included in the\ncompany API responses; standard fields listed here that are not part of the company\nresponse model are only available for filtering and grouping.",
          "type": "boolean",
          "example": false
        },
        "aggregation_mode": {
          "description": "For aggregated fields: the aggregation mode (count, sum, min, max, average, first, latest). Null for non-aggregated fields.",
          "type": "string"
        },
        "aggregation_target_datatype": {
          "description": "For aggregated fields: the datatype of the aggregated value (number, date, text, boolean).",
          "type": "string"
        },
        "aggregation_sources": {
          "description": "For aggregated fields: per-source aggregation config (event_source_key, target_dimension_name).",
          "type": "array",
          "items": {
            "$ref": "#/definitions/DragnetTech.Shared.Tables.Team.aggregation_source"
          }
        }
      },
      "additionalProperties": false
    },
    "DragnetTech.EventProcessors.iPAAS.V2.Companies.OutputCompanyLocationModelV2": {
      "description": "Details about a location associated with a company in SigParser.",
      "type": "object",
      "properties": {
        "location_id": {
          "format": "uuid",
          "description": "Internal ID for the location in SigParser.",
          "type": "string",
          "example": "3f2504e0-4f89-11d3-9a0c-0305e82c3301"
        },
        "location_street": {
          "description": "Street address of the company location.",
          "type": "string",
          "example": "888 Grand Ave"
        },
        "location_line_2": {
          "description": "Second line of the company location address.",
          "type": "string",
          "example": "Ste 100"
        },
        "location_city": {
          "description": "City of the company location.",
          "type": "string",
          "example": "San Diego"
        },
        "location_state": {
          "description": "State of the company location.",
          "type": "string",
          "example": "California"
        },
        "location_state_code": {
          "description": "State code of the company location.",
          "type": "string",
          "example": "CA"
        },
        "location_postalcode": {
          "description": "Postal code of the company location.",
          "type": "string",
          "example": "92101"
        },
        "location_country": {
          "description": "Country of the company location.",
          "type": "string",
          "example": "United States"
        },
        "location_country_code_2": {
          "description": "Two-letter country code of the company location.",
          "type": "string",
          "example": "US"
        },
        "location_country_code_3": {
          "description": "Three-letter country code of the company location.",
          "type": "string",
          "example": "USA"
        },
        "location_continent": {
          "description": "Continent of the company location.",
          "type": "string",
          "example": "North America"
        },
        "location_region": {
          "description": "Region of the company location.",
          "type": "string",
          "example": "San Diego County"
        },
        "location_latitude": {
          "format": "double",
          "description": "Latitude of the company location.",
          "type": "number",
          "example": 32.7157
        },
        "location_longitude": {
          "format": "double",
          "description": "Longitude of the company location.",
          "type": "number",
          "example": -117.1611
        },
        "is_primary_location": {
          "description": "Whether this is the primary location for the company.",
          "type": "boolean",
          "example": true
        },
        "record_created_date": {
          "format": "date-time",
          "description": "When this location record was created in SigParser.",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "record_last_modified": {
          "format": "date-time",
          "description": "When this location record was last modified in SigParser.",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        }
      },
      "additionalProperties": false
    },
    "DragnetTech.EventProcessors.iPAAS.V2.Companies.OutputCompanyMonthlyStatisticsModelV2": {
      "type": "object",
      "properties": {
        "domain": {
          "description": "The domain of the company.",
          "type": "string",
          "example": "example.com"
        },
        "month": {
          "format": "date-time",
          "description": "The month for these statistics (first day of the month).",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "emails_from": {
          "format": "int32",
          "description": "Number of emails sent from contacts at this company to coworkers in this month.",
          "type": "integer"
        },
        "emails_to": {
          "format": "int32",
          "description": "Number of emails sent to contacts at this company from coworkers in this month.",
          "type": "integer"
        },
        "emails_included": {
          "format": "int32",
          "description": "Number of emails where contacts at this company were included in this month.",
          "type": "integer"
        },
        "meetings_past": {
          "format": "int32",
          "description": "Number of past meetings with contacts at this company in this month.",
          "type": "integer"
        },
        "meetings_upcoming": {
          "format": "int32",
          "description": "Number of upcoming meetings with contacts at this company scheduled in this month.",
          "type": "integer"
        }
      },
      "additionalProperties": false
    },
    "DragnetTech.EventProcessors.iPAAS.V2.Contacts.OutputContactDeltaFieldsModelV2": {
      "type": "object",
      "properties": {
        "record_id": {
          "format": "uuid",
          "description": "Internal ID for the contact in SigParser that the field update occurred on.",
          "type": "string"
        },
        "email": {
          "description": "The email address of the contact that the field update occurred on.",
          "type": "string",
          "example": "updated.contact@yourcompany.com"
        },
        "field_name": {
          "description": "The name of the field that was updated.",
          "type": "string",
          "example": "first_name"
        },
        "date_updated": {
          "format": "date-time",
          "description": "The date and time the field was updated.",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "previous_value": {
          "description": "The previous value of the field before the update.",
          "type": "string",
          "example": "OldFirstName"
        },
        "new_value": {
          "description": "The new value of the field after the update.",
          "type": "string",
          "example": "NewFirstName"
        },
        "update_type": {
          "description": "The type of update that was made to the field.",
          "type": "string",
          "example": "'user_input' / 'field_rule' / etc."
        },
        "quality_score": {
          "format": "int32",
          "description": "The quality score of the field update.\nThe higher the score, the more likely the update will occur.",
          "type": "integer",
          "example": 90
        },
        "enriched_by": {
          "description": "If this update was made through enrichment,\nthis field will contain the type of enrichment done.",
          "type": "string",
          "example": "SigParser AI, SigParser Regex, etc."
        }
      },
      "additionalProperties": false
    },
    "DragnetTech.EventProcessors.iPAAS.V2.Contacts.OutputContactEnrichEmailModelV2": {
      "type": "object",
      "properties": {
        "email_validation_status": {
          "description": "The validation status of the email address indicating whether it is Valid, Invalid, or Catch-all.",
          "type": "string",
          "example": "Valid"
        },
        "email_validation_sub_status": {
          "description": "Additional sub-status information providing more details about the email validation result.",
          "type": "string",
          "example": "Validation successful for email address"
        }
      },
      "additionalProperties": false
    },
    "DragnetTech.EventProcessors.iPAAS.V2.Contacts.OutputContactEnrichJobModelV2": {
      "type": "object",
      "properties": {
        "match_status": {
          "description": "The match status indicating whether a LinkedIn profile was found and matched for the contact.",
          "type": "string",
          "example": "Auto Approved"
        },
        "skipped": {
          "description": "Indicates whether the enrichment was skipped because the contact was already enriched.",
          "type": "boolean",
          "example": true
        },
        "skip_reason": {
          "description": "The reason why the enrichment was skipped, if applicable.",
          "type": "string",
          "example": "Record has already been enriched."
        }
      },
      "additionalProperties": false
    },
    "DragnetTech.EventProcessors.iPAAS.V2.Contacts.OutputContactExampleModelV2": {
      "type": "object",
      "properties": {
        "record_created_date": {
          "format": "date-time",
          "description": "When the contact was created in SigParser.",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "record_id": {
          "format": "uuid",
          "description": "Internal ID for the contact in SigParser.",
          "type": "string",
          "example": "f1e25cb5-6d27-4f21-9b2d-31b6caa46f7e"
        },
        "record_last_modified_all": {
          "format": "date-time",
          "description": "Last time anything on the contact was modified.",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "record_last_modified_details": {
          "format": "date-time",
          "description": "Last time the contact details were modified. This is a more specific date than lastmodified.",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "record_status": {
          "description": "Status for the contact. Valid (default), Other, Private, Ignore, Coworker.",
          "type": "string",
          "example": "Valid"
        },
        "email_address": {
          "description": "Email address for the contact. All email addresses are stored lowercased. This is the primary key for a contact. This will always be lowercase. Be sure to store it in your system as lowercase to match against SigParser.",
          "type": "string",
          "example": "person@domain.com"
        },
        "email_address_type": {
          "description": "Type of the local part of the email address.",
          "type": "string",
          "example": "Person"
        },
        "email_address_domain": {
          "description": "Domain name for the email address.",
          "type": "string",
          "example": "domain.com"
        },
        "email_address_domain_country": {
          "description": "Country of the domain name extracted from the email address.",
          "type": "string",
          "example": "United States"
        },
        "email_address_domain_type": {
          "description": "Type of the domain name extracted from the email address.",
          "type": "string",
          "example": "Public"
        },
        "email_includes_unsubscribe": {
          "description": "Is this contact likely not a real human. This is detected using SigParser's pattern matching. \nYou should also check the emailstatus column if your subscription plan supports that feature.",
          "type": "boolean"
        },
        "email_signature": {
          "description": "The email signature",
          "type": "string",
          "example": "John Smith | VP of Operations | Example Co. | +1 989-333-4333"
        },
        "email_display_name": {
          "description": "Display name of the Contact in the latest email message.",
          "type": "string",
          "example": "John Smith"
        },
        "job_title": {
          "description": "Job title for contact.",
          "type": "string",
          "example": "VP of Operations"
        },
        "job_level": {
          "description": "Indicates the seniority or position of the contact within the organization.",
          "type": "string",
          "example": "Director"
        },
        "job_function": {
          "description": "Indicates the primary area of responsibility or expertise of the contact within the organization.",
          "type": "string",
          "example": "Engineering & Technology Development"
        },
        "name_first": {
          "description": "First name for the contact.",
          "type": "string",
          "example": "John"
        },
        "name_full": {
          "description": "Full name for the contact.",
          "type": "string",
          "example": "Dr. John Michael Smith Jr."
        },
        "name_last": {
          "description": "Last name for the contact.",
          "type": "string",
          "example": "Smith"
        },
        "name_middle": {
          "description": "Middle name for the contact.",
          "type": "string",
          "example": "Michael"
        },
        "name_prefix": {
          "description": "Prefix for the contact.",
          "type": "string",
          "example": "Dr."
        },
        "name_suffix": {
          "description": "Suffix for the contact.",
          "type": "string",
          "example": "Jr."
        },
        "phone_direct": {
          "description": "Any other phone number SigParser may have detected but couldn't categorize.",
          "type": "string",
          "example": "+1 989-333-4334"
        },
        "phone_fax": {
          "description": "Fax number",
          "type": "string",
          "example": "+1 989-333-4334"
        },
        "phone_home": {
          "description": "Phone number SigParser thinks is the best home phone number for the contact. This is rarely set.",
          "type": "string",
          "example": "+1 989-333-4333"
        },
        "phone_mobile": {
          "description": "Phone number SigParser thinks is the best mobile phone number for the contact.",
          "type": "string",
          "example": "+1 989-333-4222"
        },
        "phone_work": {
          "description": "Phone number SigParser thinks is the best work phone number for the contact.",
          "type": "string",
          "example": "+1 989-333-4333"
        },
        "profile_linkedin_url": {
          "description": "URL for the contact's LinkedIn profile.",
          "type": "string",
          "example": "https://www.linkedin.com/in/johnsmith"
        },
        "profile_twitter_url": {
          "description": "URL for the contact's Twitter/X profile.",
          "type": "string",
          "example": "https://twitter.com/johnsmith"
        },
        "company_name": {
          "description": "Name of the Company this contact is a part of. This might have been entered by a user, filled in from a data provider or captured from an email signature.",
          "type": "string",
          "example": "Example Co."
        },
        "company_website": {
          "description": "Website URL parsed from the email signature.",
          "type": "string",
          "example": "https://www.example.com"
        },
        "company_linkedin": {
          "description": "URL for the company's LinkedIn profile page.",
          "type": "string",
          "example": "https://www.linkedin.com/company/examplecompany"
        },
        "location_street": {
          "description": "Street of the Contact's location, whose origin is reported by location_source.",
          "type": "string",
          "example": "888 Grand Ave"
        },
        "location_line_2": {
          "description": "Address line 2 of the Contact's location, whose origin is reported by location_source.",
          "type": "string",
          "example": "Ste 100"
        },
        "location_city": {
          "description": "City of the Contact's location, whose origin is reported by location_source.",
          "type": "string",
          "example": "San Diego"
        },
        "location_state": {
          "description": "State or province of the Contact's location, whose origin is reported by location_source.",
          "type": "string",
          "example": "California"
        },
        "location_state_code": {
          "description": "State or province code of the Contact's location, whose origin is reported by location_source.",
          "type": "string",
          "example": "CA"
        },
        "location_postalcode": {
          "description": "Postal code of the Contact's location, whose origin is reported by location_source.",
          "type": "string",
          "example": "92556"
        },
        "location_country": {
          "description": "Country of the Contact's location, whose origin is reported by location_source.",
          "type": "string",
          "example": "United States"
        },
        "location_country_code_2": {
          "description": "Two-letter country code of the Contact's location, whose origin is reported by location_source.",
          "type": "string",
          "example": "US"
        },
        "location_country_code_3": {
          "description": "Three-letter country code of the Contact's location, whose origin is reported by location_source.",
          "type": "string",
          "example": "USA"
        },
        "location_region": {
          "description": "Region of the location.",
          "type": "string",
          "example": "San Diego County"
        },
        "location_continent": {
          "description": "Continent of the location.",
          "type": "string",
          "example": "North America"
        },
        "location_latitude": {
          "format": "double",
          "description": "Geocode from the location.",
          "type": "number",
          "example": -34.23423
        },
        "location_longitude": {
          "format": "double",
          "description": "Geocode from the location.",
          "type": "number",
          "example": 33.444233
        },
        "location_source": {
          "description": "The source of the Contact's location. Possible values: Contact Address, Contact LinkedIn, Contact Office Phone, Contact Direct Phone, Company Location.",
          "type": "string",
          "example": "Contact Address"
        },
        "interactions_emails_from": {
          "format": "int32",
          "description": "Total emails sent from this contact to a coworker.",
          "type": "integer"
        },
        "interactions_emails_from_latest": {
          "format": "date-time",
          "description": "The date of the most recent email sent from this contact to a coworker.",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "interactions_emails_included": {
          "format": "int32",
          "description": "Total emails sent to coworkers that included this contact.",
          "type": "integer"
        },
        "interactions_emails_included_latest": {
          "format": "date-time",
          "description": "The date of the most recent email to a coworker that included this contact.",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "interactions_emails_to": {
          "format": "int32",
          "description": "Total emails sent from a coworker to this contact.",
          "type": "integer"
        },
        "interactions_emails_to_latest": {
          "format": "date-time",
          "description": "The date of the most recent email sent from a coworker to this contact.",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "interactions_meetings_completed": {
          "format": "int32",
          "description": "Past meetings the contact was on.",
          "type": "integer",
          "example": 12
        },
        "interactions_meetings_completed_latest": {
          "format": "date-time",
          "description": "Date of the most recent meeting with this contact.",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "interactions_meetings_upcoming": {
          "format": "int32",
          "description": "Future meetings the contact is scheduled to be on.",
          "type": "integer",
          "example": 2
        },
        "interactions_meetings_upcoming_next": {
          "format": "date-time",
          "description": "Date of the next meeting with this contact.",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "interactions_total": {
          "format": "int32",
          "type": "integer"
        },
        "interactions_total_first": {
          "format": "date-time",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "interactions_total_latest": {
          "format": "date-time",
          "description": "Last time SigParser saw an email or meeting with this contact on it. If there is a future meeting then this date can be in the future.",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "relationships_primary": {
          "description": "The email address of the Coworker with either the Most Active, First, Latest or Strongest relationship.\nHow the value is determined is based the settings in your environment.",
          "type": "string",
          "example": "james@mycompany.com"
        },
        "relationships_primary_name": {
          "description": "Name of the primary relationship Coworker for this contact.",
          "type": "string",
          "example": "Alice Brown"
        },
        "relationships_strongest": {
          "description": "Email address of the internal contact with the best relationship with this person. The algorithm used to determine this takes\ninto account the recent vs old communication patterns.",
          "type": "string",
          "example": "jill@mycompany.com"
        },
        "relationships_strongest_name": {
          "description": "Name of the Coworker with the strongest relationship with this contact.",
          "type": "string",
          "example": "John Smith"
        },
        "relationships_most_active": {
          "description": "Email address of an internal person with the most emails and meetings with this contact.",
          "type": "string",
          "example": "john@mycompany.com"
        },
        "relationships_most_active_name": {
          "description": "Name of the Coworker with the most interactions with this contact.",
          "type": "string",
          "example": "Mary Jones"
        },
        "relationships_first": {
          "description": "Email address of an internal person with the first email or meeting with this contact.",
          "type": "string",
          "example": "john@mycompany.com"
        },
        "relationships_first_name": {
          "description": "Name of the Coworker with the first interaction with this contact.",
          "type": "string",
          "example": "Mark Johnson"
        },
        "relationships_first_interaction_date": {
          "format": "date-time",
          "description": "Date of first email or meeting with an internal contact referring to field: internal_contact_first.",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "relationships_latest": {
          "description": "Email address of an internal person with the most recent interactions with this contact.",
          "type": "string",
          "example": "john@mycompany.com"
        },
        "relationships_latest_name": {
          "description": "Name of the Coworker with the latest interaction with this contact.",
          "type": "string",
          "example": "Steve Wilson"
        },
        "relationships_latest_interaction_date": {
          "format": "date-time",
          "description": "Date of most recent email or meeting with an internal contact referring to field: internal_contact_latest.",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "relationships_coworkers": {
          "format": "int32",
          "description": "Count of individuals listed as Coworkers with whom this contact has had interactions.",
          "type": "integer"
        },
        "relationships_coworkers_emailaddresses": {
          "description": "Email addresses of the top 5 Coworkers (internal) to your company who know this contact the best based on interactions.",
          "type": "array",
          "items": {
            "type": "string"
          },
          "example": [
            "john@mycompany.com",
            "mary@mycompany.com"
          ]
        },
        "relationships_coworkers_names": {
          "description": "Names of the top Coworkers (internal) who know this contact the best based on interactions.",
          "type": "array",
          "items": {
            "type": "string"
          },
          "example": [
            "John Smith",
            "Mary Jones"
          ]
        },
        "relationships_companies": {
          "format": "int32",
          "description": "Count of individuals within the same company with whom this contact has had interactions.",
          "type": "integer"
        },
        "relationships_companies_emailaddresses": {
          "description": "Email addresses of the top 5 contacts who work at the same company who have been on emails and meetings.",
          "type": "array",
          "items": {
            "type": "string"
          },
          "example": [
            "mark@domain.com"
          ]
        },
        "relationships_companies_names": {
          "description": "Names of the top contacts who work at the same company who have been on emails and meetings.",
          "type": "array",
          "items": {
            "type": "string"
          },
          "example": [
            "Mark Johnson"
          ]
        },
        "relationships_other": {
          "format": "int32",
          "type": "integer"
        },
        "relationships_other_emailaddresses": {
          "description": "Email addresses of the top 5 people who have been on emails with this contact from other companies.",
          "type": "array",
          "items": {
            "type": "string"
          },
          "example": [
            "steve@another-company.com"
          ]
        },
        "relationships_other_names": {
          "description": "Names of the top people who have been on emails with this contact from other companies.",
          "type": "array",
          "items": {
            "type": "string"
          },
          "example": [
            "Steve Wilson"
          ]
        },
        "crm_company_id": {
          "description": "ID of the CRM company.",
          "type": "string",
          "example": "0011234567890ABC"
        },
        "crm_company_link": {
          "description": "URL link to CRM company that can be used in a browser.",
          "type": "string",
          "example": "https://example.salesforce.com/0011234567890ABC"
        },
        "crm_company_name": {
          "description": "Name of the associated CRM company in the CRM system.",
          "type": "string",
          "example": "Example Co."
        },
        "crm_contact_full_name": {
          "description": "Name of the contact in the CRM system.",
          "type": "string",
          "example": "John Smith"
        },
        "crm_contact_id": {
          "description": "ID of the contact in the CRM system. If the CRM supports Contacts and Leads you'll need to look at the crm_contact_type to determine the type for the record.",
          "type": "string",
          "example": "AJS939FN39FNFN"
        },
        "crm_contact_link": {
          "description": "URL link to the CRM contact that can be used in a browser.",
          "type": "string",
          "example": "https://example.salesforce.com/0031234567890XYZ"
        },
        "crm_contact_type": {
          "description": "The type of the record in the CRM like Contact or Lead.",
          "type": "string",
          "example": "Contact"
        },
        "custom_text_field": {
          "description": "Custom text field.",
          "type": "string",
          "example": "Text Value"
        },
        "custom_number_field": {
          "format": "int32",
          "description": "Custom number field.",
          "type": "integer",
          "example": 123
        },
        "custom_date_field": {
          "format": "date-time",
          "description": "Custom date field.",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "custom_boolean_field": {
          "description": "Custom boolean field.",
          "type": "boolean",
          "example": true
        },
        "custom_single_select_field": {
          "description": "Custom single-select field.",
          "type": "array",
          "items": {
            "type": "string"
          },
          "example": [
            "Option 1"
          ]
        },
        "custom_multi_select_field": {
          "description": "Custom multi-select field.",
          "type": "array",
          "items": {
            "type": "string"
          },
          "example": [
            "Option 1",
            "Option 2"
          ]
        },
        "emailvalidation_bounce_date": {
          "format": "date-time",
          "description": "Date when an email bounce was detected for the contact. Good to filter these out so they don't go to marketing systems.",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "emailvalidation_status": {
          "description": "Raw status from the email validation provider.",
          "type": "string",
          "example": "Valid"
        },
        "emailstatus": {
          "description": "The status of the email verification for this email address. Valid values are: \"Valid\", \"Invalid\", \"Unknown\", \"Catch All\".  \nContacts will have null if they haven't been checked yet. \nNot all plans include this feature, so you'll need to check if your plan has this.",
          "type": "string",
          "example": "Invalid"
        },
        "emailvalidation_status_details": {
          "description": "The raw sub status for the email validation from the provider.",
          "type": "string",
          "example": "Dns Query Timeout"
        },
        "emailvalidation_status_last_checked": {
          "format": "date-time",
          "description": "Last time the email verification status (emailstatus) was checked.",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "emailvalidation_status_last_modified": {
          "format": "date-time",
          "description": "Last time the email status changed.",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "emailvalidation_status_score": {
          "format": "double",
          "description": "The score from the email validation provider.",
          "type": "number",
          "example": 0.25
        },
        "source_mailboxes_csv": {
          "description": "CSV list of the mailboxes this contact appeared in. Useful for mapping into a field in the CRM or destination system.",
          "type": "string",
          "example": "jill@mycompany.com,mark@mycompany.com,sally@mycompany.com"
        }
      },
      "additionalProperties": false
    },
    "DragnetTech.EventProcessors.iPAAS.V2.Contacts.OutputContactFieldModelV2": {
      "type": "object",
      "properties": {
        "id": {
          "description": "The ID for the field (as referenced in the APIs)",
          "type": "string",
          "example": "record_id"
        },
        "name": {
          "description": "The name of the field",
          "type": "string",
          "example": "SigParser Contact ID"
        },
        "type": {
          "description": "The type of the field (string, number, date, etc.)",
          "type": "string",
          "example": "text"
        },
        "description": {
          "description": "The description of the field (this is what's shown in the tooltips on SigParser)",
          "type": "string",
          "example": "A SigParser generated ID value that is unique for each Contact record."
        },
        "can_update": {
          "description": "Whether the field can be updated or not",
          "type": "boolean",
          "example": false
        },
        "can_group_by": {
          "description": "Whether this field can be used as the field parameter in the search/groupby endpoint",
          "type": "boolean",
          "example": false
        },
        "options": {
          "description": "If this is a single or multi-select field, this will contain the possible options for the field",
          "type": "array",
          "items": {
            "type": "string"
          },
          "example": [
            "Option 1",
            "Option 2",
            "Option 3"
          ]
        },
        "is_custom": {
          "description": "Whether this is a user-defined custom field. Custom field values are included in the\ncontact API responses; standard fields listed here that are not part of the contact\nresponse model are only available for filtering and grouping.",
          "type": "boolean",
          "example": false
        },
        "aggregation_mode": {
          "description": "For aggregated fields: the aggregation mode (count, sum, min, max, average, first, latest). Null for non-aggregated fields.",
          "type": "string"
        },
        "aggregation_target_datatype": {
          "description": "For aggregated fields: the datatype of the aggregated value (number, date, text, boolean).",
          "type": "string"
        },
        "aggregation_sources": {
          "description": "For aggregated fields: per-source aggregation config (event_source_key, target_dimension_name).",
          "type": "array",
          "items": {
            "$ref": "#/definitions/DragnetTech.Shared.Tables.Team.aggregation_source"
          }
        }
      },
      "additionalProperties": false
    },
    "DragnetTech.EventProcessors.iPAAS.V2.Contacts.OutputContactMonthlyStatisticsModelV2": {
      "type": "object",
      "properties": {
        "email_address": {
          "description": "The email address of the contact.",
          "type": "string",
          "example": "john@example.com"
        },
        "month": {
          "format": "date-time",
          "description": "The month for these statistics (first day of the month).",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "emails_from": {
          "format": "int32",
          "description": "Number of emails sent from this contact to coworkers in this month.",
          "type": "integer"
        },
        "emails_to": {
          "format": "int32",
          "description": "Number of emails sent to this contact from coworkers in this month.",
          "type": "integer"
        },
        "emails_included": {
          "format": "int32",
          "description": "Number of emails where this contact was included in this month.",
          "type": "integer"
        },
        "meetings_past": {
          "format": "int32",
          "description": "Number of past meetings with this contact in this month.",
          "type": "integer"
        },
        "meetings_upcoming": {
          "format": "int32",
          "description": "Number of upcoming meetings with this contact scheduled in this month.",
          "type": "integer"
        }
      },
      "additionalProperties": false
    },
    "DragnetTech.EventProcessors.iPAAS.V2.Contacts.RequestContactsEnrichEmailModelV2": {
      "type": "object",
      "properties": {
        "email_address": {
          "description": "The email address of the contact to enrich. This contact must already exist in SigParser.",
          "type": "string",
          "example": "john@example.com"
        },
        "skip_if_already_enriched": {
          "description": "If true, the enrichment will be skipped if the contact has already been enriched with this enrichment type. Default is true.\nIf you would like to use date filtering to only enrich contacts that have not been enriched since a certain date, you can fetch the contact's latest email enrichment date with the GET /api/v2/contacts endpoint.",
          "type": "boolean",
          "example": true
        }
      },
      "additionalProperties": false
    },
    "DragnetTech.EventProcessors.iPAAS.V2.Contacts.RequestContactsEnrichJobModelV2": {
      "type": "object",
      "properties": {
        "email_address": {
          "description": "The email address of the contact to enrich. This contact must already exist in SigParser.",
          "type": "string",
          "example": "john@example.com"
        },
        "skip_if_already_enriched": {
          "description": "If true, the enrichment will be skipped if the contact has already been enriched with this enrichment type. Default is true.\nIf you would like to use date filtering to only enrich contacts that have not been enriched since a certain date, you can fetch the contact's latest job enrichment date with the GET /api/v2/contacts endpoint.",
          "type": "boolean",
          "example": true
        }
      },
      "additionalProperties": false
    },
    "DragnetTech.EventProcessors.iPAAS.V2.Emails.OutputEmailBodyModelV2": {
      "type": "object",
      "properties": {
        "html": {
          "description": "The HTML body of the email. Omitted from the response when `select=text`.",
          "type": "string"
        },
        "text": {
          "description": "The plain-text body of the email. Always populated whenever this field is returned —\nif the mailbox only had an HTML body we derive the text from it on the fly so callers\nalways get something useful (especially LLM-driven callers who'd otherwise burn tokens\non raw HTML). Omitted from the response when `select=html`.",
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "DragnetTech.EventProcessors.iPAAS.V2.Emails.OutputEmailModelV2": {
      "type": "object",
      "properties": {
        "id": {
          "description": "The ID for the email in the SigParser system.",
          "type": "string",
          "example": "6c46114f36a5979a8ddb2eb0cc1bf036232daaf260a292c1abdb37d8c7ef3511"
        },
        "date": {
          "format": "date-time",
          "description": "Date and time for the email.",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "from": {
          "$ref": "#/definitions/DragnetTech.EventProcessors.iPAAS.V2.Emails.OutputEmailModelV2.Person"
        },
        "to": {
          "description": "People in the \"To\" field",
          "type": "array",
          "items": {
            "$ref": "#/definitions/DragnetTech.EventProcessors.iPAAS.V2.Emails.OutputEmailModelV2.Person"
          }
        },
        "cc": {
          "description": "People in the \"CC\" field.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/DragnetTech.EventProcessors.iPAAS.V2.Emails.OutputEmailModelV2.Person"
          }
        },
        "attachments": {
          "description": "All the attachements on this email. Does not include embedded attachments.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/DragnetTech.EventProcessors.iPAAS.V2.Emails.OutputEmailModelV2.Attachment"
          }
        },
        "subject_categories": {
          "description": "Subject tag categories that matched the email's subject line based on your team's Subject Line Tagging configuration.\nOnly returned for teams with the Email & Meeting Tagging feature enabled. Tags are computed when the email is ingested,\nso emails ingested before the feature was configured will have an empty list.",
          "type": "array",
          "items": {
            "type": "string"
          },
          "example": [
            "Meal"
          ]
        },
        "subject_label_words": {
          "description": "The configured subject tag words that were found in the email's subject line based on your team's Subject Line Tagging configuration.\nOnly returned for teams with the Email & Meeting Tagging feature enabled. Tags are computed when the email is ingested,\nso emails ingested before the feature was configured will have an empty list.",
          "type": "array",
          "items": {
            "type": "string"
          },
          "example": [
            "Dinner"
          ]
        },
        "subject": {
          "description": "Subject line for the email.",
          "type": "string",
          "example": "SigParser Demo Request"
        },
        "references": {
          "description": "The Message-IDs of other messages in the reply chain. https://datatracker.ietf.org/doc/html/rfc4021#page-11",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "in_reply_to": {
          "description": "Message-ID of the email that this email was in response to.",
          "type": "string",
          "example": "5UX2QEDHQNU4.0EOXR9AAI1XS2@fv-az1183-921"
        },
        "internet_messageid": {
          "description": "This comes from the MIME Message-ID field. This is a globally unique value. Although it's optional most messages will have this.\nSee https://datatracker.ietf.org/doc/html/rfc2392#section-2",
          "type": "string",
          "example": "5UX2QEDHQNU4.0EOXR9AAI1XS2@fv-az1183-921"
        },
        "conversation_index": {
          "format": "int32",
          "description": "Zero based index for the position of the email in an email chain. Can be null. This is a calculated value.",
          "type": "integer"
        },
        "virtual_conversationid": {
          "description": "A derived conversation ID for this email conversation. This can change for a message if a new root message is discovered later.",
          "type": "string",
          "example": "5UX2QEDHQNU4.0EOXR9AAI1XS2@fv-az1183-921"
        },
        "type": {
          "description": "Type of email. Possible values: email_to, email_from or internal",
          "type": "string",
          "example": "email_to"
        },
        "ingestion_date": {
          "format": "date-time",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        }
      },
      "additionalProperties": false
    },
    "DragnetTech.EventProcessors.iPAAS.V2.Emails.OutputEmailModelV2.Attachment": {
      "type": "object",
      "properties": {
        "file_name": {
          "description": "This is the file name of the attachment.",
          "type": "string",
          "example": "Example.pdf"
        }
      },
      "additionalProperties": false
    },
    "DragnetTech.EventProcessors.iPAAS.V2.Emails.OutputEmailModelV2.Person": {
      "type": "object",
      "properties": {
        "email": {
          "description": "Email address for the contact. This is always lowercase.",
          "type": "string",
          "example": "person@person.com"
        },
        "name": {
          "description": "This name is the best name we have for the contact in our system. This isn't actually the name in the email header for this email which is sometimes missing.",
          "type": "string",
          "example": "Person's Name"
        }
      },
      "additionalProperties": false
    },
    "DragnetTech.EventProcessors.iPAAS.V2.Graph.OutputGraphCompanyDailyModelV2": {
      "type": "object",
      "properties": {
        "contact_record_id": {
          "format": "uuid",
          "description": "Internal ID for the primary contact in SigParser.",
          "type": "string"
        },
        "contact_email": {
          "description": "the email address of the primary contact",
          "type": "string",
          "example": "example@email.com"
        },
        "contact_name": {
          "description": "name of the primary contact",
          "type": "string",
          "example": "John Doe"
        },
        "contact_title": {
          "description": "Job title for the primary contact.",
          "type": "string",
          "example": "Executive Vice President of Underwriting"
        },
        "contact_status": {
          "description": "the status of the primary contact",
          "type": "string",
          "example": "Valid"
        },
        "contact_domain": {
          "description": "the domain of the primary contact",
          "type": "string",
          "example": "company.com"
        },
        "related_company_domain": {
          "description": "the domain of the related company",
          "type": "string",
          "example": "company.com"
        },
        "related_company_name": {
          "description": "name of the related company",
          "type": "string",
          "example": "Example Co."
        },
        "related_company_status": {
          "description": "the status of the related company",
          "type": "string",
          "example": "Valid"
        },
        "total_interactions": {
          "format": "int32",
          "description": "total emails sent, received and meetings",
          "type": "integer",
          "example": 243
        },
        "total_emails": {
          "format": "int32",
          "description": "total emails sent and received",
          "type": "integer",
          "example": 50
        },
        "total_meetings": {
          "format": "int32",
          "description": "total number meetings between the contact and company",
          "type": "integer",
          "example": 5
        },
        "emails_to": {
          "format": "int32",
          "description": "total emails sent from primary contact",
          "type": "integer",
          "example": 40
        },
        "emails_from": {
          "format": "int32",
          "description": "total emails received from related company",
          "type": "integer",
          "example": 30
        },
        "emails_included": {
          "format": "int32",
          "description": "total number of indirect interactions between the two contacts",
          "type": "integer",
          "example": 2
        },
        "completed_meetings": {
          "format": "int32",
          "description": "total number of past meetings had between the contact and company",
          "type": "integer",
          "example": 5
        },
        "completed_meetings_minutes": {
          "format": "int32",
          "description": "total length of all past meetings in minutes",
          "type": "integer",
          "example": 120
        },
        "upcoming_meetings": {
          "format": "int32",
          "description": "total number of future meetings between the contact and company",
          "type": "integer",
          "example": 3
        },
        "upcoming_meetings_minutes": {
          "format": "int32",
          "description": "total length of all future meetings in minutes",
          "type": "integer",
          "example": 120
        },
        "date": {
          "format": "date-time",
          "description": "the date that first interaction took place",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        }
      },
      "additionalProperties": false
    },
    "DragnetTech.EventProcessors.iPAAS.V2.Graph.OutputGraphCompanyModelV2": {
      "type": "object",
      "properties": {
        "contact_record_id": {
          "format": "uuid",
          "description": "Internal ID for the primary contact in SigParser.",
          "type": "string"
        },
        "contact_email": {
          "description": "the email address of the primary contact",
          "type": "string",
          "example": "example@email.com"
        },
        "contact_name": {
          "description": "name of the primary contact",
          "type": "string",
          "example": "John Doe"
        },
        "contact_title": {
          "description": "Job title for the primary contact.",
          "type": "string",
          "example": "Executive Vice President of Underwriting"
        },
        "contact_status": {
          "description": "the status of the primary contact",
          "type": "string",
          "example": "Valid"
        },
        "contact_domain": {
          "description": "the domain of the primary contact",
          "type": "string",
          "example": "company.com"
        },
        "related_company_domain": {
          "description": "the domain of the related company",
          "type": "string",
          "example": "company.com"
        },
        "related_company_name": {
          "description": "name of the related company",
          "type": "string",
          "example": "Example Co."
        },
        "related_company_status": {
          "description": "the status of the related company",
          "type": "string",
          "example": "Valid"
        },
        "total_interactions": {
          "format": "int32",
          "description": "total emails sent, received and meetings",
          "type": "integer",
          "example": 243
        },
        "total_emails": {
          "format": "int32",
          "description": "total emails sent and received",
          "type": "integer",
          "example": 50
        },
        "total_meetings": {
          "format": "int32",
          "description": "total number meetings between the contact and company",
          "type": "integer",
          "example": 5
        },
        "emails_to": {
          "format": "int32",
          "description": "total emails sent from primary contact",
          "type": "integer",
          "example": 40
        },
        "emails_from": {
          "format": "int32",
          "description": "total emails received from related company",
          "type": "integer",
          "example": 30
        },
        "emails_included": {
          "format": "int32",
          "description": "total number of indirect interactions between the two contacts",
          "type": "integer",
          "example": 2
        },
        "completed_meetings": {
          "format": "int32",
          "description": "total number of past meetings had between the contact and company",
          "type": "integer",
          "example": 5
        },
        "completed_meetings_minutes": {
          "format": "int32",
          "description": "total length of all past meetings in minutes",
          "type": "integer",
          "example": 120
        },
        "upcoming_meetings": {
          "format": "int32",
          "description": "total number of future meetings between the contact and company",
          "type": "integer",
          "example": 3
        },
        "upcoming_meetings_minutes": {
          "format": "int32",
          "description": "total length of all future meetings in minutes",
          "type": "integer",
          "example": 120
        },
        "first_interaction": {
          "format": "date-time",
          "description": "the date that the first interaction took place",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "first_email": {
          "format": "date-time",
          "description": "date that the first email was sent or received",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "first_meeting": {
          "format": "date-time",
          "description": "date that the first completed meeting took place",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "first_email_to": {
          "format": "date-time",
          "description": "date that the first email was sent from the primary contact to the related company",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "first_email_from": {
          "format": "date-time",
          "description": "date that the first email was received from the related company to the primary contact",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "first_email_included": {
          "format": "date-time",
          "description": "date that the first email was sent or received from/to the related company",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "latest_interaction": {
          "format": "date-time",
          "description": "the date that the latest interaction took place",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "latest_email": {
          "format": "date-time",
          "description": "date that the last email was sent or received",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "latest_meeting": {
          "format": "date-time",
          "description": "date that the last completed meeting took place",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "latest_email_from": {
          "format": "date-time",
          "description": "date that the last email was received from the related company to the primary contact",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "latest_email_to": {
          "format": "date-time",
          "description": "date that the last email was sent from the primary contact to the related company",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "latest_email_included": {
          "format": "date-time",
          "description": "date that the last email was sent or received from/to the related company",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "next_meeting": {
          "format": "date-time",
          "description": "date that the next meeting is scheduled to take place",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        }
      },
      "additionalProperties": false
    },
    "DragnetTech.EventProcessors.iPAAS.V2.Graph.OutputGraphContactDailyModelV2": {
      "type": "object",
      "properties": {
        "contact_record_id": {
          "format": "uuid",
          "description": "Internal ID for the primary contact in SigParser.",
          "type": "string"
        },
        "contact_email": {
          "description": "email address of the primary contact",
          "type": "string",
          "example": "example@email.com"
        },
        "contact_name": {
          "description": "name of the primary contact",
          "type": "string",
          "example": "John Doe"
        },
        "contact_title": {
          "description": "Job title for the primary contact.",
          "type": "string",
          "example": "Executive Vice President of Underwriting"
        },
        "contact_status": {
          "description": "status of the primary contact",
          "type": "string",
          "example": "Valid"
        },
        "contact_domain": {
          "description": "domain of the primary contact",
          "type": "string",
          "example": "company.com"
        },
        "related_contact_record_id": {
          "format": "uuid",
          "description": "Internal ID for the related contact in SigParser.",
          "type": "string"
        },
        "related_contact_email": {
          "description": "email address of the related contact",
          "type": "string",
          "example": "example@email.com"
        },
        "related_contact_name": {
          "description": "name of the related contact",
          "type": "string",
          "example": "Sally May"
        },
        "related_contact_title": {
          "description": "Job title for the related contact.",
          "type": "string",
          "example": "Executive Vice President of Underwriting"
        },
        "related_contact_status": {
          "description": "status of the related contact",
          "type": "string",
          "example": "Valid"
        },
        "related_contact_domain": {
          "description": "domain of the related domain",
          "type": "string",
          "example": "company.com"
        },
        "related_contact_company": {
          "description": "company name of the related contact",
          "type": "string",
          "example": "Example Co."
        },
        "total_interactions": {
          "format": "int32",
          "description": "total count of emails received, sent, and meetings",
          "type": "integer",
          "example": 234
        },
        "total_emails": {
          "format": "int32",
          "description": "total count of emails sent and received from/to the related contact",
          "type": "integer",
          "example": 123
        },
        "total_meetings": {
          "format": "int32",
          "description": "total number of meetings between the two contacts (including past and upcoming meetings)",
          "type": "integer",
          "example": 4
        },
        "emails_to": {
          "format": "int32",
          "description": "total count of emails sent to the related contact",
          "type": "integer",
          "example": 24
        },
        "emails_from": {
          "format": "int32",
          "description": "total count of emails received from the related contact",
          "type": "integer",
          "example": 45
        },
        "emails_included": {
          "format": "int32",
          "description": "total number of indirect interactions between the two contacts",
          "type": "integer",
          "example": 2
        },
        "completed_meetings": {
          "format": "int32",
          "description": "total number of past meetings between the two contacts",
          "type": "integer",
          "example": 4
        },
        "completed_meetings_minutes": {
          "format": "int32",
          "description": "total length of all past meetings in minutes",
          "type": "integer",
          "example": 120
        },
        "upcoming_meetings": {
          "format": "int32",
          "description": "total number of future meetings between the two contacts",
          "type": "integer",
          "example": 2
        },
        "upcoming_meetings_minutes": {
          "format": "int32",
          "description": "total length of all future meetings in minutes",
          "type": "integer",
          "example": 120
        },
        "date": {
          "format": "date-time",
          "description": "date that the interaction took place",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        }
      },
      "additionalProperties": false
    },
    "DragnetTech.EventProcessors.iPAAS.V2.Graph.OutputGraphContactModelV2": {
      "type": "object",
      "properties": {
        "contact_record_id": {
          "format": "uuid",
          "description": "Internal ID for the primary contact in SigParser.",
          "type": "string"
        },
        "contact_email": {
          "description": "email address of the primary contact",
          "type": "string",
          "example": "example@email.com"
        },
        "contact_name": {
          "description": "name of the primary contact",
          "type": "string",
          "example": "John Doe"
        },
        "contact_title": {
          "description": "Job title for the primary contact.",
          "type": "string",
          "example": "Executive Vice President of Underwriting"
        },
        "contact_status": {
          "description": "status of the primary contact",
          "type": "string",
          "example": "Valid"
        },
        "contact_domain": {
          "description": "domain of the primary contact",
          "type": "string",
          "example": "company.com"
        },
        "related_contact_record_id": {
          "format": "uuid",
          "description": "Internal ID for the related contact in SigParser.",
          "type": "string"
        },
        "related_contact_email": {
          "description": "email address of the related contact",
          "type": "string",
          "example": "example@email.com"
        },
        "related_contact_name": {
          "description": "name of the related contact",
          "type": "string",
          "example": "Sally May"
        },
        "related_contact_title": {
          "description": "Job title for the related contact.",
          "type": "string",
          "example": "Executive Vice President of Underwriting"
        },
        "related_contact_status": {
          "description": "status of the related contact",
          "type": "string",
          "example": "Valid"
        },
        "related_contact_domain": {
          "description": "domain of the related domain",
          "type": "string",
          "example": "company.com"
        },
        "related_contact_company": {
          "description": "company name of the related contact",
          "type": "string",
          "example": "Example Co."
        },
        "total_interactions": {
          "format": "int32",
          "description": "total count of emails received, sent, and meetings",
          "type": "integer",
          "example": 234
        },
        "total_emails": {
          "format": "int32",
          "description": "total count of emails sent and received from/to the related contact",
          "type": "integer",
          "example": 123
        },
        "total_meetings": {
          "format": "int32",
          "description": "total number of meetings between the two contacts (including past and upcoming meetings)",
          "type": "integer",
          "example": 4
        },
        "emails_to": {
          "format": "int32",
          "description": "total count of emails sent to the related contact",
          "type": "integer",
          "example": 24
        },
        "emails_from": {
          "format": "int32",
          "description": "total count of emails received from the related contact",
          "type": "integer",
          "example": 45
        },
        "emails_included": {
          "format": "int32",
          "description": "total number of indirect interactions between the two contacts",
          "type": "integer",
          "example": 2
        },
        "completed_meetings": {
          "format": "int32",
          "description": "total number of past meetings between the two contacts",
          "type": "integer",
          "example": 4
        },
        "completed_meetings_minutes": {
          "format": "int32",
          "description": "total length of all past meetings in minutes",
          "type": "integer",
          "example": 120
        },
        "upcoming_meetings": {
          "format": "int32",
          "description": "total number of future meetings between the two contacts",
          "type": "integer",
          "example": 2
        },
        "upcoming_meetings_minutes": {
          "format": "int32",
          "description": "total length of all future meetings in minutes",
          "type": "integer",
          "example": 120
        },
        "first_interaction": {
          "format": "date-time",
          "description": "date that the first interaction took place",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "first_email": {
          "format": "date-time",
          "description": "date that the first email was sent or received",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "first_meeting": {
          "format": "date-time",
          "description": "date that the first completed meeting took place",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "first_email_to": {
          "format": "date-time",
          "description": "date that the first email was sent from the primary contact to the related contact",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "first_email_from": {
          "format": "date-time",
          "description": "date that the first email was received from the related contact to the primary contact",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "first_email_included": {
          "format": "date-time",
          "description": "date that the first email was sent or received from/to the related contact",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "latest_interaction": {
          "format": "date-time",
          "description": "date that the latest interaction took place",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "latest_email": {
          "format": "date-time",
          "description": "date that the latest email was sent or received",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "latest_meeting": {
          "format": "date-time",
          "description": "date that the latest completed meeting took place",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "latest_email_from": {
          "format": "date-time",
          "description": "date that the latest email was received from the related contact to the primary contact",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "latest_email_to": {
          "format": "date-time",
          "description": "date that the latest email was sent from the primary contact to the related contact",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "latest_email_included": {
          "format": "date-time",
          "description": "date that the latest email was sent or received from/to the related contact",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "next_meeting": {
          "format": "date-time",
          "description": "date that the next meeting is scheduled to take place",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "address_book": {
          "description": "Indicates whether this relationship was derived from an address book (e.g., Google Contacts).",
          "type": "boolean",
          "example": true
        }
      },
      "additionalProperties": false
    },
    "DragnetTech.EventProcessors.iPAAS.V2.Interactions.OutputInteractionModelV2": {
      "type": "object",
      "properties": {
        "id": {
          "description": "Internal ID for this meeting or email in SigParser",
          "type": "string"
        },
        "date": {
          "format": "date-time",
          "description": "The date of the interaction",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "type": {
          "description": "The type of interaction (email or meeting)",
          "type": "string",
          "example": "email"
        },
        "email": {
          "$ref": "#/definitions/DragnetTech.EventProcessors.iPAAS.V2.Emails.OutputEmailModelV2"
        },
        "meeting": {
          "$ref": "#/definitions/DragnetTech.EventProcessors.iPAAS.V2.Meetings.OutputMeetingModelV2"
        }
      },
      "additionalProperties": false
    },
    "DragnetTech.EventProcessors.iPAAS.V2.Meetings.OutputMeetingModelV2": {
      "description": "Details about a meeting. \n\nIf you are storing this meeting details in your own database you should store the icaluid field as your primary key.",
      "type": "object",
      "properties": {
        "id": {
          "format": "uuid",
          "description": "The ID for the meeting in the SigParser system.",
          "type": "string"
        },
        "last_modified": {
          "format": "date-time",
          "description": "This should be used to fetch emails with the /api/Emails/Distinct API\nWhen using ingested_after parameter you should save the max ingestion_key value in the response and make the next request with that value in the ingested_after field.",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "subject": {
          "description": "The subject of the meeting.",
          "type": "string",
          "example": "Team Meeting"
        },
        "subject_categories": {
          "description": "Subject tag categories that matched the meeting's subject line based on your team's Subject Line Tagging configuration.\nOnly returned for teams with the Email & Meeting Tagging feature enabled. Tags are computed when the meeting is ingested,\nso meetings ingested before the feature was configured will have an empty list.",
          "type": "array",
          "items": {
            "type": "string"
          },
          "example": [
            "Meal"
          ]
        },
        "subject_label_words": {
          "description": "The configured subject tag words that were found in the meeting's subject line based on your team's Subject Line Tagging configuration.\nOnly returned for teams with the Email & Meeting Tagging feature enabled. Tags are computed when the meeting is ingested,\nso meetings ingested before the feature was configured will have an empty list.",
          "type": "array",
          "items": {
            "type": "string"
          },
          "example": [
            "Lunch"
          ]
        },
        "start": {
          "format": "date-time",
          "description": "Time of the meeting.",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "end": {
          "format": "date-time",
          "description": "End time of the meeting.",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "icaluid": {
          "description": "A unique ID which can be used to track meetings across calendars. But it is not guaranteed to be unique in the cases of occurrences or exceptions of recurring meetings. Use icaluid_distinct to get distinct instances of those meetings.",
          "type": "string",
          "example": "team_meeting_call_001@dundermifflin.com"
        },
        "location": {
          "description": "What is the location of this meeting?",
          "type": "string",
          "example": "Zoom Meeting"
        },
        "recurring": {
          "description": "Is this a recurring meeting?",
          "type": "boolean"
        },
        "attendees": {
          "description": "All the invited attendees to the meeting.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/DragnetTech.EventProcessors.iPAAS.V2.Meetings.OutputMeetingModelV2.Attendee"
          }
        },
        "attendees_emails_count": {
          "format": "int32",
          "description": "How many attendees were invited to the meeting?",
          "type": "integer"
        },
        "attendees_domains_count": {
          "format": "int32",
          "description": "How many domains were invited to the meeting?",
          "type": "integer"
        },
        "organizer": {
          "description": "Email address of the organizer of the meeting? Use this to tell who created the meeting.",
          "type": "string",
          "example": "jbourne@cia.gov"
        },
        "organizer_name": {
          "description": "Name of the meeting organizer",
          "type": "string",
          "example": "Jason Bourne"
        },
        "cancelled": {
          "format": "date-time",
          "description": "Time the meeting was detected as cancelled. \nThis time may be delayed from the actual time the meeting was cancelled.\n\nSuggestion: If the meeting is cancelled before the start time you want to ignore this meeting when calculating metrics.\nBut if the meeting is cancelled after the meeting has taken place you still want to include the meeting in your metrics.",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "sensitivity": {
          "description": "The sensitivity level for the meeting.\n \nnull = (default)\n\"private\" = Google, Office 365, Exchange - This is the value most often used by all connectors.\n\"public\" = Google\n\"personal\" = Office 365, Exchange\n\"confidential\" =  Office 365, Exchange and possible for Google but not really used.\n            \nhttps://developers.google.com/calendar/api/v3/reference/events#resource-representations\nhttps://docs.microsoft.com/en-us/graph/api/resources/event?view=graph-rest-beta",
          "type": "string",
          "example": "private"
        },
        "show_as": {
          "description": "The \"show_as\" value for a meeting. This determines how it is displayed in the email application. The value of this largely depends on the type of email API this meeting was consumed from.\nAllowed options are:\n            \nnull = Default value.\nbusy = Office 365, Google (most common value)\nfree = Office 365\ntentative = Office 365, Google\noof = Office 365, Google\nworkingelsewhere = Office 365",
          "type": "string",
          "example": "busy"
        },
        "instance_type": {
          "description": "The type of meeting: instance, series_master, exception.\nOccurrences are in the \"occurrences\" array if this is a series_master.\nOccurrences can be on \"instances\" if the meeting used to be a \"series_master\".",
          "type": "string",
          "example": "instance"
        },
        "icaluid_distinct": {
          "description": "A distinct icaluid for the meeting. For example, meeting occurrences and exceptions will have a different icaluid than the series master.",
          "type": "string",
          "example": "team_meeting_call_001@dundermifflin.com"
        }
      },
      "additionalProperties": false
    },
    "DragnetTech.EventProcessors.iPAAS.V2.Meetings.OutputMeetingModelV2.Attendee": {
      "description": "A meeting attendee with the declined status of the attendee.",
      "type": "object",
      "properties": {
        "email": {
          "description": "Email address for the contact. This is always lowercase.",
          "type": "string",
          "example": "attendee@dundermifflin.com"
        },
        "declined": {
          "description": "Did this attendee decline the meeting?",
          "type": "boolean"
        },
        "name": {
          "description": "Name of the contact from SigParser's database. This is not the display name that came with the email.",
          "type": "string",
          "example": "John Smith"
        }
      },
      "additionalProperties": false
    },
    "DragnetTech.EventProcessors.iPAAS.V2.Users.OutputUserModelV2": {
      "description": "Details about a user in SigParser.",
      "type": "object",
      "properties": {
        "userid": {
          "format": "uuid",
          "description": "The user's unique identifier.",
          "type": "string",
          "example": "00000000-0000-0000-0000-000000000000"
        },
        "username": {
          "description": "The user's email address.",
          "type": "string",
          "example": "example@example.com"
        },
        "accepted_invite": {
          "description": "Whether the user has accepted an invitation from another user in an enterprise team.",
          "type": "boolean",
          "example": true
        },
        "created": {
          "format": "date-time",
          "description": "When the user created their account.",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "mfa": {
          "description": "If multi-factor authentication is required for the user.",
          "type": "boolean",
          "example": true
        }
      },
      "additionalProperties": false
    },
    "DragnetTech.EventProcessors.iPAAS.V2.Utils.OutputGroupByItemV2": {
      "type": "object",
      "properties": {
        "value": {
          "description": "The group value (display label).",
          "type": "string"
        },
        "count": {
          "format": "int64",
          "description": "Number of records in this group.",
          "type": "integer"
        },
        "percentage": {
          "format": "double",
          "description": "Percentage of total matching records.",
          "type": "number"
        }
      },
      "additionalProperties": false
    },
    "DragnetTech.Shared.Tables.Team.aggregation_source": {
      "description": "One per-source entry serialized into the\nDragnetTech.Shared.Tables.Team.field.aggregation_sources jsonb array. Replaces the old\n`aggregate_field_source` junction table.",
      "type": "object",
      "properties": {
        "event_source_key": {
          "description": "The participant grid that surfaces this source's filter dimensions and\naggregation target — e.g. \"ActivityEmailParticipant\" or\n\"ActivityMeetingParticipant\". Maps directly to a GridType value.",
          "type": "string"
        },
        "target_dimension_name": {
          "description": "Column on the participant grid that the aggregate is applied to — the value\nSELECTED (returned). Null for count mode (which counts rows).",
          "type": "string"
        },
        "order_dimension_name": {
          "description": "For the arg-pick modes (Min/Max/First/Latest) the column to ORDER BY when picking\nthe winning row: a number for Min/Max, a date for First/Latest. The pick returns the\nDragnetTech.Shared.Tables.Team.aggregation_source.target_dimension_name value of the row with the min (Min/First) or max\n(Max/Latest) of this column. When it equals DragnetTech.Shared.Tables.Team.aggregation_source.target_dimension_name the\narg-pick collapses to a single-column extreme (MIN/MAX of one column) — the deltable\nfast path. Null for Count/Sum/Average (no ordering). Existing fields are backfilled by\nmigration: Min/Max → the target, First/Latest → the source's natural date.",
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "OutputListModelV2`1<OutputCompanyDeltaFieldsModelV2>": {
      "required": [
        "data",
        "has_more",
        "next_url"
      ],
      "type": "object",
      "properties": {
        "has_more": {
          "description": "Whether there are more items in the list.\nIf true, the next_url property will be populated with the URL to fetch the next page of items.",
          "type": "boolean"
        },
        "next_url": {
          "description": "The URL to fetch the next page of items.",
          "type": "string",
          "example": "https://ipaas.sigparser.com/api/..."
        },
        "data": {
          "description": "The list of items.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/DragnetTech.EventProcessors.iPAAS.V2.Companies.OutputCompanyDeltaFieldsModelV2"
          }
        }
      },
      "additionalProperties": false
    },
    "OutputListModelV2`1<OutputCompanyExampleModelV2>": {
      "required": [
        "data",
        "has_more",
        "next_url"
      ],
      "type": "object",
      "properties": {
        "has_more": {
          "description": "Whether there are more items in the list.\nIf true, the next_url property will be populated with the URL to fetch the next page of items.",
          "type": "boolean"
        },
        "next_url": {
          "description": "The URL to fetch the next page of items.",
          "type": "string",
          "example": "https://ipaas.sigparser.com/api/..."
        },
        "data": {
          "description": "The list of items.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/DragnetTech.EventProcessors.iPAAS.V2.Companies.OutputCompanyExampleModelV2"
          }
        }
      },
      "additionalProperties": false
    },
    "OutputListModelV2`1<OutputCompanyLocationModelV2>": {
      "required": [
        "data",
        "has_more",
        "next_url"
      ],
      "type": "object",
      "properties": {
        "has_more": {
          "description": "Whether there are more items in the list.\nIf true, the next_url property will be populated with the URL to fetch the next page of items.",
          "type": "boolean"
        },
        "next_url": {
          "description": "The URL to fetch the next page of items.",
          "type": "string",
          "example": "https://ipaas.sigparser.com/api/..."
        },
        "data": {
          "description": "The list of items.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/DragnetTech.EventProcessors.iPAAS.V2.Companies.OutputCompanyLocationModelV2"
          }
        }
      },
      "additionalProperties": false
    },
    "OutputListModelV2`1<OutputContactDeltaFieldsModelV2>": {
      "required": [
        "data",
        "has_more",
        "next_url"
      ],
      "type": "object",
      "properties": {
        "has_more": {
          "description": "Whether there are more items in the list.\nIf true, the next_url property will be populated with the URL to fetch the next page of items.",
          "type": "boolean"
        },
        "next_url": {
          "description": "The URL to fetch the next page of items.",
          "type": "string",
          "example": "https://ipaas.sigparser.com/api/..."
        },
        "data": {
          "description": "The list of items.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/DragnetTech.EventProcessors.iPAAS.V2.Contacts.OutputContactDeltaFieldsModelV2"
          }
        }
      },
      "additionalProperties": false
    },
    "OutputListModelV2`1<OutputContactExampleModelV2>": {
      "required": [
        "data",
        "has_more",
        "next_url"
      ],
      "type": "object",
      "properties": {
        "has_more": {
          "description": "Whether there are more items in the list.\nIf true, the next_url property will be populated with the URL to fetch the next page of items.",
          "type": "boolean"
        },
        "next_url": {
          "description": "The URL to fetch the next page of items.",
          "type": "string",
          "example": "https://ipaas.sigparser.com/api/..."
        },
        "data": {
          "description": "The list of items.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/DragnetTech.EventProcessors.iPAAS.V2.Contacts.OutputContactExampleModelV2"
          }
        }
      },
      "additionalProperties": false
    },
    "OutputListModelV2`1<OutputEmailModelV2>": {
      "required": [
        "data",
        "has_more",
        "next_url"
      ],
      "type": "object",
      "properties": {
        "has_more": {
          "description": "Whether there are more items in the list.\nIf true, the next_url property will be populated with the URL to fetch the next page of items.",
          "type": "boolean"
        },
        "next_url": {
          "description": "The URL to fetch the next page of items.",
          "type": "string",
          "example": "https://ipaas.sigparser.com/api/..."
        },
        "data": {
          "description": "The list of items.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/DragnetTech.EventProcessors.iPAAS.V2.Emails.OutputEmailModelV2"
          }
        }
      },
      "additionalProperties": false
    },
    "OutputListModelV2`1<OutputGraphCompanyDailyModelV2>": {
      "required": [
        "data",
        "has_more",
        "next_url"
      ],
      "type": "object",
      "properties": {
        "has_more": {
          "description": "Whether there are more items in the list.\nIf true, the next_url property will be populated with the URL to fetch the next page of items.",
          "type": "boolean"
        },
        "next_url": {
          "description": "The URL to fetch the next page of items.",
          "type": "string",
          "example": "https://ipaas.sigparser.com/api/..."
        },
        "data": {
          "description": "The list of items.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/DragnetTech.EventProcessors.iPAAS.V2.Graph.OutputGraphCompanyDailyModelV2"
          }
        }
      },
      "additionalProperties": false
    },
    "OutputListModelV2`1<OutputGraphCompanyModelV2>": {
      "required": [
        "data",
        "has_more",
        "next_url"
      ],
      "type": "object",
      "properties": {
        "has_more": {
          "description": "Whether there are more items in the list.\nIf true, the next_url property will be populated with the URL to fetch the next page of items.",
          "type": "boolean"
        },
        "next_url": {
          "description": "The URL to fetch the next page of items.",
          "type": "string",
          "example": "https://ipaas.sigparser.com/api/..."
        },
        "data": {
          "description": "The list of items.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/DragnetTech.EventProcessors.iPAAS.V2.Graph.OutputGraphCompanyModelV2"
          }
        }
      },
      "additionalProperties": false
    },
    "OutputListModelV2`1<OutputGraphContactDailyModelV2>": {
      "required": [
        "data",
        "has_more",
        "next_url"
      ],
      "type": "object",
      "properties": {
        "has_more": {
          "description": "Whether there are more items in the list.\nIf true, the next_url property will be populated with the URL to fetch the next page of items.",
          "type": "boolean"
        },
        "next_url": {
          "description": "The URL to fetch the next page of items.",
          "type": "string",
          "example": "https://ipaas.sigparser.com/api/..."
        },
        "data": {
          "description": "The list of items.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/DragnetTech.EventProcessors.iPAAS.V2.Graph.OutputGraphContactDailyModelV2"
          }
        }
      },
      "additionalProperties": false
    },
    "OutputListModelV2`1<OutputGraphContactModelV2>": {
      "required": [
        "data",
        "has_more",
        "next_url"
      ],
      "type": "object",
      "properties": {
        "has_more": {
          "description": "Whether there are more items in the list.\nIf true, the next_url property will be populated with the URL to fetch the next page of items.",
          "type": "boolean"
        },
        "next_url": {
          "description": "The URL to fetch the next page of items.",
          "type": "string",
          "example": "https://ipaas.sigparser.com/api/..."
        },
        "data": {
          "description": "The list of items.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/DragnetTech.EventProcessors.iPAAS.V2.Graph.OutputGraphContactModelV2"
          }
        }
      },
      "additionalProperties": false
    },
    "OutputListModelV2`1<OutputGroupByItemV2>": {
      "required": [
        "data",
        "has_more",
        "next_url"
      ],
      "type": "object",
      "properties": {
        "has_more": {
          "description": "Whether there are more items in the list.\nIf true, the next_url property will be populated with the URL to fetch the next page of items.",
          "type": "boolean"
        },
        "next_url": {
          "description": "The URL to fetch the next page of items.",
          "type": "string",
          "example": "https://ipaas.sigparser.com/api/..."
        },
        "data": {
          "description": "The list of items.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/DragnetTech.EventProcessors.iPAAS.V2.Utils.OutputGroupByItemV2"
          }
        }
      },
      "additionalProperties": false
    },
    "OutputListModelV2`1<OutputInteractionModelV2>": {
      "required": [
        "data",
        "has_more",
        "next_url"
      ],
      "type": "object",
      "properties": {
        "has_more": {
          "description": "Whether there are more items in the list.\nIf true, the next_url property will be populated with the URL to fetch the next page of items.",
          "type": "boolean"
        },
        "next_url": {
          "description": "The URL to fetch the next page of items.",
          "type": "string",
          "example": "https://ipaas.sigparser.com/api/..."
        },
        "data": {
          "description": "The list of items.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/DragnetTech.EventProcessors.iPAAS.V2.Interactions.OutputInteractionModelV2"
          }
        }
      },
      "additionalProperties": false
    },
    "OutputListModelV2`1<OutputMeetingModelV2>": {
      "required": [
        "data",
        "has_more",
        "next_url"
      ],
      "type": "object",
      "properties": {
        "has_more": {
          "description": "Whether there are more items in the list.\nIf true, the next_url property will be populated with the URL to fetch the next page of items.",
          "type": "boolean"
        },
        "next_url": {
          "description": "The URL to fetch the next page of items.",
          "type": "string",
          "example": "https://ipaas.sigparser.com/api/..."
        },
        "data": {
          "description": "The list of items.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/DragnetTech.EventProcessors.iPAAS.V2.Meetings.OutputMeetingModelV2"
          }
        }
      },
      "additionalProperties": false
    },
    "OutputUpsertModelV2`1<OutputCompanyExampleModelV2>": {
      "required": [
        "object"
      ],
      "type": "object",
      "properties": {
        "object": {
          "$ref": "#/definitions/DragnetTech.EventProcessors.iPAAS.V2.Companies.OutputCompanyExampleModelV2"
        },
        "fields": {
          "description": "Field updates to the object.\nThis is useful to see whether a field was updated or not and the reason why updates may not have occurred.",
          "example": {
            "name_full": {
              "updated": false,
              "reason": "You cannot make all name fields null."
            },
            "phone_direct": {
              "updated": true
            }
          }
        }
      },
      "additionalProperties": false
    },
    "OutputUpsertModelV2`1<OutputContactExampleModelV2>": {
      "required": [
        "object"
      ],
      "type": "object",
      "properties": {
        "object": {
          "$ref": "#/definitions/DragnetTech.EventProcessors.iPAAS.V2.Contacts.OutputContactExampleModelV2"
        },
        "fields": {
          "description": "Field updates to the object.\nThis is useful to see whether a field was updated or not and the reason why updates may not have occurred.",
          "example": {
            "name_full": {
              "updated": false,
              "reason": "You cannot make all name fields null."
            },
            "phone_direct": {
              "updated": true
            }
          }
        }
      },
      "additionalProperties": false
    },
    "iPaasAPI.Models.Parse.CleanedBodyOutput": {
      "type": "object",
      "properties": {
        "Errors": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "CleanedBodyPlain": {
          "description": "The email with the signature and reply chains removed. If the email was originally HTML then this is the HTML converted to text.",
          "type": "string",
          "example": "Top email in the reply chain without the signature or reply chain."
        },
        "CleanedBodyHtml": {
          "description": "The body of the email.",
          "type": "string",
          "example": "Top email in the reply chain without the signature or reply chain."
        },
        "IsSpammyLookingEmailMessage": {
          "description": "Is this email a spammy looking message or a non-human type sender. You likely don't want to use the CleeanedBody fields when rendering this message but you could if you wanted to.",
          "type": "boolean"
        },
        "IsSpammyLookingSender": {
          "description": "Does the sender of this message look like they're a spammer.",
          "type": "boolean"
        },
        "EmailTypes": {
          "description": "The known type of email that this is. Useful for determining how you want to display this in a user interface. Other types will be added over time.\n            \n- NormalEmail - A normal email from a human. Over time as we build handlers for new types of emails.\n- MeetingNotification\n- BouncedNotification\n- ZenDeskSupportChain\n- SecureMessage - Secure messages only include a link and some way to access the email. These are sensitive emails.",
          "type": "array",
          "items": {
            "type": "string"
          },
          "example": [
            "NormalEmail"
          ]
        },
        "Emails": {
          "description": "Collection of all the emails extracted from the body. The first email is the most recent and the last one is the oldest. The parse quality drops off the deeper you go though since there is a bigger chance for corrupted headers.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/iPaasAPI.Models.Parse.Email"
          }
        },
        "Subject": {
          "description": "Subject of the email as it was passed into the function or extracted from the header of the email.",
          "type": "string"
        },
        "Date": {
          "format": "date-time",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "Headers": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "FullPlainTextBody": {
          "type": "string"
        },
        "FullHtmlBody": {
          "type": "string"
        },
        "MsgType": {
          "description": "Type of the .msg file.",
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "iPaasAPI.Models.Parse.Email": {
      "type": "object",
      "properties": {
        "CleanedBodyPlain": {
          "description": "Email without the signature",
          "type": "string",
          "example": "Email without the signature"
        },
        "CleanedBodyHtml": {
          "description": "Email without the signature",
          "type": "string",
          "example": "Email without the signature"
        },
        "BodyPlain": {
          "description": "Plain text version of the body of this email with the reply chain stripped off but includes the signature. This should always be populated.",
          "type": "string",
          "example": "Plain text version of the email including the signature."
        },
        "BodyHtml": {
          "description": "SigParser's attempt at producing an HTML email body for just this email or reply chain email. Only produced if the original email was HTML.\nWill not include the reply headers like \"From\" and \"To\" or \"Email sent from...\". Email signature is not stripped out. Cannot handle emails with\nnamespaces in the HTML which is rare but can happen. In cases where the email can't be parsed, the original full HTML will be included in the first section.",
          "type": "string",
          "example": "HTML body of the email including the signature."
        },
        "Subject": {
          "type": "string"
        },
        "Date": {
          "format": "date-time",
          "description": "Date is only available if it was parsed out from the email or if it was passed in for the root email.",
          "type": "string",
          "example": "2026-09-25T01:21:36+00:00"
        },
        "FromEmailAddress": {
          "type": "string"
        },
        "FromName": {
          "type": "string"
        },
        "To": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/iPaasAPI.Models.Parse.EmailRecipient"
          }
        },
        "Cc": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/iPaasAPI.Models.Parse.EmailRecipient"
          }
        }
      },
      "additionalProperties": false
    },
    "iPaasAPI.Models.Parse.EmailInputModel": {
      "description": "Input model for an email to parse content from.",
      "type": "object",
      "properties": {
        "subject": {
          "description": "Email subject. Not required but should be provided in order to have the \"subject\" field populated in the response for the \"emails\" collection.",
          "type": "string",
          "example": "Re: Great seeing you yesterday"
        },
        "from_address": {
          "description": "The sender of the email. Required for us to match the contact data we find in the root email's signature with an email address.",
          "type": "string",
          "example": "john@example.com"
        },
        "from_name": {
          "description": "The sender of the email. Important to provide as it helps to identify where the signature starts although sometimes we can find the signature without it.",
          "type": "string",
          "example": "John Smith"
        },
        "htmlbody": {
          "description": "Either provide this or the PlainBody or both. This will be used for the email content over the plain body as the HTML is how we can get LinkedIn URLs and Twitter URLs for example.",
          "type": "string",
          "example": "<body>Hi there, <br/> great seeing you yesterday. <br/>John Smith<br/>Vice President<br/>Mobile 818-334-3433<br> 999 Grand Ave, San Diego, CA, United States<br/>Our mission is to deliver customer satisfaction!</body>"
        },
        "plainbody": {
          "description": "If there isn't an HTML body we'll fallback to this value. If all you can provide is a text body then we can still find phone numbers, titles and addresses but features like LinkedIn URLs and Twitter URLs embedded in HTML won't be discoverable.",
          "type": "string",
          "example": "Hi there,\\r\\ngreat seeing you yesterday.\\r\\nJohn Smith\\r\\nVice President\\r\\nMobile 818-334-3433\\r\\n999 Grand Ave, San Diego, CA, United States\\r\\nOur mission is to deliver customer satisfaction!"
        },
        "date": {
          "description": "A Date string. For example: 2017-01-01T00:00:00 OR Mon, 28 May 2018 23:33:40 +0000 (UTC)\nIf either of the two above formats don't match what you're providing, we fallback to using the standard .NET parsing to parse this date so you can test that your date works with DotNetFiddle. https://dotnetfiddle.net/sJyTJW",
          "type": "string",
          "example": "2017-01-01T00:00:00"
        },
        "to": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/iPaasAPI.Models.Parse.EmailInputModel.EmailRecipient"
          }
        },
        "cc": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/iPaasAPI.Models.Parse.EmailInputModel.EmailRecipient"
          }
        },
        "options": {
          "$ref": "#/definitions/iPaasAPI.Models.Parse.EmailInputModel.OutputOptions"
        },
        "headers": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        }
      },
      "additionalProperties": false
    },
    "iPaasAPI.Models.Parse.EmailInputModel.EmailRecipient": {
      "type": "object",
      "properties": {
        "name": {
          "description": "The displayname for the recipient. Should come from the email headers with each email address.",
          "type": "string",
          "example": "Mark Rogers"
        },
        "emailAddress": {
          "description": "Email address of the recipient",
          "type": "string",
          "example": "mark.rogers@xyz.com"
        }
      },
      "additionalProperties": false
    },
    "iPaasAPI.Models.Parse.EmailInputModel.OutputOptions": {
      "type": "object",
      "properties": {
        "OutputCleanedEmailHtmlDepth": {
          "format": "int32",
          "description": "Performance setting (default 1): Control to what depth the fields cleanedemailbody, emails.cleanedBodyHTML are generated with HTML.\n            \nGenerating these fields can be expensive so this is meant to help improve performance for some customers that don't need these fields.\n            \n0 would mean no HTML output. 1 would mean only the root email gets a cleaned version. 2 means the root email and the next previous email in the chain.\n            \nThe plain text versions will still be set.\n            \nIf you don't ever need the data in these fields then set to 0 to get a slightly faster average response.",
          "type": "integer"
        }
      },
      "additionalProperties": false
    },
    "iPaasAPI.Models.Parse.EmailRecipient": {
      "type": "object",
      "properties": {
        "Name": {
          "type": "string"
        },
        "EmailAddress": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "iPaasAPI.Models.Parse.EmailSignatureV2Model": {
      "type": "object",
      "properties": {
        "from_address": {
          "description": "Email address of the sender of the email.",
          "type": "string",
          "example": "john@example.com"
        },
        "from_displayname": {
          "description": "Display name for the sender of the email.",
          "type": "string",
          "example": "John Smith"
        },
        "company_name": {
          "description": "The best matched company name from the email signature. Be warned that this isn't always a great match.\n            \nWe suggest using a data vendor like Brandfetch or the free Creative Commons dataset from People Data Labs first and only using the company name from SigParser to fill in the gaps.",
          "type": "string",
          "example": "Example Inc."
        },
        "job_title": {
          "description": "Job title for the sender of the email.",
          "type": "string",
          "example": "Vice President"
        },
        "phones": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/iPaasAPI.Models.Parse.EmailSignatureV2Model.PhoneDetails"
          }
        },
        "address": {
          "description": "The full address extracted from the signature.",
          "type": "string",
          "example": "999 Grand Ave, San Diego, CA, United States"
        },
        "address_parts": {
          "$ref": "#/definitions/iPaasAPI.Models.Parse.EmailSignatureV2Model.AddressParts"
        },
        "links": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/iPaasAPI.Models.Parse.EmailSignatureV2Model.Link"
          }
        },
        "signature": {
          "description": "The lines for the signature.",
          "type": "string",
          "example": "John Smith\\r\\nVice President\\r\\nMobile 818-334-3433\\r\\n999 Grand Ave, San Diego, CA, United States\\r\\nOur mission is to deliver customer satisfaction!"
        },
        "errors": {
          "description": "Array of error messages if there are any issues.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "duration": {
          "format": "int64",
          "description": "Duration in milliseconds it took to process the request.",
          "type": "integer",
          "example": 100
        }
      },
      "additionalProperties": false
    },
    "iPaasAPI.Models.Parse.EmailSignatureV2Model.AddressParts": {
      "type": "object",
      "properties": {
        "street": {
          "description": "Street address part. Don't send mail to these addresses since we have a hard time getting the right address always.",
          "type": "string",
          "example": "999 Grand Ave"
        },
        "city": {
          "type": "string",
          "example": "San Diego"
        },
        "state": {
          "type": "string",
          "example": "CA"
        },
        "postal_code": {
          "description": "Postal code",
          "type": "string",
          "example": "99999"
        },
        "country": {
          "description": "The best country match SigParser could find. This can be a bit of a guess if no country is defined.",
          "type": "string",
          "example": "United States"
        }
      },
      "additionalProperties": false
    },
    "iPaasAPI.Models.Parse.EmailSignatureV2Model.Link": {
      "type": "object",
      "properties": {
        "url": {
          "type": "string",
          "example": "https://twitter.com/personxyz"
        },
        "social_handle": {
          "type": "string",
          "example": "personxyz"
        },
        "type": {
          "description": "The type of link.\n            \n- twitter\n- linkedin\n- website",
          "type": "string",
          "example": "twitter"
        }
      },
      "additionalProperties": false
    },
    "iPaasAPI.Models.Parse.EmailSignatureV2Model.PhoneDetails": {
      "type": "object",
      "properties": {
        "type": {
          "description": "What time of phone number is this?\n            \n- Phone - Unlabled phone or type not known.\n- Mobile\n- Office\n- Direct\n- Fax\n- Voip\n- Home - This is very rare to ever have a home phone.",
          "type": "string",
          "example": "Mobile"
        },
        "phone_number": {
          "description": "Phone number with the original formatting.",
          "type": "string",
          "example": "818-334-3433"
        },
        "match_type": {
          "description": "Possible options:\n            \n- MyCellIs\n- Signature",
          "type": "string",
          "example": "Signature"
        },
        "line": {
          "description": "Line we found the phone number on.",
          "type": "string",
          "example": "Mobile 818-334-3433"
        }
      },
      "additionalProperties": false
    },
    "iPaasAPI.Models.Parse.FeedbackResponseModel": {
      "type": "object",
      "properties": {
        "id": {
          "format": "uuid",
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "iPaasAPI.Models.User.ReturnMe": {
      "type": "object",
      "properties": {
        "username": {
          "type": "string"
        },
        "enterpriseid": {
          "format": "uuid",
          "type": "string"
        }
      },
      "additionalProperties": false
    }
  },
  "securityDefinitions": {
    "x-api-key": {
      "type": "apiKey",
      "name": "x-api-key",
      "in": "header",
      "description": "Api key needed to access the endpoints. X-Api-Key: My_API_Key"
    },
    "Bearer": {
      "type": "apiKey",
      "name": "Authorization",
      "in": "header",
      "description": "API key in Bearer format. Authorization: Bearer My_API_Key"
    }
  },
  "security": [
    {
      "x-api-key": [ ],
      "Bearer": [ ]
    }
  ]
}