RÉFÉRENCE API

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.

POST /video_embedding/encode_text
cURL
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
Python
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.

POST /video_embedding/encode_video/async
cURL
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
Python
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.

POST /files/upload/tensors
cURL
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
Python
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.

POST /video_tagging/async
cURL
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
Python
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.

GET /async_status/{request_id}
cURL
curl -X GET "https://api.seeknetic.com/async_status/{request_id}" \
  -H "X-API-Key: {your_api_key}"
Python / Exemple
Python
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 HTTPSignificationAction
400Requête incorrecteVérifiez le JSON et les champs requis.
401Échec d’authentificationVérifiez la clé API et ne l’exposez pas côté client.
402Quota dépasséVérifiez l’utilisation et la facturation avant de réessayer.
413Charge utile trop volumineuseRéduisez la charge utile ou envoyez des tenseurs plus petits.
422Échec de validationVérifiez les types et le schéma de requête.
429Limite de débit atteinteRéduisez la fréquence et espacez les nouvelles tentatives.
500Erreur interne du serviceLimitez le nombre de tentatives, puis contactez le support si nécessaire.
502Erreur du service amontAttendez, puis réessayez avec un nombre limité de tentatives.
504Délai dépasséUtilisez l’asynchrone ou un contenu plus petit. Vérifiez l’état avant de soumettre à nouveau.
[email protected]

Limites de débit

Chaque clé possède une limite QPS définie à sa création. Son dépassement renvoie HTTP 429.