{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/fiber-ai/json-schema/fiber-ai-tracker-signal-output-schema.json",
  "title": "Tracker signal output",
  "x-generated": "2026-11-07",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/_original/fiber-ai-api-openapi.json#/components/schemas/TrackerSignalOutput",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Signal ID."
    },
    "entityId": {
      "type": "string",
      "description": "Tracked entity ID."
    },
    "entityType": {
      "type": "string",
      "enum": [
        "company",
        "person"
      ],
      "description": "Entity type."
    },
    "linkedinIdentifier": {
      "type": "string",
      "description": "LinkedIn org ID or user ID."
    },
    "linkedinSlug": {
      "type": [
        "string",
        "null"
      ],
      "description": "The identifying part of a person or company's LinkedIn URL, such as `williamhgates` for `https://www.linkedin.com/in/williamhgates/` or `google` for `https://www.linkedin.com/company/google`."
    },
    "linkedinUrl": {
      "type": [
        "string",
        "null"
      ],
      "description": "Full LinkedIn URL for the tracked entity, like `https://www.linkedin.com/company/google` for companies or `https://www.linkedin.com/in/williamhgates` for people."
    },
    "type": {
      "type": "string",
      "description": "Signal type (e.g. headcount_crossed_threshold)."
    },
    "summary": {
      "type": [
        "string",
        "null"
      ],
      "description": "Human-readable description of what changed."
    },
    "changeData": {
      "type": "array",
      "items": {
        "anyOf": [
          {
            "allOf": [
              {
                "$ref": "#/$defs/FundingStageChange"
              }
            ],
            "additionalProperties": true
          },
          {
            "allOf": [
              {
                "$ref": "#/$defs/LocationDeltaChange"
              }
            ],
            "additionalProperties": true
          },
          {
            "allOf": [
              {
                "$ref": "#/$defs/CompanyLocationChange"
              }
            ],
            "additionalProperties": true
          },
          {
            "allOf": [
              {
                "$ref": "#/$defs/FundingRoundChange"
              }
            ],
            "additionalProperties": true
          },
          {
            "allOf": [
              {
                "$ref": "#/$defs/JobPostingChange"
              }
            ],
            "additionalProperties": true
          },
          {
            "allOf": [
              {
                "$ref": "#/$defs/NewsArticleChange"
              }
            ],
            "additionalProperties": true
          },
          {
            "allOf": [
              {
                "$ref": "#/$defs/LinkedInPostChange"
              }
            ],
            "additionalProperties": true
          },
          {
            "allOf": [
              {
                "$ref": "#/$defs/ContactUpdateChange"
              }
            ],
            "additionalProperties": true
          },
          {
            "allOf": [
              {
                "$ref": "#/$defs/PromotionChange"
              }
            ],
            "additionalProperties": true
          },
          {
            "allOf": [
              {
                "$ref": "#/$defs/DemotionChange"
              }
            ],
            "additionalProperties": true
          },
          {
            "allOf": [
              {
                "$ref": "#/$defs/RoleTenureChange"
              }
            ],
            "additionalProperties": true
          },
          {
            "allOf": [
              {
                "$ref": "#/$defs/CompanyTenureChange"
              }
            ],
            "additionalProperties": true
          },
          {
            "allOf": [
              {
                "$ref": "#/$defs/LayoffEventChange"
              }
            ],
            "additionalProperties": true
          },
          {
            "allOf": [
              {
                "$ref": "#/$defs/TrackedEmployeeChange"
              }
            ],
            "additionalProperties": true
          },
          {
            "allOf": [
              {
                "$ref": "#/$defs/InvestorChange"
              }
            ],
            "additionalProperties": true
          },
          {
            "allOf": [
              {
                "$ref": "#/$defs/AcquisitionChange"
              }
            ],
            "additionalProperties": true
          },
          {
            "allOf": [
              {
                "$ref": "#/$defs/AcceleratorChange"
              }
            ],
            "additionalProperties": true
          },
          {
            "allOf": [
              {
                "$ref": "#/$defs/CertificationChange"
              }
            ],
            "additionalProperties": true
          },
          {
            "allOf": [
              {
                "$ref": "#/$defs/DepartmentSizeChange"
              }
            ],
            "additionalProperties": true
          },
          {
            "allOf": [
              {
                "$ref": "#/$defs/PersonReactionChange"
              }
            ],
            "additionalProperties": true
          },
          {
            "allOf": [
              {
                "$ref": "#/$defs/PersonCommentChange"
              }
            ],
            "additionalProperties": true
          },
          {
            "allOf": [
              {
                "$ref": "#/$defs/DepartedFromListChange"
              }
            ],
            "additionalProperties": true
          },
          {
            "allOf": [
              {
                "$ref": "#/$defs/ScalarDeltaChange"
              }
            ],
            "additionalProperties": true
          },
          {
            "allOf": [
              {
                "$ref": "#/$defs/PersonExperienceChange"
              }
            ],
            "additionalProperties": true
          },
          {
            "allOf": [
              {
                "$ref": "#/$defs/TenureChange"
              }
            ],
            "additionalProperties": true
          },
          {
            "allOf": [
              {
                "$ref": "#/$defs/NumericDeltaChange"
              }
            ],
            "additionalProperties": true
          },
          {
            "allOf": [
              {
                "$ref": "#/$defs/NamedItemChange"
              }
            ],
            "additionalProperties": true
          }
        ]
      },
      "description": "Array of objects describing what changed. Shape depends on signal type."
    },
    "sources": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "URLs providing proof or more information about this signal."
    },
    "methodology": {
      "type": "string",
      "minLength": 1,
      "description": "Explanation of how this signal was detected and verified."
    },
    "observedAt": {
      "type": "string",
      "format": "date-time",
      "description": "When we detected the signal. For backfilled signals this reflects the detection time, not when the event happened — use `eventDate` for the real-world event date."
    },
    "eventDate": {
      "type": [
        "string",
        "null"
      ],
      "format": "date-time",
      "description": "The real-world date the underlying event occurred (e.g. when a job was posted, a funding round announced, or a hire started), taken from `changeData`. Use this for time-series analysis. Null for signal types that have no associated event date, such as headcount or status changes."
    },
    "centiCreditsCharged": {
      "type": "integer",
      "minimum": 0,
      "description": "Credits charged for the tracker check that produced this signal, in centi-credits (100 = 1 credit)."
    },
    "isDummy": {
      "type": "boolean",
      "description": "When true, this signal was generated synthetically via the `fire-dummy` endpoint."
    }
  },
  "required": [
    "id",
    "entityId",
    "entityType",
    "linkedinIdentifier",
    "linkedinSlug",
    "linkedinUrl",
    "type",
    "summary",
    "changeData",
    "sources",
    "methodology",
    "observedAt",
    "centiCreditsCharged",
    "isDummy"
  ],
  "$defs": {
    "AcceleratorChange": {
      "type": "object",
      "properties": {
        "acceleratorName": {
          "type": "string",
          "description": "Name of the accelerator the company joined (e.g. \"Y Combinator\")"
        },
        "batch": {
          "type": [
            "string",
            "null"
          ],
          "description": "Batch or cohort the company went through, as labeled by the accelerator. Null when the accelerator does not publish one."
        },
        "year": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Year of the batch. Null when unknown."
        }
      },
      "required": [
        "acceleratorName"
      ]
    },
    "AcquisitionChange": {
      "type": "object",
      "properties": {
        "acquireeName": {
          "type": "string",
          "description": "Name of the acquired company"
        },
        "acquireeUuid": {
          "type": [
            "string",
            "null"
          ],
          "description": "Unique identifier"
        },
        "acquireeUrl": {
          "type": [
            "string",
            "null"
          ],
          "description": "Reference URL"
        },
        "priceUsd": {
          "type": [
            "number",
            "null"
          ],
          "description": "Acquisition price in USD"
        },
        "acquisitionDate": {
          "type": [
            "string",
            "null"
          ],
          "description": "ISO date of acquisition"
        }
      },
      "required": [
        "acquireeName"
      ]
    },
    "CertificationChange": {
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "description": "Certification title"
        },
        "company": {
          "type": [
            "string",
            "null"
          ],
          "description": "Issuing organization"
        },
        "credentialId": {
          "type": [
            "string",
            "null"
          ],
          "description": "Credential ID"
        },
        "issueDate": {
          "type": [
            "string",
            "null"
          ],
          "description": "ISO issue date"
        }
      },
      "required": [
        "title"
      ]
    },
    "CompanyLocationChange": {
      "type": "object",
      "properties": {
        "city": {
          "type": [
            "string",
            "null"
          ],
          "description": "City name"
        },
        "state": {
          "type": [
            "string",
            "null"
          ],
          "description": "State or province"
        },
        "country": {
          "type": [
            "string",
            "null"
          ],
          "description": "Country name"
        },
        "countryCode": {
          "type": [
            "string",
            "null"
          ],
          "description": "ISO country code"
        },
        "coordinates": {
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "latitude": {
              "type": "number",
              "description": "Latitude"
            },
            "longitude": {
              "type": "number",
              "description": "Longitude"
            }
          },
          "required": [
            "latitude",
            "longitude"
          ],
          "description": "Geocoded coordinates, when known"
        },
        "streetAddress": {
          "type": [
            "string",
            "null"
          ],
          "description": "Street address of the office"
        },
        "postalCode": {
          "type": [
            "string",
            "null"
          ],
          "description": "Postal or ZIP code"
        },
        "changeType": {
          "type": [
            "string",
            "null"
          ],
          "enum": [
            "added",
            null
          ],
          "description": "Marks a location as newly added. New office alerts report only net-new locations, so this is always 'added'; the field is unset in other location signals."
        },
        "officeMapUrl": {
          "type": [
            "string",
            "null"
          ],
          "description": "Map link for this specific office location, when there is enough address data to build one."
        }
      }
    },
    "CompanyTenureChange": {
      "allOf": [
        {
          "$ref": "#/$defs/TenureChange"
        }
      ],
      "properties": {
        "companyName": {
          "type": [
            "string",
            "null"
          ],
          "description": "Name of the company where tenure was reached"
        },
        "linkedinCompanyId": {
          "type": [
            "string",
            "null"
          ],
          "description": "LinkedIn company identifier"
        }
      }
    },
    "ContactUpdateChange": {
      "type": "object",
      "properties": {
        "linkedinCompanyId": {
          "type": [
            "string",
            "null"
          ],
          "description": "LinkedIn company ID"
        },
        "companyName": {
          "type": [
            "string",
            "null"
          ],
          "description": "Company name"
        },
        "companyLinkedinUrl": {
          "type": [
            "string",
            "null"
          ],
          "description": "Company LinkedIn URL"
        },
        "linkedinCompanySlug": {
          "type": [
            "string",
            "null"
          ],
          "description": "LinkedIn company vanity slug"
        },
        "companyDomains": {
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": "string"
          },
          "description": "Known company domains"
        },
        "crunchbaseSlug": {
          "type": [
            "string",
            "null"
          ],
          "description": "Crunchbase organization slug — permalink https://www.crunchbase.com/organization/{slug}. Null when not known."
        },
        "title": {
          "type": [
            "string",
            "null"
          ],
          "description": "Job title"
        },
        "isCurrent": {
          "type": "boolean",
          "description": "Whether this is a current position"
        },
        "startDate": {
          "type": [
            "string",
            "null"
          ],
          "description": "ISO start date"
        },
        "endDate": {
          "type": [
            "string",
            "null"
          ],
          "description": "ISO end date"
        },
        "location": {
          "type": [
            "string",
            "null"
          ],
          "description": "Position location"
        },
        "employmentType": {
          "type": [
            "string",
            "null"
          ],
          "description": "Employment type"
        },
        "seniority": {
          "type": [
            "string",
            "null"
          ],
          "description": "Seniority level"
        },
        "contactChangeKind": {
          "type": "string",
          "enum": [
            "job_change",
            "new_contact_info"
          ],
          "description": "What triggered this update: a detected job change, or newly found contact info."
        },
        "newEmails": {
          "type": [
            "array",
            "null"
          ],
          "items": {
            "$ref": "#/$defs/RevealedEmail"
          },
          "description": "Newly found work email addresses. On a job change item, only addresses at that item's company; addresses that can't be tied to a specific new position are delivered in a separate new contact info item. Null when none were found."
        }
      },
      "required": [
        "contactChangeKind"
      ]
    },
    "DemotionChange": {
      "allOf": [
        {
          "$ref": "#/$defs/PersonExperienceChange"
        }
      ],
      "properties": {
        "previousTitle": {
          "type": [
            "string",
            "null"
          ],
          "description": "Title before the demotion"
        },
        "previousCompany": {
          "type": [
            "string",
            "null"
          ],
          "description": "Company name before the demotion"
        }
      }
    },
    "DepartedFromListChange": {
      "type": "object",
      "properties": {
        "listId": {
          "type": "string",
          "minLength": 1,
          "description": "ID of the dynamic tracker list the entity left"
        },
        "listName": {
          "type": "string",
          "minLength": 1,
          "description": "Name of the dynamic tracker list the entity left"
        },
        "reason": {
          "type": "string",
          "const": "no_longer_matches",
          "description": "Why the entity was removed — it no longer matches the list's query"
        }
      },
      "required": [
        "listId",
        "listName",
        "reason"
      ]
    },
    "DepartmentSizeChange": {
      "type": "object",
      "properties": {
        "department": {
          "type": "string",
          "description": "Department name"
        },
        "count": {
          "type": "number",
          "description": "Current employee count"
        }
      },
      "required": [
        "department",
        "count"
      ]
    },
    "FundingRoundChange": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "description": "Funding round type"
        },
        "amountUsd": {
          "type": [
            "number",
            "null"
          ],
          "description": "Amount raised in USD"
        },
        "date": {
          "type": [
            "string",
            "null"
          ],
          "description": "ISO date of the round"
        },
        "investors": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Investor names"
        },
        "crunchbaseUrl": {
          "type": [
            "string",
            "null"
          ],
          "description": "URL to the funding round page on Crunchbase, when available"
        }
      },
      "required": [
        "type",
        "investors"
      ]
    },
    "FundingStageChange": {
      "type": "object",
      "properties": {
        "kind": {
          "type": "string",
          "const": "scalar"
        },
        "previous": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "description": "Previous funding stage"
        },
        "current": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "description": "Current funding stage"
        },
        "currentRoundDetails": {
          "oneOf": [
            {
              "$ref": "#/$defs/FundingRoundChange"
            },
            {
              "type": "null"
            }
          ],
          "description": "Details of the funding round that drove the new stage, when available"
        }
      },
      "required": [
        "kind"
      ]
    },
    "InvestorChange": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "description": "Investor name"
        },
        "type": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Investor types"
        },
        "linkedinSlug": {
          "type": [
            "string",
            "null"
          ],
          "description": "Investor LinkedIn profile slug"
        },
        "investorLinkedinUrl": {
          "type": [
            "string",
            "null"
          ],
          "description": "Full LinkedIn URL for the investor."
        },
        "crunchbaseUrl": {
          "type": [
            "string",
            "null"
          ],
          "description": "Reference URL"
        }
      },
      "required": [
        "name",
        "type"
      ]
    },
    "JobPostingChange": {
      "type": "object",
      "properties": {
        "jobId": {
          "type": "string",
          "description": "LinkedIn job ID"
        },
        "title": {
          "type": "string",
          "description": "Job title"
        },
        "jobUrl": {
          "type": [
            "string",
            "null"
          ],
          "description": "URL to the job posting"
        },
        "location": {
          "type": [
            "string",
            "null"
          ],
          "description": "Job location"
        },
        "locationType": {
          "type": [
            "string",
            "null"
          ],
          "enum": [
            "remote",
            "on_site",
            "hybrid",
            null
          ],
          "description": "Location type"
        },
        "seniorityLevel": {
          "type": [
            "string",
            "null"
          ],
          "description": "Seniority level"
        },
        "jobFunction": {
          "type": [
            "string",
            "null"
          ],
          "description": "Department or function"
        },
        "jobFunctions": {
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": "string"
          },
          "description": "All job functions this posting belongs to"
        },
        "postedAt": {
          "type": [
            "string",
            "null"
          ],
          "description": "ISO date when posted"
        },
        "firstDetectedAt": {
          "type": [
            "string",
            "null"
          ],
          "description": "When this posting was first detected as open. Can be later than postedAt when a posting becomes visible after it was published"
        },
        "status": {
          "type": "string",
          "enum": [
            "active",
            "closed"
          ],
          "description": "Job posting status"
        }
      },
      "required": [
        "jobId",
        "title",
        "status"
      ]
    },
    "LayoffEventChange": {
      "type": "object",
      "properties": {
        "date": {
          "type": [
            "string",
            "null"
          ],
          "description": "ISO date of the layoff event"
        },
        "numLaidOff": {
          "type": [
            "number",
            "null"
          ],
          "description": "Number of employees laid off"
        },
        "percentLaidOff": {
          "type": [
            "number",
            "null"
          ],
          "minimum": 0,
          "maximum": 100,
          "description": "Percentage of workforce laid off"
        },
        "source": {
          "type": [
            "string",
            "null"
          ],
          "description": "Source URL for the layoff report"
        }
      }
    },
    "LinkedInPostChange": {
      "type": "object",
      "properties": {
        "postId": {
          "type": "string",
          "description": "LinkedIn post ID"
        },
        "postUrl": {
          "type": [
            "string",
            "null"
          ],
          "description": "URL to the post"
        },
        "caption": {
          "type": [
            "string",
            "null"
          ],
          "description": "Post content"
        },
        "postedAt": {
          "type": [
            "string",
            "null"
          ],
          "description": "ISO date when posted"
        },
        "numReactions": {
          "type": [
            "number",
            "null"
          ],
          "description": "Number of reactions"
        },
        "numComments": {
          "type": [
            "number",
            "null"
          ],
          "description": "Number of comments"
        },
        "numShares": {
          "type": [
            "number",
            "null"
          ],
          "description": "Number of shares"
        },
        "posterName": {
          "type": [
            "string",
            "null"
          ],
          "description": "Display name of the author of the post. When the tracked person or company reposted someone else's post, this is the original author."
        },
        "posterSlug": {
          "type": [
            "string",
            "null"
          ],
          "description": "LinkedIn slug of the author of the post (e.g. 'williamhgates'). For a company author this can be the company's numeric LinkedIn id."
        },
        "posterUrl": {
          "type": [
            "string",
            "null"
          ],
          "description": "Full LinkedIn URL of the author of the post. A company page URL when the author is a company."
        },
        "posterProfilePicture": {
          "type": [
            "string",
            "null"
          ],
          "description": "Profile picture URL of the author of the post"
        },
        "matchedKeywords": {
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": "string"
          },
          "description": "Keywords from your tracking rule that this post matched. Omitted for rules without keywords."
        },
        "postType": {
          "type": [
            "string",
            "null"
          ],
          "enum": [
            "original",
            "repost",
            "repost_with_commentary",
            null
          ],
          "description": "How the tracked person or company relates to this post. Null on signals created before repost detection was available."
        },
        "resharedBy": {
          "oneOf": [
            {
              "$ref": "#/$defs/LinkedInPostResharedBy"
            },
            {
              "type": "null"
            }
          ],
          "description": "The tracked person or company that reposted this post. Present only when the post was reposted without added commentary; the poster fields then describe the original author."
        },
        "resharedPost": {
          "oneOf": [
            {
              "$ref": "#/$defs/LinkedInResharedPost"
            },
            {
              "type": "null"
            }
          ],
          "description": "The post being quoted. Present only when the tracked person or company reposted with their own commentary; the poster fields and caption then describe that commentary."
        }
      },
      "required": [
        "postId"
      ]
    },
    "LinkedInPostResharedBy": {
      "type": "object",
      "properties": {
        "name": {
          "type": [
            "string",
            "null"
          ],
          "description": "Display name of the tracked person or company that reposted the post"
        },
        "linkedinSlug": {
          "type": [
            "string",
            "null"
          ],
          "description": "LinkedIn slug of the tracked person or company that reposted the post"
        },
        "linkedinUrl": {
          "type": [
            "string",
            "null"
          ],
          "description": "Full LinkedIn URL of the tracked person or company that reposted the post"
        }
      }
    },
    "LinkedInResharedPost": {
      "type": "object",
      "properties": {
        "postUrl": {
          "type": [
            "string",
            "null"
          ],
          "description": "URL to the post"
        },
        "caption": {
          "type": [
            "string",
            "null"
          ],
          "description": "Post content"
        },
        "postedAt": {
          "type": [
            "string",
            "null"
          ],
          "description": "ISO date when posted"
        },
        "posterName": {
          "type": [
            "string",
            "null"
          ],
          "description": "Display name of the author of the post. When the tracked person or company reposted someone else's post, this is the original author."
        },
        "posterSlug": {
          "type": [
            "string",
            "null"
          ],
          "description": "LinkedIn slug of the author of the post (e.g. 'williamhgates'). For a company author this can be the company's numeric LinkedIn id."
        },
        "posterUrl": {
          "type": [
            "string",
            "null"
          ],
          "description": "Full LinkedIn URL of the author of the post. A company page URL when the author is a company."
        },
        "posterProfilePicture": {
          "type": [
            "string",
            "null"
          ],
          "description": "Profile picture URL of the author of the post"
        }
      }
    },
    "LocationDeltaChange": {
      "type": "object",
      "properties": {
        "kind": {
          "type": "string",
          "const": "location"
        },
        "previous": {
          "oneOf": [
            {
              "$ref": "#/$defs/CompanyLocationChange"
            },
            {
              "type": "null"
            }
          ]
        },
        "current": {
          "oneOf": [
            {
              "$ref": "#/$defs/CompanyLocationChange"
            },
            {
              "type": "null"
            }
          ]
        },
        "countryChanged": {
          "type": "boolean"
        },
        "stateChanged": {
          "type": "boolean"
        },
        "cityChanged": {
          "type": "boolean"
        },
        "distanceMiles": {
          "type": [
            "number",
            "null"
          ],
          "description": "Distance moved in miles, when both locations are geocoded"
        }
      },
      "required": [
        "kind",
        "previous",
        "current",
        "countryChanged",
        "stateChanged",
        "cityChanged"
      ]
    },
    "NamedItemChange": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "description": "Name of the item (technology, tag, or skill)"
        }
      },
      "required": [
        "name"
      ]
    },
    "NewsArticleChange": {
      "type": "object",
      "properties": {
        "url": {
          "type": "string",
          "description": "Article URL"
        },
        "title": {
          "type": "string",
          "description": "Article title"
        },
        "publishedAt": {
          "type": [
            "string",
            "null"
          ],
          "description": "ISO date published"
        },
        "publisherName": {
          "type": [
            "string",
            "null"
          ],
          "description": "Publisher name"
        },
        "summary": {
          "type": [
            "string",
            "null"
          ],
          "description": "Article summary"
        },
        "sentiment": {
          "type": [
            "string",
            "null"
          ],
          "enum": [
            "positive",
            "negative",
            "neutral",
            null
          ],
          "description": "Sentiment of the article. Null if not classified."
        }
      },
      "required": [
        "url",
        "title"
      ]
    },
    "NumericDeltaChange": {
      "type": "object",
      "properties": {
        "kind": {
          "type": "string",
          "const": "numeric"
        },
        "previous": {
          "type": [
            "number",
            "null"
          ],
          "description": "Previous value"
        },
        "current": {
          "type": [
            "number",
            "null"
          ],
          "description": "Current value"
        },
        "direction": {
          "type": "string",
          "enum": [
            "increased",
            "decreased"
          ],
          "description": "Direction of change"
        },
        "absoluteChange": {
          "type": "number",
          "description": "Absolute numeric change"
        },
        "percentChange": {
          "type": [
            "number",
            "null"
          ],
          "description": "Percent change, null if previous was zero or null"
        }
      },
      "required": [
        "kind",
        "direction",
        "absoluteChange"
      ]
    },
    "PersonCommentChange": {
      "type": "object",
      "properties": {
        "commentId": {
          "type": "string",
          "description": "Unique comment identifier (dedup key)"
        },
        "content": {
          "type": [
            "string",
            "null"
          ],
          "description": "Content of the comment"
        },
        "postContent": {
          "type": [
            "string",
            "null"
          ],
          "description": "Content of the original post"
        },
        "postUrl": {
          "type": [
            "string",
            "null"
          ],
          "description": "URL to the LinkedIn post"
        },
        "postAuthorName": {
          "type": [
            "string",
            "null"
          ],
          "description": "Name of the post author"
        },
        "commentedAgo": {
          "type": [
            "string",
            "null"
          ],
          "description": "Relative time since the comment"
        },
        "commentedAt": {
          "type": [
            "string",
            "null"
          ],
          "description": "Exact ISO timestamp when the comment was made"
        }
      },
      "required": [
        "commentId"
      ]
    },
    "PersonExperienceChange": {
      "type": "object",
      "properties": {
        "linkedinCompanyId": {
          "type": [
            "string",
            "null"
          ],
          "description": "LinkedIn company ID"
        },
        "companyName": {
          "type": [
            "string",
            "null"
          ],
          "description": "Company name"
        },
        "companyLinkedinUrl": {
          "type": [
            "string",
            "null"
          ],
          "description": "Company LinkedIn URL"
        },
        "linkedinCompanySlug": {
          "type": [
            "string",
            "null"
          ],
          "description": "LinkedIn company vanity slug"
        },
        "companyDomains": {
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": "string"
          },
          "description": "Known company domains"
        },
        "crunchbaseSlug": {
          "type": [
            "string",
            "null"
          ],
          "description": "Crunchbase organization slug — permalink https://www.crunchbase.com/organization/{slug}. Null when not known."
        },
        "title": {
          "type": [
            "string",
            "null"
          ],
          "description": "Job title"
        },
        "isCurrent": {
          "type": "boolean",
          "description": "Whether this is a current position"
        },
        "startDate": {
          "type": [
            "string",
            "null"
          ],
          "description": "ISO start date"
        },
        "endDate": {
          "type": [
            "string",
            "null"
          ],
          "description": "ISO end date"
        },
        "location": {
          "type": [
            "string",
            "null"
          ],
          "description": "Position location"
        },
        "employmentType": {
          "type": [
            "string",
            "null"
          ],
          "description": "Employment type"
        },
        "seniority": {
          "type": [
            "string",
            "null"
          ],
          "description": "Seniority level"
        }
      },
      "required": [
        "isCurrent"
      ]
    },
    "PersonReactionChange": {
      "type": "object",
      "properties": {
        "reactionId": {
          "type": "string",
          "description": "Unique reaction identifier (dedup key)"
        },
        "type": {
          "type": [
            "string",
            "null"
          ],
          "description": "Reaction type (LIKE, LOVE, INSIGHTFUL, CELEBRATE, SUPPORT, FUNNY)"
        },
        "postContent": {
          "type": [
            "string",
            "null"
          ],
          "description": "Content of the reacted post"
        },
        "postUrl": {
          "type": [
            "string",
            "null"
          ],
          "description": "URL to the LinkedIn post"
        },
        "postAuthorName": {
          "type": [
            "string",
            "null"
          ],
          "description": "Name of the post author"
        },
        "reactedAgo": {
          "type": [
            "string",
            "null"
          ],
          "description": "Relative time since the reaction"
        },
        "reactedAt": {
          "type": [
            "string",
            "null"
          ],
          "description": "Exact ISO timestamp when the reaction occurred"
        }
      },
      "required": [
        "reactionId"
      ]
    },
    "PromotionChange": {
      "allOf": [
        {
          "$ref": "#/$defs/PersonExperienceChange"
        }
      ],
      "properties": {
        "previousTitle": {
          "type": [
            "string",
            "null"
          ],
          "description": "Title before the promotion"
        },
        "previousCompany": {
          "type": [
            "string",
            "null"
          ],
          "description": "Company name before the promotion"
        }
      }
    },
    "RevealedEmail": {
      "type": "object",
      "properties": {
        "emailAddress": {
          "type": "string",
          "minLength": 1,
          "description": "Work email address"
        }
      },
      "required": [
        "emailAddress"
      ]
    },
    "RoleTenureChange": {
      "allOf": [
        {
          "$ref": "#/$defs/CompanyTenureChange"
        }
      ],
      "properties": {
        "title": {
          "type": [
            "string",
            "null"
          ],
          "description": "Job title of the role where tenure was reached"
        }
      }
    },
    "ScalarDeltaChange": {
      "type": "object",
      "properties": {
        "kind": {
          "type": "string",
          "const": "scalar"
        },
        "previous": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "description": "Previous value"
        },
        "current": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "description": "Current value"
        }
      },
      "required": [
        "kind"
      ]
    },
    "TenureChange": {
      "type": "object",
      "properties": {
        "kind": {
          "type": "string",
          "const": "numeric"
        },
        "previous": {
          "type": [
            "number",
            "null"
          ],
          "description": "Previous tenure in months"
        },
        "current": {
          "type": [
            "number",
            "null"
          ],
          "description": "Current tenure in months"
        },
        "direction": {
          "type": "string",
          "enum": [
            "increased",
            "decreased"
          ],
          "description": "Direction of change"
        },
        "absoluteChange": {
          "type": "number",
          "description": "Absolute change in months"
        },
        "percentChange": {
          "type": [
            "number",
            "null"
          ],
          "description": "Percent change, null if previous was zero or null"
        }
      },
      "required": [
        "kind",
        "direction",
        "absoluteChange"
      ]
    },
    "TrackedEmployeeChange": {
      "type": "object",
      "properties": {
        "userId": {
          "type": "string",
          "description": "LinkedIn user ID"
        },
        "name": {
          "type": [
            "string",
            "null"
          ],
          "description": "Employee name"
        },
        "title": {
          "type": [
            "string",
            "null"
          ],
          "description": "Job title"
        },
        "startDate": {
          "type": [
            "string",
            "null"
          ],
          "description": "ISO date when the employee started at this company"
        },
        "primarySlug": {
          "type": [
            "string",
            "null"
          ],
          "description": "LinkedIn profile slug"
        },
        "linkedinUrl": {
          "type": [
            "string",
            "null"
          ],
          "description": "Full LinkedIn profile URL"
        }
      },
      "required": [
        "userId"
      ]
    }
  }
}