GET /v1/videos/by-external-id/
Look up a video by its platform-specific external_video_id (e.g. a TikTok shortcode, a YouTube video ID, an Instagram media ID) and return its full record, latest stats, and 30-day stats history.
The same path is also served by PATCH /v1/videos/by-external-id/{external_video_id} for editable metadata updates — this page covers GET only.
The external_video_id is path-encoded; URLs that contain / or other reserved characters must be percent-encoded.
📋 Overview
🔐 Headers
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
📝 Path Parameter
📝 Query Parameters
None.
Example Request
curl -X GET https://api.influtics.com/v1/videos/by-external-id/7489443966908189959 \
-H "Authorization: Bearer YOUR_API_KEY"
✅ Response (200 OK)
{
"success": true,
"data": {
"data": {
"video_id": "77168374-dd2c-496a-b1ae-3d4944f48ccb",
"external_video_id": "7489443966908189959",
"stats": {
"likes": { "2025-06-30 08:26:03.730104+00": 56500 },
"views": { "2025-06-30 08:26:03.730104+00": 1900000 },
"reposts": { "2025-06-30 08:26:03.730104+00": 6472 },
"comments": { "2025-06-30 08:26:03.730104+00": 483 }
},
"views": 2000000,
"likes": 56501,
"comments": 526,
"reposts": 6892,
"platform": "tiktok",
"created_at": "2025-06-30T08:25:29.97727+00:00",
"title": "Untitled",
"thumbnail_url": "https://p16-sign-sg.tiktokcdn.com/...",
"cpm": 0,
"er": 3.339736842105263,
"stats_last_updated": "2025-06-30T08:26:03.730104+00:00",
"deleted_at": null,
"deleted_reason": null
}
},
"meta": {
"request_id": "9f1b7e7e-1c36-49a9-8521-7b9180d8a1a8",
"processing_time_ms": 437
}
}
📊 GET Response Fields
Metadata fields are named exactly as they are written on
POST /v1/videos/trackandPATCH .../by-external-id— a value you set can be read back with the same key.ecpmis returned in the same unit it is accepted in;cpmabove is a separate, platform-computed figure.
Deletion state
Two read-only fields describe why a video stopped producing stats. Neither is writable — no endpoint on this API sets them.
{
"video_status": "deleted",
"deleted_at": "2026-10-18T09:12:44+00:00",
"deleted_reason": {
"code": "not_found",
"message": "video not exist",
"raw": { "statusCode": 10204, "statusMsg": "video not exist" }
}
}
The reason does not repeat the platform — it is already on the video's own platform field.
codeis inferred,messageis authoritative.codeis derived from the platform's numeric status code, which can be ambiguous — VK's blanketACCESS_DENIED(15) becomesprivate, but the platform never says "private". Prefermessagein anything user-facing or a model-facing summary.
Coverage is partial. Today only TikTok and VK record a reason. On every other platform deleted_reason is null even when video_status is deleted — that means the provider reported no cause, not that the video was healthy. Do not treat a null reason as "not deleted"; branch on deleted_at.
The two fields are independent of video_status. A video can carry a deleted_reason while video_status stays tracking — this is deliberate for content the platform has suppressed but may restore (TikTok classified/private posts stay retryable so stats reappear if the block lifts). Read deleted_at / deleted_reason, not video_status, to reason about deletion.
Deletion is reversible. A video that becomes fetchable again clears both fields to null on the next successful refresh. Poll rather than cache a deleted verdict permanently.
⚠️ Error Responses
All errors share the standard envelope { success: false, error: { code, message, request_id, ... } }. The table below lists every documented code for GET.
GET 404 envelope note — due to a known worker-side quirk, the GET endpoint returns a
400 VALIDATION_ERROR-shaped envelope on 404 (thecodefield is missing; onlymessageandrequest_idare populated). If your client switches oncode, fall back tostatus === 404. A follow-up PR will align this withPATCH's canonical envelope.
🎯 Use Cases
- Single-video lookup — fetch the current stats snapshot and metadata for a video you already know the ID of.
- Dashboard deep-links — open the dashboard directly on a known video without first listing the org's tracked set.
- Health checks — confirm a video is still being tracked and that stats are flowing.
Related: POST /v1/videos/track → · PATCH /v1/videos/by-external-id/ → · Get Video Stats → · View Usage →