Recherche vidéo Outlier
Recherchez les données stockées par mot-clé, niche, région et ratio vues/abonnés.
https://api.shortsmonkey.com/v1/videos/outliers/search0 Credits
Recherche vidéo Outlier#
Recherchez les données stockées par mot-clé, niche, région et ratio vues/abonnés.
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 | POST | Méthode de requête HTTP |
| Complet URL | https://api.shortsmonkey.com/v1/videos/outliers/search | Production API URL |
| Authentification | Authorization: Bearer sm_live_... | Envoyer la clé complète uniquement dans l'en-tête |
| Type de contenu | application/json | Le corps de la requête utilise JSON |
| Crédits | 0 Credits | Toutes les opérations coûtent 0 Credits. Aucun crédit commercial mensuel n’est attribué ni déduit. |
Paramètres de la demande#
| Nom | Emplacement | Taper | Requis | Défaut | Valeurs ou limites | Description |
|---|---|---|---|---|---|---|
keyword | Corps JSON | string | Non | — | 1 à 120 caractères | Mot clé correspondant au titre stocké ou au texte de niche |
niche | Corps JSON | string | Non | — | 1 à 80 caractères | Filtre de niche ou de catégorie |
video_type | Corps JSON | string | Non | all | shorts / long / all | Type de vidéo |
region | Corps JSON | string | Non | — | 2 à 16 caractères | Code de région |
max_channel_subscribers | Corps JSON | integer | Non | — | 0–10,000,000 | Nombre maximum d'abonnés à la chaîne |
min_views | Corps JSON | integer | Non | — | 0–1,000,000,000 | Nombre minimum de vues |
min_vs_ratio | Corps JSON | number | Non | 10 | 0–100,000 | Ratio minimum de vues par abonnés |
time_window | Corps JSON | string | Non | 7d | 24h / 3d / 7d / 30d | Fenêtre de publication vidéo |
limit | Corps JSON | integer | Non | 20 | 1–50 | Nombre maximum d'éléments sur cette page |
all_cursor | Corps JSON | string | Non | — | data.all_data.next_cursor | Récupérer la page suivante non filtrée |
filter_cursor | Corps JSON | string | Non | — | data.filter_data.next_cursor | Récupérer la page filtrée suivante sans changer les filtres |
cursor | Corps JSON | string | Non | — | Paramètre de compatibilité obsolète | Alias pour filter_cursor ; n'envoyez pas les deux |
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.
Toutes les opérations coûtent 0 Credits. Aucun crédit commercial mensuel n’est attribué ni déduit.
| 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 |
meta.snapshot_id | string | Non | ID d'instantané stable |
meta.snapshot_at | string(date-time) | Non | Horodatage de l'instantané |
meta.data_status | string | Non | Statut de l'ensemble de données |
credits.cost | integer | Non | Toutes les opérations coûtent 0 Credits. Aucun crédit commercial mensuel n’est attribué ni déduit. |
credits.remaining | integer | null | Oui | null |
credits.period_ends_at | string(date-time) | null | Oui | null |
credits.unlimited | boolean | Non | true |
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é |
| 429 | API_DAILY_LIMIT_REACHED | Toutes les clés API du compte partagent 10 appels REST de données par jour, réinitialisés à 00:00 Asia/Shanghai. Le site dispose séparément de 10 recherches par jour. MCP ne consomme aucun de ces quotas. | Après 10 appels REST de données, HTTP 429 renvoie API_DAILY_LIMIT_REACHED. Attendez 00:00 Asia/Shanghai. Créer ou renouveler une clé ne réinitialise pas le quota du compte. |
| 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 POST "https://api.shortsmonkey.com/v1/videos/outliers/search" \
-H "Authorization: Bearer $SHORTSMONKEY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"keyword":"finance","video_type":"all","time_window":"7d","min_vs_ratio":10,"limit":20}'