Skip to content

People ​

Search profiles of public figures, politicians and executives. Each profile includes background details, a coverage summary and recent articles about the person.

Sign up at APITube to get your API key. Include it with every API request.

Added in 1.0.42

Full response field definitions are in API Response Structure. See also the Build a public figure profile recipe.

Endpoints ​

GET /v1/people          # list & search
GET /v1/people/{id}     # single person profile

Send your API key in the X-API-Key header or api_key URL parameter.

GET /v1/people

Query Parameters ​

ParameterTypeRequiredDescription
namestringNoFilter by person name (substring match).
wikidata_idstringNoFilter by Wikidata ID (e.g. Q317521 or 317521).
pageintegerNoPage number (default 1).
per_pageintegerNoResults per page (default 100, max 250; the plan ceiling applies — Free 10, Starter 50, Basic 200).
api_keystringYes*Your API key. Can also be provided via headers.

* Required if not provided in headers

Example ​

bash
curl "https://api.apitube.io/v1/people?name=Obama&per_page=5&api_key=YOUR_API_KEY"
python
import requests

resp = requests.get(
    "https://api.apitube.io/v1/people",
    params={"name": "Obama", "per_page": 5, "api_key": "YOUR_API_KEY"},
)
print(resp.json())
javascript
const params = new URLSearchParams({ name: "Obama", per_page: "5", api_key: "YOUR_API_KEY" });
const resp = await fetch(`https://api.apitube.io/v1/people?${params}`);
console.log(await resp.json());
php
$query = http_build_query(["name" => "Obama", "per_page" => 5, "api_key" => "YOUR_API_KEY"]);
$data = json_decode(file_get_contents("https://api.apitube.io/v1/people?$query"), true);
print_r($data);
go
package main

import (
	"encoding/json"
	"fmt"
	"io"
	"net/http"
	"net/url"
)

func main() {
	u, _ := url.Parse("https://api.apitube.io/v1/people")
	q := u.Query()
	q.Set("name", "Obama")
	q.Set("per_page", "5")
	q.Set("api_key", "YOUR_API_KEY")
	u.RawQuery = q.Encode()

	resp, _ := http.Get(u.String())
	defer resp.Body.Close()

	body, _ := io.ReadAll(resp.Body)
	var data map[string]any
	json.Unmarshal(body, &data)
	fmt.Println(data)
}
java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class Example {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://api.apitube.io/v1/people?name=Obama&per_page=5&api_key=YOUR_API_KEY"))
            .GET()
            .build();
        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        System.out.println(response.body());
    }
}
text
Write a script in your preferred language that calls the APITube News API:

GET https://api.apitube.io/v1/people?name=Obama&per_page=5

Read the API key from an environment variable (do not hardcode it), handle request
errors, and print the key fields of each result.
Docs: https://docs.apitube.io/platform/news-api/everything
json
{
  "status": "ok",
  "limit": 5,
  "page": 1,
  "has_next_pages": true,
  "results": [
    {
      "id": 1316868,
      "name": "Michelle Obama",
      "type": "person",
      "links": {
        "self": "https://api.apitube.io/v1/people/1316868",
        "articles": "https://api.apitube.io/v1/news/entity/1316868",
        "wikipedia": "https://en.wikipedia.org/wiki/Michelle_Obama",
        "wikidata": "https://www.wikidata.org/wiki/Q13133"
      },
      "profile": {
        "title": "attorney at law",
        "gender": "female",
        "nationality": "United States",
        "date_of_birth": "1964-01-17",
        "social_profiles": { "twitter": "https://twitter.com/MichelleObama" }
      }
    }
  ]
}

Person profile ​

GET /v1/people/{id}

Get one person's full profile, news coverage and recent_articles.

recent_articles contains the 5 latest articles about the person. Each includes the full article fields from /v1/news/everything, including body, body_html and entities, so responses can be large. coverage=false removes only the coverage summary.

Query Parameters ​

ParameterTypeRequiredDescription
coveragestringNoSet to false to omit the coverage block (faster response).
api_keystringYes*Your API key.

Example ​

bash
curl "https://api.apitube.io/v1/people/1316868?api_key=YOUR_API_KEY"
python
import requests

resp = requests.get(
    "https://api.apitube.io/v1/people/1316868",
    params={"api_key": "YOUR_API_KEY"},
)
print(resp.json())
javascript
const resp = await fetch("https://api.apitube.io/v1/people/1316868?api_key=YOUR_API_KEY");
console.log(await resp.json());
php
$data = json_decode(file_get_contents("https://api.apitube.io/v1/people/1316868?api_key=YOUR_API_KEY"), true);
print_r($data);
go
package main

import (
	"encoding/json"
	"fmt"
	"io"
	"net/http"
	"net/url"
)

func main() {
	u, _ := url.Parse("https://api.apitube.io/v1/people/1316868")
	q := u.Query()
	q.Set("api_key", "YOUR_API_KEY")
	u.RawQuery = q.Encode()

	resp, _ := http.Get(u.String())
	defer resp.Body.Close()

	body, _ := io.ReadAll(resp.Body)
	var data map[string]any
	json.Unmarshal(body, &data)
	fmt.Println(data)
}
java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class Example {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://api.apitube.io/v1/people/1316868?api_key=YOUR_API_KEY"))
            .GET()
            .build();
        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        System.out.println(response.body());
    }
}
text
Write a script in your preferred language that calls the APITube News API:

GET https://api.apitube.io/v1/people/1316868

Read the API key from an environment variable (do not hardcode it), handle request
errors, and print the key fields of each result.
Docs: https://docs.apitube.io/platform/news-api/everything
json
{
  "id": 1316868,
  "name": "Michelle Obama",
  "type": "person",
  "links": { "self": "...", "articles": "...", "wikipedia": "...", "wikidata": "..." },
  "profile": { "title": "attorney at law", "bio_summary": "...", "social_profiles": {} },
  "coverage": {
    "article_count": 180,
    "first_seen": "2017-01-06",
    "last_seen": "2026-03-03",
    "sentiment": { "positive": 47, "neutral": 95, "negative": 27 },
    "momentum": { "last_30_days": 12, "previous_30_days": 8, "change_pct": 50 },
    "timeline": [ { "period": "2026-02-01", "count": 13 } ],
    "top_sources": [ { "id": 342, "name": "cbc.ca", "domain": "cbc.ca", "count": 9 } ],
    "top_topics": [ { "id": "politics", "name": "Politics", "count": 70 } ],
    "top_countries": [ { "id": 102, "name": "United States", "code": "us", "count": 55 } ],
    "top_languages": [ { "id": 1, "name": "English", "code": "en", "count": 118 } ],
    "related_entities": [ { "id": 1316867, "name": "Barack Obama", "count": 348 } ]
  },
  "recent_articles": [ { "id": 3074512345, "title": "...", "href": "...", "published_at": "...", "body": "...", "entities": [], "categories": [], "sentiment": {} } ]
}

Coverage fields ​

FieldDescription
article_countTotal articles mentioning this person.
first_seen / last_seenDate range of coverage.
sentimentArticle counts by overall polarity.
momentumMentions in the last 30 days vs. the previous 30 days, with change_pct.
timelineMonthly mention counts (chronological, up to 24 months).
top_sourcesSources covering this person most.
top_topicsMost associated topics.
top_countries / top_languagesGeographic and language spread of coverage.
related_entitiesEntities most often mentioned in the same articles as this person.
recent_articlesLatest articles mentioning this person (same fields as /v1/news/everything).

Pricing ​

Each request costs 1 point, charged only when the response contains at least one result. A search returning zero results is free. Requests with no remaining credits return 402.

Errors ​

A request for a non-existent person returns:

json
{ "errors": [ { "status": 404, "code": "ER0151", "message": "Person not found." } ] }