POST /v1/videos/track
Start tracking videos across all supported platforms — track up to 50 videos in a single request. Each entry in the batch can carry per-video metadata (campaign, tags, notes, ecpm, budget, video_status, status) so you can tag, label, and price videos at the moment you start tracking them.
Two request shapes are currently accepted — the new videos[] array (recommended) and the legacy urls array (deprecated, sunset 2026-10-25). Both shapes return the same per-video response format.
🚨 Deprecation notice (legacy
urlsshape) The legacy{ "urls": ["..."] }request body is marked deprecated under RFC 8594. Responses to legacy-shape requests include the following headers:Deprecation: true Sunset: Sat, 25 Oct 2026 23:59:59 GMTAfter the sunset date the legacy shape returns
400 VALIDATION_ERRORand clients must migrate to{ "videos": [{ "url": "...", ... }] }. New integrations should ignore the legacy shape entirely.
📋 Overview
🔐 Headers
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
📝 Request
The videos[] shape lets you attach metadata to specific entries in the batch. Each entry is a self-contained { url, …metadata } object — URLs and metadata can differ per entry.
Request Body
At least one of
urlis required per entry. All metadata fields are optional; omit (or sendnullforecpm/budget) to leave the corresponding video column unchanged.
Example Request
curl -X POST https://api.influtics.com/v1/videos/track \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"videos": [
{
"url": "https://www.tiktok.com/@summer.launch/video/7489443966908189959",
"campaign": "summer_launch_2026",
"tags": ["fashion", "lifestyle"],
"notes": "Q3 sponsored post — performance tier A",
"ecpm": 2.50,
"budget": 1500,
"video_status": "tracking",
"status": "running"
},
{
"url": "https://www.instagram.com/reel/ABC123DEF456/",
"tags": ["lifestyle"],
"ecpm": 1.75
},
{
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
}
]
}'
Success Response (200 OK)
{
"success": true,
"data": {
"results": [
{
"index": 0,
"url": "https://www.tiktok.com/@summer.launch/video/7489443966908189959",
"platform": "tiktok",
"video_id": "77168374-dd2c-496a-b1ae-3d4944f48ccb",
"external_video_id": "7489443966908189959",
"status": "tracked",
"error": null,
"applied_fields": ["campaign_tag", "tags", "notes", "ecpm", "budget", "video_status", "status"]
},
{
"index": 1,
"url": "https://www.instagram.com/reel/ABC123DEF456/",
"platform": "instagram",
"video_id": "fb14c33f-cb0a-4ddc-b7be-bb9a08e3d969",
"external_video_id": "ABC123DEF456",
"status": "already_tracked",
"error": null,
"applied_fields": ["tags", "ecpm"]
},
{
"index": 2,
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"platform": "youtube",
"video_id": "2b683ee8-ba57-4218-8f7e-2268f58dc8ba",
"external_video_id": "dQw4w9WgXcQ",
"status": "tracked",
"error": null,
"applied_fields": []
}
]
},
"meta": {
"summary": {
"total": 3,
"tracked": 2,
"already_tracked": 1,
"errors": 0
},
"processing_time_ms": 5421,
"request_id": "6e10c2ba-dda6-4a3d-92f1-8a224c5a088c"
}
}
Response Fields
About
applied_fields— reflects what actually landed in the database for the entry. If the same URL is submitted twice in one batch (validation rejects this), or if a non-fatal write error occurred (e.g. transient DB blip onnotesonly), the affected field is omitted from the array.
📦 Request — Legacy (deprecated)
The legacy { "urls": ["..."] } shape is still accepted until 2026-10-25 to give existing integrations time to migrate. New code should send the videos[] shape above.
Request Body
Example Request
curl -X POST https://api.influtics.com/v1/videos/track \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"urls": [
"https://www.tiktok.com/@username/video/1234567890",
"https://www.instagram.com/reel/ABC123DEF456/",
"https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"https://vt.tiktok.com/ZSHpobCM8BbnH-fbjKy/"
]
}'
Success Response (200 OK) — Legacy
Identical body shape to the videos[] response above, except every entry's applied_fields is [] (no metadata can be supplied via the legacy shape). Plus the following response headers:
Deprecation: true
Sunset: Sat, 25 Oct 2026 23:59:59 GMT
⚠️ Error Responses
All errors share the standard envelope { success: false, error: { code, message, request_id, ... } }. The table below lists every documented code and the conditions that trigger it.
Per-video entry errors (e.g. a single bad URL, a single quota-locked creator) are not request-level failures — they appear in
data.results[]withstatus: "error"and a free-texterrorstring. The top-level response is still200 OK.
🔧 Features
Automatic URL Processing
- Platform Detection: Automatically detects platform from URL across all 10 supported networks.
- URL Unshortening: Automatically unshortens TikTok shortened URLs (
vt.tiktok.com,vm.tiktok.com) and similar redirects. - Duplicate Prevention: Prevents tracking the same video multiple times within the same org. A duplicate URL inside a single batch is rejected up-front (see
400 VALIDATION_ERRORabove) — disambiguate before re-submitting. - Error Isolation: Per-video failures don't abort the rest of the batch.
Per-Video Metadata
- Tags are matched case-insensitively; new names auto-create the tag row.
ecpmandbudgetaccept numbers or numeric strings.nullor""clears the field; negative or non-finite values are rejected.video_status(tracking/paused/deleted) is independent fromstatus(to do/running/ended) — they describe different axes.applied_fieldson each result entry reflects the actual applied columns (campaign_tagfor the campaign input, etc.) so clients can confirm metadata round-trips.
Batch Processing Benefits
- Efficiency: Process up to 50 videos in a single request.
- Same Credit Cost: 30 credits per newly tracked video — same per-video cost as the non-batch endpoint.
- Faster: Reduced API calls for bulk operations.
🎯 Use Cases
- Influencer Campaigns: Track video performance for sponsored content and tag each video with campaign + budget at creation time.
- CRM Imports: Bulk-discover videos from your data warehouse, ingest them with
status: "to do"and watch them flow intorunningas they ship. - Pricing Benchmarks: Set
ecpmper video up-front so dashboards can compare actual eCPM outcomes vs. your pricing assumptions. - Content Strategy: Tag videos by topic (
["fashion", "lifestyle"]) for downstream segmentation. - Brand Monitoring: Track mentions and branded content at scale, with notes to flag interesting wins/risks for the team.
📈 What Happens Next?
- First Stats: First stats observed within 5 minutes.
- 30-Day Tracking: Automatic daily updates for 30 days (renewed on demand thereafter).
- Historical Data: Access to performance trends and growth via
GET /v1/videos/stats. - Dashboard Access: View all tracked videos in your dashboard, filtered by
campaign,tags,status,video_status, etc.
📊 Rate Limits
- Multi-Video: 20 requests per minute (max 50 videos per request).
- Total Videos: 1000 videos per minute across all requests.
- Subscription Limits (per tier):
tracked_videos_limit— videos quota enforced up-front; tracking fails with403 SUBSCRIPTION_LIMITif the batch would exceed the cap.
Related: Get Video Stats → | View Usage →