Delivery
What arrives at your endpoint, and what to answer. Every push shares one envelope; only data changes.
The envelope
Every delivery arrives in this shape, whichever subscription sent it. Read type to tell them apart and data for the payload; the sections below document what data holds for each one. delivery_mode says whether the rows travel in the body (inline) or behind a signed link (manifest).
Delivery
idType: stringUnique id of this delivery attempt, stable across retries of the same push.
idType: stringUnique id of this delivery attempt, stable across retries of the same push.
typeType: stringEvent type. <resource>.snapshot for scheduled snapshots (content.snapshot, creator.snapshot), or the event name for event pushes (creator_vetting.completed).
typeType: stringEvent type. <resource>.snapshot for scheduled snapshots (content.snapshot, creator.snapshot), or the event name for event pushes (creator_vetting.completed).
subscription_id Type: stringId of the subscription that produced this push.
subscription_id Type: stringId of the subscription that produced this push.
delivered_at Type: integerUnix epoch seconds at which Zelf sent this push.
delivered_at Type: integerUnix epoch seconds at which Zelf sent this push.
livemodeType: booleantrue for production data; false for test deliveries.
livemodeType: booleantrue for production data; false for test deliveries.
resourceType: stringor nullResource the push covers (content or creator) for snapshots; null for event pushes.
resourceType: stringor nullResource the push covers (content or creator) for snapshots; null for event pushes.
resource_filters Type: anyThe subscription's stored filters that scoped this snapshot, using the same query params as the matching list operation (content.list or creators.list). Empty for event pushes.
resource_filters Type: anyThe subscription's stored filters that scoped this snapshot, using the same query params as the matching list operation (content.list or creators.list). Empty for event pushes.
delivery_mode Type: enummanifest: data.files holds downloadable snapshot files. inline: data.items holds the rows directly.
Show values
delivery_mode Type: enummanifest: data.files holds downloadable snapshot files. inline: data.items holds the rows directly.
manifestinlinedataType: WebhookDataThe push payload. See delivery_mode for which key inside is populated.
Show child attributes
dataType: WebhookDataThe push payload. See delivery_mode for which key inside is populated.
data.item_count Type: integerminimum 0Total number of rows in this delivery, summed across files or equal to the length of items.
data.item_count Type: integerminimum 0Total number of rows in this delivery, summed across files or equal to the length of items.
- minimum
- 0
data.statisticsType: anyAggregate totals over the snapshot, including post count, views, engagement, earned media value, and unique creators. Present only on content.snapshot; absent for creator and event pushes.
data.statisticsType: anyAggregate totals over the snapshot, including post count, views, engagement, earned media value, and unique creators. Present only on content.snapshot; absent for creator and event pushes.
data.filesType: WebhookFile[]Manifest mode only. The downloadable snapshot files; retrieve each download_url and stream the NDJSON rows. Absent in inline mode.
Show child attributes
data.filesType: WebhookFile[]Manifest mode only. The downloadable snapshot files; retrieve each download_url and stream the NDJSON rows. Absent in inline mode.
data.files[].formatType: stringFile encoding. Always ndjson (newline-delimited JSON, with one row per line).
data.files[].formatType: stringFile encoding. Always ndjson (newline-delimited JSON, with one row per line).
data.files[].expires_at Type: integerUnix epoch seconds after which download_url stops working. Fetch the file before this time.
data.files[].expires_at Type: integerUnix epoch seconds after which download_url stops working. Fetch the file before this time.
data.files[].sha256Type: stringHex SHA-256 of the file body. Use it to verify the download.
data.files[].sha256Type: stringHex SHA-256 of the file body. Use it to verify the download.
data.files[].size_bytes Type: integerminimum 0Size of the file in bytes.
data.files[].size_bytes Type: integerminimum 0Size of the file in bytes.
- minimum
- 0
data.files[].item_count Type: integerminimum 0Number of rows in this file.
data.files[].item_count Type: integerminimum 0Number of rows in this file.
- minimum
- 0
data.files[].download_url Type: string(uri)Signed, time-limited URL from which to retrieve the file. Expires at expires_at.
data.files[].download_url Type: string(uri)Signed, time-limited URL from which to retrieve the file. Expires at expires_at.
data.itemsType: any[]Inline mode only. The delivered rows themselves, in the same shape returned by the matching REST endpoint. Absent in manifest mode.
data.itemsType: any[]Inline mode only. The delivered rows themselves, in the same shape returned by the matching REST endpoint. Absent in manifest mode.
One file, in manifest mode
formatType: stringFile encoding. Always ndjson (newline-delimited JSON, with one row per line).
formatType: stringFile encoding. Always ndjson (newline-delimited JSON, with one row per line).
expires_at Type: integerUnix epoch seconds after which download_url stops working. Fetch the file before this time.
expires_at Type: integerUnix epoch seconds after which download_url stops working. Fetch the file before this time.
sha256Type: stringHex SHA-256 of the file body. Use it to verify the download.
sha256Type: stringHex SHA-256 of the file body. Use it to verify the download.
size_bytes Type: integerminimum 0Size of the file in bytes.
size_bytes Type: integerminimum 0Size of the file in bytes.
- minimum
- 0
item_count Type: integerminimum 0Number of rows in this file.
item_count Type: integerminimum 0Number of rows in this file.
- minimum
- 0
download_url Type: string(uri)Signed, time-limited URL from which to retrieve the file. Expires at expires_at.
download_url Type: string(uri)Signed, time-limited URL from which to retrieve the file. Expires at expires_at.
Snapshots
content.snapshot
Scheduled snapshot of the content set that a subscription matches.
The subscription's resource_filters use the same query params as content.list, including ordering: rows are ordered by posted_at descending by default (override with an order_by in resource_filters). The snapshot is capped at the subscription's max_items (or the maximum when it is unset or 0); a test dispatch always sends a small 10-row sample regardless of max_items.
Delivered in manifest mode: data.files holds one signed, time-limited NDJSON download, and data.statistics carries the aggregate totals over the snapshot. resource is content.
Payload Zelf POSTs to the registered endpoint:
Payload
idType: stringUnique id of this delivery attempt, stable across retries of the same push.
idType: stringUnique id of this delivery attempt, stable across retries of the same push.
typeType: stringEvent type. <resource>.snapshot for scheduled snapshots (content.snapshot, creator.snapshot), or the event name for event pushes (creator_vetting.completed).
typeType: stringEvent type. <resource>.snapshot for scheduled snapshots (content.snapshot, creator.snapshot), or the event name for event pushes (creator_vetting.completed).
subscription_id Type: stringId of the subscription that produced this push.
subscription_id Type: stringId of the subscription that produced this push.
delivered_at Type: integerUnix epoch seconds at which Zelf sent this push.
delivered_at Type: integerUnix epoch seconds at which Zelf sent this push.
livemodeType: booleantrue for production data; false for test deliveries.
livemodeType: booleantrue for production data; false for test deliveries.
resourceType: stringor nullResource the push covers (content or creator) for snapshots; null for event pushes.
resourceType: stringor nullResource the push covers (content or creator) for snapshots; null for event pushes.
resource_filters Type: anyThe subscription's stored filters that scoped this snapshot, using the same query params as the matching list operation (content.list or creators.list). Empty for event pushes.
resource_filters Type: anyThe subscription's stored filters that scoped this snapshot, using the same query params as the matching list operation (content.list or creators.list). Empty for event pushes.
delivery_mode Type: enummanifest: data.files holds downloadable snapshot files. inline: data.items holds the rows directly.
Show values
delivery_mode Type: enummanifest: data.files holds downloadable snapshot files. inline: data.items holds the rows directly.
manifestinlinedataType: WebhookDataThe push payload. See delivery_mode for which key inside is populated.
Show child attributes
dataType: WebhookDataThe push payload. See delivery_mode for which key inside is populated.
data.item_count Type: integerminimum 0Total number of rows in this delivery, summed across files or equal to the length of items.
data.item_count Type: integerminimum 0Total number of rows in this delivery, summed across files or equal to the length of items.
- minimum
- 0
data.statisticsType: anyAggregate totals over the snapshot, including post count, views, engagement, earned media value, and unique creators. Present only on content.snapshot; absent for creator and event pushes.
data.statisticsType: anyAggregate totals over the snapshot, including post count, views, engagement, earned media value, and unique creators. Present only on content.snapshot; absent for creator and event pushes.
data.filesType: WebhookFile[]Manifest mode only. The downloadable snapshot files; retrieve each download_url and stream the NDJSON rows. Absent in inline mode.
Show child attributes
data.filesType: WebhookFile[]Manifest mode only. The downloadable snapshot files; retrieve each download_url and stream the NDJSON rows. Absent in inline mode.
data.files[].formatType: stringFile encoding. Always ndjson (newline-delimited JSON, with one row per line).
data.files[].formatType: stringFile encoding. Always ndjson (newline-delimited JSON, with one row per line).
data.files[].expires_at Type: integerUnix epoch seconds after which download_url stops working. Fetch the file before this time.
data.files[].expires_at Type: integerUnix epoch seconds after which download_url stops working. Fetch the file before this time.
data.files[].sha256Type: stringHex SHA-256 of the file body. Use it to verify the download.
data.files[].sha256Type: stringHex SHA-256 of the file body. Use it to verify the download.
data.files[].size_bytes Type: integerminimum 0Size of the file in bytes.
data.files[].size_bytes Type: integerminimum 0Size of the file in bytes.
- minimum
- 0
data.files[].item_count Type: integerminimum 0Number of rows in this file.
data.files[].item_count Type: integerminimum 0Number of rows in this file.
- minimum
- 0
data.files[].download_url Type: string(uri)Signed, time-limited URL from which to retrieve the file. Expires at expires_at.
data.files[].download_url Type: string(uri)Signed, time-limited URL from which to retrieve the file. Expires at expires_at.
data.itemsType: any[]Inline mode only. The delivered rows themselves, in the same shape returned by the matching REST endpoint. Absent in manifest mode.
data.itemsType: any[]Inline mode only. The delivered rows themselves, in the same shape returned by the matching REST endpoint. Absent in manifest mode.
File content schema
Each files[] entry is NDJSON: one Content per line, no commas, no wrapping array. Verify the published sha256 over the body before you read it.
{"id":"con_DZaWwnKo5HThZ9bu","platform_post_id":"7376543210987654321","platform":"instagram","content_form":"VIDEO","thumbnail_url":"https://cdn.hellozelf.com/thumbnails/zelfai-launch.png","posted_at":"2026-05-12T16:00:00Z","view_count":184230,"like_count":12840,"comment_count":932,"share_count":415,"total_engagement":14187,"language":"en","media_duration":42,"engagement_rate":0.077,"earned_media_value_cents":248000,"creator":{"id":"cr_pfqPv0FLsBRimHfi","username":"zelfai","name":"Zelf","platform":"instagram","platform_handle":"zelfai","platform_url":"https://www.instagram.com/zelfai","profile_picture_url":"https://cdn.hellozelf.com/avatars/zelfai.png","profile_bio":"Creator and content intelligence for modern brands.","follower_count":53120,"active_content_count":217},"brand_id":"brd_Lw6ZZmNYhW0P9k0x","net_promoter_score":1,"is_owned":true,"is_tagged":true,"is_influencer":true,"mention_type":"content","caption":"Behind the scenes at Zelf.","description":"How Zelf turns social signals into creator insights.","transcript":"We walk through how Zelf ranks creators by brand fit.","platform_url":"https://www.instagram.com/zelfai","last_keyword":"zelf creators","ai_summary":"A product walkthrough of Zelf creator analytics.","hashtags":["zelfai","creatoreconomy"]}
{"id":"con_DZaWwnKo5HThZ9bu","platform_post_id":"7376543210987654321","platform":"instagram","content_form":"VIDEO","thumbnail_url":"https://cdn.hellozelf.com/thumbnails/zelfai-launch.png","posted_at":"2026-05-12T16:00:00Z","view_count":184230,"like_count":12840,"comment_count":932,"share_count":415,"total_engagement":14187,"language":"en","media_duration":42,"engagement_rate":0.077,"earned_media_value_cents":248000,"creator":{"id":"cr_pfqPv0FLsBRimHfi","username":"zelfai","name":"Zelf","platform":"instagram","platform_handle":"zelfai","platform_url":"https://www.instagram.com/zelfai","profile_picture_url":"https://cdn.hellozelf.com/avatars/zelfai.png","profile_bio":"Creator and content intelligence for modern brands.","follower_count":53120,"active_content_count":217},"brand_id":"brd_Lw6ZZmNYhW0P9k0x","net_promoter_score":1,"is_owned":true,"is_tagged":true,"is_influencer":true,"mention_type":"content","caption":"Behind the scenes at Zelf.","description":"How Zelf turns social signals into creator insights.","transcript":"We walk through how Zelf ranks creators by brand fit.","platform_url":"https://www.instagram.com/zelfai","last_keyword":"zelf creators","ai_summary":"A product walkthrough of Zelf creator analytics.","hashtags":["zelfai","creatoreconomy"]}One row: Content
idType: stringread-onlyUnique identifier for this piece of content. Use it to retrieve the content anywhere a content id is accepted.
idType: stringread-onlyUnique identifier for this piece of content. Use it to retrieve the content anywhere a content id is accepted.
platform_post_id Type: stringThe post's identifier on its platform. This is the value at the end of the post's URL.
Examples:
- Instagram:
https://instagram.com/reel/abcd -> abcd
- TikTok:
https://www.tiktok.com/@username/video/12345678 -> 12345678
platform_post_id Type: stringThe post's identifier on its platform. This is the value at the end of the post's URL.
Examples:
- Instagram:
https://instagram.com/reel/abcd->abcd - TikTok:
https://www.tiktok.com/@username/video/12345678->12345678
platformType: stringThe platform the content was published on: instagram, tiktok or youtube.
platformType: stringThe platform the content was published on: instagram, tiktok or youtube.
content_form Type: stringor nullWhether the content is a video or an image.
content_form Type: stringor nullWhether the content is a video or an image.
thumbnail_url Type: stringor nullURL of the content's thumbnail image.
thumbnail_url Type: stringor nullURL of the content's thumbnail image.
posted_at Type: string(date-time)or nullTime the content was originally published on its platform (UTC).
posted_at Type: string(date-time)or nullTime the content was originally published on its platform (UTC).
view_count Type: integeror nullTotal number of times the content has been viewed.
view_count Type: integeror nullTotal number of times the content has been viewed.
like_count Type: integeror nullTotal number of likes the content has received.
like_count Type: integeror nullTotal number of likes the content has received.
comment_count Type: integeror nullTotal number of comments on the content.
comment_count Type: integeror nullTotal number of comments on the content.
total_engagement Type: integeror nullSum of the likes, comments, and shares the content has received.
total_engagement Type: integeror nullSum of the likes, comments, and shares the content has received.
languageType: stringor nullISO 639 code of the content's primary language.
languageType: stringor nullISO 639 code of the content's primary language.
media_duration Type: number(double)or nullLength of the media in seconds. Null when not known.
media_duration Type: number(double)or nullLength of the media in seconds. Null when not known.
engagement_rate Type: number(double)or nullread-onlyEngagement per view (likes plus comments plus shares, divided by views). Null when the content has no recorded views.
engagement_rate Type: number(double)or nullread-onlyEngagement per view (likes plus comments plus shares, divided by views). Null when the content has no recorded views.
earned_media_value_cents Type: integeror nullread-onlyEstimated marketing value of the content, in US cents.
earned_media_value_cents Type: integeror nullread-onlyEstimated marketing value of the content, in US cents.
creatorType: ContentCreatorread-onlyThe creator who published the content.
Show child attributes
creatorType: ContentCreatorread-onlyThe creator who published the content.
creator.idType: stringread-onlyUnique identifier for the creator.
creator.idType: stringread-onlyUnique identifier for the creator.
creator.usernameType: stringor nullThe creator's username or handle on the platform (without an @).
creator.usernameType: stringor nullThe creator's username or handle on the platform (without an @).
creator.nameType: stringor nullThe creator's display name on the platform.
creator.nameType: stringor nullThe creator's display name on the platform.
creator.platformType: stringor nullThe platform the creator publishes on. One of instagram, tiktok, youtube.
creator.platformType: stringor nullThe platform the creator publishes on. One of instagram, tiktok, youtube.
creator.platform_handle Type: stringor nullThe platform-side identifier of the creator's account.
creator.platform_handle Type: stringor nullThe platform-side identifier of the creator's account.
creator.platform_url Type: stringor nullDirect URL to the creator's profile on the platform.
creator.platform_url Type: stringor nullDirect URL to the creator's profile on the platform.
creator.profile_picture_url Type: stringor nullURL of the creator's profile picture.
creator.profile_picture_url Type: stringor nullURL of the creator's profile picture.
creator.profile_bio Type: stringor nullThe creator's profile bio as it appears on the platform.
creator.profile_bio Type: stringor nullThe creator's profile bio as it appears on the platform.
creator.follower_count Type: integeror nullThe creator's follower count as of the most recent observation.
creator.follower_count Type: integeror nullThe creator's follower count as of the most recent observation.
creator.active_content_count Type: integeror nullNumber of active content items attributed to the creator.
creator.active_content_count Type: integeror nullNumber of active content items attributed to the creator.
brand_id Type: stringor nullread-onlyIdentifier of the brand that the brand-specific signals on this row (is_owned, is_tagged, is_influencer, mention_type, net_promoter_score) are scoped to. Returned as null when the request omits brand_id.
brand_id Type: stringor nullread-onlyIdentifier of the brand that the brand-specific signals on this row (is_owned, is_tagged, is_influencer, mention_type, net_promoter_score) are scoped to. Returned as null when the request omits brand_id.
net_promoter_score Type: integeror nullread-onlyNet promoter score for the content from the perspective of the scoped brand. Returned as null when the request omits brand_id.
net_promoter_score Type: integeror nullread-onlyNet promoter score for the content from the perspective of the scoped brand. Returned as null when the request omits brand_id.
is_owned Type: booleanor nullread-onlyWhether the scoped brand owns the content; that is, whether it was published by an account the brand controls. Returned as null when the request omits brand_id.
is_owned Type: booleanor nullread-onlyWhether the scoped brand owns the content; that is, whether it was published by an account the brand controls. Returned as null when the request omits brand_id.
is_tagged Type: booleanor nullread-onlyWhether the post tags the scoped brand on the platform. Returned as null when the request omits brand_id.
is_tagged Type: booleanor nullread-onlyWhether the post tags the scoped brand on the platform. Returned as null when the request omits brand_id.
is_influencer Type: booleanor nullread-onlyWhether the scoped brand counts the content as influencer content: it matches the brand's influencer terms, comes from an account on its influencer list, was reported as branded content by the platform, or was marked by hand. Content the brand owns is never influencer content. Returned as null when the request omits brand_id.
is_influencer Type: booleanor nullread-onlyWhether the scoped brand counts the content as influencer content: it matches the brand's influencer terms, comes from an account on its influencer list, was reported as branded content by the platform, or was marked by hand. Content the brand owns is never influencer content. Returned as null when the request omits brand_id.
mention_type Type: stringor nullread-onlyHow the scoped brand is mentioned in the content. One of content or comment, or null when the brand is not mentioned. Returned as null when the request omits brand_id.
mention_type Type: stringor nullread-onlyHow the scoped brand is mentioned in the content. One of content or comment, or null when the brand is not mentioned. Returned as null when the request omits brand_id.
captionType: stringShort caption or title of the post (the primary user-visible text).
captionType: stringShort caption or title of the post (the primary user-visible text).
descriptionType: stringLong-form description of the post.
descriptionType: stringLong-form description of the post.
transcriptType: stringor nullTranscribed speech from the content's audio, when available.
transcriptType: stringor nullTranscribed speech from the content's audio, when available.
platform_url Type: stringDirect URL to the post on its platform.
Examples:
https://instagram.com/reel/abcd
https://www.tiktok.com/@username/video/12345678
platform_url Type: stringDirect URL to the post on its platform.
Examples:
https://instagram.com/reel/abcdhttps://www.tiktok.com/@username/video/12345678
last_keyword Type: stringor nullWhat the content was most recently collected under: a hashtag, a creator handle, a search term, or a brand identifier. Null when the content did not arrive through a collection task.
last_keyword Type: stringor nullWhat the content was most recently collected under: a hashtag, a creator handle, a search term, or a brand identifier. Null when the content did not arrive through a collection task.
ai_summary Type: stringor nullShort AI-generated summary of the content.
ai_summary Type: stringor nullShort AI-generated summary of the content.
Acknowledgement
Return a 2xx status within the endpoint's timeout to acknowledge receipt. Any non-2xx status, or a timeout, is treated as a failed delivery and retried with backoff.
creator.snapshot
Scheduled snapshot of the creator set that a subscription matches.
Delivered in manifest mode: data.files holds one signed, time-limited NDJSON download. Unlike content.snapshot, no data.statistics block is included. resource is creator.
Payload Zelf POSTs to the registered endpoint:
Payload
idType: stringUnique id of this delivery attempt, stable across retries of the same push.
idType: stringUnique id of this delivery attempt, stable across retries of the same push.
typeType: stringEvent type. <resource>.snapshot for scheduled snapshots (content.snapshot, creator.snapshot), or the event name for event pushes (creator_vetting.completed).
typeType: stringEvent type. <resource>.snapshot for scheduled snapshots (content.snapshot, creator.snapshot), or the event name for event pushes (creator_vetting.completed).
subscription_id Type: stringId of the subscription that produced this push.
subscription_id Type: stringId of the subscription that produced this push.
delivered_at Type: integerUnix epoch seconds at which Zelf sent this push.
delivered_at Type: integerUnix epoch seconds at which Zelf sent this push.
livemodeType: booleantrue for production data; false for test deliveries.
livemodeType: booleantrue for production data; false for test deliveries.
resourceType: stringor nullResource the push covers (content or creator) for snapshots; null for event pushes.
resourceType: stringor nullResource the push covers (content or creator) for snapshots; null for event pushes.
resource_filters Type: anyThe subscription's stored filters that scoped this snapshot, using the same query params as the matching list operation (content.list or creators.list). Empty for event pushes.
resource_filters Type: anyThe subscription's stored filters that scoped this snapshot, using the same query params as the matching list operation (content.list or creators.list). Empty for event pushes.
delivery_mode Type: enummanifest: data.files holds downloadable snapshot files. inline: data.items holds the rows directly.
Show values
delivery_mode Type: enummanifest: data.files holds downloadable snapshot files. inline: data.items holds the rows directly.
manifestinlinedataType: WebhookDataThe push payload. See delivery_mode for which key inside is populated.
Show child attributes
dataType: WebhookDataThe push payload. See delivery_mode for which key inside is populated.
data.item_count Type: integerminimum 0Total number of rows in this delivery, summed across files or equal to the length of items.
data.item_count Type: integerminimum 0Total number of rows in this delivery, summed across files or equal to the length of items.
- minimum
- 0
data.statisticsType: anyAggregate totals over the snapshot, including post count, views, engagement, earned media value, and unique creators. Present only on content.snapshot; absent for creator and event pushes.
data.statisticsType: anyAggregate totals over the snapshot, including post count, views, engagement, earned media value, and unique creators. Present only on content.snapshot; absent for creator and event pushes.
data.filesType: WebhookFile[]Manifest mode only. The downloadable snapshot files; retrieve each download_url and stream the NDJSON rows. Absent in inline mode.
Show child attributes
data.filesType: WebhookFile[]Manifest mode only. The downloadable snapshot files; retrieve each download_url and stream the NDJSON rows. Absent in inline mode.
data.files[].formatType: stringFile encoding. Always ndjson (newline-delimited JSON, with one row per line).
data.files[].formatType: stringFile encoding. Always ndjson (newline-delimited JSON, with one row per line).
data.files[].expires_at Type: integerUnix epoch seconds after which download_url stops working. Fetch the file before this time.
data.files[].expires_at Type: integerUnix epoch seconds after which download_url stops working. Fetch the file before this time.
data.files[].sha256Type: stringHex SHA-256 of the file body. Use it to verify the download.
data.files[].sha256Type: stringHex SHA-256 of the file body. Use it to verify the download.
data.files[].size_bytes Type: integerminimum 0Size of the file in bytes.
data.files[].size_bytes Type: integerminimum 0Size of the file in bytes.
- minimum
- 0
data.files[].item_count Type: integerminimum 0Number of rows in this file.
data.files[].item_count Type: integerminimum 0Number of rows in this file.
- minimum
- 0
data.files[].download_url Type: string(uri)Signed, time-limited URL from which to retrieve the file. Expires at expires_at.
data.files[].download_url Type: string(uri)Signed, time-limited URL from which to retrieve the file. Expires at expires_at.
data.itemsType: any[]Inline mode only. The delivered rows themselves, in the same shape returned by the matching REST endpoint. Absent in manifest mode.
data.itemsType: any[]Inline mode only. The delivered rows themselves, in the same shape returned by the matching REST endpoint. Absent in manifest mode.
File content schema
Each files[] entry is NDJSON: one Creator per line, no commas, no wrapping array. Verify the published sha256 over the body before you read it.
{"id":"cr_pfqPv0FLsBRimHfi","username":"zelfai","name":"Zelf","email":"example@zelflive.com","platform":"instagram","platform_handle":"zelfai","follower_count":53120,"active_content_count":217,"profile_bio":"Creator and content intelligence for modern brands.","platform_url":"https://www.instagram.com/zelfai","profile_picture_url":"https://cdn.hellozelf.com/avatars/zelfai.png"}
{"id":"cr_pfqPv0FLsBRimHfi","username":"zelfai","name":"Zelf","email":"example@zelflive.com","platform":"instagram","platform_handle":"zelfai","follower_count":53120,"active_content_count":217,"profile_bio":"Creator and content intelligence for modern brands.","platform_url":"https://www.instagram.com/zelfai","profile_picture_url":"https://cdn.hellozelf.com/avatars/zelfai.png"}One row: Creator
idType: stringread-onlyUnique identifier of the creator.
idType: stringread-onlyUnique identifier of the creator.
usernameType: stringor nullThe creator's username or handle on the platform, without the @.
usernameType: stringor nullThe creator's username or handle on the platform, without the @.
nameType: stringor nullThe creator's display name on the platform.
nameType: stringor nullThe creator's display name on the platform.
emailType: stringor nullThe creator's email address when known by the platform; empty otherwise.
emailType: stringor nullThe creator's email address when known by the platform; empty otherwise.
platformType: stringThe platform the creator is on. One of instagram, tiktok, youtube.
platformType: stringThe platform the creator is on. One of instagram, tiktok, youtube.
platform_handle Type: stringThe platform-side identifier of the account.
platform_handle Type: stringThe platform-side identifier of the account.
follower_count Type: integerThe creator's follower count as of the most recent observation.
follower_count Type: integerThe creator's follower count as of the most recent observation.
active_content_count Type: integeror nullNumber of active content items attributed to the creator.
active_content_count Type: integeror nullNumber of active content items attributed to the creator.
profile_bio Type: stringor nullThe creator's profile bio as it appears on the platform.
profile_bio Type: stringor nullThe creator's profile bio as it appears on the platform.
platform_url Type: stringread-onlyDirect URL to the creator's profile on the platform.
platform_url Type: stringread-onlyDirect URL to the creator's profile on the platform.
profile_picture_url Type: stringread-onlyURL of the creator's profile picture.
profile_picture_url Type: stringread-onlyURL of the creator's profile picture.
Acknowledgement
Return a 2xx status within the endpoint's timeout to acknowledge receipt. Any non-2xx status, or a timeout, is treated as a failed delivery and retried with backoff.
Events
creator_vetting.completed
Fires when a creator vetting analysis run reaches a terminal state (COMPLETED or FAILED).
Delivered in inline mode as a lightweight notification: data.items[0] carries the vetting id, its analysis_type, modified_at, and each run's id and status, rather than the full payload. Retrieve the result from creator_vetting.results (pass vetting_id=<id>). resource is null.
Payload Zelf POSTs to the registered endpoint:
Payload
idType: stringUnique id of this delivery attempt, stable across retries of the same push.
idType: stringUnique id of this delivery attempt, stable across retries of the same push.
typeType: stringEvent type. <resource>.snapshot for scheduled snapshots (content.snapshot, creator.snapshot), or the event name for event pushes (creator_vetting.completed).
typeType: stringEvent type. <resource>.snapshot for scheduled snapshots (content.snapshot, creator.snapshot), or the event name for event pushes (creator_vetting.completed).
subscription_id Type: stringId of the subscription that produced this push.
subscription_id Type: stringId of the subscription that produced this push.
delivered_at Type: integerUnix epoch seconds at which Zelf sent this push.
delivered_at Type: integerUnix epoch seconds at which Zelf sent this push.
livemodeType: booleantrue for production data; false for test deliveries.
livemodeType: booleantrue for production data; false for test deliveries.
resourceType: stringor nullResource the push covers (content or creator) for snapshots; null for event pushes.
resourceType: stringor nullResource the push covers (content or creator) for snapshots; null for event pushes.
resource_filters Type: anyThe subscription's stored filters that scoped this snapshot, using the same query params as the matching list operation (content.list or creators.list). Empty for event pushes.
resource_filters Type: anyThe subscription's stored filters that scoped this snapshot, using the same query params as the matching list operation (content.list or creators.list). Empty for event pushes.
delivery_mode Type: enummanifest: data.files holds downloadable snapshot files. inline: data.items holds the rows directly.
Show values
delivery_mode Type: enummanifest: data.files holds downloadable snapshot files. inline: data.items holds the rows directly.
manifestinlinedataType: WebhookDataThe push payload. See delivery_mode for which key inside is populated.
Show child attributes
dataType: WebhookDataThe push payload. See delivery_mode for which key inside is populated.
data.item_count Type: integerminimum 0Total number of rows in this delivery, summed across files or equal to the length of items.
data.item_count Type: integerminimum 0Total number of rows in this delivery, summed across files or equal to the length of items.
- minimum
- 0
data.statisticsType: anyAggregate totals over the snapshot, including post count, views, engagement, earned media value, and unique creators. Present only on content.snapshot; absent for creator and event pushes.
data.statisticsType: anyAggregate totals over the snapshot, including post count, views, engagement, earned media value, and unique creators. Present only on content.snapshot; absent for creator and event pushes.
data.filesType: WebhookFile[]Manifest mode only. The downloadable snapshot files; retrieve each download_url and stream the NDJSON rows. Absent in inline mode.
Show child attributes
data.filesType: WebhookFile[]Manifest mode only. The downloadable snapshot files; retrieve each download_url and stream the NDJSON rows. Absent in inline mode.
data.files[].formatType: stringFile encoding. Always ndjson (newline-delimited JSON, with one row per line).
data.files[].formatType: stringFile encoding. Always ndjson (newline-delimited JSON, with one row per line).
data.files[].expires_at Type: integerUnix epoch seconds after which download_url stops working. Fetch the file before this time.
data.files[].expires_at Type: integerUnix epoch seconds after which download_url stops working. Fetch the file before this time.
data.files[].sha256Type: stringHex SHA-256 of the file body. Use it to verify the download.
data.files[].sha256Type: stringHex SHA-256 of the file body. Use it to verify the download.
data.files[].size_bytes Type: integerminimum 0Size of the file in bytes.
data.files[].size_bytes Type: integerminimum 0Size of the file in bytes.
- minimum
- 0
data.files[].item_count Type: integerminimum 0Number of rows in this file.
data.files[].item_count Type: integerminimum 0Number of rows in this file.
- minimum
- 0
data.files[].download_url Type: string(uri)Signed, time-limited URL from which to retrieve the file. Expires at expires_at.
data.files[].download_url Type: string(uri)Signed, time-limited URL from which to retrieve the file. Expires at expires_at.
data.itemsType: any[]Inline mode only. The delivered rows themselves, in the same shape returned by the matching REST endpoint. Absent in manifest mode.
data.itemsType: any[]Inline mode only. The delivered rows themselves, in the same shape returned by the matching REST endpoint. Absent in manifest mode.
Acknowledgement
Return a 2xx status within the endpoint's timeout to acknowledge receipt. Any non-2xx status, or a timeout, is treated as a failed delivery and retried with backoff.
ai_analysis.completed
Fires when an AI analysis run reaches a terminal state (COMPLETED or FAILED).
Delivered in inline mode as a lightweight notification: data.items[0] carries the analysis id, its analysis_type, modified_at, and each run's id and status, rather than the full payload. Retrieve the result from ai_analysis.results (pass analysis_id=<id>). resource is null. An analysis with multiple scopes fires once per run, as each reaches a terminal state.
Payload Zelf POSTs to the registered endpoint:
Payload
idType: stringUnique id of this delivery attempt, stable across retries of the same push.
idType: stringUnique id of this delivery attempt, stable across retries of the same push.
typeType: stringEvent type. <resource>.snapshot for scheduled snapshots (content.snapshot, creator.snapshot), or the event name for event pushes (creator_vetting.completed).
typeType: stringEvent type. <resource>.snapshot for scheduled snapshots (content.snapshot, creator.snapshot), or the event name for event pushes (creator_vetting.completed).
subscription_id Type: stringId of the subscription that produced this push.
subscription_id Type: stringId of the subscription that produced this push.
delivered_at Type: integerUnix epoch seconds at which Zelf sent this push.
delivered_at Type: integerUnix epoch seconds at which Zelf sent this push.
livemodeType: booleantrue for production data; false for test deliveries.
livemodeType: booleantrue for production data; false for test deliveries.
resourceType: stringor nullResource the push covers (content or creator) for snapshots; null for event pushes.
resourceType: stringor nullResource the push covers (content or creator) for snapshots; null for event pushes.
resource_filters Type: anyThe subscription's stored filters that scoped this snapshot, using the same query params as the matching list operation (content.list or creators.list). Empty for event pushes.
resource_filters Type: anyThe subscription's stored filters that scoped this snapshot, using the same query params as the matching list operation (content.list or creators.list). Empty for event pushes.
delivery_mode Type: enummanifest: data.files holds downloadable snapshot files. inline: data.items holds the rows directly.
Show values
delivery_mode Type: enummanifest: data.files holds downloadable snapshot files. inline: data.items holds the rows directly.
manifestinlinedataType: WebhookDataThe push payload. See delivery_mode for which key inside is populated.
Show child attributes
dataType: WebhookDataThe push payload. See delivery_mode for which key inside is populated.
data.item_count Type: integerminimum 0Total number of rows in this delivery, summed across files or equal to the length of items.
data.item_count Type: integerminimum 0Total number of rows in this delivery, summed across files or equal to the length of items.
- minimum
- 0
data.statisticsType: anyAggregate totals over the snapshot, including post count, views, engagement, earned media value, and unique creators. Present only on content.snapshot; absent for creator and event pushes.
data.statisticsType: anyAggregate totals over the snapshot, including post count, views, engagement, earned media value, and unique creators. Present only on content.snapshot; absent for creator and event pushes.
data.filesType: WebhookFile[]Manifest mode only. The downloadable snapshot files; retrieve each download_url and stream the NDJSON rows. Absent in inline mode.
Show child attributes
data.filesType: WebhookFile[]Manifest mode only. The downloadable snapshot files; retrieve each download_url and stream the NDJSON rows. Absent in inline mode.
data.files[].formatType: stringFile encoding. Always ndjson (newline-delimited JSON, with one row per line).
data.files[].formatType: stringFile encoding. Always ndjson (newline-delimited JSON, with one row per line).
data.files[].expires_at Type: integerUnix epoch seconds after which download_url stops working. Fetch the file before this time.
data.files[].expires_at Type: integerUnix epoch seconds after which download_url stops working. Fetch the file before this time.
data.files[].sha256Type: stringHex SHA-256 of the file body. Use it to verify the download.
data.files[].sha256Type: stringHex SHA-256 of the file body. Use it to verify the download.
data.files[].size_bytes Type: integerminimum 0Size of the file in bytes.
data.files[].size_bytes Type: integerminimum 0Size of the file in bytes.
- minimum
- 0
data.files[].item_count Type: integerminimum 0Number of rows in this file.
data.files[].item_count Type: integerminimum 0Number of rows in this file.
- minimum
- 0
data.files[].download_url Type: string(uri)Signed, time-limited URL from which to retrieve the file. Expires at expires_at.
data.files[].download_url Type: string(uri)Signed, time-limited URL from which to retrieve the file. Expires at expires_at.
data.itemsType: any[]Inline mode only. The delivered rows themselves, in the same shape returned by the matching REST endpoint. Absent in manifest mode.
data.itemsType: any[]Inline mode only. The delivered rows themselves, in the same shape returned by the matching REST endpoint. Absent in manifest mode.
Acknowledgement
Return a 2xx status within the endpoint's timeout to acknowledge receipt. Any non-2xx status, or a timeout, is treated as a failed delivery and retried with backoff.