> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.getedulead.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.getedulead.com/_mcp/server.

# GetPerson

GET https://api.getedulead.com/v4/people/{id}

GetPerson returns one person by id. Opening a person counts nothing toward the limits.

Reference: https://docs.getedulead.com/api-reference/people/get

## Authentication

- `Authorization` header (bearer token, required) — A team API key, sent as `Authorization: Bearer <key>`.
- `Authorization` header (bearer token, required) — The Cognito access token of a signed-in Edulead user (`edulead auth login`), sent as `Authorization: Bearer <token>`.

## Request

### Path parameters

- `id` (string, required) — Identifier of the resource, assigned by Edulead and opaque to callers.

## Response

### 200

Success

- `person` (edulead.v4.Person, optional) — Person is a person Edulead knows at one or more institutions. The values are the Edulead keystone's; zero values are omitted.

## Types

### edulead.v4.Person

Person is a person Edulead knows at one or more institutions. The values are the Edulead keystone's; zero values are omitted.

- `id` (string, optional) — Identifier of the resource, assigned by Edulead and opaque to callers.
- `name` (string, optional) — The full name.
- `first_name` (string, optional)
- `middle_name` (string, optional)
- `last_name` (string, optional)
- `title` (string, optional) — The title the person is shown with.
- `title_rank` (integer, optional, nullable) — The seniority of the title, 0 to 100; unset when no role was recognized.
- `email` (string, optional)
- `email_domain` (string, optional)
- `email_type` (string, optional) — Whether the address is a personal or a shared one, such as PERSONAL.
- `email_format` (string, optional) — How the address is built from the name, such as \{f}\{last}.
- `email_source` (string, optional) — Whether the address was seen (OBSERVED) or built from the institution's format and verified.
- `email_verification_status` (string, optional) — The verifier's verdict, such as VALID, CATCH_ALL or INVALID; empty when never verified.
- `email_verify_time` (datetime, optional) — A point in time in RFC 3339 format, with up to nanosecond precision. Output uses UTC (`Z`); input may use an offset from UTC.
- `phone` (string, optional)
- `phone_uniqueness` (string, optional) — Whether the phone number is the person's own (UNIQUE) or shared.
- `state` (string, optional) — The state's postal code of the person's first institution, such as TX.
- `account_id` (string, optional) — The account the person belongs to: the district of a public school, else the school.
- `account_priority` (double, optional) — How important the account is, 0 to 100, from its size.
- `account_student_count` (string, optional)
- `priority` (integer, optional) — How valuable the person is as a contact, 0 to 100: the title's seniority and the quality of the contact details.
- `labels` (list of string, optional)
- `bios` (list of edulead.v4.PersonBio, optional)
- `institutions` (list of edulead.v4.PersonInstitution, optional) — The institutions the person belongs to, a school before its district.
- `roles` (list of edulead.v4.PersonRole, optional) — The roles the person holds, from the titles they were seen with.
- `first_observe_time` (datetime, optional) — When the person was first and last seen.
- `last_observe_time` (datetime, optional) — A point in time in RFC 3339 format, with up to nanosecond precision. Output uses UTC (`Z`); input may use an offset from UTC.
- `fulltext_matches` (list of edulead.v4.PersonTextMatch, optional) — The pages of the institutions' websites that matched a fulltext condition, at most 20. Set by SearchPeople only, when it has one.
- `update_time` (datetime, optional) — When any field last changed.

### edulead.v4.PersonBio

PersonBio is a published biography of the person.

- `text` (string, optional) — Free text to match. The RPC description says which fields it is matched against.
- `create_time` (datetime, optional) — When Edulead created the resource.

### edulead.v4.PersonInstitution

PersonInstitution is one institution a person belongs to.

- `institution_id` (string, optional) — The Institution's id.
- `name` (string, optional)
- `type` (string, optional) — DISTRICT, SCHOOL or AGENCY.
- `subtype` (string, optional) — As NCES classifies it, such as REGULAR or CHARTER.
- `access` (string, optional) — PUBLIC or PRIVATE.
- `state` (string, optional)
- `zip` (string, optional)
- `county_id` (string, optional) — The county's FIPS code.
- `student_count` (string, optional)
- `staff_count` (string, optional)
- `revenue_usd` (string, optional) — Annual revenue in whole US dollars.
- `nces_id` (string, optional)
- `nces_district_id` (string, optional)
- `address` (string, optional) — The physical address, as one line.
- `city` (string, optional)

### edulead.v4.PersonRole

PersonRole is one role a person holds.

- `code` (string, optional) — The role's code, such as director or teacher.
- `role` (string, optional)
- `area` (string, optional) — The area of work, such as curriculum and instruction.
- `modifier` (string, optional) — A qualifier of the role, such as assistant.
- `status` (string, optional) — Whether the role is current or past, such as former.
- `level` (string, optional)
- `system_status` (string, optional)
- `confidence` (double, optional) — How sure Edulead is of the role, 0 to 1.
- `rank` (integer, optional) — The role's seniority, 0 to 100.
- `decision_level` (string, optional) — Such as executive, director or practitioner.
- `functional_group` (string, optional)
- `market_themes` (list of string, optional)
- `evidence_count` (integer, optional) — How many sightings back the role.
- `first_observe_time` (datetime, optional) — A point in time in RFC 3339 format, with up to nanosecond precision. Output uses UTC (`Z`); input may use an offset from UTC.
- `last_observe_time` (datetime, optional) — A point in time in RFC 3339 format, with up to nanosecond precision. Output uses UTC (`Z`); input may use an offset from UTC.
- `evidence` (list of edulead.v4.PersonEvidence, optional) — The sightings, newest first as the keystone keeps them.

### edulead.v4.PersonTextMatch

PersonTextMatch is a page of an institution's website that matched a fulltext condition.

- `url` (string, optional)
- `snippet` (string, optional) — The matching passage as HTML, with each match inside \<em> tags.

### edulead.v4.PersonEvidence

PersonEvidence is one sighting behind a role.

- `id` (string, optional) — Identifier of the resource, assigned by Edulead and opaque to callers.
- `normalized_title` (string, optional) — The title seen, normalized.
- `source_type` (string, optional) — Where the person was seen: CRAWLER (a website) or FOIA (a public-records response).
- `match_method` (string, optional) — How the sighting was tied to the person, such as EMAIL or NAME_SCHOOL.
- `status` (string, optional)
- `first_name` (string, optional) — The names as seen.
- `middle_name` (string, optional)
- `last_name` (string, optional)
- `observe_time` (datetime, optional) — A point in time in RFC 3339 format, with up to nanosecond precision. Output uses UTC (`Z`); input may use an offset from UTC.
- `observations` (list of edulead.v4.PersonObservation, optional) — How the sighting was tied to institutions.
- `url` (edulead.v4.PersonEvidenceUrl, optional) — The page the person was seen on; unset for a public-records response.

### edulead.v4.PersonObservation

PersonObservation is how a sighting was tied to an institution.

- `institution_id` (string, optional)
- `resolution_method` (string, optional) — Such as EMAIL_DOMAIN or URL_DOMAIN.
- `resolution_value` (string, optional) — What matched, such as the domain.

### edulead.v4.PersonEvidenceUrl

PersonEvidenceUrl is the website page a person was seen on.

- `url_id` (string, optional)
- `url` (string, optional)
- `url_type` (string, optional) — Such as STAFF_DIRECTORY.
- `url_status` (string, optional)
- `screenshot_key` (string, optional) — Where the page's screenshot is kept.

## Examples

**Response**

```json
{
  "person": {
    "id": "string",
    "name": "string",
    "first_name": "string",
    "middle_name": "string",
    "last_name": "string",
    "title": "string",
    "title_rank": 1,
    "email": "string",
    "email_domain": "string",
    "email_type": "string",
    "email_format": "string",
    "email_source": "string",
    "email_verification_status": "string",
    "email_verify_time": "2023-01-15T01:30:15.01Z",
    "phone": "string",
    "phone_uniqueness": "string",
    "state": "string",
    "account_id": "string",
    "account_priority": 1.1,
    "account_student_count": "string",
    "priority": 1,
    "labels": [
      "string"
    ],
    "bios": [
      {
        "text": "string",
        "create_time": "2023-01-15T01:30:15.01Z"
      }
    ],
    "institutions": [
      {
        "institution_id": "string",
        "name": "string",
        "type": "string",
        "subtype": "string",
        "access": "string",
        "state": "string",
        "zip": "string",
        "county_id": "string",
        "student_count": "string",
        "staff_count": "string",
        "revenue_usd": "string",
        "nces_id": "string",
        "nces_district_id": "string",
        "address": "string",
        "city": "string"
      }
    ],
    "roles": [
      {
        "code": "string",
        "role": "string",
        "area": "string",
        "modifier": "string",
        "status": "string",
        "level": "string",
        "system_status": "string",
        "confidence": 1.1,
        "rank": 1,
        "decision_level": "string",
        "functional_group": "string",
        "market_themes": [
          "string"
        ],
        "evidence_count": 1,
        "first_observe_time": "2023-01-15T01:30:15.01Z",
        "last_observe_time": "2023-01-15T01:30:15.01Z",
        "evidence": [
          {
            "id": "string",
            "normalized_title": "string",
            "source_type": "string",
            "match_method": "string",
            "status": "string",
            "first_name": "string",
            "middle_name": "string",
            "last_name": "string",
            "observe_time": "2023-01-15T01:30:15.01Z",
            "observations": [
              {
                "institution_id": "string",
                "resolution_method": "string",
                "resolution_value": "string"
              }
            ],
            "url": {
              "url_id": "string",
              "url": "string",
              "url_type": "string",
              "url_status": "string",
              "screenshot_key": "string"
            }
          }
        ]
      }
    ],
    "first_observe_time": "2023-01-15T01:30:15.01Z",
    "last_observe_time": "2023-01-15T01:30:15.01Z",
    "fulltext_matches": [
      {
        "url": "string",
        "snippet": "string"
      }
    ],
    "update_time": "2023-01-15T01:30:15.01Z"
  }
}
```

**SDK Code**

```python
import requests

url = "https://api.getedulead.com/v4/people/id"

headers = {"Authorization": "Bearer <apiKey>"}

response = requests.get(url, headers=headers)

print(response.json())
```

```javascript
const url = 'https://api.getedulead.com/v4/people/id';
const options = {method: 'GET', headers: {Authorization: 'Bearer <apiKey>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api.getedulead.com/v4/people/id"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("Authorization", "Bearer <apiKey>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api.getedulead.com/v4/people/id")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <apiKey>'

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://api.getedulead.com/v4/people/id")
  .header("Authorization", "Bearer <apiKey>")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://api.getedulead.com/v4/people/id', [
  'headers' => [
    'Authorization' => 'Bearer <apiKey>',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://api.getedulead.com/v4/people/id");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer <apiKey>");
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["Authorization": "Bearer <apiKey>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.getedulead.com/v4/people/id")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```