API Documentation

Everything you need to integrate Verosight into your applications.

Base URL: https://api.verosight.com REST API JSON

Getting Started

Welcome to the Verosight API. Access real-time social media intelligence from X, Instagram, TikTok, Facebook, LinkedIn, YouTube, Threads, and news portals.

Quick Start

1
Create an account

Get Started Sign up and get 1,000 free credits.

2
Generate an API key

Go to API Keys and create a key.

3
Make your first request

Use your key to fetch data:

Shell
curl -X POST "https://api.verosight.com/v1/auth/token" \
  -H "X-API-Key: vlt_live_YOUR_KEY"

# Use the returned JWT:
curl "https://api.verosight.com/v1/posts?limit=5" \
  -H "Authorization: Bearer YOUR_JWT_TOKEN"

Response Format

All responses follow a standard envelope:

JSON
{
  "data": { ... },
  "meta": {
    "request_id": "uuid",
    "credits_used": 2,
    "credits_remaining": 998
  },
  "pagination": {
    "next_cursor": "base64...",
    "has_more": true,
    "total": 38113
  }
}
Credits

Each API call costs credits. Free accounts start with 1,000 credits. Credits are only deducted on successful (2xx) responses.

Authentication

The API supports two authentication methods:

1. API Key

Pass your key in the X-API-Key header. Keys start with vlt_live_ (production) or vlt_test_ (test).

Header
X-API-Key: vlt_live_a1b2c3d4e5f6...

2. JWT Bearer Token

Exchange your API key for a short-lived JWT (24h):

POST /v1/auth/token 0 cr
Response
{
  "token": "eyJ...",
  "expires_at": "2026-03-28T10:00:00Z"
 }

Then use the token:

Header
Authorization: Bearer eyJ...

Account

Check your credit balance and usage statistics.

Credit Balance

GET /v1/account/balance 0 cr
Response
{
  "data": {
    "credits_remaining": 971,
    "credits_used_today": 29,
    "tier": "standard",
    "rate_limit": 60,
    "rate_limit_remaining": 55
  }
}

Usage History

GET /v1/account/usage 0 cr
ParamTypeDescription
daysintPeriod: 1-90 (default 7)
key_idstringFilter by API key UUID or playground
Response
{
  "data": {
    "total_credits_used": 145,
    "total_requests": 42,
    "success_rate": 95.2,
    "avg_latency_ms": 187,
    "by_endpoint": [
      { "endpoint": "GET /v1/posts", "requests": 20, "credits": 40 }
    ],
    "by_day": [
      { "date": "2026-03-27", "requests": 15, "credits": 45 }
    ]
  }
}

Health & Sources

MethodEndpointAuthDescription
GET/healthNoneSystem health check
GET/v1/sourcesNoneList supported platforms

Posts

Access social media posts across all platforms.

GET /v1/posts 2 cr
ParamTypeDescription
platformstringFilter: x, instagram, tiktok, facebook, linkedin, youtube, threads, news_portal, playstore, appstore (case-insensitive)
profile_namestringFilter by author
keywordstringSearch in content (multi-word uses AND logic)
media_typestringtext, image, video, article
date_fromstringYYYY-MM-DD
date_tostringYYYY-MM-DD
min_likesintMinimum like count
min_commentsintMinimum comment count
is_replyboolFilter replies only (true/false)
sortstringposted_at, like_count, comment_count
orderstringdesc (default), asc
limitint1-100 (default 20)
cursorstringPagination cursor
exclude_profilesstringComma-separated profile names to exclude (max 20)
exclude_keywordsstringComma-separated keywords to exclude from results (max 20)

More Endpoints

MethodEndpointCreditsDescription
GET/v1/posts/count1Count matching posts
GET/v1/posts/:id1Single post
GET/v1/posts/:id/comments2Comments on a post (limit, cursor)

Comments

Access comments across all platforms.

GET /v1/comments 2 cr
ParamTypeDescription
platformstringFilter by platform (case-insensitive)
profile_namestringCommenter profile
post_ownerstringOriginal post author
post_idstringFilter by post ID
keywordstringSearch in content (multi-word uses AND logic)
date_from / date_tostringYYYY-MM-DD
min_likesintMinimum like count
sortstringcommented_at (default)
orderstringdesc (default), asc
limitint1-100 (default 20)
cursorstringPagination cursor
exclude_profilesstringComma-separated profile names to exclude (max 20)
exclude_keywordsstringComma-separated keywords to exclude from results (max 20)

More Endpoints

MethodEndpointCreditsDescription
GET/v1/comments/:id1Single comment
GET/v1/comments/count1Count comments

Profiles

Browse social media profiles. If a profile isn't in the database yet, the API auto-triggers a crawl.

GET /v1/profiles 2 cr
ParamTypeDescription
platformstringFilter by platform (case-insensitive)
searchstringSearch by name
is_verifiedboolVerified only
min_followersintMinimum followers
sortstringlast_crawled_at (default), total_followers
limitint1-100 (default 20)
cursorstringPagination cursor

Profile Endpoints

MethodEndpointCreditsDescription
GET/v1/profiles/:platform/:name1Get profile (auto-seeds if missing)
GET/v1/profiles/:platform/:name/posts2Profile's posts (limit, cursor)
GET/v1/profiles/:platform/:name/comments-received2Comments on profile's posts (limit, cursor)
GET/v1/profiles/:platform/:name/interactions2Interaction graph (type, direction, limit, cursor)
GET/v1/profiles/:platform/:name/stats5Engagement stats (?days=7) (days: 1-90)

Analytics

Aggregated analytics — trending content, sentiment, volume, topics, and profile comparison. Multi-word keywords use AND logic.

Trending

GET /v1/analytics/trending 5 cr

Top posts and profiles by engagement. Params: days, limit, platform.

ParamTypeDescription
daysintPeriod: 1-365 (default 7)
limitintResults limit (default 20)
platformstringFilter by platform (case-insensitive)
keywordstringOptional — filter trending content by topic keyword
media_typestringFilter by media type: image, video, text, article (photo accepted as alias for image)
exclude_profilesstringComma-separated profile names to exclude (max 20)
exclude_keywordsstringComma-separated keywords to exclude from results (max 20)
Response
{
  "data": {
    "period": "last 7 days",
    "top_posts": [
      {
        "id": 451,
        "platform": "instagram",
        "post_id": "DWz31kkiXu7",
        "profile_name": "example_profile_a",
        "content": "Sample trending post content preview.",
        "media_type": "text",
        "extraction": null,
        "media_urls": [],
        "post_url": "https://example.com/p/DWz31kkiXu7/",
        "like_count": 2931,
        "comment_count": 177,
        "hashtags": [],
        "mentions": [],
        "is_reply": false,
        "posted_at": "2026-04-07T07:34:36+07:00"
      },
      ...
    ],
    "top_profiles": [
      {
        "profile_name": "example_profile_a",
        "platform": "instagram",
        "total_engagement": 8861,
        "post_count": 5
      },
      {
        "profile_name": "example_profile_b",
        "platform": "linkedin",
        "total_engagement": 3283,
        "post_count": 5
      }
    ],
    ...
  }
}

Sentiment

GET /v1/analytics/sentiment 5 cr
ParamRequiredDescription
queryYesSearch term for sentiment analysis. Use separator pipe " | " for multiple queries
daysNo1-365 (default 7)
platformNoFilter by platform (case-insensitive)
limitNo1-100 (default 20)
media_typeNoFilter by media type: image, video, text, article (photo accepted as alias for image)
exclude_profilesNoComma-separated profile names to exclude (max 20)
exclude_keywordsNoComma-separated keywords to exclude from results (max 20)

Response body for single sentiment analysis

Response
{
  "data": {
    "query": "indonesia",
    "total": 500,
    "positive": 45, 
    "negative": 12, 
    "neutral": 443,
    "positive_pct": 9.0, 
    "negative_pct": 2.4, 
    "neutral_pct": 88.6,
    "sample_positive": [ ... ],
    "sample_negative": [ ... ]
  }
}

Response body for multiple sentiment analysis

Response
{
  "data": [
    {
      "query": "indonesia",
      "period": "last 7 days",
      "total": 500,
      "positive": 45,
      "negative": 12,
      "neutral": 443,
      "positive_pct": 9.0,
      "negative_pct": 2.4,
      "neutral_pct": 88.6,
      "sample_positive": [ ... ],
      "sample_negative": [ ... ]
    }, 
    ...
    ]
}

Profiles ranked by engagement

GET /v1/analytics/engagement-ranking 5 cr

docs.analytics.engagement.desc

ParamTypeDescription
daysint1-365 (default 7)
limitintdocs.analytics.limit
platformstringFilter by platform (case-insensitive)
keywordstringOptional — filter engagement on posts matching keyword
media_typestringFilter by media type: image, video, text, article (photo accepted as alias for image)
exclude_profilesstringComma-separated profile names to exclude (max 20)
exclude_keywordsstringComma-separated keywords to exclude from results (max 20)
Response
{
  "data": {
    "period": "last 7 days",
    "rankings": [
      {
        "profile_name": "ignasius.jonan",
        "platform": "instagram",
        "total_engagement": 8861,
        "post_count": 5
      },
      ...
    ]
  }
}

Volume

GET /v1/analytics/volume 5 cr

Total posting volume broken down by day and platform. Track how much content is being produced over time.

ParamTypeDescription
daysint1-365 (default 7)
platformstringFilter by platform (case-insensitive)
keywordstringOptional — filter volume by topic keyword
media_typestringFilter by media type: image, video, text, article (photo accepted as alias for image)
exclude_profilesstringComma-separated profile names to exclude (max 20)
exclude_keywordsstringComma-separated keywords to exclude from results (max 20)
Response
{
  "data": {
    "period": "last 7 days",
    "by_day": [
      { "date": "2026-06-01", "post_count": 1245, "comment_count": 3820 },
      { "date": "2026-06-02", "post_count": 1389, "comment_count": 4102 }
    ],
    "total_posts": 8920,
    "total_comments": 27450,
    "computation_mode": "precomputed"
  }
}

Topic summaries from hashtags

GET /v1/analytics/topics 5 cr

docs.analytics.topics.desc

ParamTypeDescription
daysint1-365 (default 7)
limitintdocs.analytics.limit
platformstringFilter by platform (case-insensitive)
keywordstringOptional — filter posts by keyword before topic clustering
media_typestringFilter by media type: image, video, text, article (photo accepted as alias for image)
exclude_profilesstringComma-separated profile names to exclude (max 20)
exclude_keywordsstringComma-separated keywords to exclude from results (max 20)
Response
{
  "data": {
    "period": "last 2 days",
    "topics": [
      { "name": "berita hari ini", "post_count": 7 },
      { "name": "berita terbaru", "post_count": 6 },
      { "name": "berita terkini", "post_count": 6 },
      { "name": "breaking news", "post_count": 6 },
      ...
    ],
    "retrieval_mode": "hashtag"
  }
}

Compare profiles side-by-side

GET /v1/analytics/compare?profiles=x:a,x:b 5 cr

docs.analytics.compare.desc

ParamTypeDescription
profilesstringProfile Analytics
daysint1-365 (default 7)
Response
{
  "data": {
    "period": "last 7 days",
    "profiles": [
      {
        "profile_name": "detikcom",
        "platform": "x",
        "post_count": 0,
        "total_likes": 0,
        "total_comments": 0,
        "total_shares": 0,
        "avg_engagement_per_post": 0
      },
      {
        "profile_name": "kompascom",
        "platform": "x",
        "post_count": 0,
        "total_likes": 0,
        "total_comments": 0,
        "total_shares": 0,
        "avg_engagement_per_post": 0
      },
      ...
    ]
  }
}

Find topic experts by authority score

GET /v1/analytics/experts?query=topic 5 cr

docs.analytics.experts.desc

ParamTypeDescription
querystringSearch term for sentiment analysis. Use separator pipe " | " for multiple queries
daysint1-365 (default 7)
limitint1-100 (default 20)
platformstringFilter by platform (case-insensitive)
media_typestringFilter by media type: image, video, text, article (photo accepted as alias for image)
exclude_profilesstringComma-separated profile names to exclude (max 20)
exclude_keywordsstringComma-separated keywords to exclude from results (max 20)
Response
{
  "data": {
    "query": "saham",
    "period": "last 30 days",
    "experts": [
      {
        "profile_name": "kumparan",
        "platform": "tiktok",
        "post_count": 12,
        "total_likes": 41919,
        "total_comments": 782,
        "total_shares": 1924,
        "avg_relevance": 0.8242052565862732,
        "authority_score": 23.754982334310558
      },
      {
        "profile_name": "detikcom",
        "platform": "x",
        "post_count": 25,
        "total_likes": 3788,
        "total_comments": 188,
        "total_shares": 350,
        "avg_relevance": 0.818417328608031,
        "authority_score": 21.872244414782003
      },
      ...
    ],
    "retrieval_mode": "semantic"
  }
}

Sentiment Trend

GET /v1/analytics/sentiment-trend 3 cr

Daily sentiment breakdown (positive/negative/neutral counts per day) from pre-computed data. Shows how sentiment changes over time.

ParamTypeDescription
daysint1-365 (default 7)
platformstringFilter by platform (case-insensitive)
keywordstringOptional — filter by topic using semantic search
Response
{
  "data": {
    "period": "last 7 days",
    "by_day": [
      { "date": "2026-05-08", "positive": 120, "negative": 30, "neutral": 450 },
      { "date": "2026-05-09", "positive": 135, "negative": 28, "neutral": 460 }
    ],
    "computation_mode": "precomputed"
  }
}

Trending Hashtags

GET /v1/analytics/hashtags 3 cr

Trending hashtags ranked by engagement from pre-computed data.

ParamTypeDescription
daysint1-365 (default 7)
limitintdocs.analytics.limit
platformstringFilter by platform (case-insensitive)
keywordstringOptional — find hashtags in topic-relevant posts
Response
{
  "data": {
    "period": "last 7 days",
    "hashtags": [
      { "hashtag": "indonesia", "post_count": 342, "engagement": 58210 },
      { "hashtag": "viral", "post_count": 215, "engagement": 41030 }
    ],
    "computation_mode": "precomputed"
  }
}

Mention Ranking

GET /v1/analytics/mentions 3 cr

Most-mentioned profiles ranked by mention count and engagement.

ParamTypeDescription
daysint1-365 (default 7)
limitintdocs.analytics.limit
platformstringFilter by platform (case-insensitive)
keywordstringOptional — find mentions in topic-relevant posts
Response
{
  "data": {
    "period": "last 7 days",
    "mentions": [
      { "mentioned_profile": "jabordes", "mention_count": 89, "engagement": 12340 },
      { "mentioned_profile": "anabordes", "mention_count": 67, "engagement": 8920 }
    ],
    "computation_mode": "precomputed"
  }
}

Best Posting Time

GET /v1/analytics/best-time 3 cr

Best time to post based on historical engagement patterns. Returns hour-of-day × day-of-week heatmap.

ParamTypeDescription
platformstringFilter by platform (case-insensitive)
profile_namestringFilter by profile name
keywordstringOptional — analyze topic-specific posting times
daysintLookback period when using keyword (default 30)
Response
{
  "data": {
    "period": "all time",
    "slots": [
      { "day_of_week": 1, "hour": 9, "post_count": 45, "avg_engagement": 1234.56 },
      { "day_of_week": 3, "hour": 19, "post_count": 38, "avg_engagement": 1180.20 }
    ],
    "computation_mode": "precomputed"
  }
}

Follower Growth

GET /v1/analytics/growth 3 cr

Follower/following growth over time for a specific profile from daily snapshots.

ParamRequiredDescription
platformYesFilter by platform (case-insensitive)
profile_nameYesFilter by profile name
daysNo1-365 (default 7)
Response
{
  "data": {
    "period": "last 30 days",
    "snapshots": [
      { "date": "2026-04-15", "total_followers": 125000, "total_following": 500, "total_posts": 3200 },
      { "date": "2026-04-16", "total_followers": 125340, "total_following": 501, "total_posts": 3205 }
    ],
    "computation_mode": "precomputed"
  }
}

Tracked Keywords

GET /v1/analytics/tracked-keywords 1 cr

List all keywords actively tracked with precomputed daily stats for instant analytics.

Response
{
  "data": {
    "keywords": [
      { "keyword": "prabowo", "query_count": 142 },
      { "keyword": "golkar", "query_count": 87 }
    ]
  }
}

Keyword Volume

GET /v1/analytics/keyword-volume 3 cr

Daily post volume, engagement, and targeted sentiment for a keyword. Sentiment is classified per keyword mention context (not per document). Instant for tracked keywords, live fallback for others.

ParamRequiredDescription
keywordYesSearch term for sentiment analysis. Use separator pipe " | " for multiple queries
daysNo1-365 (default 7)
platformNoFilter by platform (case-insensitive)
Response
{
  "data": {
    "keyword": "prabowo",
    "period": "last 30 days",
    "by_day": [
      { "date": "2026-06-01", "post_count": 245, "total_likes": 12400, "total_comments": 3200, "total_shares": 890, "total_views": 450000, "sentiment_positive": 102, "sentiment_negative": 85, "sentiment_neutral": 58 }
    ],
    "by_platform": [
      { "platform": "x", "post_count": 4200, "total_likes": 180000, "total_comments": 45000, "total_shares": 12000, "total_views": 8500000 }
    ],
    "sentiment": {
      "positive": 3800, "negative": 2900, "neutral": 1800,
      "classified_count": 8500, "post_count": 8500,
      "coverage": 100.0,
      "positive_pct": 44.7, "negative_pct": 34.1, "neutral_pct": 21.2
    },
    "total_posts": 8500,
    "total_engagement": 520000,
    "computation_mode": "precomputed"
  }
}

Profile Analytics

GET /v1/analytics/profiles 5 cr

Aggregate profile-level metrics including engagement, sentiment, reach, followers, and top topics for profiles matching a query.

ParamRequiredDescription
queryYesSearch term for sentiment analysis. Use separator pipe " | " for multiple queries
daysNo1-365 (default 7)
limitNodocs.analytics.limit
platformNoFilter by platform (case-insensitive)
sentimentNoFilter by dominant sentiment: positive, negative, neutral
sortNoSort: engagement (default), followers, authority, post_count
exclude_profilesNodocs.analytics.excludeProfiles
exclude_keywordsNodocs.analytics.excludeKeywords
Response
{
  "data": {
    "period": "last 30 days",
    "results": [
      {
        "profile_name": "techcorp",
        "platform": "x",
        "followers": 125000,
        "engagement": 45200,
        "post_count": 87,
        "sentiment_score": 0.42,
        "authority_score": 78.5,
        "top_topics": ["AI", "cloud", "enterprise"]
      }
    ]
  }
}

Outlet Analytics

GET /v1/analytics/outlets 5 cr

News publisher aggregation — article count, sentiment, reach, frequency, and trend. Automatically filtered to news_portal platform.

ParamRequiredDescription
queryYesSearch term for sentiment analysis. Use separator pipe " | " for multiple queries
daysNo1-365 (default 7)
limitNodocs.analytics.limit
sortNoSort: articles (default), reach, sentiment
Response
{
  "data": {
    "period": "last 30 days",
    "results": [
      {
        "outlet": "kompas.com",
        "article_count": 42,
        "sentiment": 0.35,
        "reach": 1250000,
        "frequency": "2.1/day",
        "trend": "increasing"
      }
    ]
  }
}

Topic Sentiment

GET /v1/analytics/topic-sentiment 5 cr

Cluster posts into sub-topics with per-topic sentiment scores, trends, and top profiles. Uses K-Means++ clustering with LLM-generated labels.

ParamRequiredDescription
queryYesSearch term for sentiment analysis. Use separator pipe " | " for multiple queries
daysNo1-365 (default 7)
limitNodocs.analytics.limit
platformNoFilter by platform (case-insensitive)
exclude_profilesNodocs.analytics.excludeProfiles
exclude_keywordsNodocs.analytics.excludeKeywords
Response
{
  "data": {
    "period": "last 7 days",
    "topics": [
      {
        "label": "Mobile App Performance",
        "volume": 234,
        "sentiment_score": -0.15,
        "trend": "declining",
        "top_profiles": ["user1", "user2"]
      }
    ]
  }
}

Share of Voice

GET /v1/analytics/share-of-voice 5 cr

Compare mention volume of multiple entities over time. Returns aggregate share percentages and a time-series timeline.

ParamRequiredDescription
entitiesYesComma-separated entity names to compare (2-10 required)
daysNo1-365 (default 7)
platformNoFilter by platform (case-insensitive)
granularityNoTimeline bucketing: daily (default), weekly, monthly
Response
{
  "data": {
    "period": "last 30 days",
    "entities": [
      { "name": "BRI", "volume": 450, "share": 45.0 },
      { "name": "BCA", "volume": 350, "share": 35.0 }
    ],
    "timeline": [
      { "period": "2026-06-01", "counts": { "BRI": 15, "BCA": 12 } }
    ]
  }
}

Risk Assessment

GET /v1/analytics/risk-assessment 10 cr

AI-generated threat analysis using sentiment, volume, negative posts, and influencer signals. Returns threats with severity, velocity, reach, and recommended actions.

ParamRequiredDescription
queryYesSearch term for sentiment analysis. Use separator pipe " | " for multiple queries
daysNo1-365 (default 7)
contextNoOptional focus area (e.g. product launch, CEO controversy)
Response
{
  "data": {
    "period": "last 7 days",
    "overall_risk": "medium",
    "threats": [
      {
        "title": "Customer service backlash",
        "severity": "high",
        "velocity": "increasing",
        "reach": 45000,
        "description": "Growing negative sentiment around response times",
        "recommended_actions": ["Address publicly", "Increase support staff"]
      }
    ]
  }
}

Anomaly Detection

GET /v1/analytics/anomalies 10 cr

Detect hoaxes and coordinated campaigns using volume spike detection and cross-account similarity analysis.

ParamRequiredDescription
queryYesSearch term for sentiment analysis. Use separator pipe " | " for multiple queries
daysNo1-365 (default 7)
typesNoComma-separated: hoax, coordinated_campaign (default: all)
Response
{
  "data": {
    "period": "last 7 days",
    "anomalies": [
      {
        "type": "coordinated_campaign",
        "title": "Coordinated promotion campaign",
        "confidence": 0.87,
        "severity": "medium",
        "evidence": ["12 accounts posting identical content", "All created within 48 hours"],
        "sample_posts": [123456, 789012]
      }
    ]
  }
}

Regulatory Analysis

GET /v1/analytics/regulatory 10 cr

Monitor regulatory mentions for entities against specific regulators. Returns peer compliance comparison and emerging regulation signals.

ParamRequiredDescription
entitiesYesComma-separated entity names (required)
regulatorsYesComma-separated regulator names (required)
daysNo1-365 (default 7)
Response
{
  "data": {
    "period": "last 30 days",
    "entities": [
      {
        "entity": "BRI",
        "regulators": [
          {
            "name": "OJK",
            "mention_count": 15,
            "sentiment": -0.2,
            "key_topics": ["capital adequacy", "digital lending"]
          }
        ],
        "compliance_score": 72
      }
    ]
  }
}

Dimension Sentiment

GET /v1/analytics/dimension-sentiment 5 cr

Compute sentiment scores for each entity × dimension pair. Used for competitive positioning, sentiment matrices, and positioning scorecards.

ParamRequiredDescription
entitiesYesComma-separated entity names (1-10, required)
dimensionsYesComma-separated dimension names (1-10, required)
daysNo1-365 (default 7)
platformNoFilter by platform (case-insensitive)
Response
{
  "data": {
    "period": "last 30 days",
    "results": [
      {
        "entity": "BRI",
        "dimension": "App Experience",
        "sentiment_score": 72.5,
        "volume": 134,
        "trend": "improving"
      },
      {
        "entity": "BCA",
        "dimension": "App Experience",
        "sentiment_score": 85.1,
        "volume": 201,
        "trend": "stable"
      }
    ]
  }
}

Reputation Trend

GET /v1/analytics/reputation-trend 5 cr

Time-series sentiment scores per entity. Shows how reputation evolves over time with configurable granularity.

ParamRequiredDescription
entitiesYesComma-separated entity or person names (1-10, required)
daysNo1-365 (default 7)
granularityNoTimeline bucketing: daily (default), weekly, monthly
platformNoFilter by platform (case-insensitive)
Response
{
  "data": {
    "period": "last 30 days",
    "trend": [
      {
        "period": "2026-06-01",
        "scores": { "BRI": 0.35, "BCA": -0.12 }
      },
      {
        "period": "2026-06-02",
        "scores": { "BRI": 0.41, "BCA": -0.08 }
      }
    ]
  }
}

Network Graph

GET /v1/analytics/network 10 cr

Build a relationship graph with account, topic, and outlet nodes connected by interaction edges. Shows who discusses what and how they connect.

ParamRequiredDescription
queryYesSearch term for sentiment analysis. Use separator pipe " | " for multiple queries
daysNo1-365 (default 7)
platformNoFilter by platform (case-insensitive)
limitNodocs.analytics.limit
Response
{
  "data": {
    "period": "last 7 days",
    "nodes": [
      {
        "id": "techcorp",
        "type": "account",
        "engagement": 5000,
        "sentiment": 0.3,
        "metadata": { "platform": "x", "followers": 120000 }
      },
      {
        "id": "AI Ethics",
        "type": "topic",
        "engagement": 12000,
        "sentiment": 0.1,
        "metadata": {}
      }
    ],
    "links": [
      { "source": "techcorp", "target": "aicorp", "weight": 3, "type": "mentions" },
      { "source": "techcorp", "target": "AI Ethics", "weight": 4, "type": "discusses" }
    ]
  }
}

Recommendations

AI-generated recommendations derived from social media buzz. Each type surfaces trending items ranked by confidence score.

GET /v1/recommendations/:name 15 cr

Returns a ranked list of recommendations for the given type based on social media signals.

ParamRequiredDescription
queryYesTopic to search (required)
daysNo1-365 (default 7)
platformNoFilter by platform (case-insensitive)

Recommendation Types

NameDescriptionResponse Body Fields
productsProducts with business potentialname, brand, category, profit_potential, reason, confidence
moviesTrending or currently airing moviesname, genre, reason, confidence
booksBooks gaining traction in communitiesname, author, genre, reason, confidence
softwareApps and tools gaining adoptionname, category, platform, reason, confidence
gamesVideo games gaining popularityname, genre, platform, reason, confidence
travelPopular or emerging travel destinationsname, country, category, reason, confidence
skillsCourses and skills trending in demandname, category, difficulty, reason, confidence
contentPost ideas, hooks, captions, formatsname, format, tone, reason, confidence
marketingCampaign angles and messaging strategiesname, channel, target_audience, reason, confidence
problemsCommon complaints and unmet needsname, category, severity, reason, confidence

Example Response

Sample response
{
  "data": [
    {
      "name": "Wireless Charging Pad",
      "brand": "Baseus",
      "category": "Electronics",
      "profit_potential": "high",
      "reason": "Surge in discussion across tech communities after new phone launches",
      "confidence": 0.87
    },
    {
      "name": "Phone Grip Stand",
      "brand": "Generic",
      "category": "Accessories",
      "profit_potential": "medium",
      "reason": "Consistent demand driven by content creators and streamers",
      "confidence": 0.74
    }
  ]
}

Search

Semantic and keyword search across all indexed content.

POST /v1/search 5 cr

Request Body For Single Search

Request
{
  "query": "social media analytics",
  "limit": 20,
  "filters": {
    "platforms": ["x", "instagram"],
    "profile_names": ["user1"],
    "date_from": "2026-03-01",
    "date_to": "2026-03-27",
    "content_type": "posts",
    "media_type": "video",
    "exclude_profiles": ["bot_account"],
    "exclude_keywords": ["spam"]
  }
}

Request Body For Multiple Search

Request
{
  "queries": [
    {
      "query": "social media analytics",
      "limit": 20,
      "filters": {
        "platforms": ["x", "instagram"],
        "profile_names": ["user1"],
        "date_from": "2026-03-01",
        "date_to": "2026-03-27",
        "content_type": "posts"
      }
    },
    ...
  ]
}

Similar Posts

GET /v1/search/similar/:id 5 cr

Find posts similar to a given post by ID.

ParamTypeDescription
limitint1-100 (default 20)

Seeds & Crawl

Monitor profiles and trigger crawls. The API also auto-seeds profiles when you request one not yet in the database. Adding a duplicate seed returns 409. Deleting a seed stops monitoring but keeps crawled data intact — re-adding the same profile reactivates it.

MethodEndpointCreditsDescription
GET/v1/seeds0List your seeds
POST/v1/seeds0Add a seed (409 if already monitoring)
DELETE/v1/seeds/:id0Stop monitoring (soft delete)
POST/v1/seeds/:id/crawl10Trigger crawl (409 if already running)
GET/v1/seeds/:id/jobs1Crawl history (limit)

Add a seed (409 if already monitoring)

POST /v1/seeds — Request Body
{
  "platform": "x",
  "profile_id": "KompasTV",
  "label": "Kompas TV",
  "post_limit": 50,
  "comment_limit": 100,
  "schedule_enabled": false,
  "schedule_interval_minutes": 1440
}

// platform: x, instagram, tiktok, facebook, linkedin, youtube, threads, news_portal, playstore, appstore
// post_limit: default 50 | comment_limit: default 100
// schedule_enabled: default false
// Returns 409 if you are already monitoring this profile.
// Re-adding a previously deleted seed reactivates it.

Trigger crawl (409 if already running)

POST /v1/seeds/:id/crawl — Response
{
  "data": {
    "seed_id": "af1b06b8-...",
    "status": "pending",
    "message": "Crawl scheduled. Position #2 in queue, estimated wait ~8 minutes.",
    "queue_position": 1,
    "estimated_wait_minutes": 8,
    "created_at": "2026-03-31T14:00:00Z"
  }
}

// Returns 409 if a crawl is already pending or running.

AI Chat

AI-powered chat with tool-use and persistent conversation history. The AI can query your social media data using built-in tools and stream responses in real-time via Server-Sent Events (SSE).

Chat Endpoint

POST /v1/chat 20 cr

Send a message and receive a streaming response. Omit conversation_id to start a new conversation (one will be created automatically). Context is managed server-side.

Request
{
  "message": "What are the trending topics about Indonesia?",
  "conversation_id": "optional — omit to create new conversation"
}
ParameterTypeRequiredDescription
messagestringYesUser's question or prompt
conversation_idstringNoUUID of existing conversation. Omit to start new.

SSE Events

The response is a stream of Server-Sent Events. Each event is a JSON object prefixed with "data: ".

SSE Response
data: {"type":"conversation_id","id":"550e8400-..."}
data: {"type":"tool_status","name":"get_trending","label":"Getting trending data","status":"running"}
data: {"type":"tool_status","name":"get_trending","label":"Getting trending data","status":"done"}
data: {"type":"content_block_delta","delta":{"text":"## Trending Topics\n"}}
data: {"type":"done"}
Event TypeDescription
conversation_idEmitted first — contains conversation UUID
tool_statusTool execution progress (running / done / error)
content_block_deltaStreaming text chunk in delta.text
errorError detail in detail field
doneStream complete

Conversations

Manage chat conversation history. Conversations are created automatically when chatting. Titles are auto-generated by the AI after the first exchange.

MethodEndpointCreditsDescription
GET/v1/conversations0List conversations (newest first). Params: limit (1-100, default 30), offset
GET/v1/conversations/:id0Get conversation with messages
DELETE/v1/conversations/:id0Delete conversation
PATCH/v1/conversations/:id0Rename title

Available Tools

The AI automatically selects and executes these tools to answer your questions. All tools are scoped to your monitored data.

ToolDescription
search_postsSemantic/keyword search for posts and comments (supports sort=engagement)
get_trendingTrending posts and profiles by engagement (supports keyword filtering)
get_sentimentSentiment analysis (positive/negative/neutral)
get_topicsTrending topics and hashtags (supports keyword filtering)
get_engagement_rankingRank profiles by total engagement (supports keyword filtering)
find_expertsFind topic experts ranked by authority score
get_sentiment_trendDaily sentiment trend (positive/negative/neutral per day)
get_hashtag_trendingTrending hashtags ranked by engagement
get_mention_rankingMost-mentioned profiles ranked by mention count
get_best_timeBest posting times by engagement heatmap
get_growthFollower/following growth over time for a profile
list_postsList posts with filtering and sorting
get_profileGet detailed profile information
list_profilesList monitored profiles
get_profile_statsEngagement stats for a specific profile
recommend_productsProduct recommendations from social demand signals
recommend_moviesTrending movie recommendations
recommend_booksBook recommendations gaining traction
recommend_softwareSoftware and app recommendations
recommend_gamesGame recommendations by popularity
recommend_travelTravel destination recommendations
recommend_skillsIn-demand skill and course recommendations
recommend_contentContent idea and format recommendations
recommend_marketingMarketing strategy recommendations
recommend_problemsSurface complaints and unmet needs

Export

Export data as CSV for offline analysis.

MethodEndpointCreditsDescription
POST/v1/export0Start export job
GET/v1/export/:jobId0Check status / download

Start Export

POST /v1/export 0 cr
Request
{
  "type": "posts",
  "format": "csv",
  "filters": {
    "platform": "x",
    "date_from": "2026-03-01",
    "date_to": "2026-03-27"
  }
}

// type: "posts", "comments", or "interactions"
// format: "json" (default) or "csv"

Returns a job ID. The export runs asynchronously.

Check Export Status

GET /v1/export/:jobId 0 cr
Response
{
  "data": {
    "job_id": "uuid",
    "status": "completed",
    "rows": 5432,
    "credits_charged": 100,
    "download_url": "https://...",
    "expires_at": "2026-03-29T10:00:00Z"
  }
}

MCP Server

Use Verosight as an MCP (Model Context Protocol) server to give AI assistants like Claude, Cursor, and Windsurf direct access to social media intelligence data. Two transport options available:

Option 1: Remote SSE (Recommended)

No installation needed. Connect directly to the hosted MCP server via URL. Works with Cursor, Windsurf, and any MCP client that supports SSE.

SSE Endpoint

https://api.verosight.com/v1/mcp/sse

Cursor Setup

Go to Cursor Settings > MCP, click "Add new MCP server", select type "sse", and enter:

Cursor MCP Config
URL: https://api.verosight.com/v1/mcp/sse
Headers:
  X-API-Key: vlt_live_YOUR_KEY

Or add to .cursor/mcp.json in your project:

JSON
{
  "mcpServers": {
    "verosight": {
      "url": "https://api.verosight.com/v1/mcp/sse",
      "headers": {
        "X-API-Key": "vlt_live_YOUR_KEY"
      }
    }
  }
}

Windsurf / Other MCP Clients

JSON
{
  "mcpServers": {
    "verosight": {
      "serverUrl": "https://api.verosight.com/v1/mcp/sse",
      "headers": {
        "X-API-Key": "vlt_live_YOUR_KEY"
      }
    }
  }
}

Option 2: Local Binary (stdio)

For Claude Desktop and offline usage. Download and run locally.

Shell — macOS / Linux
curl -fsSL https://verosight.com/download/mcp/install.sh | sh

Or download directly:

PlatformDownload
macOS (Apple Silicon)verosight-mcp-darwin-arm64
macOS (Intel)verosight-mcp-darwin-amd64
Linux (x86_64)verosight-mcp-linux-amd64
Windowsverosight-mcp-windows-amd64.exe

Claude Desktop Config

claude_desktop_config.json
{
  "mcpServers": {
    "verosight": {
      "command": "verosight-mcp",
      "env": {
        "VEROSIGHT_API_KEY": "vlt_live_YOUR_KEY"
      }
    }
  }
}

Available Tools (20)

ToolDescription
search_postsSearch posts across all platforms with filters
get_postGet a single post by ID
search_commentsSearch comments with filters
list_profilesBrowse social media profiles
get_profileGet profile details (auto-crawls if missing)
get_profile_statsEngagement stats for a profile
get_trendingTrending posts and profiles
get_sentimentSentiment analysis for a keyword
get_volumeTotal posting and comment volume by day and platform
get_topicsTrending topics and hashtags
get_engagement_rankingProfiles ranked by engagement
get_compareCompare profiles side-by-side
find_expertsFind topic experts by authority score
get_sentiment_trendDaily sentiment breakdown over time
get_hashtag_trendingTrending hashtags by engagement
get_mention_rankingMost-mentioned profiles
get_best_timeBest posting times by engagement
get_growthFollower growth over time
semantic_searchSemantic search across content
get_balanceCheck credit balance

Example Conversations

"What are people saying about the Iran conflict on Indonesian social media?"

The AI calls get_sentiment and search_posts, then summarizes.

"Compare engagement between @KompasTV and @Metro_TV this week"

The AI calls get_compare and presents a comparison table.

"Find trending topics from the last 3 days"

The AI calls get_trending and formats the results.

Credits

Each MCP tool call costs the same credits as the corresponding API endpoint. Use get_balance to check remaining credits.

Claude Code Plugin

Use Verosight directly from Claude Code with slash commands. No MCP setup needed — the plugin calls the API via curl.

Install

Claude Code
/plugin install https://github.com/volantis-technology/verosight-claude-plugin

Setup

Set your API key and run the setup skill:

Shell
export VEROSIGHT_API_KEY=vlt_live_YOUR_KEY
/verosight:setup

Available Skills

CommandCreditsDescription
/verosight:setupFreeConfigure API key and verify access
/verosight:search <query>2Search posts across all platforms
/verosight:trending [platform]5Get trending content and profiles
/verosight:sentiment <topic>5Analyze public sentiment
/verosight:profile <platform> <name>5Get profile details and engagement stats
/verosight:compare <p1> vs <p2>5Compare profile engagement side-by-side
/verosight:balanceFreeCheck credit balance

Examples

Claude Code
/verosight:search posts about AI from last week
/verosight:trending on tiktok
/verosight:sentiment iran conflict
/verosight:profile x KompasTV
/verosight:compare KompasTV vs Metro_TV on twitter
/verosight:balance
Plugin vs MCP

The plugin provides 7 slash commands via curl. For the full 13-tool experience with automatic tool selection, use the MCP Server instead.

Errors

Error Response
{
  "error": {
    "code": "insufficient_credits",
    "message": "This request costs 5 credits but you have 2 remaining."
  },
  "meta": { "request_id": "uuid" }
 }
StatusCodeDescription
400invalid_requestBad request
400invalid_platformInvalid platform name
400invalid_daysDays out of range (1-365)
400keyword_too_longKeyword exceeds 200 characters
401invalid_api_keyMissing or invalid credentials
401token_expiredJWT expired
402insufficient_creditsNot enough credits
404not_foundResource not found
429rate_limitedToo many requests
500server_errorInternal error

Rate Limits

Rate limits use a 60-second sliding window per API key.

TierRequests/minFree Credits
Standard601,000
Pro120Custom
EnterpriseCustomCustom

Headers

Response Headers
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 55
X-RateLimit-Reset: 1749244800
X-Credits-Charged: 5
X-Credits-Remaining: 945

Credit Costs

EndpointCredits
GET /v1/posts2
GET /v1/posts/count, /v1/posts/:id1
GET /v1/comments2
GET /v1/comments/count, /v1/comments/:id1
GET /v1/profiles2
GET /v1/profiles/.../stats5
GET /v1/analytics/tracked-keywords1
GET /v1/analytics/sentiment-trend, hashtags, mentions, best-time, growth, keyword-volume3
GET /v1/analytics/* (trending, sentiment, volume, topics, experts, compare, engagement)5
POST /v1/search5 (per query)
POST /v1/seeds/:id/crawl10
GET /v1/recommendations/*15
POST /v1/chat20
Conversations, Account, Seeds, Export, Health0