Búsqueda de vídeos Outlier
Busque datos almacenados por palabra clave, nicho, región y proporción de visitas a suscriptores.
https://api.shortsmonkey.com/v1/videos/outliers/search2 créditos por cada 1 a 20 artículos reales
Búsqueda de vídeos Outlier#
Busque datos almacenados por palabra clave, nicho, región y proporción de visitas a suscriptores.
Autenticación#
Envíe Authorization: Bearer sm_live_.... Nunca coloque la clave completa en URL, cookies, cuerpos, registros o análisis.
Actualización de datos#
Las clasificaciones leen instantáneas estables publicadas por el trabajador. Las lecturas públicas nunca activan una actualización de YouTube.
Pedido#
| Artículo | Valor | Descripción |
|---|---|---|
| Método | POST | Método de solicitud HTTP |
| Completo URL | https://api.shortsmonkey.com/v1/videos/outliers/search | Producción API URL |
| Autenticación | Authorization: Bearer sm_live_... | Enviar la clave completa solo en el encabezado |
| Tipo de contenido | application/json | El cuerpo de la solicitud utiliza JSON. |
| Créditos | 2 créditos por cada 1 a 20 artículos reales | Las respuestas de error cuestan 0 créditos |
Solicitar parámetros#
| Nombre | Ubicación | Tipo | Requerido | Por defecto | Valores o límites | Descripción |
|---|---|---|---|---|---|---|
keyword | Cuerpo JSON | string | No | — | 1–120 caracteres | Palabra clave comparada con el título almacenado o el texto especializado |
niche | Cuerpo JSON | string | No | — | 1–80 caracteres | Filtro de nicho o categoría |
video_type | Cuerpo JSON | string | No | all | shorts / long / all | Tipo de vídeo |
region | Cuerpo JSON | string | No | — | 2 a 16 caracteres | código de región |
max_channel_subscribers | Cuerpo JSON | integer | No | — | 0–10,000,000 | Recuento máximo de suscriptores del canal |
min_views | Cuerpo JSON | integer | No | — | 0–1,000,000,000 | Recuento mínimo de vistas |
min_vs_ratio | Cuerpo JSON | number | No | 10 | 0–100,000 | Proporción mínima de visitas a suscriptores |
time_window | Cuerpo JSON | string | No | 7d | 24h / 3d / 7d / 30d | Ventana de publicación de vídeo |
limit | Cuerpo JSON | integer | No | 20 | 1–50 | Número máximo de elementos en esta página |
all_cursor | Cuerpo JSON | string | No | — | data.all_data.next_cursor | Obtener la siguiente página sin filtrar |
filter_cursor | Cuerpo JSON | string | No | — | data.filter_data.next_cursor | Obtenga la siguiente página filtrada sin cambiar los filtros |
cursor | Cuerpo JSON | string | No | — | Parámetro de compatibilidad obsoleto | Alias de filter_cursor; no envíes ambos |
Campos de respuesta exitosa#
all_data es una página sin filtrar de la instantánea estable; filter_data es una página de la misma instantánea después de los valores predeterminados del punto final y los filtros de solicitud. Cada resultado se pagina de forma independiente.
La notación de puntos representa objetos anidados y [] representa elementos de matriz. El recuento de suscriptores desconocidos es null con subscriber_count_hidden: true. Una solicitud se factura una vez utilizando el mayor número de artículos devueltos, nunca la suma de ambos conjuntos.
| Camino de campo | Tipo | Anulable | Descripción |
|---|---|---|---|
data.all_data.items | array<object> | No | Elementos de vídeo sin filtrar en la página actual |
data.all_data.items[].video_id | string | No | ID de vídeo YouTube |
data.all_data.items[].title | string | No | Título del vídeo |
data.all_data.items[].video_url | string | No | Vídeo YouTube URL |
data.all_data.items[].channel.id | string | Sí | ID de canal |
data.all_data.items[].channel.title | string | No | Título del canal |
data.all_data.items[].channel.subscribers | integer | Sí | Recuento de suscriptores; null cuando está oculto |
data.all_data.items[].channel.subscriber_count_hidden | boolean | No | Si el recuento de suscriptores está oculto |
data.all_data.items[].views | integer | No | Instantánea del recuento de vistas |
data.all_data.items[].views_to_subscribers_ratio | number | Sí | Relación vistas-suscriptores |
data.all_data.items[].opportunity_score | number | Sí | Puntuación de oportunidad |
data.all_data.items[].duration_seconds | integer | No | Duración del vídeo en segundos. |
data.all_data.items[].published_at | string(date-time) | Sí | Hora de publicación del vídeo en UTC ISO 8601 |
data.all_data.items[].snapshot_at | string(date-time) | Sí | tiempo de recolección de datos |
data.all_data.items[].niche | string | Sí | Nicho o categoría |
data.all_data.items[].track | string | Sí | Identificador de seguimiento del conjunto de datos |
data.all_data.items[].region | string | Sí | código de región |
data.all_data.items[].reasons | array<string> | No | Razones de clasificación |
data.all_data.items[].video_type | string | No | shorts o long |
data.all_data.next_cursor | string | Sí | Página siguiente cursor para este conjunto de resultados; null cuando termine |
data.filter_data.items | array<object> | No | Elementos de vídeo después de los valores predeterminados y los filtros de solicitud |
data.filter_data.items[].video_id | string | No | ID de vídeo YouTube |
data.filter_data.items[].title | string | No | Título del vídeo |
data.filter_data.items[].video_url | string | No | Vídeo YouTube URL |
data.filter_data.items[].channel.id | string | Sí | ID de canal |
data.filter_data.items[].channel.title | string | No | Título del canal |
data.filter_data.items[].channel.subscribers | integer | Sí | Recuento de suscriptores; null cuando está oculto |
data.filter_data.items[].channel.subscriber_count_hidden | boolean | No | Si el recuento de suscriptores está oculto |
data.filter_data.items[].views | integer | No | Instantánea del recuento de vistas |
data.filter_data.items[].views_to_subscribers_ratio | number | Sí | Relación vistas-suscriptores |
data.filter_data.items[].opportunity_score | number | Sí | Puntuación de oportunidad |
data.filter_data.items[].duration_seconds | integer | No | Duración del vídeo en segundos. |
data.filter_data.items[].published_at | string(date-time) | Sí | Hora de publicación del vídeo en UTC ISO 8601 |
data.filter_data.items[].snapshot_at | string(date-time) | Sí | tiempo de recolección de datos |
data.filter_data.items[].niche | string | Sí | Nicho o categoría |
data.filter_data.items[].track | string | Sí | Identificador de seguimiento del conjunto de datos |
data.filter_data.items[].region | string | Sí | código de región |
data.filter_data.items[].reasons | array<string> | No | Razones de clasificación |
data.filter_data.items[].video_type | string | No | shorts o long |
data.filter_data.next_cursor | string | Sí | Página siguiente cursor para este conjunto de resultados; null cuando termine |
meta.request_id | string | No | Solicitar ID de seguimiento |
meta.snapshot_id | string | No | ID de instantánea estable |
meta.snapshot_at | string(date-time) | No | Marca de tiempo de instantánea |
meta.data_status | string | No | Estado del conjunto de datos |
credits.cost | integer | No | Créditos reales cobrados |
credits.remaining | integer | No | Créditos restantes de la cuenta |
credits.period_ends_at | string(date-time) | No | Fin del período de crédito actual |
Paginación y cursor#
Envíe all_data.next_cursor como all_cursor y filter_data.next_cursor como filter_cursor. Los cursor son independientes, opacos, firmados y válidos por 24 horas; El cursor heredado es solo un alias para filter_cursor.
etiqueta ET#
Las clasificaciones admiten If-None-Match. Un acierto devuelve HTTP 304 con X-Credits-Cost: 0.
Errores y límites de tarifa#
Cada error contiene code, message, request_id y details en inglés estable. Todas las respuestas 4xx/5xx cuestan cero créditos.
| Estado HTTP | Código | Causa | Acción sugerida |
|---|---|---|---|
| 400 | INVALID_REQUEST | Formato, combinación o rango de parámetro no válido | Corrija los parámetros usando details.issues |
| 401 | INVALID_API_KEY | La clave no es válida o está inactiva. | Verifique el encabezado del portador y el estado de la clave |
| 402 | SUBSCRIPTION_REQUIRED / CREDITS_EXHAUSTED | La suscripción o los créditos no están disponibles | Consulta el plan, el equilibrio y el presupuesto clave de seguridad. |
| 429 | RATE_LIMITED | Se superó el límite de tasa o simultaneidad | Reintentar después del intervalo Retry-After |
| 503 | DATA_STALE / SERVICE_UNAVAILABLE | Los datos o el servicio no están disponibles temporalmente | Vuelva a intentarlo más tarde y conserve 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}'