Home · Docs · Schemas · Author
Author — a public profile, and why every field can be null
The normalised profile shape, identical across all platforms. All twelve fields are nullable, and that is the design: a field we cannot read comes back null, never 0, because a zero would be a claim about the account.
Author has 12 fields: 12 nullable, 0 guaranteed by the contract's required list. Every number on this page is counted from the field map at render time — none of them is written down.
Fields
| Field | Type | Nullable | Required |
|---|---|---|---|
id | string | yes | no |
handle | string | yes | no |
name | string | yes | no |
bio | string | yes | no |
avatar_url | string | yes | no |
followers | integer | yes | no |
following | integer | yes | no |
posts_count | integer | yes | no |
verified | boolean | yes | no |
is_private | boolean | yes | no |
external_url | string | yes | no |
url | string | yes | no |
12 rows above, 1 of them with a transcription from the contract and 3 with a note of ours.
What the fields mean
Only the fields with something measured or decided about them appear here. A field whose name and type say everything gets no paragraph, rather than a generic one.
id
From the contract: Stable identifier on that platform.
followers
Our note: Filled on ten of the eleven platforms with a profile route, and the source differs. Linktree is null by decision — it is a list of links, not an account someone follows, and 0 would be a claim about the world (lib/normalize/linktree.js:113). YouTube is null when the channel hides the count, because the API ships subscriberCount: "0" in that case and the naive read would publish a zero. Pinterest fills it from userInteractionCount in the page's ld+json block, not from follower_count. Measured 01/10/2026.
verified
Our note: Null where the platform publishes no badge. Again, not false.
is_private
Our note: Null where the platform has no concept of a private account, which is not the same as false. Linktree is one of those.
How this page stays true
The field list, the two flags and the closed value sets are generated from the contract this API serves, and a test compares them against the live /openapi.json in both directions: a field in the contract with no documentation fails, a documented field the contract does not have fails, and a wrong nullable or required fails. The prose marked our note is not covered by that test — it is authored, and labelled so you can tell.
The machine-readable source is at /openapi.json. If you are generating a client, use that rather than this page.
The other 7 schemas
ApiError · SeriesPoint · Item · Mover · PostItem · PostsEnvelope · ProfileEnvelope