Apinoa Docs

Response Schema

Account, Post, Comment, Group and Page — the types every SNS platform returns, field by field.

View raw .mdx

Five types cover every SNS operation, and a field means the same thing on every platform.

Optional fields are genuinely optional: absent means the platform did not say. An absent metrics.likes is a hidden count, not zero likes. Times are ISO 8601, UTC. Every object carries platform, and may carry ext: the facts only that platform has, under that platform's own names.

Account

A person, creator, channel or page.

FieldTypeNotes
platformstringreddit tiktok youtube instagram threads linkedin x
handlestringthe @name, or the platform's equivalent
urlstringthe profile page
idstring?the platform's stable id
displayName biostring?
avatarUrl bannerUrlstring?
verifiedboolean?
createdAtstring?when the account was created
countsobject?{followers?, following?, posts?}
linksarray?{url, title?} — the links on the profile
privateboolean?a private or protected account: its posts are visible only to approved followers
categorystring?the account's own category label, verbatim (Musician/Band, Media & News Company)
extobject?platform-only facts

Post

A post, video, reel, short, thread or tweet.

FieldTypeNotes
id urlstring
authorAccountRef{platform, id?, handle?, displayName?, url?, avatarUrl?, verified?, counts?}
titlestring?where the platform has titles (Reddit, YouTube)
textstring?the body or caption
createdAt editedAtstring?
langstring?
mediaMedia[]images, GIFs, videos and embeds — see below
metricsobject?{likes?, comments?, shares?, views?, reposts?, quotes?, saves?, liveViewers?}
entitiesobject?{mentions?, urls?, hashtags?} found in the text
linkPreviewobject?{url, title?, description?, thumbnailUrl?, domain?}
pollobject?{options: [{text, votes?}], totalVotes?, endsAt?}
placeobject?{name, id?, lat?, lng?, address?, city?, region?, postalCode?, country?}
audioobject?{id?, title?, artist?, url?} — a TikTok sound, a reel's audio
liveboolean?a live stream
broadcastobject?{status, scheduledAt?, startedAt?, endedAt?} — the stream's lifecycle; status is scheduled, live or ended
repostOf quoteOfPost?the post this one reposts or quotes
inReplyToobject?{id, url?, author?} — the post this one replies to
sponsoredboolean?a paid or branded-content post
pinnedboolean?pinned by its author to the top of their profile
aiGeneratedboolean?the platform labels it AI-generated
sensitiveboolean?the platform marks it sensitive or NSFW
extobject?platform-only facts

What each platform counts as views differs: TikTok and YouTube report plays, X reports impressions. Reddit's score is not likes, so it is in ext, never in metrics.likes. shares counts shares and sends only: reposts and quotes have their own counts, and saves is bookmarks. liveViewers is the audience watching right now, so it appears only while broadcast.status is live.

The true/false flags (sponsored, pinned, aiGenerated, sensitive, byAuthor, …) follow the same rule as counts: absent means the platform did not say.

Media

FieldTypeNotes
typeimage | gif | video | embed
urlstring
width heightnumber?
thumbnailUrlstring?
durationSecnumber?
variantsarray?other renditions: {url, width?, height?, bitrate?, contentType?}
altText captionstring?

Comment

FieldTypeNotes
id postIdstring
parentIdstring?the comment this one replies to
authorAccountRef
textstring
createdAt editedAt langstring?
pinnedboolean?
byAuthorboolean?written by the post's author
likedByAuthorboolean?the post's author liked or hearted it
metricsobject?{likes?, replies?}
mediaMedia[]?
repliesComment[]replies included with this comment
moreRepliesobject?{count?, ids?, cursor?} — what was left unloaded; load it with comments: comment= the cursor (YouTube) or the comment's id (Reddit, TikTok), or Reddit's ids

Group

Anything posts gather under.

FieldTypeNotes
kindstringcommunity channel company hashtag sound topic location list
id name urlstring
descriptionstring?
avatarUrl bannerUrlstring?
createdAtstring?
countsobject?{members?, posts?}
sensitiveboolean?the platform marks the group sensitive or NSFW

Page

Every list.

{ "platform": "tiktok", "items": [ /* Post, Comment, Account or Group */ ], "cursor": "…", "total": 1640 }

Call the same operation with cursor alone for the next page. No cursor means this is the last page.

total, when present, is how many items the whole list holds, exactly as the platform states it. It is omitted when the platform gives no exact count. It is not a promise that every item is reachable: platforms cap how far a list pages, and the list ends when the cursor does.

A comment page can also carry ext.post (the post the comments are on) and ext.more (top-level comments the platform left unloaded) — Reddit returns both.

On this page