Seeknetic API Documentation
API Endpoints by Region
| Region | Base URL | Status |
|---|---|---|
| Tokyo, Japan | https://api.jp.seeknetic.com | Available |
| Oregon, USA | https://api.us.seeknetic.com | Coming Soon |
| Beijing, China | https://api.cn.seeknetic.com | Coming Soon |
🔐 Authentication
All model service endpoints require API key authentication.
Using Your API Key
Method 1: X-API-Key Header (Recommended)
curl https://api.jp.seeknetic.com/video_tagging \ -H "X-API-Key: your_api_key" \ -H "Content-Type: application/json"
Method 2: Authorization Header
curl https://api.jp.seeknetic.com/video_tagging \ -H "Authorization: Bearer your_api_key" \ -H "Content-Type: application/json"
🎬 Video Embedding
Encode videos or text into vector embeddings for semantic search and similarity calculations.
Encode a video into embedding vectors (synchronous processing).
Python Example:
import requests
import base64
# Using video URL
response = requests.post(
"https://api.jp.seeknetic.com/video_embedding/encode_video",
headers={
"X-API-Key": "{your_api_key}",
"Content-Type": "application/json"
},
json={"video_url": "https://example.com/video.mp4"}
)
result = response.json()
print(f"Embedding dimension: {len(result['embeddings'][0])}") Encode text into embedding vectors for semantic search.
Use this endpoint to create query embeddings that can be compared against video embeddings.
Python Example:
import requests
response = requests.post(
"https://api.jp.seeknetic.com/video_embedding/encode_text",
headers={
"X-API-Key": "{your_api_key}",
"Content-Type": "application/json"
},
json={"text": "A dog playing in the park"}
)
result = response.json()
print(f"Text embedding dimension: {len(result['embedding'])}") Submit video for asynchronous embedding extraction.
Python Example:
import requests
import time
# 1. Submit async task
response = requests.post(
"https://api.jp.seeknetic.com/video_embedding/encode_video/async",
headers={
"X-API-Key": "{your_api_key}",
"Content-Type": "application/json"
},
json={"video_url": "https://example.com/video.mp4"}
)
request_id = response.json()["request_id"]
print(f"Task submitted, Request ID: {request_id}")
# 2. Poll status until completion
while True:
status_response = requests.get(
f"https://api.jp.seeknetic.com/async_status/{request_id}",
headers={"X-API-Key": "{your_api_key}"}
)
status_data = status_response.json()
status = status_data['status']
if status == 'completed':
embedding = status_data['embedding']
print(f"Complete! Dimension: {len(embedding)}")
break
elif status == 'failed':
print(f"Failed: {status_data['error_message']}")
break
time.sleep(2) Query the status and results of an asynchronous task.
Status Flow:
Python Example:
import requests
request_id = "your_request_id_from_async_call"
response = requests.get(
f"https://api.jp.seeknetic.com/async_status/{request_id}",
headers={"X-API-Key": "{your_api_key}"}
)
status_data = response.json()
print(f"Status: {status_data['status']}")
if status_data['status'] == 'completed':
print(f"Result: {status_data['embedding']}") 🏷️ Video Tagging
Analyze video metadata including shot size, camera movement, shooting angle, and more.
Analyze video and extract metadata (synchronous processing).
Supports both video URLs and Base64-encoded video data.
Python Example:
import requests
response = requests.post(
"https://api.jp.seeknetic.com/video_tagging",
headers={
"X-API-Key": "{your_api_key}",
"Content-Type": "application/json"
},
json={"video_url": "https://example.com/video.mp4"}
)
result = response.json()
print(f"Tags: {result['tags']}") Submit video for asynchronous tagging.
Python Example:
import requests
# Submit async tagging task
response = requests.post(
"https://api.jp.seeknetic.com/video_tagging/async",
headers={
"X-API-Key": "{your_api_key}",
"Content-Type": "application/json"
},
json={"video_url": "https://example.com/video.mp4"}
)
request_id = response.json()["request_id"]
print(f"Tagging task submitted, Request ID: {request_id}") 📹 Video Management
Video management service provides video collection management and semantic search capabilities.
Collections
Create a new video collection.
Python Example:
import requests
response = requests.post(
"https://api.jp.seeknetic.com/collections",
headers={
"X-API-Key": "{your_api_key}",
"Content-Type": "application/json"
},
json={
"name": "My Video Collection",
"description": "Test collection"
}
)
result = response.json()
print(f"Collection ID: {result['collection_id']}") List all video collections.
Python Example:
import requests
response = requests.get(
"https://api.jp.seeknetic.com/collections",
headers={"X-API-Key": "{your_api_key}"}
)
collections = response.json()
for collection in collections:
print(f"Collection: {collection['name']} (ID: {collection['id']})") Search for similar video clips in a collection (semantic vector search).
Python Example:
collection_id = "3d146cd7-4ecb-4dca-bf97-a271a143ee44"
response = requests.post(
f"https://api.jp.seeknetic.com/collections/{collection_id}/search",
headers={
"X-API-Key": "{your_api_key}",
"Content-Type": "application/json"
},
json={
"text": "A dog playing in the park",
"top_k": 10
}
)
for result in response.json()['results']:
print(f"Video: {result['video_id']}, Similarity: {result['similarity']:.2f}") Videos
Video upload and processing use an asynchronous processing model.
Upload video file directly (recommended for files < 100MB).
Python Example:
import requests
collection_id = "your_collection_id"
with open("video.mp4", "rb") as video_file:
files = {"file": video_file}
response = requests.post(
f"https://api.jp.seeknetic.com/collections/{collection_id}/videos/upload",
headers={"X-API-Key": "{your_api_key}"},
files=files
)
result = response.json()
print(f"Video uploaded, ID: {result['video_id']}") Lightweight status query for monitoring video processing progress.
Processing Stages:
- uploaded: Waiting for processing
- processing: Processing in progress
- processed: Processing complete
- failed: Processing failed
Python Example:
import requests
video_id = "your_video_id"
response = requests.get(
f"https://api.jp.seeknetic.com/videos/{video_id}/status",
headers={"X-API-Key": "{your_api_key}"}
)
status_data = response.json()
print(f"Status: {status_data['status']}")
print(f"Progress: {status_data.get('progress', 'N/A')}%") ⚠️ Error Handling
Common Error Codes
| Status Code | Description | Solution |
|---|---|---|
| 400 | Bad request parameters | Check request JSON format and required fields |
| 401 | Invalid API key | Check if API key is correct |
| 404 | Resource not found | Check URL path and resource ID |
| 429 | Rate limit exceeded | Reduce request frequency or upgrade plan |
| 500 | Internal server error | Contact technical support |
| 502 | External API error | External service temporarily unavailable, retry later |
| 504 | Request timeout | Try async interface or smaller video |
Rate Limiting
- Each API key has independent rate limits (QPS - Queries Per Second)
- Rate limits are set when creating the API key
- Exceeding limits will return a 429 error