Creator

Look up creators and their public profile metrics, and run creator vetting analyses that score safety and brand fit.

List Creators

GET/api/v1/creator/creators.list

Returns creators across the platforms Zelf supports. At least one of id, username, or email must be supplied to scope the search.

Results can be ordered with order_by (follower_count, id). The id of each creator corresponds to the creator_id filter on creator_vetting.list. Requests that supply none of the required filters return INVALID_ID.

Parameters

platformType: enum[]unique items true

Platforms to include (comma-separated).

Show values
unique items
true
instagramtiktokyoutube
order_byType: enum[]unique items true

Sort direction is inverted: order_by=field sorts descending and order_by=-field sorts ascending. Comma-separate to sort by multiple fields.

Show values
unique items
true
follower_count-follower_countid-id
emailType: string(email)

Creator email (exact match, case-insensitive).

idType: string

Creator id (from a previous creator response).

usernameType: string

Creator username substring (case-insensitive).

Returns Creator

idType: stringread-only

Unique identifier of the creator.

usernameType: stringor null

The creator's username or handle on the platform, without the @.

nameType: stringor null

The creator's display name on the platform.

emailType: stringor null

The creator's email address when known by the platform; empty otherwise.

platformType: string

The platform the creator is on. One of instagram, tiktok, youtube.

platform_handleType: string

The platform-side identifier of the account.

follower_countType: integer

The creator's follower count as of the most recent observation.

active_content_countType: integeror null

Number of active content items attributed to the creator.

profile_bioType: stringor null

The creator's profile bio as it appears on the platform.

platform_urlType: stringread-only

Direct URL to the creator's profile on the platform.

profile_picture_urlType: stringread-only

URL of the creator's profile picture.

Responses

Creator

idType: stringread-only

Unique identifier of the creator.

usernameType: stringor null

The creator's username or handle on the platform, without the @.

nameType: stringor null

The creator's display name on the platform.

emailType: stringor null

The creator's email address when known by the platform; empty otherwise.

platformType: string

The platform the creator is on. One of instagram, tiktok, youtube.

platform_handleType: string

The platform-side identifier of the account.

follower_countType: integer

The creator's follower count as of the most recent observation.

active_content_countType: integeror null

Number of active content items attributed to the creator.

profile_bioType: stringor null

The creator's profile bio as it appears on the platform.

platform_urlType: stringread-only

Direct URL to the creator's profile on the platform.

profile_picture_urlType: stringread-only

URL of the creator's profile picture.

Request

platformenum[]
order_byenum[]
string(email)
from zelf import ZelfAPIClient

client = ZelfAPIClient(api_key="<your-api-key>")

result = client.creators.list()
print(result)
Response
{
  "log_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "timestamp": "2026-01-01T00:00:00Z",
  "results": [
    {
      "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"
    }
  ],
  "item_count": 1,
  "page": 1,
  "next": null,
  "previous": null
}

Create Creator Vetting

POST/api/v1/creator/vetting/creator_vetting.create

Vets a creator identified by profile_url, retrieving the profile and scoring its safety and brand fit. Runs complete asynchronously, so this method returns immediately with the created vetting.

The vetting analyzes up to 150 of the creator's posts per connection type, or the limit configured for your workspace.

The created vetting is returned as the single item in results. Take its id and poll creator_vetting.list until a run reports COMPLETED. A vetting can take an hour or more to complete, so prefer the creator_vetting.completed webhook over frequent polling, which can trigger RATE_LIMIT_EXCEEDED. Once a run is complete, retrieve the payload from creator_vetting.results, passing vetting_id=<id>.

Request body

resync_profileType: booleandefault false

When true, re-indexes the creator even if they already exist in our database.

default
false
profile_urlType: string(uri)Requiredmin length 1

Direct URL to the creator's profile on a supported platform (instagram, tiktok, youtube).

min length
1
content_scopeType: ContentScopeRequest

The creator's content relationships to analyze. Defaults to owned content only when omitted.

Show child attributes
content_scope.ownedType: booleandefault true

Whether to include content the creator originally posted.

default
true
content_scope.repostType: booleandefault false

Whether to include content the creator reposted.

default
false
content_scope.likedType: booleandefault false

Whether to include content the creator liked.

default
false
safety_checksType: SafetyCheckRequest[]

Safety criteria for the AI pipeline to evaluate for this creator.

Example:

[
  {
    "type": "DISCLOSURE"
  }
]
Show child attributes
safety_checks[].typeType: enumRequired

Category of the safety criterion. One of USER_DEFINED_SAFETY_CRITERION, ADULT_CONTENT, ARMS_AND_AMMUNITION, MISINFORMATION, PROFANITY, POLITICS, DISCLOSURE.

DISCLOSURE looks for explicit sponsorship disclosures (for example #ad, a paid partnership, an affiliate commission or a gifted product) in each video's on-screen text, speech transcription, title and caption. It is not scored as a violation: findings are listed per video under insight_json.disclosures in the result payload.

Show values
USER_DEFINED_SAFETY_CRITERIONADULT_CONTENTARMS_AND_AMMUNITIONMISINFORMATIONPROFANITYPOLITICSDISCLOSURE
safety_checks[].extraType: stringor null

Label for USER_DEFINED_SAFETY_CRITERION, stored as the criterion's value. Ignored for predefined types.

Returns CreatorVetting

idType: stringread-only

Identifier of the vetting. Use this value on follow-up calls.

created_atType: string(date-time)

Time the vetting was created (UTC, ISO-8601).

updated_atType: string(date-time)

Time the vetting was most recently modified (UTC, ISO-8601).

creator_idType: stringor nullread-only

Identifier of the creator the vetting is tied to. Returns null until the creator has been resolved.

statusType: stringread-only

Status of the vetting. One of IN_PROGRESS, COMPLETED, EMPTY_RESULT (finished with no matching content), or FAILED.

creatorType: Creatoror nullread-only

The creator tied to this vetting. Returns null until resolved.

Show child attributes
creator.idType: stringread-only

Unique identifier of the creator.

creator.usernameType: stringor null

The creator's username or handle on the platform, without the @.

creator.nameType: stringor null

The creator's display name on the platform.

creator.emailType: stringor null

The creator's email address when known by the platform; empty otherwise.

creator.platformType: string

The platform the creator is on. One of instagram, tiktok, youtube.

creator.platform_handleType: string

The platform-side identifier of the account.

creator.follower_countType: integer

The creator's follower count as of the most recent observation.

creator.active_content_countType: integeror null

Number of active content items attributed to the creator.

creator.profile_bioType: stringor null

The creator's profile bio as it appears on the platform.

creator.platform_urlType: stringread-only

Direct URL to the creator's profile on the platform.

creator.profile_picture_urlType: stringread-only

URL of the creator's profile picture.

typeType: stringread-only

Always CREATOR_ANALYSIS here.

sync_job_idType: stringor nullread-only

Identifier of the scrape job triggered for this request. Populated only when resync_profile=true was supplied and the creator already existed; null otherwise.

analysisType: CreatorVettingRun[]

The analysis runs tied to this vetting, ordered newest first.

Show child attributes
analysis[].idType: stringread-only

Identifier of the analysis record.

analysis[].scopeType: string

The subject this analysis covers: CONTENT or COMMENT.

analysis[].statusType: stringread-only

Status of the analysis. One of IN_PROGRESS, COMPLETED, EMPTY_RESULT (finished with no matching content), or FAILED.

safety_checksType: object[]read-only

The safety criteria submitted with this vetting request.

content_scopeType: objectread-only

The content relationships analyzed for this creator.

Responses

CreatorVetting

idType: stringread-only

Identifier of the vetting. Use this value on follow-up calls.

created_atType: string(date-time)

Time the vetting was created (UTC, ISO-8601).

updated_atType: string(date-time)

Time the vetting was most recently modified (UTC, ISO-8601).

creator_idType: stringor nullread-only

Identifier of the creator the vetting is tied to. Returns null until the creator has been resolved.

statusType: stringread-only

Status of the vetting. One of IN_PROGRESS, COMPLETED, EMPTY_RESULT (finished with no matching content), or FAILED.

creatorType: Creatoror nullread-only

The creator tied to this vetting. Returns null until resolved.

Show child attributes
creator.idType: stringread-only

Unique identifier of the creator.

creator.usernameType: stringor null

The creator's username or handle on the platform, without the @.

creator.nameType: stringor null

The creator's display name on the platform.

creator.emailType: stringor null

The creator's email address when known by the platform; empty otherwise.

creator.platformType: string

The platform the creator is on. One of instagram, tiktok, youtube.

creator.platform_handleType: string

The platform-side identifier of the account.

creator.follower_countType: integer

The creator's follower count as of the most recent observation.

creator.active_content_countType: integeror null

Number of active content items attributed to the creator.

creator.profile_bioType: stringor null

The creator's profile bio as it appears on the platform.

creator.platform_urlType: stringread-only

Direct URL to the creator's profile on the platform.

creator.profile_picture_urlType: stringread-only

URL of the creator's profile picture.

typeType: stringread-only

Always CREATOR_ANALYSIS here.

sync_job_idType: stringor nullread-only

Identifier of the scrape job triggered for this request. Populated only when resync_profile=true was supplied and the creator already existed; null otherwise.

analysisType: CreatorVettingRun[]

The analysis runs tied to this vetting, ordered newest first.

Show child attributes
analysis[].idType: stringread-only

Identifier of the analysis record.

analysis[].scopeType: string

The subject this analysis covers: CONTENT or COMMENT.

analysis[].statusType: stringread-only

Status of the analysis. One of IN_PROGRESS, COMPLETED, EMPTY_RESULT (finished with no matching content), or FAILED.

safety_checksType: object[]read-only

The safety criteria submitted with this vetting request.

content_scopeType: objectread-only

The content relationships analyzed for this creator.

Request

boolean
string(uri)Required
ContentScopeRequest
boolean
boolean
boolean
from zelf import ZelfAPIClient

client = ZelfAPIClient(api_key="<your-api-key>")

result = client.creator_vetting.create(
    resync_profile=True,
    profile_url="https://www.instagram.com/zelfai",
    content_scope={
        "owned": True,
        "repost": False,
        "liked": False,
    },
    safety_checks=[{
        "type": "ADULT_CONTENT",
    }],
)
print(result)
Response
{
  "log_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "timestamp": "2026-01-01T00:00:00Z",
  "results": [
    {
      "id": "bod_krO77hRVsmbF1ihj",
      "created_at": "2026-05-12T14:30:00Z",
      "updated_at": "2026-05-12T15:00:00Z",
      "creator_id": "cr_pfqPv0FLsBRimHfi",
      "status": "COMPLETED",
      "creator": {
        "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"
      },
      "type": "CREATOR_ANALYSIS",
      "sync_job_id": "csj_qtQeeG2PjW6ua1rX",
      "analysis": [
        {
          "id": "ban_xJZFbcWNkF9M3brf",
          "scope": "CONTENT",
          "status": "COMPLETED"
        }
      ],
      "safety_checks": [
        {
          "type": "ADULT_CONTENT"
        }
      ],
      "content_scope": {
        "owned": true,
        "repost": false,
        "liked": false
      }
    }
  ],
  "item_count": 1,
  "page": 1,
  "next": null,
  "previous": null
}

List Creator Vettings

GET/api/v1/creator/vetting/creator_vetting.list

Returns creator vettings ordered newest first, each with its analysis runs and their current status. Use it to discover vettings and monitor run progress without retrieving the full result payload.

A vetting id corresponds to the vetting_id parameter on creator_vetting.results and creator_vetting.contents, and each run's id corresponds to the id parameter on creator_vetting.results. The run result download is not included in this response; retrieve it from creator_vetting.results once a run reports COMPLETED. Possible statuses are IN_PROGRESS, COMPLETED, EMPTY_RESULT, and FAILED. Supply creator_id to filter to a single creator, or id to return a single vetting.

Parameters

creator_idType: string

Identifier of a creator, obtained from creators.list. When supplied, only vetting analyses tied to that creator are returned. Returns INVALID_ID if the value is not a valid creator identifier.

idType: string

Identifier of a vetting. When supplied, only that vetting is returned. Returns INVALID_ID if the value is not valid.

Returns CreatorVetting

idType: stringread-only

Identifier of the vetting. Use this value on follow-up calls.

created_atType: string(date-time)

Time the vetting was created (UTC, ISO-8601).

updated_atType: string(date-time)

Time the vetting was most recently modified (UTC, ISO-8601).

creator_idType: stringor nullread-only

Identifier of the creator the vetting is tied to. Returns null until the creator has been resolved.

statusType: stringread-only

Status of the vetting. One of IN_PROGRESS, COMPLETED, EMPTY_RESULT (finished with no matching content), or FAILED.

creatorType: Creatoror nullread-only

The creator tied to this vetting. Returns null until resolved.

Show child attributes
creator.idType: stringread-only

Unique identifier of the creator.

creator.usernameType: stringor null

The creator's username or handle on the platform, without the @.

creator.nameType: stringor null

The creator's display name on the platform.

creator.emailType: stringor null

The creator's email address when known by the platform; empty otherwise.

creator.platformType: string

The platform the creator is on. One of instagram, tiktok, youtube.

creator.platform_handleType: string

The platform-side identifier of the account.

creator.follower_countType: integer

The creator's follower count as of the most recent observation.

creator.active_content_countType: integeror null

Number of active content items attributed to the creator.

creator.profile_bioType: stringor null

The creator's profile bio as it appears on the platform.

creator.platform_urlType: stringread-only

Direct URL to the creator's profile on the platform.

creator.profile_picture_urlType: stringread-only

URL of the creator's profile picture.

typeType: stringread-only

Always CREATOR_ANALYSIS here.

sync_job_idType: stringor nullread-only

Identifier of the scrape job triggered for this request. Populated only when resync_profile=true was supplied and the creator already existed; null otherwise.

analysisType: CreatorVettingRun[]

The analysis runs tied to this vetting, ordered newest first.

Show child attributes
analysis[].idType: stringread-only

Identifier of the analysis record.

analysis[].scopeType: string

The subject this analysis covers: CONTENT or COMMENT.

analysis[].statusType: stringread-only

Status of the analysis. One of IN_PROGRESS, COMPLETED, EMPTY_RESULT (finished with no matching content), or FAILED.

safety_checksType: object[]read-only

The safety criteria submitted with this vetting request.

content_scopeType: objectread-only

The content relationships analyzed for this creator.

Responses

CreatorVetting

idType: stringread-only

Identifier of the vetting. Use this value on follow-up calls.

created_atType: string(date-time)

Time the vetting was created (UTC, ISO-8601).

updated_atType: string(date-time)

Time the vetting was most recently modified (UTC, ISO-8601).

creator_idType: stringor nullread-only

Identifier of the creator the vetting is tied to. Returns null until the creator has been resolved.

statusType: stringread-only

Status of the vetting. One of IN_PROGRESS, COMPLETED, EMPTY_RESULT (finished with no matching content), or FAILED.

creatorType: Creatoror nullread-only

The creator tied to this vetting. Returns null until resolved.

Show child attributes
creator.idType: stringread-only

Unique identifier of the creator.

creator.usernameType: stringor null

The creator's username or handle on the platform, without the @.

creator.nameType: stringor null

The creator's display name on the platform.

creator.emailType: stringor null

The creator's email address when known by the platform; empty otherwise.

creator.platformType: string

The platform the creator is on. One of instagram, tiktok, youtube.

creator.platform_handleType: string

The platform-side identifier of the account.

creator.follower_countType: integer

The creator's follower count as of the most recent observation.

creator.active_content_countType: integeror null

Number of active content items attributed to the creator.

creator.profile_bioType: stringor null

The creator's profile bio as it appears on the platform.

creator.platform_urlType: stringread-only

Direct URL to the creator's profile on the platform.

creator.profile_picture_urlType: stringread-only

URL of the creator's profile picture.

typeType: stringread-only

Always CREATOR_ANALYSIS here.

sync_job_idType: stringor nullread-only

Identifier of the scrape job triggered for this request. Populated only when resync_profile=true was supplied and the creator already existed; null otherwise.

analysisType: CreatorVettingRun[]

The analysis runs tied to this vetting, ordered newest first.

Show child attributes
analysis[].idType: stringread-only

Identifier of the analysis record.

analysis[].scopeType: string

The subject this analysis covers: CONTENT or COMMENT.

analysis[].statusType: stringread-only

Status of the analysis. One of IN_PROGRESS, COMPLETED, EMPTY_RESULT (finished with no matching content), or FAILED.

safety_checksType: object[]read-only

The safety criteria submitted with this vetting request.

content_scopeType: objectread-only

The content relationships analyzed for this creator.

Request

string
string
from zelf import ZelfAPIClient

client = ZelfAPIClient(api_key="<your-api-key>")

result = client.creator_vetting.list()
print(result)
Response
{
  "log_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "timestamp": "2026-01-01T00:00:00Z",
  "results": [
    {
      "id": "bod_krO77hRVsmbF1ihj",
      "created_at": "2026-05-12T14:30:00Z",
      "updated_at": "2026-05-12T15:00:00Z",
      "creator_id": "cr_pfqPv0FLsBRimHfi",
      "status": "COMPLETED",
      "creator": {
        "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"
      },
      "type": "CREATOR_ANALYSIS",
      "sync_job_id": "csj_qtQeeG2PjW6ua1rX",
      "analysis": [
        {
          "id": "ban_xJZFbcWNkF9M3brf",
          "scope": "CONTENT",
          "status": "COMPLETED"
        }
      ],
      "safety_checks": [
        {
          "type": "ADULT_CONTENT"
        }
      ],
      "content_scope": {
        "owned": true,
        "repost": false,
        "liked": false
      }
    }
  ],
  "item_count": 1,
  "page": 1,
  "next": null,
  "previous": null
}

Get Creator Vetting Results

GET/api/v1/creator/vetting/results/creator_vetting.results

Returns the result for each run: a signed, time-limited download of the vetting analysis payload. Call this method after a run reaches COMPLETED; for earlier statuses the row is returned with a null result.

Supply vetting_id (the vetting id from creator_vetting.list) to return every run of that vetting, or id (a single run's id) to return one run. One of the two is required. A malformed identifier returns INVALID_ID; omitting both returns VALIDATION_ERROR.

Disclosures. When the vetting requested DISCLOSURE, the payload's insight_json.disclosures holds one entry per analyzed video: its content_id and a result. The result lists evidence items, each with the source it was found in (frame for on-screen text, audio for the speech transcription, title, caption or metadata), a kind (sponsorship, affiliate, gifted or relationship for a commercial relationship; terms or risk for offer conditions and warnings), the quoted text and, where known, time_seconds. It also gives each source a channels status: present, absent or unknown (not checked). Disclosures are not counted as violations.

Limits: only videos up to 10 minutes are checked; on-screen text is read from sampled frames, so text shown only briefly can be missed; videos Zelf analyzed before the request are not re-analyzed for disclosures. An empty evidence list does not confirm that a video has no disclosure. Detection reports what was stated; it does not assess legal compliance.

Parameters

idType: string

Identifier of a single analysis. Returns only that analysis. Required unless vetting_id is supplied. Returns INVALID_ID if malformed.

vetting_idType: string

Identifier of the vetting, obtained from creator_vetting.list. Returns every analysis of that vetting. Required unless id is supplied. Returns INVALID_ID if malformed.

Returns CreatorVettingResult

idType: stringread-only

Identifier of the analysis record.

scopeType: string

The subject this analysis covers: CONTENT or COMMENT.

created_atType: string(date-time)

Time the analysis was created (UTC, ISO-8601).

modified_atType: string(date-time)

Time the analysis was most recently modified (UTC, ISO-8601).

vetting_idType: stringread-only

Identifier of the vetting this analysis belongs to.

statusType: stringread-only

Status of the analysis. One of IN_PROGRESS, COMPLETED, EMPTY_RESULT (finished with no matching content), or FAILED.

resultType: ResultFileor nullread-only

Signed, time-limited download of the run's analysis payload. Contains download_url (request it to retrieve the JSON), expires_at (Unix epoch seconds, approximately 24-hour TTL), and format (json). Returns null until the run completes.

Show child attributes
result.expires_atType: integer

Unix epoch seconds after which download_url expires. Re-fetch the run to obtain a fresh URL.

result.formatType: string

Payload encoding. Always json.

result.download_urlType: string(uri)

Signed URL to request the JSON payload. Expires at expires_at.

Responses

CreatorVettingResult

idType: stringread-only

Identifier of the analysis record.

scopeType: string

The subject this analysis covers: CONTENT or COMMENT.

created_atType: string(date-time)

Time the analysis was created (UTC, ISO-8601).

modified_atType: string(date-time)

Time the analysis was most recently modified (UTC, ISO-8601).

vetting_idType: stringread-only

Identifier of the vetting this analysis belongs to.

statusType: stringread-only

Status of the analysis. One of IN_PROGRESS, COMPLETED, EMPTY_RESULT (finished with no matching content), or FAILED.

resultType: ResultFileor nullread-only

Signed, time-limited download of the run's analysis payload. Contains download_url (request it to retrieve the JSON), expires_at (Unix epoch seconds, approximately 24-hour TTL), and format (json). Returns null until the run completes.

Show child attributes
result.expires_atType: integer

Unix epoch seconds after which download_url expires. Re-fetch the run to obtain a fresh URL.

result.formatType: string

Payload encoding. Always json.

result.download_urlType: string(uri)

Signed URL to request the JSON payload. Expires at expires_at.

Request

string
string
from zelf import ZelfAPIClient

client = ZelfAPIClient(api_key="<your-api-key>")

result = client.creator_vetting.results()
print(result)
Response
{
  "log_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "timestamp": "2026-01-01T00:00:00Z",
  "results": [
    {
      "id": "ban_xJZFbcWNkF9M3brf",
      "scope": "CONTENT",
      "created_at": "2026-05-12T14:30:00Z",
      "modified_at": "2026-05-12T15:00:00Z",
      "vetting_id": "bod_krO77hRVsmbF1ihj",
      "status": "COMPLETED",
      "result": {
        "download_url": "https://storage.googleapis.com/zelf-webhook-snapshots/ai_analysis/run_8f2c.json?X-Goog-Signature=...",
        "expires_at": 1718000000,
        "format": "json"
      }
    }
  ],
  "item_count": 1,
  "page": 1,
  "next": null,
  "previous": null
}

List Creator Vetting Content

GET/api/v1/creator/vetting/contents/creator_vetting.contents

Returns the content tied to a creator vetting, in the standard content shape. Use it to inspect the specific posts behind a vetting.

Requires vetting_id (a vetting id from creator_vetting.list). Brand-scoped fields (is_owned, is_tagged, net_promoter_score, ...) are null in this response.

Parameters

vetting_idType: stringRequired

Identifier of the vetting, obtained from creator_vetting.list.

Returns Content

idType: stringread-only

Unique identifier for this piece of content. Use it to retrieve the content anywhere a content id is accepted.

platform_post_idType: string

The 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: string

The platform the content was published on: instagram, tiktok or youtube.

content_formType: stringor null

Whether the content is a video or an image.

thumbnail_urlType: stringor null

URL of the content's thumbnail image.

posted_atType: string(date-time)or null

Time the content was originally published on its platform (UTC).

view_countType: integeror null

Total number of times the content has been viewed.

like_countType: integeror null

Total number of likes the content has received.

comment_countType: integeror null

Total number of comments on the content.

share_countType: integeror null

Total number of times the content has been shared.

total_engagementType: integeror null

Sum of the likes, comments, and shares the content has received.

languageType: stringor null

ISO 639 code of the content's primary language.

media_durationType: number(double)or null

Length of the media in seconds. Null when not known.

engagement_rateType: number(double)or nullread-only

Engagement per view (likes plus comments plus shares, divided by views). Null when the content has no recorded views.

earned_media_value_centsType: integeror nullread-only

Estimated marketing value of the content, in US cents.

creatorType: ContentCreatorread-only

The creator who published the content.

Show child attributes
creator.idType: stringread-only

Unique identifier for the creator.

creator.usernameType: stringor null

The creator's username or handle on the platform (without an @).

creator.nameType: stringor null

The creator's display name on the platform.

creator.platformType: stringor null

The platform the creator publishes on. One of instagram, tiktok, youtube.

creator.platform_handleType: stringor null

The platform-side identifier of the creator's account.

creator.platform_urlType: stringor null

Direct URL to the creator's profile on the platform.

creator.profile_picture_urlType: stringor null

URL of the creator's profile picture.

creator.profile_bioType: stringor null

The creator's profile bio as it appears on the platform.

creator.follower_countType: integeror null

The creator's follower count as of the most recent observation.

creator.active_content_countType: integeror null

Number of active content items attributed to the creator.

brand_idType: stringor nullread-only

Identifier 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_scoreType: integeror nullread-only

Net promoter score for the content from the perspective of the scoped brand. Returned as null when the request omits brand_id.

is_ownedType: booleanor nullread-only

Whether 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_taggedType: booleanor nullread-only

Whether the post tags the scoped brand on the platform. Returned as null when the request omits brand_id.

is_influencerType: booleanor nullread-only

Whether 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_typeType: stringor nullread-only

How 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: string

Short caption or title of the post (the primary user-visible text).

descriptionType: string

Long-form description of the post.

transcriptType: stringor null

Transcribed speech from the content's audio, when available.

platform_urlType: string

Direct URL to the post on its platform.

Examples:

  • https://instagram.com/reel/abcd
  • https://www.tiktok.com/@username/video/12345678
last_keywordType: stringor null

What 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_summaryType: stringor null

Short AI-generated summary of the content.

hashtagsType: string[]

Hashtags used in the post, normalized to lowercase and without the leading #.

Responses

Content

idType: stringread-only

Unique identifier for this piece of content. Use it to retrieve the content anywhere a content id is accepted.

platform_post_idType: string

The 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: string

The platform the content was published on: instagram, tiktok or youtube.

content_formType: stringor null

Whether the content is a video or an image.

thumbnail_urlType: stringor null

URL of the content's thumbnail image.

posted_atType: string(date-time)or null

Time the content was originally published on its platform (UTC).

view_countType: integeror null

Total number of times the content has been viewed.

like_countType: integeror null

Total number of likes the content has received.

comment_countType: integeror null

Total number of comments on the content.

share_countType: integeror null

Total number of times the content has been shared.

total_engagementType: integeror null

Sum of the likes, comments, and shares the content has received.

languageType: stringor null

ISO 639 code of the content's primary language.

media_durationType: number(double)or null

Length of the media in seconds. Null when not known.

engagement_rateType: number(double)or nullread-only

Engagement per view (likes plus comments plus shares, divided by views). Null when the content has no recorded views.

earned_media_value_centsType: integeror nullread-only

Estimated marketing value of the content, in US cents.

creatorType: ContentCreatorread-only

The creator who published the content.

Show child attributes
creator.idType: stringread-only

Unique identifier for the creator.

creator.usernameType: stringor null

The creator's username or handle on the platform (without an @).

creator.nameType: stringor null

The creator's display name on the platform.

creator.platformType: stringor null

The platform the creator publishes on. One of instagram, tiktok, youtube.

creator.platform_handleType: stringor null

The platform-side identifier of the creator's account.

creator.platform_urlType: stringor null

Direct URL to the creator's profile on the platform.

creator.profile_picture_urlType: stringor null

URL of the creator's profile picture.

creator.profile_bioType: stringor null

The creator's profile bio as it appears on the platform.

creator.follower_countType: integeror null

The creator's follower count as of the most recent observation.

creator.active_content_countType: integeror null

Number of active content items attributed to the creator.

brand_idType: stringor nullread-only

Identifier 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_scoreType: integeror nullread-only

Net promoter score for the content from the perspective of the scoped brand. Returned as null when the request omits brand_id.

is_ownedType: booleanor nullread-only

Whether 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_taggedType: booleanor nullread-only

Whether the post tags the scoped brand on the platform. Returned as null when the request omits brand_id.

is_influencerType: booleanor nullread-only

Whether 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_typeType: stringor nullread-only

How 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: string

Short caption or title of the post (the primary user-visible text).

descriptionType: string

Long-form description of the post.

transcriptType: stringor null

Transcribed speech from the content's audio, when available.

platform_urlType: string

Direct URL to the post on its platform.

Examples:

  • https://instagram.com/reel/abcd
  • https://www.tiktok.com/@username/video/12345678
last_keywordType: stringor null

What 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_summaryType: stringor null

Short AI-generated summary of the content.

hashtagsType: string[]

Hashtags used in the post, normalized to lowercase and without the leading #.

Request

stringRequired
from zelf import ZelfAPIClient

client = ZelfAPIClient(api_key="<your-api-key>")

result = client.creator_vetting.contents()
print(result)
Response
{
  "log_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "timestamp": "2026-01-01T00:00:00Z",
  "results": [
    {
      "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"
      ]
    }
  ],
  "item_count": 1,
  "page": 1,
  "next": null,
  "previous": null
}

Get Creator Vetting Content Statistics

GET/api/v1/creator/vetting/contents/statistics/creator_vetting.content_statistics

Returns aggregate totals (post count, views, engagement, earned media value, and unique creators) over the content tied to a creator vetting.

Requires vetting_id (a vetting id from creator_vetting.list) and returns the same totals shape as content.statistics.

Parameters

vetting_idType: stringRequired

Identifier of the vetting, obtained from creator_vetting.list.

Returns ContentStatistics

post_countType: integer

Number of unique pieces of content in the filtered set.

total_viewsType: integer

Total views across the filtered set.

total_likesType: integer

Total likes across the filtered set.

total_commentsType: integer

Total comments across the filtered set.

total_sharesType: integer

Total shares across the filtered set.

total_engagementType: integer

Total engagement (likes + comments + shares) across the filtered set.

total_earned_media_value_centsType: integer

Total estimated marketing value across the filtered set, in US cents. Each piece of content contributes once even when multiple brand contexts match it through brand_id.

total_media_durationType: number(double)

Total media length in seconds across the filtered set.

engagement_rateType: number(double)or null

Total engagement divided by total views across the filtered set. Null when the filtered set has no recorded views.

unique_creator_countType: integer

Number of distinct creators represented in the filtered set.

Responses

ContentStatistics

post_countType: integer

Number of unique pieces of content in the filtered set.

total_viewsType: integer

Total views across the filtered set.

total_likesType: integer

Total likes across the filtered set.

total_commentsType: integer

Total comments across the filtered set.

total_sharesType: integer

Total shares across the filtered set.

total_engagementType: integer

Total engagement (likes + comments + shares) across the filtered set.

total_earned_media_value_centsType: integer

Total estimated marketing value across the filtered set, in US cents. Each piece of content contributes once even when multiple brand contexts match it through brand_id.

total_media_durationType: number(double)

Total media length in seconds across the filtered set.

engagement_rateType: number(double)or null

Total engagement divided by total views across the filtered set. Null when the filtered set has no recorded views.

unique_creator_countType: integer

Number of distinct creators represented in the filtered set.

Request

stringRequired
from zelf import ZelfAPIClient

client = ZelfAPIClient(api_key="<your-api-key>")

result = client.creator_vetting.content_statistics()
print(result)
Response
{
  "log_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "timestamp": "2026-01-01T00:00:00Z",
  "results": [
    {
      "post_count": 1280,
      "total_views": 4500000,
      "total_likes": 320000,
      "total_comments": 18000,
      "total_shares": 9500,
      "total_engagement": 347500,
      "total_earned_media_value_cents": 12500000,
      "total_media_duration": 53400,
      "engagement_rate": 0.077,
      "unique_creator_count": 412
    }
  ],
  "item_count": 1,
  "page": 1,
  "next": null,
  "previous": null
}