Variable: mediaSchema ​
ts
const mediaSchema: ZodObject<{
caption: ZodOptional<ZodNullable<ZodObject<{
text: ZodOptional<ZodString>;
}, $loose>>>;
code: ZodOptional<ZodString>;
comment_count: ZodOptional<ZodNullable<ZodNumber>>;
id: ZodOptional<ZodString>;
image_versions2: ZodOptional<ZodObject<{
candidates: ZodOptional<ZodArray<ZodObject<{
height: ZodOptional<ZodNumber>;
url: ZodOptional<ZodString>;
width: ZodOptional<ZodNumber>;
}, $loose>>>;
}, $loose>>;
like_count: ZodOptional<ZodNullable<ZodNumber>>;
media_type: ZodOptional<ZodNumber>;
pk: ZodOptional<ZodCoercedString<unknown>>;
taken_at: ZodOptional<ZodNumber>;
user: ZodOptional<ZodObject<{
biography: ZodOptional<ZodString>;
external_url: ZodOptional<ZodNullable<ZodString>>;
follower_count: ZodOptional<ZodNullable<ZodNumber>>;
following_count: ZodOptional<ZodNullable<ZodNumber>>;
full_name: ZodOptional<ZodString>;
is_private: ZodOptional<ZodBoolean>;
is_verified: ZodOptional<ZodBoolean>;
media_count: ZodOptional<ZodNullable<ZodNumber>>;
pk: ZodOptional<ZodCoercedString<unknown>>;
profile_pic_url: ZodOptional<ZodNullable<ZodString>>;
username: ZodOptional<ZodString>;
}, $loose>>;
usertags: ZodOptional<ZodNullable<ZodObject<{
in: ZodOptional<ZodArray<ZodObject<{
position: ZodOptional<...>;
user: ZodOptional<...>;
}, $loose>>>;
}, $loose>>>;
video_versions: ZodOptional<ZodNullable<ZodArray<ZodObject<{
height: ZodOptional<ZodNumber>;
url: ZodOptional<ZodString>;
width: ZodOptional<ZodNumber>;
}, $loose>>>>;
}, $loose>;A media post as the feed endpoints return it. A lean first cut: only the fields the SDK exposes are typed, the rest pass through, and each is optional/nullable because the API's shape varies by media type (photo/video/carousel) and context. media_type is 1 = photo, 2 = video, 8 = carousel. The author is the shared User model.