Créez avec l’intelligence vidéo.
L’API publiée de Seeknetic prend en charge les embeddings de texte, les embeddings vidéo asynchrones, l’envoi de tenseurs et l’annotation professionnelle des plans.
Authentification
Indiquez votre clé API dans l’en-tête X-API-Key. Créez ou gérez votre clé depuis votre compte Seeknetic.
L’API publiée accepte aussi Authorization: Bearer <API_KEY> à la place de X-API-Key. Choisissez une seule méthode par requête.
URL de base: https://api.seeknetic.com
Le code, les identifiants API et les valeurs des requêtes conservent leur langue technique d’origine.
Embedding de texte
Encodez une requête textuelle en embedding pour la comparer sémantiquement aux médias indexés.
/video_embedding/encode_text curl -X POST "https://api.seeknetic.com/video_embedding/encode_text" \
-H "X-API-Key: {your_api_key}" \
-H "Content-Type: application/json" \
-d '{"text":"A dog playing in the park"}' Python / Exemple
import requests
response = requests.post(
"https://api.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'])}") Embedding vidéo
Soumettez une vidéo hébergée pour l’encodage asynchrone. Conservez le request_id renvoyé, puis interrogez le statut pour obtenir le résultat.
Pour les données prétraitées, utilisez tensor.video_input_key et tensor.audio_input_key renvoyés par le point de terminaison de téléversement.
/video_embedding/encode_video/async curl -X POST "https://api.seeknetic.com/video_embedding/encode_video/async" \
-H "X-API-Key: {your_api_key}" \
-H "Content-Type: application/json" \
-d '{"video_url":"https://example.com/video.mp4"}' Python / Exemple
import requests
import time
# 1. Submit async task
response = requests.post(
"https://api.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.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) Envoi de tenseurs
Envoyez les tenseurs vidéo et audio prétraités, puis utilisez les clés d’entrée renvoyées dans la requête asynchrone.
/files/upload/tensors curl -X POST "https://api.seeknetic.com/files/upload/tensors" \
-H "X-API-Key: {your_api_key}" \
-H "Content-Type: application/json" \
-d '{
"service":"embedding",
"request_id":"emb-task-0001",
"video_input":{"data":"AAAB...","shape":[1,12,3,224,224],"dtype":"uint8"},
"audio_input":{"data":"AAAB...","shape":[1,1,220500],"dtype":"float32"}
}' Python / Exemple
import requests
response = requests.post(
"https://api.seeknetic.com/files/upload/tensors",
headers={
"X-API-Key": "{your_api_key}",
"Content-Type": "application/json"
},
json={
"service": "embedding",
"request_id": "emb-task-0001",
"video_input": {
"data": "AAAB...",
"shape": [1, 12, 3, 224, 224],
"dtype": "uint8"
},
"audio_input": {
"data": "AAAB...",
"shape": [1, 1, 220500],
"dtype": "float32"
}
}
)
print(response.json()) Annotation des plans
Soumettez une vidéo pour générer des métadonnées professionnelles de manière asynchrone.
Pour les données prétraitées de classification, utilisez tensor.video_input_key et tensor.video_kwargs_key renvoyés par le point de terminaison de téléversement.
/video_tagging/async curl -X POST "https://api.seeknetic.com/video_tagging/async" \
-H "X-API-Key: {your_api_key}" \
-H "Content-Type: application/json" \
-d '{"video_url":"https://example.com/video.mp4"}' Python / Exemple
import requests
# Submit async tagging task
response = requests.post(
"https://api.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}") Statut d’une tâche asynchrone
Vérifiez une requête soumise. Continuez à interroger le statut pendant l’attente ou le traitement, puis consultez le résultat une fois terminé.
États de la tâche : pending → processing → completed. Une tâche échouée inclut un champ error_message.
/async_status/{request_id} curl -X GET "https://api.seeknetic.com/async_status/{request_id}" \
-H "X-API-Key: {your_api_key}" Python / Exemple
import requests
request_id = "your_request_id_from_async_call"
response = requests.get(
f"https://api.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']}") Erreurs et nouvelles tentatives
Pour une réponse 400, vérifiez les paramètres ; pour 401, les identifiants. Réduisez la fréquence après 429. Réessayez les erreurs temporaires du serveur avec un nombre limité de tentatives.
| Statut HTTP | Signification | Action |
|---|---|---|
| 400 | Requête incorrecte | Vérifiez le JSON et les champs requis. |
| 401 | Échec d’authentification | Vérifiez la clé API et ne l’exposez pas côté client. |
| 402 | Quota dépassé | Vérifiez l’utilisation et la facturation avant de réessayer. |
| 413 | Charge utile trop volumineuse | Réduisez la charge utile ou envoyez des tenseurs plus petits. |
| 422 | Échec de validation | Vérifiez les types et le schéma de requête. |
| 429 | Limite de débit atteinte | Réduisez la fréquence et espacez les nouvelles tentatives. |
| 500 | Erreur interne du service | Limitez le nombre de tentatives, puis contactez le support si nécessaire. |
| 502 | Erreur du service amont | Attendez, puis réessayez avec un nombre limité de tentatives. |
| 504 | Délai dépassé | Utilisez l’asynchrone ou un contenu plus petit. Vérifiez l’état avant de soumettre à nouveau. |
Limites de débit
Chaque clé possède une limite QPS définie à sa création. Son dépassement renvoie HTTP 429.