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

# Read a profile

> Read the current public v3 profile for an Orbit profile ID, alias, or slug.

Returns the current public profile for one Orbit identity. This endpoint only
reads data. It does not start enrichment or wait for an in-progress Enrich
request.

Use a profile ID from [Search](/api/search/search), an Enrich response, or a
previous profile read. You can also pass a known profile alias or public profile
slug. When an alias or slug resolves to a profile, the response contains the
canonical Orbit profile ID.

<RequestExample>
  ```bash curl theme={"dark"}
  curl "https://api.orbitsearch.com/v3/enrich/$PROFILE_ID" \
    -H "Authorization: Bearer $ORBIT_API_KEY"
  ```

  ```javascript JavaScript theme={"dark"}
  const response = await fetch(
    `https://api.orbitsearch.com/v3/enrich/${profileId}`,
    {
      headers: {
        Authorization: `Bearer ${process.env.ORBIT_API_KEY}`,
      },
    }
  );

  if (!response.ok) {
    throw new Error(`Profile read failed with ${response.status}`);
  }

  const { profile } = await response.json();
  console.log(profile.displayName);
  ```

  ```python Python theme={"dark"}
  import os
  import requests

  response = requests.get(
      f"https://api.orbitsearch.com/v3/enrich/{profile_id}",
      headers={"Authorization": f"Bearer {os.environ['ORBIT_API_KEY']}"},
  )
  response.raise_for_status()

  profile = response.json()["profile"]
  print(profile.get("displayName"))
  ```
</RequestExample>

## Path parameters

<ParamField path="profile_id" type="string" required>
  An Orbit profile ID, a known alias ID, or a public profile slug. The
  `profile_id` and `profile.id` fields in a successful response contain the
  resolved canonical Orbit profile ID.
</ParamField>

The safest option is to follow the exact `links.profile` value returned by
[Enrich a profile](/api/enrich/enrich-profile),
[Get enrichment status](/api/enrich/enrich-status), or
[Batch enrich profiles](/api/enrich/batch-enrich).

## Response examples

Level 2 and level 3 profiles use the same response schema. The generation level
describes the depth of enrichment, not a different response type.

|                  | Level 2                                                   | Level 3                                                                                                                                 |
| ---------------- | --------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| Enrichment depth | Adds LinkedIn enrichment                                  | Adds web, social, and OSINT enrichment                                                                                                  |
| Typical result   | Professional identity, work, education, and LinkedIn data | A deeper profile that can also include broader public sources, personal facts, events, contributions, contact data, and address history |
| Response schema  | The profile-read schema on this page                      | The same profile-read schema                                                                                                            |

Use the **Level 2** and **Level 3** tabs in the response example to compare the
same profile after level 2 enrichment and after a level 3 upgrade. The examples
are representative, not field guarantees. An optional field can be present at
either level when Orbit has a public value for it.

<ResponseExample>
  ```json Level 2 theme={"dark"}
  {
    "profile_id": "profile_123",
    "generation_level": 2,
    "profile": {
      "id": "profile_123",
      "generationLevel": 2,
      "displayName": "Maya Chen",
      "personName": "Maya Chen",
      "avatarUrl": "https://images.example.com/maya-chen.jpg",
      "profileUrl": "https://orbitsearch.com/maya-chen",
      "slug": "maya-chen",
      "verified": true,
      "location": {
        "city": "San Francisco",
        "region": "CA",
        "country": "US"
      },
      "headline": {
        "jobTitle": "Founder and CEO",
        "companyName": "Example Robotics",
        "schoolName": "Example University"
      },
      "sections": {
        "socials": {
          "items": [
            {
              "id": "social_linkedin_123",
              "media": "linkedin",
              "handle": "example-maya-chen",
              "description": "Founder and CEO at Example Robotics",
              "icon": "linkedin",
              "priority": 1
            }
          ]
        },
        "jobs": {
          "items": [
            {
              "id": "job_123",
              "kind": "job",
              "company": "Example Robotics",
              "title": "Founder and CEO",
              "years": "2021-present",
              "position": 1,
              "updatedAt": "2026-07-20T18:30:00.000Z"
            }
          ]
        },
        "education": {
          "items": [
            {
              "id": "education_123",
              "kind": "education",
              "school": "Example University",
              "status": "Graduated",
              "years": "2008-2012",
              "linkedinSchoolId": "12345",
              "schoolRecordId": "school_123"
            }
          ]
        }
      },
      "sources": [
        {
          "link": "https://www.linkedin.com/in/example-maya-chen",
          "title": "Maya Chen",
          "summary": "Public professional profile.",
          "sourceName": "LinkedIn"
        }
      ]
    }
  }
  ```

  ```json Level 3 theme={"dark"}
  {
    "profile_id": "profile_123",
    "generation_level": 3,
    "profile": {
      "id": "profile_123",
      "generationLevel": 3,
      "displayName": "Maya Chen",
      "personName": "Maya Chen",
      "aliases": ["Maya L. Chen"],
      "avatarUrl": "https://images.example.com/maya-chen.jpg",
      "profileUrl": "https://orbitsearch.com/maya-chen",
      "slug": "maya-chen",
      "category": {
        "id": "ENGINEER",
        "label": "Engineer"
      },
      "verified": true,
      "location": {
        "city": "San Francisco",
        "region": "CA",
        "country": "US"
      },
      "headline": {
        "jobTitle": "Founder and CEO",
        "companyName": "Example Robotics",
        "schoolName": "Example University"
      },
      "emails": ["maya@example.com"],
      "phoneNumbers": ["+14155550123"],
      "addresses": [
        {
          "street": "1 Market Street",
          "city": "San Francisco",
          "region": "CA",
          "postalCode": "94105",
          "country": "US",
          "firstReported": 2021,
          "lastReported": 2026
        }
      ],
      "sections": {
        "bio": {
          "bio": "Maya Chen is an engineer and the founder of Example Robotics.",
          "sources": [
            {
              "link": "https://example.com/maya-chen",
              "title": "Maya Chen",
              "sourceName": "Example",
              "sourceImage": "https://example.com/favicon.ico"
            }
          ]
        },
        "basic": {
          "items": [
            {
              "id": "basic-birthday",
              "kind": "birthday",
              "title": "36 years old, born May 12, 1990",
              "birthday": "1990-05-12",
              "verified": true
            },
            {
              "id": "basic-location",
              "kind": "location",
              "title": "San Francisco, CA",
              "location": "San Francisco, CA"
            }
          ]
        },
        "images": {
          "items": [
            {
              "id": "image_123",
              "imageUrl": "https://images.example.com/maya-chen.jpg",
              "role": "primary",
              "type": "default",
              "question": "Profile photo",
              "displayOrder": 1,
              "sources": [
                {
                  "link": "https://example.com/maya-chen",
                  "sourceName": "Example"
                }
              ]
            }
          ]
        },
        "socials": {
          "items": [
            {
              "id": "social_123",
              "media": "github",
              "handle": "mayachen",
              "description": "Open-source robotics projects",
              "icon": "github",
              "priority": 1
            }
          ]
        },
        "jobs": {
          "items": [
            {
              "id": "job_123",
              "kind": "job",
              "company": "Example Robotics",
              "title": "Founder and CEO",
              "description": "Builds warehouse robotics systems.",
              "years": "2021-present",
              "imageUrl": "https://images.example.com/example-robotics.png",
              "position": 1,
              "sources": [
                {
                  "link": "https://example.com/maya-chen-work",
                  "sourceName": "Example",
                  "chunks": [
                    {
                      "text": "Maya Chen founded Example Robotics in 2021 and leads the company as CEO."
                    }
                  ]
                }
              ],
              "updatedAt": "2026-07-20T18:30:00.000Z"
            }
          ],
          "sources": [
            {
              "link": "https://example.com/maya-chen-work",
              "sourceName": "Example"
            }
          ]
        },
        "education": {
          "items": [
            {
              "id": "education_123",
              "kind": "education",
              "school": "Example University",
              "status": "Graduated",
              "years": "2008-2012",
              "linkedinSchoolId": "12345",
              "schoolRecordId": "school_123"
            }
          ]
        },
        "eventsTimeline": {
          "items": [
            {
              "id": "event_123",
              "kind": "event",
              "title": "Example Robotics announced a new warehouse robot",
              "description": "The company introduced its second-generation system.",
              "date": "2026-06-10",
              "datePrecision": "day",
              "dateBasis": "stated",
              "year": "2026",
              "eventKey": "example-robotics-product-launch",
              "updateCount": 1,
              "lastUpdatedAt": "2026-06-11T09:00:00.000Z",
              "changes": [
                {
                  "sourceLink": "https://example.com/product-launch",
                  "sourceName": "Example",
                  "changeKind": "product_launch",
                  "summary": "A new system was announced."
                }
              ]
            }
          ]
        },
        "families": null,
        "githubRepos": {
          "items": [
            {
              "kind": "github_repo",
              "name": "robot-planner",
              "nameWithOwner": "mayachen/robot-planner",
              "description": "Path-planning tools for mobile robots.",
              "language": "Python",
              "isFork": false,
              "starsCount": 482,
              "role": "maintainer",
              "contributionsCount": 164
            }
          ]
        }
      },
      "sources": [
        {
          "link": "https://example.com/maya-chen",
          "title": "Maya Chen",
          "summary": "Public professional profile.",
          "images": ["https://images.example.com/maya-chen.jpg"],
          "sourceName": "Example",
          "sourceImage": "https://example.com/favicon.ico",
          "chunks": [
            {
              "text": "Maya Chen founded Example Robotics in 2021."
            }
          ]
        }
      ]
    }
  }
  ```
</ResponseExample>

## Response object

<ResponseField name="profile_id" type="string" required>
  The canonical Orbit profile ID. This matches `profile.id`. It can differ from
  the path value when you read the profile through an alias ID or slug.
</ResponseField>

<ResponseField name="generation_level" type="number | null" required>
  The stored generation level of the returned profile. This matches
  `profile.generationLevel`.

  * `1` contains Orbit identity data.
  * `2` adds LinkedIn enrichment.
  * `3` adds web, social, and OSINT enrichment.
  * `null` means a legacy profile has no stored generation level.
</ResponseField>

<ResponseField name="profile" type="object" required>
  The current public developer profile.
</ResponseField>

## Profile object

<ResponseField name="profile.id" type="string" required>
  The canonical Orbit profile ID.
</ResponseField>

<ResponseField name="profile.generationLevel" type="number | null" required>
  The profile generation level. It has the same value as the top-level
  `generation_level` field.
</ResponseField>

<ResponseField name="profile.displayName" type="string">
  The public display name. Omitted when no display name is available.
</ResponseField>

<ResponseField name="profile.personName" type="string">
  The person's public name. This currently matches `displayName`. Omitted when
  no public name is available.
</ResponseField>

<ResponseField name="profile.aliases" type="string[]">
  Alternate real names, such as nicknames, maiden names, or stage names.
  Usernames and social handles are not included. Values are deduplicated without
  regard to letter case. The field is omitted when no aliases are available.
</ResponseField>

<ResponseField name="profile.avatarUrl" type="string | null" required>
  The selected public profile image URL. `null` means the profile has no public
  image that is eligible for use as an avatar.
</ResponseField>

<ResponseField name="profile.profileUrl" type="string">
  The canonical public Orbit profile URL. The field is omitted when the profile
  has no public slug.
</ResponseField>

<ResponseField name="profile.slug" type="string">
  The public Orbit profile slug. You can pass this value as `profile_id` in a
  later profile read.
</ResponseField>

<ResponseField name="profile.category" type="object">
  Orbit's public semantic category for the person. The object contains a
  machine-readable `id` and a display-ready `label`. The field is omitted when
  the profile category is unknown.

  <Expandable title="properties">
    <ResponseField name="profile.category.id" type="string" required>
      The category enum value, such as `ENGINEER`, `ENTREPRENEUR`, or
      `SCIENTIST`.
    </ResponseField>

    <ResponseField name="profile.category.label" type="string" required>
      The human-readable category label, such as `Engineer`, `Entrepreneur`, or
      `Scientist`.
    </ResponseField>
  </Expandable>
</ResponseField>

<Accordion title="All profile category IDs">
  `VENTURE_CAPITALIST`, `ENTREPRENEUR`, `ENGINEER`, `FILM_MAKER`, `BANKER`,
  `DESIGNER`, `MUSICIAN`, `ATHLETE`, `ACTOR`, `ACTRESS`, `CONTENT_CREATOR`,
  `POLITICIAN`, `ENTERTAINER`, `ARTIST`, `GAMER`, `CHEF`, `DOCTOR`, `MODEL`,
  `REAL_ESTATE_AGENT`, `REAL_ESTATE_DEVELOPER`,
  `CAPITAL_MARKETS_EXECUTIVE`, `SCIENTIST`, `PROFESSOR`, `JOURNALIST`,
  `AUTHOR`, `ACTIVIST`, `PHILANTHROPIST`, `LAWYER`, `COACH`, `ARCHITECT`, and
  `ROYALTY`.
</Accordion>

<ResponseField name="profile.verified" type="boolean" required>
  Whether Orbit has marked the profile as verified. The value is `false` when
  the profile is not verified.
</ResponseField>

<ResponseField name="profile.location" type="object">
  The person's public current location. The object can contain `city`, `region`,
  and `country`. Each unavailable property is omitted.

  <Expandable title="properties">
    <ResponseField name="profile.location.city" type="string">
      City or locality.
    </ResponseField>

    <ResponseField name="profile.location.region" type="string">
      State, province, or region.
    </ResponseField>

    <ResponseField name="profile.location.country" type="string">
      Country value from the public profile data.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="profile.headline" type="object">
  A compact professional headline. Unavailable properties are omitted.

  <Expandable title="properties">
    <ResponseField name="profile.headline.jobTitle" type="string">
      Current public job title.
    </ResponseField>

    <ResponseField name="profile.headline.companyName" type="string">
      Current public employer or company.
    </ResponseField>

    <ResponseField name="profile.headline.schoolName" type="string">
      Current or most recent public school.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="profile.emails" type="string[]">
  Deduplicated public email addresses collected for the profile. The field is
  omitted when no public email address is available.
</ResponseField>

<ResponseField name="profile.phoneNumbers" type="string[]">
  Deduplicated public phone numbers. Values are returned as stored after
  whitespace is removed from the start and end. The field is omitted when no
  public phone number is available.
</ResponseField>

<ResponseField name="profile.addresses" type="object[]">
  Current and historical public addresses. Duplicate locations are merged. When
  duplicate records contain report dates, Orbit keeps the earliest
  `firstReported` value and the latest `lastReported` value.

  <Expandable title="properties">
    <ResponseField name="profile.addresses[].street" type="string">
      Street address.
    </ResponseField>

    <ResponseField name="profile.addresses[].city" type="string">
      City or locality.
    </ResponseField>

    <ResponseField name="profile.addresses[].region" type="string">
      State, province, or region.
    </ResponseField>

    <ResponseField name="profile.addresses[].postalCode" type="string">
      Postal or ZIP code.
    </ResponseField>

    <ResponseField name="profile.addresses[].country" type="string">
      Country value from the public address record.
    </ResponseField>

    <ResponseField name="profile.addresses[].firstReported" type="number">
      The earliest numeric date value associated with the location. Depending
      on the source, this can be a four-digit year or a more precise numeric
      date.
    </ResponseField>

    <ResponseField name="profile.addresses[].lastReported" type="number">
      The latest numeric date value associated with the location. Depending on
      the source, this can be a four-digit year or a more precise numeric date.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="profile.sections" type="object" required>
  Structured public profile content. See [Profile sections](#profile-sections)
  for the complete section list and item schemas.
</ResponseField>

<ResponseField name="profile.sources" type="object[]" required>
  Deduplicated and sanitized public sources used across the profile. The array
  is empty when no profile-level sources are available. See
  [Source object](#source-object).
</ResponseField>

## Field availability

The response uses these availability rules:

* Required fields are always present, even when their value is `null` or an
  empty array.
* Most optional scalar fields, arrays, and objects are omitted when no public
  value is available.
* A section can be omitted when Orbit has no public content for it.
* Some sections can be `null` when the content is unavailable or intentionally
  hidden.
* `profile.sections.socials` is always present. Its `items` array can be empty.
* `profile.sources` is always present. It can be an empty array.

Do not treat an omitted field and a `null` field as an empty string or zero.

## Profile sections

| Field             | Type                       | Description                                                                       |
| ----------------- | -------------------------- | --------------------------------------------------------------------------------- |
| `bio`             | object, `null`, or omitted | Public profile summary. The object contains `bio` and optional `sources`.         |
| `basic`           | object, `null`, or omitted | Basic facts such as birthday, school, and location.                               |
| `personalLife`    | object, `null`, or omitted | Public personal-life facts.                                                       |
| `images`          | object, `null`, or omitted | Public profile and social-media images.                                           |
| `socials`         | object                     | Public social handles. Always present as `{ "items": [] }` when empty.            |
| `jobs`            | object or omitted          | Public work history.                                                              |
| `education`       | object, `null`, or omitted | Public education history.                                                         |
| `passions`        | object, `null`, or omitted | Public interests and passions.                                                    |
| `worldview`       | object or omitted          | Public worldview, cause, political, or religious information.                     |
| `accomplishments` | object or omitted          | Public accomplishments.                                                           |
| `controversies`   | object or omitted          | Publicly reported controversies.                                                  |
| `bestQualities`   | object or omitted          | Publicly described strengths or qualities.                                        |
| `netWorth`        | object or omitted          | Public net-worth range and related explanation.                                   |
| `eventsTimeline`  | object or omitted          | Dated public events and source-backed changes.                                    |
| `portfolio`       | object or omitted          | Public work samples. Can also contain a section-level `summary`.                  |
| `families`        | object or `null`           | Public family relationships. `null` means no public family records are available. |
| `researchPapers`  | object or omitted          | Public research-paper contributions. Contains at most 100 items.                  |
| `githubRepos`     | object or omitted          | Public GitHub repository contributions. Contains at most 100 items.               |
| `mediaCredits`    | object or omitted          | Public film, television, and related media credits. Contains at most 100 items.   |
| `musicCredits`    | object or omitted          | Public music-release credits. Contains at most 100 items.                         |
| `books`           | object or omitted          | Public authored-work contributions. Contains at most 100 items.                   |

Most content sections use this envelope:

```json theme={"dark"}
{
  "items": [],
  "sources": []
}
```

`items` is required when the section object is present. `sources` is optional.
The `images`, `socials`, `families`, and contribution sections do not use the
generic source envelope.

Source evidence appears at two levels:

* The section-level `sources` array is the deduplicated union of the evidence
  for the whole section.
* Each item can also carry its own `sources` array. It lists only the sources
  that support that specific item, and each source can include excerpt `chunks`
  from the source text. Use the item-level array to map one item to its
  evidence. An item without attributed evidence omits the field.

Evidence can be text or an image. A text source supports the item with excerpt
`chunks`. An image source supports the item with the photo itself: the
supporting image arrives in `images`, `chunks` is empty, and `link` points to
the page the photo came from.

```json theme={"dark"}
{
  "link": "https://www.facebook.com/example/posts/123",
  "sourceName": "facebook",
  "images": ["https://images.example.com/cached-photo.jpg"],
  "chunks": []
}
```

When the same page supports an item with both text and a photo, the item shows
one source entry for that page, carrying both the excerpt `chunks` and the
supporting image in `images`.

### Section fields

Unless a description says that a field is always present, the field is optional
and is omitted when unavailable.

<AccordionGroup>
  <Accordion title="Bio">
    | Field     | Type      | Description                                                                       |
    | --------- | --------- | --------------------------------------------------------------------------------- |
    | `bio`     | string    | Public profile summary. Always present when the `bio` section object is returned. |
    | `sources` | source\[] | Public evidence for the profile summary.                                          |
  </Accordion>

  <Accordion title="Common fields">
    `basic`, `personalLife`, `jobs`, `education`, `passions`, `worldview`,
    `accomplishments`, `controversies`, `bestQualities`, `netWorth`, and
    `portfolio` use some or all of these fields. Fields that do not apply to an
    item are omitted.

    | Field                | Type             | Description                                                                                                                              |
    | -------------------- | ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
    | `id`                 | string           | Public section-record ID.                                                                                                                |
    | `kind`               | string           | Item discriminator, such as `birthday`, `location`, `job`, `education`, `accomplishment`, `controversy`, `best_quality`, or `net_worth`. |
    | `title`              | string           | Primary display text.                                                                                                                    |
    | `description`        | string           | Longer explanation or detail.                                                                                                            |
    | `birthday`           | string           | Public birthday value, normally an ISO date when a full date is available.                                                               |
    | `company`            | string           | Company or employer name.                                                                                                                |
    | `school`             | string           | School name.                                                                                                                             |
    | `status`             | string           | Education or item status.                                                                                                                |
    | `location`           | string           | Location text for the item.                                                                                                              |
    | `imageUrl`           | string           | Primary image or logo URL for the item.                                                                                                  |
    | `backgroundImageUrl` | string           | Background image URL, most often used by education records.                                                                              |
    | `years`              | string           | Human-readable time span, such as `2021-present`.                                                                                        |
    | `position`           | number           | Stored display-order hint.                                                                                                               |
    | `emoji`              | string           | Display emoji when the section includes one.                                                                                             |
    | `summary`            | string           | Short item summary.                                                                                                                      |
    | `range`              | string           | Public range, most often used by net-worth records.                                                                                      |
    | `rounds`             | string           | Public rounds or repeated-event description.                                                                                             |
    | `year`               | string or number | Year associated with the item.                                                                                                           |
    | `linkedinSchoolId`   | string           | Public LinkedIn school identifier when available.                                                                                        |
    | `schoolRecordId`     | string           | Orbit's normalized school-record identifier when available.                                                                              |
    | `verified`           | boolean          | Whether Orbit has verified this item value.                                                                                              |
    | `sources`            | source\[]        | Public evidence for this item only. Each source can include excerpt `chunks` that support the item. See [Source object](#source-object). |
    | `sourceIds`          | string\[]        | IDs associated with the item's normalized evidence records.                                                                              |
    | `updatedAt`          | string           | Last-update timestamp, normally in ISO 8601 format.                                                                                      |
  </Accordion>

  <Accordion title="Images">
    | Field          | Type                        | Description                                                                                                                                           |
    | -------------- | --------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
    | `id`           | string                      | Public image-record ID.                                                                                                                               |
    | `imageUrl`     | string                      | Public image URL. Always present.                                                                                                                     |
    | `role`         | `primary` or `social_media` | Always present. `primary` is eligible for the main profile image. `social_media` is a person-qualified image from the person's public social content. |
    | `type`         | string                      | Public image type when available.                                                                                                                     |
    | `question`     | string                      | Public prompt or caption question associated with the image.                                                                                          |
    | `sources`      | source\[]                   | Public evidence for the image.                                                                                                                        |
    | `displayOrder` | number                      | Public display-order hint.                                                                                                                            |
  </Accordion>

  <Accordion title="Socials">
    | Field         | Type   | Description                                     |
    | ------------- | ------ | ----------------------------------------------- |
    | `id`          | string | Public social-handle record ID. Always present. |
    | `handle`      | string | Username or handle. Always present.             |
    | `media`       | string | Network or platform name, such as `github`.     |
    | `description` | string | Public description for the account.             |
    | `icon`        | string | Icon identifier for display.                    |
    | `priority`    | number | Display-order priority.                         |
  </Accordion>

  <Accordion title="Events">
    Events can contain all common fields plus these fields:

    | Field                  | Type      | Description                                                                                                                                                                              |
    | ---------------------- | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    | `date`                 | string    | Event date at its precision: `YYYY-MM-DD` for a day, `YYYY-MM` for a month, `YYYY` for a year.                                                                                           |
    | `datePrecision`        | string    | How much of `date` is known: `day`, `month` or `year`.                                                                                                                                   |
    | `dateBasis`            | string    | Where the date comes from: `stated` (the source gives the date), `published` (the source's publish or post date — show it as "Reported …"), or `inferred` (a year derived from context). |
    | `eventKey`             | string    | Normalized key used to group updates for the same event.                                                                                                                                 |
    | `updateCount`          | number    | Number of updates merged into the event: new information or a new date.                                                                                                                  |
    | `lastUpdatedAt`        | string    | Timestamp of the latest update.                                                                                                                                                          |
    | `changes`              | object\[] | Source-backed changes that were merged into the event.                                                                                                                                   |
    | `changes[].sourceLink` | string    | Source URL for the change.                                                                                                                                                               |
    | `changes[].sourceName` | string    | Human-readable source name.                                                                                                                                                              |
    | `changes[].changeKind` | string    | Machine-readable change category.                                                                                                                                                        |
    | `changes[].summary`    | string    | Short description of the change.                                                                                                                                                         |
  </Accordion>

  <Accordion title="Family">
    | Field                          | Type   | Description                                   |
    | ------------------------------ | ------ | --------------------------------------------- |
    | `id`                           | string | Public family-record ID.                      |
    | `kind`                         | string | Always `family_member`.                       |
    | `displayName`                  | string | Family member's public display name.          |
    | `relationship`                 | string | Public relationship label.                    |
    | `profilePicture`               | object | Public profile-picture record when available. |
    | `profilePicture.id`            | string | Public picture-record ID.                     |
    | `profilePicture.data.answer`   | string | Public picture answer, normally an image URL. |
    | `profilePicture.data.question` | string | Public picture question.                      |
    | `profilePicture.data.type`     | string | Public picture type.                          |
  </Accordion>

  <Accordion title="Research">
    | Field             | Type    | Description                                    |
    | ----------------- | ------- | ---------------------------------------------- |
    | `kind`            | string  | Always `research_paper`.                       |
    | `title`           | string  | Public paper title.                            |
    | `publicationDate` | string  | Publication date from the contribution record. |
    | `summary`         | string  | Public abstract or summary.                    |
    | `isFirstAuthor`   | boolean | Whether the person is listed as first author.  |
  </Accordion>

  <Accordion title="GitHub">
    | Field                | Type    | Description                                 |
    | -------------------- | ------- | ------------------------------------------- |
    | `kind`               | string  | Always `github_repo`.                       |
    | `name`               | string  | Repository name.                            |
    | `nameWithOwner`      | string  | Repository name in `owner/repository` form. |
    | `description`        | string  | Public repository description.              |
    | `language`           | string  | Primary programming language.               |
    | `isFork`             | boolean | Whether the repository is a fork.           |
    | `starsCount`         | number  | Public GitHub star count.                   |
    | `role`               | string  | Person's relationship to the repository.    |
    | `contributionsCount` | number  | Recorded contribution count for the person. |
  </Accordion>

  <Accordion title="Media">
    | Field          | Type   | Description                               |
    | -------------- | ------ | ----------------------------------------- |
    | `kind`         | string | Always `media_credit`.                    |
    | `title`        | string | Film, television, or media title.         |
    | `imageUrl`     | string | Public cached artwork URL when available. |
    | `mediaType`    | string | Media type, such as movie or television.  |
    | `releaseDate`  | string | Public release date.                      |
    | `summary`      | string | Public title overview.                    |
    | `roleType`     | string | Credit type, such as cast or crew.        |
    | `roleName`     | string | Role or character name.                   |
    | `department`   | string | Production department.                    |
    | `episodeCount` | number | Number of credited episodes.              |
  </Accordion>

  <Accordion title="Music">
    | Field              | Type      | Description                                    |
    | ------------------ | --------- | ---------------------------------------------- |
    | `kind`             | string    | Always `music_credit`.                         |
    | `title`            | string    | Public release title.                          |
    | `imageUrl`         | string    | Public cached artwork URL when available.      |
    | `releaseType`      | string    | Primary release type, such as album or single. |
    | `secondaryTypes`   | string\[] | Additional release classifications.            |
    | `firstReleaseDate` | string    | First public release date.                     |
    | `creditName`       | string    | Name used in the release credit.               |
    | `role`             | string    | Person's role on the release.                  |
    | `relationship`     | string    | Relationship between the person and release.   |
  </Accordion>

  <Accordion title="Books">
    | Field              | Type      | Description                             |
    | ------------------ | --------- | --------------------------------------- |
    | `kind`             | string    | Always `book_work`.                     |
    | `title`            | string    | Public book or authored-work title.     |
    | `imageUrl`         | string    | Public cached cover URL when available. |
    | `firstPublishDate` | string    | First public publication date.          |
    | `description`      | string    | Public work description.                |
    | `subjects`         | string\[] | Public subject classifications.         |
    | `role`             | string    | Person's relationship to the work.      |
  </Accordion>
</AccordionGroup>

## Source object

Profile-level sources, section sources, item sources, and image sources use the
same sanitized shape. Internal IDs, model metadata, scores, and other internal
fields are not returned.

| Field           | Type      | Description                                                                                                            |
| --------------- | --------- | ---------------------------------------------------------------------------------------------------------------------- |
| `link`          | string    | Public source URL. Always present.                                                                                     |
| `title`         | string    | Public page title or short source title.                                                                               |
| `summary`       | string    | Public summary of the source.                                                                                          |
| `caption`       | string    | Public caption, such as the original caption for a social image.                                                       |
| `images`        | string\[] | Public image URLs found on the source. For image-backed evidence, the first image is the photo that supports the item. |
| `sourceName`    | string    | Human-readable publisher or platform name.                                                                             |
| `sourceImage`   | string    | Publisher logo or favicon URL.                                                                                         |
| `chunks`        | object\[] | Public evidence text extracted from the source.                                                                        |
| `chunks[].text` | string    | Evidence text. Always present when a chunk is returned.                                                                |
| `sources`       | source\[] | Nested public sources when one source record contains additional sources.                                              |

## Authentication, cost, and limits

This endpoint requires the `profile:read` scope. v3 profile reads do not consume
API credits. The default limit is 50 requests per second per API key, with a
burst capacity of 250 requests. Account-specific limits can differ. See
[Rate limits](/concepts/rate-limits).

## Error response

Errors use the common v3 error envelope:

```json theme={"dark"}
{
  "status": "failed",
  "error": {
    "code": "developer_profile_not_found",
    "message": "Profile not found"
  }
}
```

| Status | Code                             | Description                                                                                           |
| ------ | -------------------------------- | ----------------------------------------------------------------------------------------------------- |
| `401`  | `missing_api_key`                | The request has no valid bearer API key.                                                              |
| `403`  | `invalid_api_key`                | The API key is malformed, expired, revoked, or unknown.                                               |
| `403`  | `missing_api_key_scope`          | The API key does not have the `profile:read` scope.                                                   |
| `404`  | `developer_profile_not_found`    | The ID, alias, or slug does not resolve to a public Orbit profile.                                    |
| `429`  | `developer_api_key_rate_limited` | The API key exceeded the profile-read limit. Honor the `Retry-After` response header before retrying. |

Use `POST /v3/enrich/{profile_id}` when you need a higher generation level or a
fresh full profile.


## OpenAPI

````yaml openapi.json GET /v3/enrich/{profile_id}
openapi: 3.1.0
info:
  title: Orbit API
  version: 3.0.0
  description: Search for people and enrich known Orbit profiles.
servers:
  - url: https://api.orbitsearch.com
    description: Production
security:
  - bearerAuth: []
tags:
  - name: Search
    description: Find people and poll search results.
  - name: Enrich
    description: Read or enrich known Orbit profiles.
  - name: Watchers
    description: Watch a profile on a schedule and read what each run found.
  - name: Webhooks
    description: Register endpoints that receive signed event deliveries.
paths:
  /v3/enrich/{profile_id}:
    get:
      tags:
        - Enrich
      summary: Read an enriched profile
      description: >-
        Read the current public profile for an Orbit profile ID, known alias ID,
        or public profile slug. This request does not start or upgrade
        enrichment. Requires the `profile:read` scope.
      operationId: readEnrichedProfile
      parameters:
        - $ref: '#/components/parameters/ProfileId'
      responses:
        '200':
          description: The current public profile.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProfileReadResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
components:
  parameters:
    ProfileId:
      name: profile_id
      in: path
      required: true
      description: >-
        An Orbit profile ID or public profile slug. Profile reads also accept
        known alias IDs.
      schema:
        type: string
        minLength: 1
  schemas:
    ProfileReadResponse:
      type: object
      required:
        - profile_id
        - generation_level
        - profile
      properties:
        profile_id:
          type: string
        generation_level:
          oneOf:
            - type: integer
              minimum: 1
              maximum: 3
            - type: 'null'
        profile:
          $ref: '#/components/schemas/PublicProfile'
    PublicProfile:
      type: object
      description: >-
        The public Orbit profile. Available fields depend on the profile
        generation level.
      required:
        - id
        - generationLevel
        - avatarUrl
        - verified
        - sections
        - sources
      additionalProperties: true
      properties:
        id:
          type: string
        displayName:
          type: string
        personName:
          type: string
        aliases:
          type: array
          items:
            type: string
        generationLevel:
          oneOf:
            - type: integer
              minimum: 1
              maximum: 3
            - type: 'null'
        avatarUrl:
          oneOf:
            - type: string
              format: uri
            - type: 'null'
        profileUrl:
          type: string
          format: uri
        slug:
          type: string
        category:
          type: object
          required:
            - id
            - label
          properties:
            id:
              type: string
            label:
              type: string
        verified:
          type: boolean
        location:
          type: object
          properties:
            city:
              type: string
            region:
              type: string
            country:
              type: string
        headline:
          type: object
          properties:
            jobTitle:
              type: string
            companyName:
              type: string
            schoolName:
              type: string
        emails:
          type: array
          items:
            type: string
            format: email
        phoneNumbers:
          type: array
          items:
            type: string
        addresses:
          type: array
          items:
            type: object
            additionalProperties: true
        sections:
          type: object
          description: >-
            Structured profile sections. Standard sections are objects with
            section-specific items, or null when no public data is available.
            Items can carry item-level sources that map each item to its
            supporting evidence.
          additionalProperties:
            oneOf:
              - type: 'null'
              - type: object
                description: >-
                  A content section: items plus an optional deduplicated
                  section-level sources union.
                required:
                  - items
                additionalProperties: true
                properties:
                  items:
                    type: array
                    items:
                      type: object
                      additionalProperties: true
                      properties:
                        sources:
                          type: array
                          description: >-
                            Public evidence for this item only. Each source can
                            include excerpt chunks that support the item.
                            Omitted when no evidence is attributed to the item.
                          items:
                            $ref: '#/components/schemas/Source'
                  sources:
                    type: array
                    description: Deduplicated union of the evidence for the whole section.
                    items:
                      $ref: '#/components/schemas/Source'
              - type: object
                description: >-
                  The bio section: a public profile summary with optional
                  sources instead of items.
                required:
                  - bio
                additionalProperties: true
                properties:
                  bio:
                    type: string
                  sources:
                    type: array
                    description: Deduplicated union of the evidence for the whole section.
                    items:
                      $ref: '#/components/schemas/Source'
        sources:
          type: array
          description: Deduplicated and sanitized public sources used across the profile.
          items:
            $ref: '#/components/schemas/Source'
    ErrorResponse:
      type: object
      required:
        - status
        - error
      properties:
        status:
          type: string
          enum:
            - failed
        error:
          type: object
          required:
            - code
            - message
          properties:
            code:
              type: string
            message:
              type: string
    Source:
      type: object
      description: >-
        A sanitized public source. Profile-level sources, section sources, item
        sources, and image sources share this shape.
      required:
        - link
      additionalProperties: true
      properties:
        link:
          type: string
          format: uri
        title:
          type: string
        summary:
          type: string
        caption:
          type: string
        images:
          type: array
          items:
            type: string
            format: uri
        sourceName:
          type: string
        sourceImage:
          type: string
          format: uri
        chunks:
          type: array
          description: Public evidence text extracted from the source.
          items:
            type: object
            required:
              - text
            properties:
              text:
                type: string
        sources:
          type: array
          description: >-
            Nested public sources when one source record contains additional
            sources.
          items:
            $ref: '#/components/schemas/Source'
  responses:
    BadRequest:
      description: The request is not valid.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    Unauthorized:
      description: The API key is missing or not valid.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    Forbidden:
      description: The API key does not have the required scope.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    NotFound:
      description: The requested resource was not found.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    RateLimited:
      description: The API key exceeded a rate limit.
      headers:
        Retry-After:
          description: Seconds to wait before another request.
          schema:
            type: integer
            minimum: 0
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: Orbit API key
      description: Use an Orbit API key from the developer dashboard.

````