VwD External API (1.0.0)

External API for accessing VwD creators data.

Download OpenAPI description
Overview
VwD API Support

support@vwd.ai

License

MIT

Languages
Servers
VwD Production API Server

https://api.vwd.ai/api/public/v1/

Mock server

https://apidocs.vwd.ai/_mock/apis/

Creator Management

Endpoints related to creators information and searches.

Operations

Retrieve an creator's profile

Request

Public API Endpoint

Use this endpoint to retrieve an creator's profile. Only accessible if the API key is valid and the creators belongs to the organization associated with the API key.

Path
idintegerrequired

The ID of the creators to retrieve.

Example: 12345
Query
include_child_scoresboolean
  • true (default): return both top-level parent categories and child/leaf tags (zero-filled)
  • false: return parent category scores only (top-level categories)
Default true
Example: include_child_scores=true
curl -i -X GET \
  'https://api.vwd.ai/api/public/v1/creators/12345/?include_child_scores=true' \
  -H 'Authorization: YOUR_API_KEY_HERE'

Responses

Creator profile. Returns the same shape as the creator list (GET /creators/) plus two PLG-specific blocks: scan_statuses[] (per-scan state, freshness, pipeline stage, available re-scan options) and visibility{} (history window). Pre-PLG creators return scan_statuses: [] and visibility.is_restricted: false.

Bodyapplication/json
idinteger
Example: 10
namestring
Example: "Influencer 1"
photo_urlstring or null
Example: "https://media.vwd.ai/media/creators-profile-pics/influencer.jpg"
regionstring or null
Example: "europe"
genderstring or null
Example: "female"
is_publicboolean
Example: true
followers_reachinteger or null
Example: 500000
follower_reach_normalisedstring
Example: "500 k"
pronounstring or null
Example: "she/her"
ageinteger or null
Example: 28
social_profilesArray of objects
scoresobject
summarystring or null
Example: "Popular lifestyle influencer based in North America"
avg_comments_per_poststring
Example: "150"
avg_likes_per_poststring
Example: "5.2 k"
avg_views_per_videostring
Example: "12.5 k"
total_compliance_violationsinteger
Example: 0
compliance_violations_by_categoryobject

Total compliance violations for this creator broken down by compliance family. Sum of values equals total_compliance_violations. All four keys are always present (zeros when no violations); values are non-negative integers.

Example: {"FTC":0,"FINRA":0,"Healthcare":0,"TTB":0}
is_monitoredboolean

Indicates whether the creator is currently being monitored (actively scanned for new content).

Example: true
brandsArray of objects

List of associated brands

deepest_scanDeepestScan (object) or null

Deepest scan tier the calling org has purchased for this creator. null when the org has no scan purchase (pre-PLG creators, or creators returned by the profile endpoint — on GET /creators/{id}/ this field is always null; read scan_statuses[] instead).

Example: {"scan_type":"scan_full","display":"Comprehensive","purchased_at":"2026-05-01T12:34:56.789012Z"}
One of:

Deepest scan tier the calling org has purchased for this creator. null when the org has no scan purchase (pre-PLG creators, or creators returned by the profile endpoint — on GET /creators/{id}/ this field is always null; read scan_statuses[] instead).

scan_statusesArray of objects(ScanStatusItem)

Per-scan state rows. Empty array ([]) for pre-PLG creators.

visibilityobject(Visibility)

Declares the historical-data window visible to the calling org for this creator. is_restricted: false when the org has no scan purchase (pre-PLG creators stay unrestricted). When restricted, the window matches the tier's data_coverage_days.

Response
application/json
{ "id": 84213, "name": "Kennedy Sur", "deepest_scan": null, "scan_statuses": [ {} ], "visibility": { "visible_from": "2025-05-18", "visible_until": "2026-05-18", "is_restricted": true, "deeper_scan_available": false, "upgrade_scan_type": null } }

List all creators

Request

Public API Endpoint

List creators for the authenticated organization with pagination. Response items include associated brands with IDs.

Query
pageinteger

Page number for pagination.

Example: page=1
limitinteger

Number of results per page.

Example: limit=10
include_child_scoresboolean
  • false (default): return parent category scores only (top-level categories)
  • true: return both top-level parent categories and child/leaf tags (zero-filled)
Default false
curl -i -X GET \
  'https://api.vwd.ai/api/public/v1/creators/?include_child_scores=false&limit=10&page=1' \
  -H 'Authorization: YOUR_API_KEY_HERE'

Responses

Successfully retrieved creators list.

Bodyapplication/json
creatorsArray of objects(CreatorWithBrands)
totalinteger

Total number of creators

Example: 100
countinteger

Number of creators in current page

Example: 10
nextstring or null

URL for next page

Example: "https://api.vwd.ai/api/public/v1/creators/?page=2&limit=10"
Response
application/json
{ "creators": [ {} ], "total": 100, "count": 10, "next": "https://api.vwd.ai/api/public/v1/creators/?page=2&limit=10" }

Add creators (single or bulk)

Request

Public API Endpoint

Add creators either one at a time (single JSON object) or in bulk (object with an items array). Tokens are debited per creator according to the scan_type tier (default scan_full = 3 tokens) plus monitoring (+1 token) if enabled.

Bulk semantics — all-or-nothing at the budget gate: if the aggregate cost of all billable rows exceeds your token balance, the whole request returns 402 and nothing is created or charged. After the gate, per-row save failures (rare race conditions) appear as status: "failed" in the results and do not consume tokens; the batch continues.

Append ?dry_run=true to preview the token cost and outcome without side effects (no creator created, no tokens debited). Validation still runs.

Re-adding a creator the same org previously hard-deleted restores the archived scan purchase and is not charged (rebind). Bulk ?dry_run=true excludes predicted rebinds from the aggregate cost — the live debit matches.

Query
dry_runboolean

If true, return a cost preview (200 with DryRunResponse) instead of creating anything. Accepts true/1 (case-insensitive). Zero side effects.

Default false
Bodyapplication/jsonrequired
One of:
namestringrequired

Creator display name. Letters, digits, spaces, -, ., & only — no emoji/symbols. Trimmed; empty/whitespace → 400.

Example: "Jane Doe"
social_profilesArray of objectsnon-emptyrequired
social_profiles[].​platformstringrequired

Social media platform. google_news/reddit are system-created and rejected on input; onlyfans is output-only.

Enum"instagram""tiktok""youtube""twitter""facebook"
Example: "instagram"
social_profiles[].​profile_urlstringrequired
Example: "https://instagram.com/janedoe"
scan_typestring

Initial scan tier slug. Determines history coverage and token cost. Default scan_full (3 tokens, full history). Valid values are the active slugs returned by GET /scan-catalog/initial_scans[] (seeded defaults: scan_1y / scan_2y / scan_full). Invalid slug → 400.

Default "scan_full"
Example: "scan_full"
monitoringboolean

Enable monitoring at creation (+1 token, see GET /scan-catalog/monitoring.token_cost). Saves a follow-up call to /monitor/.

Default false
Example: false
confirm_duplicateboolean

When set to true, allows adding creators despite them already existing in the organization. Duplicates within the same request are always omitted regardless of this flag.

Default false
Example: false
curl -i -X POST \
  'https://api.vwd.ai/api/public/v1/creators/?dry_run=false' \
  -H 'Authorization: YOUR_API_KEY_HERE' \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "Jane Doe",
    "social_profiles": [
      {
        "platform": "instagram",
        "profile_url": "https://instagram.com/janedoe"
      }
    ],
    "scan_type": "scan_1y",
    "monitoring": true,
    "confirm_duplicate": false
  }'

Responses

Bulk request processed, or dry-run preview returned. The bulk live response carries a results array (per-row outcomes) and a summary. The dry-run response (?dry_run=true, on single or bulk) carries cost + would-succeed.

Bodyapplication/json
One of:

Bulk create response (HTTP 200 even with row failures). Each row reports its outcome via status; the summary aggregates counts. summary.failed = requested − created (so it sums both "invalid" and "failed" rows). Note: the legacy top-level quota object and the quota_exceeded row status were removed when the token model launched — budget failures now return 402 at the request level (not per-row).

resultsArray of objects
summaryobject
Response
application/json
{ "results": [ {}, {}, {}, {} ], "summary": { "requested": 4, "valid": 2, "created": 1, "failed": 3 } }

Brand Management

Endpoints for brand search and management.

Operations

List Management

Endpoints for managing creator lists.

Operations

Account & Tokens

Token-budget discovery and scan-catalog endpoints for the prepaid token model that powers creator scans, re-scans, and monitoring.

Prepaid tokens. Billable actions (new scans via POST /creators/, re-scans via POST /creators/{id}/rescan/, monitoring via POST /creators/{id}/monitor/) consume tokens from your organization's API budget. Read the current balance with GET /account/usage/. Token purchasing happens outside the API — contact your account manager to top up.

Scan tiers. A scan tier determines how much creator history is analyzed and the token cost. Initial-scan tiers (scan_1y / scan_2y / scan_full) are used on creator create; re-scan tiers (rescan_lite / rescan_mild / rescan_full) refresh or deepen an existing creator. Costs are admin-configurable — always read GET /scan-catalog/ for live values instead of hardcoding tiers.

Data visibility windows. Historical sub-resources (posts, timeline, brands, compliance) for newly-added creators are scoped to the time range covered by the scan tier purchased. The visibility{} block on GET /creators/{id}/ tells you the exact window and whether a deeper scan is available. Creators added before the token-model launch (2026-05-30) remain unrestricted.

Previewing cost. Append ?dry_run=true on POST /creators/ (single & bulk) or POST /creators/{id}/monitor/ to preview the token cost and outcome without making any change or debiting tokens. Validation still runs.

See the PLG launch changelog post for the full migration guide.

Operations

Content Analysis

Endpoints for retrieving creators posts with labels.

Operations

Brand Mentions

Endpoints for creators posts and timelines related to brands.

Operations

Compliance Monitoring

Endpoints for creators compliance data.

Operations