Détail vidéo
Lisez un instantané vidéo stocké sans déclencher une récupération YouTube en direct.
https://api.shortsmonkey.com/v1/videos/abc1231 crédit une fois trouvé
Détail vidéo#
Lisez un instantané vidéo stocké sans déclencher une récupération YouTube en direct.
Authentification#
Envoyez Authorization: Bearer sm_live_.... Ne placez jamais la clé complète dans les URL, les cookies, les corps, les journaux ou les analyses.
Fraîcheur des données#
Les classements lisent les instantanés stables publiés par le travailleur. Les lectures publiques ne déclenchent jamais une actualisation YouTube.
Demande#
| Article | Valeur | Description |
|---|---|---|
| Méthode | GET | Méthode de requête HTTP |
| Complet URL | https://api.shortsmonkey.com/v1/videos/abc123 | Production API URL |
| Authentification | Authorization: Bearer sm_live_... | Envoyer la clé complète uniquement dans l'en-tête |
| Type de contenu | Aucun corps de requête | Les requêtes GET n'ont pas de corps de requête |
| Crédits | 1 crédit une fois trouvé | Les réponses aux erreurs coûtent 0 crédit |
Paramètres de la demande#
| Nom | Emplacement | Taper | Requis | Défaut | Valeurs ou limites | Description |
|---|---|---|---|---|---|---|
video_id | Chemin | string | Oui | — | 6 à 32 caractères sécurisés URL | ID vidéo YouTube stocké ; les enregistrements manquants renvoient 404 à un coût nul |
Champs de réponse de réussite#
all_data est une page non filtrée de l'instantané stable ; filter_data est une page du même instantané après les paramètres par défaut du point de terminaison et les filtres de demande. Chaque résultat est paginé indépendamment.
La notation par points représente les objets imbriqués et [] représente les éléments du tableau. Le nombre d'abonnés inconnus est null avec subscriber_count_hidden: true. Une demande est facturée une seule fois en utilisant le plus grand nombre d'articles retournés, jamais la somme des deux ensembles.
| Chemin de champ | Taper | Nullable | Description |
|---|---|---|---|
data.all_data.items | array<object> | Non | Éléments vidéo non filtrés sur la page actuelle |
data.all_data.items[].video_id | string | Non | ID vidéo YouTube |
data.all_data.items[].title | string | Non | Titre de la vidéo |
data.all_data.items[].video_url | string | Non | Vidéo YouTube URL |
data.all_data.items[].channel.id | string | Oui | ID de chaîne |
data.all_data.items[].channel.title | string | Non | Titre de la chaîne |
data.all_data.items[].channel.subscribers | integer | Oui | Nombre d'abonnés ; null lorsqu'il est masqué |
data.all_data.items[].channel.subscriber_count_hidden | boolean | Non | Si le nombre d'abonnés est masqué |
data.all_data.items[].views | integer | Non | Instantané du nombre de vues |
data.all_data.items[].views_to_subscribers_ratio | number | Oui | Ratio vues/abonnés |
data.all_data.items[].opportunity_score | number | Oui | Score d'opportunité |
data.all_data.items[].duration_seconds | integer | Non | Durée de la vidéo en secondes |
data.all_data.items[].published_at | string(date-time) | Oui | Heure de publication de la vidéo en UTC ISO 8601 |
data.all_data.items[].snapshot_at | string(date-time) | Oui | Temps de collecte des données |
data.all_data.items[].niche | string | Oui | Niche ou catégorie |
data.all_data.items[].track | string | Oui | Identifiant de la piste de l'ensemble de données |
data.all_data.items[].region | string | Oui | Code de région |
data.all_data.items[].reasons | array<string> | Non | Raisons du classement |
data.all_data.items[].video_type | string | Non | shorts ou long |
data.all_data.next_cursor | string | Oui | Page suivante cursor pour cet ensemble de résultats ; null une fois terminé |
data.filter_data.items | array<object> | Non | Éléments vidéo après les valeurs par défaut et les filtres de demande |
data.filter_data.items[].video_id | string | Non | ID vidéo YouTube |
data.filter_data.items[].title | string | Non | Titre de la vidéo |
data.filter_data.items[].video_url | string | Non | Vidéo YouTube URL |
data.filter_data.items[].channel.id | string | Oui | ID de chaîne |
data.filter_data.items[].channel.title | string | Non | Titre de la chaîne |
data.filter_data.items[].channel.subscribers | integer | Oui | Nombre d'abonnés ; null lorsqu'il est masqué |
data.filter_data.items[].channel.subscriber_count_hidden | boolean | Non | Si le nombre d'abonnés est masqué |
data.filter_data.items[].views | integer | Non | Instantané du nombre de vues |
data.filter_data.items[].views_to_subscribers_ratio | number | Oui | Ratio vues/abonnés |
data.filter_data.items[].opportunity_score | number | Oui | Score d'opportunité |
data.filter_data.items[].duration_seconds | integer | Non | Durée de la vidéo en secondes |
data.filter_data.items[].published_at | string(date-time) | Oui | Heure de publication de la vidéo en UTC ISO 8601 |
data.filter_data.items[].snapshot_at | string(date-time) | Oui | Temps de collecte des données |
data.filter_data.items[].niche | string | Oui | Niche ou catégorie |
data.filter_data.items[].track | string | Oui | Identifiant de la piste de l'ensemble de données |
data.filter_data.items[].region | string | Oui | Code de région |
data.filter_data.items[].reasons | array<string> | Non | Raisons du classement |
data.filter_data.items[].video_type | string | Non | shorts ou long |
data.filter_data.next_cursor | string | Oui | Page suivante cursor pour cet ensemble de résultats ; null une fois terminé |
meta.request_id | string | Non | Demander l'ID de trace |
credits.cost | integer | Non | 1 lorsque la vidéo est trouvée |
credits.remaining | integer | Non | Crédits de compte restants |
credits.period_ends_at | string(date-time) | Non | Fin de la période de crédit en cours |
Pagination et cursor#
Envoyez all_data.next_cursor sous la forme all_cursor et filter_data.next_cursor sous la forme filter_cursor. Les cursor sont indépendants, opaques, signés et valables 24 heures ; l'ancien cursor n'est qu'un alias pour filter_cursor.
Etag#
Les classements prennent en charge If-None-Match. Un hit renvoie HTTP 304 avec X-Credits-Cost: 0.
Erreurs et limites de débit#
Chaque erreur contient code, l'anglais stable message, request_id et details. Toutes les réponses 4xx/5xx ne coûtent aucun crédit.
| Statut HTTP | Code | Cause | Action suggérée |
|---|---|---|---|
| 400 | INVALID_REQUEST | Format, combinaison ou plage de paramètre non valide | Corrigez les paramètres à l'aide de details.issues |
| 401 | INVALID_API_KEY | La clé est invalide ou inactive | Vérifiez l’en-tête Bearer et l’état de la clé |
| 402 | SUBSCRIPTION_REQUIRED / CREDITS_EXHAUSTED | L'abonnement ou les crédits ne sont pas disponibles | Vérifiez le plan, le solde et le budget de sécurité clé |
| 429 | RATE_LIMITED | Limite de débit ou de simultanéité dépassée | Réessayez après l'intervalle Retry-After |
| 503 | DATA_STALE / SERVICE_UNAVAILABLE | Les données ou le service sont temporairement indisponibles | Réessayez plus tard et conservez request_id |
curl -X GET "https://api.shortsmonkey.com/v1/videos/abc123" \
-H "Authorization: Bearer $SHORTSMONKEY_API_KEY"