Read as Markdown · Use with an AI agent
Endpoint
/v1/panorama/creator-vettinglive · provenUp to 8 creditsParameters
Query parameters
| Name | Required | Description | Example |
|---|---|---|---|
handle | yes | Creator username without the @. | nasa |
platform | yes | tiktok, instagram, youtube, x or threads. | tiktok |
posts_limit | no | Integer1–20, default20; returned source can contain fewer posts. Missing YouTube counters are hydrated in one bounded batch for at most10 retained videos, subject to the same workflow budget. | 20 |
comment_posts | no | Integer0–10, default3; maximum posts to sample comments from. | 3 |
comments_per_post | no | Integer1–50, default20; maximum comments requested for each sampled post. | 20 |
content_review | no | Optional review of text from already-returned creator posts (default off). At most eight posts receive bounded advisory flags with exact source sentences for human review. Does not inspect images/video, verify allegations, infer identity or personal traits, determine authenticity, or score the creator. No extra source calls or credit surcharge; unavailable or uncertain analysis remains explicit within the existing request budget. | 1 |
dry_run | no | Read a zero-credit estimate without fetching sources, running AI, or reserving credits. Cache status is a snapshot, not a guarantee at execution. | 1 |
Examples
Make the request
curl "https://www.monocrawl.com/v1/panorama/creator-vetting?handle=nasa&platform=tiktok" \ -H "x-api-key: mn_your_key_here"
TypeScript
const key = process.env.MONOCRAWL_API_KEY;
if (!key) throw new Error('Set MONOCRAWL_API_KEY on your server.');
const res = await fetch(
"https://www.monocrawl.com/v1/panorama/creator-vetting?handle=nasa&platform=tiktok",
{ headers: { "x-api-key": key } },
);
const body = await res.json();
if (!body.success) {
// one error shape for every endpoint — see /docs/errors
throw new Error(`${body.error.type}: ${body.error.message}`);
}
console.log(body.data, "credits left:", body.credits_remaining);Python
import os
import requests
res = requests.get(
"https://www.monocrawl.com/v1/panorama/creator-vetting?handle=nasa&platform=tiktok",
headers={"x-api-key": os.environ["MONOCRAWL_API_KEY"]},
timeout=60,
)
body = res.json()
if not body["success"]:
# one error shape for every endpoint — see /docs/errors
raise RuntimeError(f"{body['error']['type']}: {body['error']['message']}")
print(body["data"], "credits left:", body["credits_remaining"])Response
Response fields and example
This example is illustrative, not a captured live response. Variable-cost operations may settle a charge different from the list price below. A successful response puts the platform payload in data and reports the exact credits used, remaining balance, request id and cache status beside it.
{
"success": true,
"platform": "panorama",
"endpoint": "/v1/panorama/creator-vetting",
"data": {
"output": {
"posts_sampled": 1,
"posts_with_engagement": 1,
"posts_missing_engagement": 0,
"avg_engagement_per_post": 0,
"engagement_rate": 0,
"posting_cadence_days": null,
"follower_denominator": 100,
"follower_source_field": "followers"
},
"post_evidence": [
{
"id": "example-post",
"url": null,
"counts": {
"likes": 0,
"comments": 0,
"shares": null,
"views": 100
},
"interactions": 0,
"counters_reported": 2,
"view_engagement_rate": 0,
"created_at": null,
"count_sources": {
"likes": {
"endpoint": "instagram/posts",
"id": "example-post",
"field": "stats.likes"
},
"comments": {
"endpoint": "instagram/posts",
"id": "example-post",
"field": "stats.comments"
},
"shares": null,
"views": {
"endpoint": "instagram/posts",
"id": "example-post",
"field": "stats.views"
}
}
}
],
"comment_sample": [],
"sample": {
"posts_limit": 20,
"comment_posts_requested": 0,
"comment_posts_attempted": 0,
"comment_posts_completed": 0,
"comments_per_post": 20,
"comments_returned": 0,
"selection": "highest reported interaction counts within the returned recent-post page",
"exhaustive": false
},
"_meta": {
"methodology_version": "creator-vetting-v3"
},
"metrics_hydration": {
"status": "not_needed",
"endpoint": null,
"requested": 0,
"returned": 0,
"cap": 10,
"missing_ids": []
}
},
"credits_used": 8,
"credits_remaining": 99,
"request_id": "req_…",
"cached": false
}The example uses fictional values and shows a documented subset of data. The fields below are optional across supported sources; nullable fields can also be absent. Preserve unknown values and accept additional fields.
Download the data JSON Schema. Validate response.data, not the whole envelope. A valid shape does not establish that every field or source record was returned.
| Field inside data | Type | Meaning |
|---|---|---|
post_evidence | array | Nested response fields; optional unless explicitly documented. |
post_evidence[].id | string | null | Original post id. |
post_evidence[].url | string | null | Original post link. |
post_evidence[].counts | object | Nested response fields; optional unless explicitly documented. |
post_evidence[].counts.likes | number | null | Likes. |
post_evidence[].counts.comments | number | null | Comments. |
post_evidence[].counts.shares | number | null | Shares. |
post_evidence[].counts.views | number | null | Views. |
post_evidence[].interactions | number | null | Observed likes+comments+shares; views separate. |
post_evidence[].counters_reported | number | null | Known interaction counters. |
post_evidence[].view_engagement_rate | number | null | Observed interactions/views, fraction; null with missing or zero views. |
post_evidence[].created_at | string | null | Original publication timestamp. |
post_evidence[].count_sources | object | Nested response fields; optional unless explicitly documented. |
post_evidence[].count_sources.likes | object | null | Nested response fields; optional unless explicitly documented. |
post_evidence[].count_sources.likes.endpoint | string | null | Qualified source endpoint. |
post_evidence[].count_sources.likes.id | string | null | Native post id matched exactly. |
post_evidence[].count_sources.likes.field | string | null | Field path in that endpoint’s normalized response. |
post_evidence[].count_sources.comments | object | null | Nested response fields; optional unless explicitly documented. |
post_evidence[].count_sources.comments.endpoint | string | null | Qualified source endpoint. |
post_evidence[].count_sources.comments.id | string | null | Native post id matched exactly. |
post_evidence[].count_sources.comments.field | string | null | Field path in that endpoint’s normalized response. |
post_evidence[].count_sources.shares | object | null | Nested response fields; optional unless explicitly documented. |
post_evidence[].count_sources.shares.endpoint | string | null | Qualified source endpoint. |
post_evidence[].count_sources.shares.id | string | null | Native post id matched exactly. |
post_evidence[].count_sources.shares.field | string | null | Field path in that endpoint’s normalized response. |
post_evidence[].count_sources.views | object | null | Nested response fields; optional unless explicitly documented. |
post_evidence[].count_sources.views.endpoint | string | null | Qualified source endpoint. |
post_evidence[].count_sources.views.id | string | null | Native post id matched exactly. |
post_evidence[].count_sources.views.field | string | null | Field path in that endpoint’s normalized response. |
sample | object | Nested response fields; optional unless explicitly documented. |
sample.posts_limit | number | null | Requested maximum posts, integer1–20. |
sample.comment_posts_requested | number | null | Requested maximum posts to sample for comments, integer0–10. |
sample.comment_posts_attempted | number | null | Posts selected for comment requests; inspect source receipts for dispatch or budget refusals. |
sample.comment_posts_completed | number | null | Selected posts whose comment lookup returned data. |
sample.comments_per_post | number | null | Maximum retained comments from each selected post, integer1–50. |
sample.comments_returned | number | null | Retained nonempty comment records after native ID deduplication per post. |
sample.selection | string | null | Highest reported interaction counts within the returned recent-post page. |
sample.exhaustive | boolean | null | False: bounded samples are not an audience census. |
_meta | object | Nested response fields; optional unless explicitly documented. |
_meta.methodology_version | string | null | creator-vetting-v3. |
output | object | Nested response fields; optional unless explicitly documented. |
output.posts_sampled | number | null | Number of posts retained from the returned recent-post page. |
output.posts_with_engagement | number | null | Returned posts with observed interaction inputs, including legitimate zeros. |
output.posts_missing_engagement | number | null | Posts with no usable interaction inputs. |
output.avg_engagement_per_post | number | null | Rounded mean of reported interactions over posts with at least one known counter, including zeros. |
output.engagement_rate | number | null | avg_engagement_per_post divided by followers; fraction, null without a usable denominator. |
output.posting_cadence_days | number | null | Mean gap in UTC days between consecutive dated sampled posts; null with fewer than two dates. |
output.follower_denominator | number | null | Published follower/subscriber denominator; null when unavailable or hidden. |
output.follower_source_field | string | null | followers, followers_count or subscribers; null when unknown. |
comment_sample | array | Nested response fields; optional unless explicitly documented. |
comment_sample[].id | string | null | Native comment id. |
comment_sample[].text | string | null | Original nonempty comment text. |
comment_sample[].likes | number | null | Original like count or null. |
comment_sample[].author | object | string | null | Nested response fields; optional unless explicitly documented. |
comment_sample[].url | string | null | Original comment URL or null. |
comment_sample[].post_id | string | null | Parent post native id. |
comment_sample[].post_url | string | null | Parent post URL. |
comment_sample[].created_at | string | null | Original comment timestamp or null. |
metrics_hydration | object | Nested response fields; optional unless explicitly documented. |
metrics_hydration.status | string | null | not_needed, complete, partial or unavailable. Complete means all requested hydration rows have views, likes and comment counts. |
metrics_hydration.endpoint | string | null | youtube/videos for YouTube; otherwise null. |
metrics_hydration.requested | number | null | Unique video IDs requested, at most10. |
metrics_hydration.returned | number | null | Identity-matched returned rows, even if some counters are unpublished. |
metrics_hydration.cap | number | null | 10. |
metrics_hydration.missing_ids | array | Nested response fields; optional unless explicitly documented. |
content_review | object | Nested response fields; optional unless explicitly documented. |
content_review.version | string | null | creator-post-text-review-v1. |
content_review.status | string | null | complete, partial, unavailable or no_candidates. |
content_review.scope | string | null | returned_post_text_only. |
content_review.posts_returned | number | null | Retained original posts, at most20. |
content_review.posts_selected | number | null | At most8 evenly spaced posts. |
content_review.posts_examined | number | null | Posts with complete or partial model output. |
content_review.posts_completed | number | null | Posts whose full criteria set was answered, including uncertainty. |
content_review.remaining_unclassified | number | null | Unselected, unavailable or incomplete posts. |
content_review.source_posts | array | Nested response fields; optional unless explicitly documented. |
content_review.source_posts[].id | string | number | null | Nested response fields; optional unless explicitly documented. |
content_review.source_posts[].url | string | null | Original link. |
content_review.source_posts[].title | string | null | Original title. |
content_review.source_posts[].text | string | null | Original text. |
content_review.source_posts[].caption | string | null | Original caption. |
content_review.flags | array | Nested response fields; optional unless explicitly documented. |
content_review.flags[].native_id | string | number | null | Nested response fields; optional unless explicitly documented. |
content_review.flags[].path | array | Nested response fields; optional unless explicitly documented. |
content_review.flags[].url | string | null | Original link. |
content_review.flags[].category | string | Nested response fields; optional unless explicitly documented. |
content_review.flags[].support | number | null | Model support, not calibrated accuracy. |
content_review.flags[].evidence | array | Nested response fields; optional unless explicitly documented. |
content_review.flags[].evidence[].sentence_index | number | null | Zero-based sentence index in the bounded classifier input. |
content_review.flags[].evidence[].field | string | null | Original returned text field. |
content_review.flags[].evidence[].start | number | null | Inclusive UTF-16 offset in that field. |
content_review.flags[].evidence[].end | number | null | Exclusive UTF-16 offset. |
content_review.flags[].evidence[].text | string | null | Exact original substring; never generated supporting prose. |
content_review.flags[].requires_human_review | boolean | null | True. |
content_review.assessments | array | Nested response fields; optional unless explicitly documented. |
content_review.assessments[].native_id | string | number | null | Nested response fields; optional unless explicitly documented. |
content_review.assessments[].path | array | Nested response fields; optional unless explicitly documented. |
content_review.assessments[].url | string | null | Original link. |
content_review.assessments[].status | string | null | Complete, partial or unavailable annotation. |
content_review.assessments[].scope | string | null | Returned text scope. |
content_review.assessments[].judgments | object | Nested response fields; optional unless explicitly documented. |
content_review.breakdown | object | null | Nested response fields; optional unless explicitly documented. |
content_review.requires_human_review | boolean | null | True. |
content_review.images_and_video_analyzed | boolean | null | False. |
content_review.interpretation | string | null | Text sample limits; no creator identity, authenticity or suitability judgment. |
analysis_legs | array | Nested response fields; optional unless explicitly documented. |
analysis_legs[].source | string | null | intelligence:jev. |
analysis_legs[].ok | boolean | null | Model request completed. |
analysis_legs[].skipped | boolean | null | No model dispatch occurred. |
analysis_legs[].cost_micros | number | null | Known supplier cost in micro-GBP; inspect pending_cost before interpreting zero. |
analysis_legs[].cost_confirmed | boolean | null | A measured receipt exists. |
analysis_legs[].pending_cost | boolean | null | Dispatch had no final measured receipt; quoted allowance remains held. |
analysis_legs[].funding_reason | string | null | Admission limit that prevented dispatch. |
Comments are sampled from multiple bounded posts. Low followers, inactivity or small comment samples do not establish a fake audience.
Keep zero counters separate from missing inputs. Rates describe the documented returned sample, not complete account history.
YouTube upload feeds can omit counters. One qualified batch fills missing fields for at most10 videos, sharing the workflow budget and deadline. Existing feed counters are preserved, extra or mismatched IDs are ignored, and count_sources links every measured input to its endpoint/id/field. Inspect posts_missing_engagement and metrics_hydration before using a rate.
content_review=1 optionally reviews text from at most8 already-returned posts under the same8-credit workflow. Exact spans point to content_review.source_posts. Flags concern explicit text, never creator identity, authenticity, personal traits or overall suitability. Images and video are not analyzed; missing or uncertain flags do not establish safety. Retrieval coverage can be lower because the existing funding/time limit protects a bounded review allowance.
Failures use the typed error envelope. A confirmed uncharged or refunded failure reports zero; a pending reconciliation can report an unknown charge. Read credits_used and error.details.billing_status, and keep request_id for recovery. Response contract · Error reference