---
title: "Get Chat People"
method: GET
path: "/v1/chat/{chat_id}/people"
tags: ["chat"]
---

# Get Chat People

`GET /v1/chat/{chat_id}/people`

## Request

- Base URL: `https://api.happenstance.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.happenstance.ai/v1/chat/{chat_id}/people`
- Auth: HTTP bearer

Everyone Chat showed in the chat, one row per person with their cards merged: title,
company, location, LinkedIn, how the user is connected (directly, and through which
mutuals, with connection strength), and why Chat picked them. In order of first
appearance; with turn_id, the people of that turn.

## Path parameters

- `chat_id` string, required

## Query parameters

- `turn_id` string, nullable: Only the people this turn showed, in its order; `latest` for the newest turn
- `page` integer: Page, starting at 0 (100 people a page)

## Response `200`

Successful Response

- GetChatPeopleResponseV1: Response from GET /v1/chat/{chat_id}/people.
  - `chat_id` string, required
  - `turn_id` string, nullable: The turn the list is limited to, when one was given
  - `page` integer, required: This page, starting at 0
  - `page_size` integer, required
  - `total` integer, required: People in the whole list
  - `has_more` boolean, required
  - `people` ChatPersonV1[], required
    - `person_id` string, required: The person's id (stable across chats and searches)
    - `name` string, required
    - `headline` string, nullable: Title and company, as shown
    - `current_title` string, nullable
    - `current_company` string, nullable
    - `location` string, nullable
    - `linkedin_url` string, nullable
    - `happenstance_url` string, required: The person's page on Happenstance
    - `relationship` ChatPersonRelationshipV1, required
      - `you_know_them` boolean, required: Whether the user is directly connected to them
      - `sources` string[]: Where the user's own connection comes from (linkedin, gmail, google_calendar, google_contacts, ...). Empty when they aren't directly connected.
      - `affinity` number, nullable: How strong the user's own connection is, as a score: 0 means we have no evidence beyond the connection itself; 45 and up is medium, 75 strong, 100 very strong. Null when not directly connected.
      - `affinity_level` 'very_strong' | 'strong' | 'medium' | 'weak', nullable: The same as a level, as the Happenstance app shows it
    - `mutuals` ChatPersonMutualV1[]: People who can introduce the user, strongest first (at most 20)
      - `user_id` string, required: The mutual's user id
      - `name` string, required: The mutual's name
      - `happenstance_url` string, required: The mutual's Happenstance profile
      - `via` 'friend' | 'group', nullable: How the user reaches the mutual: a Happenstance friend, or a member of a shared group
      - `affinity` number, nullable: How well the mutual knows the person, as a score: 0 means we have no evidence beyond the connection itself; 45 and up is medium, 75 strong, 100 very strong.
      - `affinity_level` 'very_strong' | 'strong' | 'medium' | 'weak', nullable: The same as a level, as the Happenstance app shows it
      - `sources` string[]: How the mutual is connected to the person, when that's public: linkedin, instagram, twitter, in that order. Email, calendar and contact-book connections are the mutual's own and are left out, so this is empty when those are all there is
    - `rationale_markdown` string, required: Why Chat picked them: the card's text from the latest turn that showed them, with its links
    - `links` ChatLinkV1[]: The links in the rationale (posts, pages)
      - `url` string, required
      - `text` string, required
    - `columns` ChatPersonColumnV1[]: The extra columns of the table that showed them (from the latest card that had any, with an earlier card's value for a column it left blank), in the table's order: values the user asked Chat for, such as priority or best role. Empty when the table had none.
      - `column` string, required: The column's label, as the table's header shows it
      - `value` string, required: The person's value; empty when Chat didn't know it
    - `section` string, nullable: The heading the card was under, when Chat grouped the people ("Investors", "Tier 1")
    - `search_id` string, nullable: The search that found them, when one did
    - `turn_ids` string[], required: The turns that showed them, oldest first

## Other responses

- `400`: Bad Request
- `401`: Unauthorized
- `402`: Payment Required
- `403`: Forbidden
- `404`: Not Found
- `410`: Gone
- `422`: Validation Error
- `500`: Internal Server Error
- `503`: Service Unavailable

## Changes

- **2026-10-23** `c8149ed29b44`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/happenstance/apis/happenstance-api/changes/v1/chat/:chat_id/people/get.md)

---

[API](https://skmtc.dev/happenstance/apis/happenstance-api.md) - [All operations](https://skmtc.dev/happenstance/apis/happenstance-api/llms.txt) - [OpenAPI document](https://skmtc.dev/happenstance/apis/happenstance-api/revisions/0b6ee3927db3?raw)
