Social Posts API: Get Profile and Company Posts
By Kooperativa Engineering
A profile record tells you who someone is: their title, their employer, where they worked before. It does not tell you what they care about this month. For that you need what they publish, and that is the part of a prospect that changes every few days.
A social posts API returns it. Two endpoints cover the ground: a profile posts API, GET /v1/people/posts, for a person, and a company posts API, GET /v1/companies/posts, for a company page. Both read the live source when you call, so you always get today's posts, and both work with the identifiers you already have: a profile URL, a username or, for people, a member id.
What to use a social posts API for
Teams that pull posts tend to use them for one of three things.
- A first line that is not generic. A message that opens with something the person said last week gets read differently from one that opens with their job title. Read the last five posts of a lead and let a rep or a model write the opening from them.
- A reason to reach out now. A company that starts posting about a new market, a launch or a hiring push has told you where its attention is. Re-reading the posts of your top accounts every week turns a static account list into a list ordered by what changed.
- Context for an agent. An assistant that researches an account is far more useful when it can read what the company and its leaders have been saying, next to the headcount and the people data it already has.
Get profile posts and company posts: the two calls
The first call needs only the identifier. A person's history pages with a cursor, a company's pages with a start offset. Pick the row that matches the endpoint.
KEY="Authorization: Bearer ik_live_..."
BASE="https://kooperativa.io/api/v1"
# A person, only posts from October on
curl "$BASE/people/posts?username=some-profile&postedAt=2026-10-01" -H "$KEY"
# A company, newest 50
curl "$BASE/companies/posts?username=some-company" -H "$KEY"
# Next page of a person: cursor from the last response, plus start
curl "$BASE/people/posts?username=some-profile&paginationToken=TOKEN&start=50" -H "$KEY"| Endpoint | Identify with | Next page | Narrow with |
|---|---|---|---|
| GET /v1/people/posts | url, username or member id | paginationToken from the response, plus start | postedAt=YYYY-MM-DD, posts from that date on |
| GET /v1/companies/posts | url or username | start=50, then 100, then 150 | none, newest first |
How to get the latest posts of a list of accounts
Most teams do not need a full history. They need the newest posts of a short list, refreshed on a schedule. That is one call per account per run, and the job below is the whole thing: read the first page, keep what is new since the last run, and hand the result to whatever writes the outreach or the brief.
const BASE = 'https://kooperativa.io/api/v1';
const headers = { Authorization: `Bearer ${process.env.KOOPERATIVA_API_KEY}` };
const since = '2026-10-29'; // the date of your last run
const people = ['profile-one', 'profile-two', 'profile-three'];
const fresh = {};
for (const username of people) {
const q = new URLSearchParams({ username, postedAt: since });
const res = await fetch(`${BASE}/people/posts?${q}`, { headers });
if (!res.ok) continue; // retry on the next run, failed calls are not billed
const body = await res.json();
if (Array.isArray(body.data) && body.data.length) fresh[username] = body.data;
}
// fresh now maps each person to the posts they published since the last runPair posts with the data you already have
The posts are most useful next to the rest of the record. For a person, GET /v1/person gives the title, the history and the company, which tells a model whether a post about hiring comes from a head of sales or from an intern. For a company, hiring signals and decision makers say who joined and who owns the budget. Because everything is one API and one key, joining the two is a few lines of code and not a second vendor.
What it costs
The standard endpoints are covered by the monthly license with no per-request fee. The live post endpoints are metered at $0.001 per call, and each page is one call. A weekly refresh of 40 accounts is 40 calls, which is $0.04 a run. Reading a full history of 23 pages is 23 calls, which is $0.023.
Live calls use their own rate limit, separate from the one every other endpoint shares, so a long paging job never uses up the requests your regular enrichment needs. Calls that fail on a bad input or on a temporary source error are not billed.
Build it so it holds up
The post endpoints are in Beta, so build the job the way you would build any job that reads live data. Page until the list is empty and set your own page cap, because fewer than 50 items does not mean the end. Treat a 503 as a reason to retry on the next run. Read the paginationToken from each response and send it back with start, since a token alone returns the same page. And remember that an empty answer is a normal 200 with the message No public data found.
Posts are public, and they are also about people. Decide your legal basis for using them, keep what the job needs and no more, and honour an opt-out request the way you would with any prospect data.
Frequently asked questions
What is a social posts API?
A social posts API returns the posts a person or a company has published, newest first, as structured data. Here, GET /v1/people/posts covers profiles and GET /v1/companies/posts covers company pages.
How do I get the posts of a person or company through an API?
Call GET /v1/people/posts or GET /v1/companies/posts with a profile or company URL or a username. The response lists the newest posts first, with a value for the next page.
How do I get only the new posts since my last run?
On the people endpoint, pass postedAt with a date in YYYY-MM-DD format to get posts from that date on. On the company endpoint, read the first page and keep the posts you have not seen.
How much does it cost to read posts?
Each call costs $0.001 on top of the license. Refreshing 40 accounts once is 40 calls, or $0.04.
Can I search posts by keyword?
Not yet. These endpoints read the posts of a known person or company, which covers account research and outreach. A keyword search over all posts is not released.
Get started
Try Kooperativa
One API key. Person and company enrichment, structured search, and monitors under one flat license.