01 Visión general
La YBOT Partner Data API sirve el dataset propio de social listening de vídeo de YBOT — las menciones de marca y producto que YBOT detecta y analiza en vídeo disponible públicamente en YouTube, TikTok e Instagram — como un pequeño conjunto de operaciones JSON de solo lectura. Recibes los insights derivados de YBOT, no los datos de las plataformas. Tus propios sistemas, o un agente de IA que use las operaciones como tools, la llaman directamente; nadie tiene que abrir un dashboard.
Todo vive bajo /v1, acepta y devuelve JSON, y está protegido por una API key con el scope data:search. La salida está siempre agregada y filtrada por lista de permitidos: los datos personales — nombres, citas literales, fechas de nacimiento — nunca se devuelven.
POST /v1/aggregate
Agrupa por una dimensión, clasifica por una métrica.
POST /v1/search
Documentos de ejemplo, con lista de permitidos y tope.
POST /v1/creators
Clasifica creadores con demografía agregada.
POST /v1/co-mentions
Vídeos/creadores que mencionan N marcas juntas.
POST /v1/sector
Cuota de voz competitiva a lo largo del tiempo.
GET /v1/schema
Esquema autodescriptivo de cada operación.
02 Inicio rápido
Tres pasos hasta tu primer resultado de cuota de voz competitiva.
Consigue una API key
Pide a tu contacto en YBOT una key con scope data:search. Lleva asociados el límite de peticiones y la cuota mensual de tu plan.
Llama a una operación
Envía un POST con JSON a cualquier endpoint /v1 con tu key en la cabecera X-API-Key.
Lee el JSON
Cada respuesta es JSON agregado y filtrado por lista de permitidos — llévalo directamente a tu modelo, dashboard o agente.
curl -X POST https://partners.yourbrandontime.com/v1/sector \
-H "X-API-Key: pk_live_your_key_here" -H "Content-Type: application/json" \
-d '{ "brands": [ {"label":"Repsol","terms":["Repsol"]},
{"label":"Iberdrola","terms":["Iberdrola"]} ],
"from_date":"2026-01-01", "to_date":"2026-06-30" }'
03 Autenticación
Envía tu key en la cabecera X-API-Key en cada petición. Las keys llevan un scope y un plan; el plan fija un límite de peticiones por ventana fija y una cuota mensual de peticiones. Una key ausente o sin el scope adecuado se rechaza antes de ejecutar ninguna consulta.
curl https://partners.yourbrandontime.com/v1/schema \
-H "X-API-Key: pk_live_your_key_here"
Algunas keys son access_level: "raw" (conjuntos de resultados de search más grandes); la mayoría son aggregate (ejemplos con tope de 10).
04 Modelo de datos
Tres índices respaldan todas las operaciones. Filtras, agrupas y clasificas sobre sus campos declarados; una consulta que nombre un campo fuera de la lista de permitidos se rechaza. La salida es siempre un subconjunto depurado.
siv_business_ideas
Menciones de marca y producto que YBOT extrae con un LLM de vídeo disponible públicamente — el dataset analítico principal de YBOT (sentimiento, marcas, componentes, temas, oportunidades).
- Filtro
- brand_namecomponentstopicscategoryplatformsentimentchannel_nameupload_date
- Agrupar por
- brand_namecategorycomponentschannel_nameplatformsentimentvideo_id
- Métricas
- sentiment_scoreestimated_value_usd
siv_content_creator
Perfiles de creador/canal: tamaño de audiencia, engagement, nichos y demografía de audiencia agregada (género/edad/país/idioma). Sin PII a nivel individual.
- Filtro
- platformcountrycategoriesdominant_genderdominant_age_rangesubscriber_countengagement_rate_viewers
- Agrupar por
- platformcountrycategoriesdominant_genderdominant_age_range
- Métricas
- subscriber_countview_countengagement_rate_viewersaudience_sentiment
siv_info
El catálogo de referencia de vídeos de YBOT — las señales de alcance y engagement que YBOT registra por vídeo (views, likes, comentarios, duración, tags), usadas para ponderar el alcance. La marca y el sentimiento viven en siv_business_ideas.
- Filtro
- channel_nameplatformcategorytagsvideo_idupload_date
- Agrupar por
- channel_nameplatformcategorytags
- Métricas
- viewslikescommentsduration
Tipos de filtro: term (exacto), range (numérico {gte,lte}), date_range (fechas ISO {gte,lte}). Las métricas combinan un tipo — count · sum · avg · min · max — con un campo de métrica.
05 aggregate
La primitiva central para «preguntas abiertas»: agrupa un índice por una dimensión y clasifica los buckets por una métrica. «¿Qué creadores hablan más de retinol?» → agrupa siv_business_ideas por channel_name, filtra components: "retinol", cuenta.
| Campo | Tipo | Descripción | |
|---|---|---|---|
| index | string | obligatorio | Uno de los tres índices. |
| group_by | string | obligatorio | Una dimensión de agrupación declarada para el índice. |
| metric | object | opcional | { "type": "count" } (por defecto) o { "type":"avg|sum|min|max", "field":"<metric_field>" }. |
| filters | object | opcional | Campo → valor (term), {gte,lte} (range/date). |
| size | number | opcional | Número de buckets. Por defecto 10. |
| order | "asc"|"desc" | opcional | Por defecto desc. |
curl -X POST https://partners.yourbrandontime.com/v1/aggregate \
-H "X-API-Key: pk_live_your_key_here" -H "Content-Type: application/json" \
-d '{ "index":"siv_business_ideas", "group_by":"channel_name",
"filters":{ "components":"retinol" },
"metric":{ "type":"avg", "field":"sentiment_score" }, "size":10 }'
→ { "matched_documents":1284, "buckets":[
{ "key":"Hyram", "count":61, "metric":0.42, "metric_type":"avg:sentiment_score" } ] }
06 search
Documentos de ejemplo — solo campos de la lista de permitidos, con tope de 10 salvo que tu key sea access_level: "raw". q es búsqueda de texto completo sobre los campos de texto libre del índice (p. ej. título/descripción de siv_info).
| Campo | Tipo | Descripción | |
|---|---|---|---|
| index | string | obligatorio | Uno de los tres índices. |
| filters | object | opcional | La misma gramática de filtros que aggregate. |
| q | string | opcional | Consulta de texto completo sobre los campos de texto libre del índice. |
| sort_field | string | opcional | Un campo de métrica numérico o un campo de fecha del índice. |
| sort_order | "asc"|"desc" | opcional | Por defecto desc. |
| size | number | opcional | Por defecto 10. Con tope de 10 para keys no raw. |
context parafraseado — nunca la transcripción literal ni ningún identificador personal.07 creators
Un wrapper de conveniencia sobre search en siv_content_creator: creadores clasificados con demografía de audiencia agregada. Filtra por nicho, geografía o tamaño; ordena por cualquier métrica de creador.
| Campo | Tipo | Descripción | |
|---|---|---|---|
| filters | object | opcional | p. ej. { "categories":"beauty", "subscriber_count":{"gte":100000} }. |
| sort_field | string | opcional | Por defecto subscriber_count. Cualquier métrica de creador. |
| sort_order | "asc"|"desc" | opcional | Por defecto desc. |
| size | number | opcional | Por defecto 10 (con el mismo tope que search). |
Devuelve perfiles de creador con subscriber_count, engagement_rate_viewers y las distribuciones agregadas viewer_age_distribution / viewer_gender_distribution / viewer_country_distribution.
08 co-mentions
Encuentra vídeos o canales que mencionan todas las marcas indicadas juntas — la primitiva de co-ocurrencia detrás de «quién habla de A y de B». Devuelve solo IDs + recuentos (una agregación), nunca documentos en bruto.
| Campo | Tipo | Descripción | |
|---|---|---|---|
| values | string[] | obligatorio | De 2 a 5 valores que deben co-ocurrir todos. |
| index | string | opcional | Por defecto siv_business_ideas. |
| field | string | opcional | Campo en el que viven los valores. Por defecto brand_name. |
| group_by | string | opcional | Dimensión de bucket. Por defecto channel_name (usa video_id para vídeos). |
| size | number | opcional | Por defecto 10. |
curl -X POST https://partners.yourbrandontime.com/v1/co-mentions \
-H "X-API-Key: pk_live_your_key_here" -H "Content-Type: application/json" \
-d '{ "values":["Nike","IKEA"], "group_by":"video_id" }'
→ { "results":[ { "key":"vid_88", "total_mentions":7, "matched_values":2 } ] }
09 sector · Share of Voice
Clasifica un conjunto competitivo de marcas según la presencia de cada una en vídeo frente al resto, mes a mes — volumen, alcance, sentimiento y temas. Este es el endpoint detrás del informe sectorial de Share of Voice (cuota de voz).
| Campo | Tipo | Descripción | |
|---|---|---|---|
| brands | array | obligatorio | El conjunto competitivo — de 1 a 30 marcas. |
| brands[].label | string | obligatorio | Nombre para mostrar en la salida. |
| brands[].terms | string[] | obligatorio | Frases que cuentan como mención de esta marca. |
| brands[].must_context | string[] | opcional | Desambigua un término ruidoso (p. ej. ["energy","fuel"] para «BP»). |
| brands[].exact | boolean | opcional | Exige coincidencia exacta de la frase. |
| from_date / to_date | string | obligatorio | YYYY-MM-DD. Ventana ≤ 24 meses. |
{ "brands":[ {
"label":"Repsol", "coverage":"ok", "low_confidence":false,
"totals":{ "unique_videos":760, "views":26900000 },
"series":[ { "month":"2026-01",
"unique_videos":152, // 1 por vídeo
"mentions":158, // cada mención (100 en un vídeo = 100)
"views":8673694, "sentiment":0.061,
"volume_sov":76.38, // % de cuota por vídeos únicos
"reach_sov":97.27, // % de cuota por views
"top_topics":[ { "topic":"energy", "count":50 } ] } ] } ],
"meta":{ "from":"2026-01-01", "to":"2026-06-30",
"caps":{ "max_brands":30, "video_cap":3000, "low_coverage":20 } } }
coverage: "low" (menos de caps.low_coverage vídeos) antes de citar una marca pequeña.10 schema
Una descripción legible por máquina de cada operación, los índices consultables, sus campos y valores permitidos — la API se autodocumenta en tiempo de ejecución y un agente puede usar las operaciones como tools sin codificar el contrato a mano.
11 Uso de la API desde un agente de IA
La API es deliberadamente amigable para agentes: un puñado de operaciones tipadas y de solo lectura con guardarraíles estrictos y un contrato legible por máquina. El cableado previsto — el mismo patrón que usa el DAI de Epsilon — es:
Arranca desde /v1/schema
Al inicio de la sesión, haz GET /v1/schema y genera un tool por operación a partir de él. El esquema lista cada índice, campo filtrable, dimensión de agrupación y métrica — sin contrato codificado a mano que pueda quedarse obsoleto.
Expón las operaciones como tools
Cinco tools cubren toda la superficie: aggregate (preguntas abiertas), search (ejemplos), creators, co_mentions y sector (cuota de voz competitiva). Las respuestas son agregados compactos, así que caben cómodamente en la ventana de contexto de un LLM.
Deja que los errores guíen la autocorrección
Los rechazos de los guardarraíles vuelven como 400 con un mensaje que nombra el campo exacto y los valores permitidos (p. ej. «index 'x' is not allowed. Allowed: […]»). Devuelve el mensaje al modelo y reintenta — el bucle converge sin ayuda humana.
{
"name": "sector_share_of_voice",
"description": "Rank a set of brands by share of voice in video (volume, reach, sentiment, topics) over a date window.",
"input_schema": {
"type": "object",
"properties": {
"brands": { "type": "array", "maxItems": 30,
"items": { "type": "object", "required": ["label","terms"] } },
"from_date": { "type": "string", "format": "date" },
"to_date": { "type": "string", "format": "date" }
},
"required": ["brands","from_date","to_date"]
}
} // handler del tool = POST /v1/sector con el input del tool como cuerpo JSON
/v1/schema por sesión, no por llamada. Una petición por pregunta gana a muchas sondas pequeñas: aggregate con el group_by adecuado suele responder en una sola llamada, y sector devuelve la foto competitiva completa de una vez.
12 Recetas
Preguntas habituales y la llamada que responde a cada una.
Share of Voice sectorial /v1/sector
Clasifica un conjunto competitivo por presencia en vídeo a lo largo del tiempo — la respuesta en vídeo a «¿quién es dueño de la conversación en nuestra categoría?»
brands[]from_dateto_dateTop creadores para un tema /v1/aggregate
Agrupa siv_business_ideas por channel_name, filtra por components o topics, clasifica por recuento o sentimiento medio.
Creadores por nicho y audiencia /v1/creators
Filtra siv_content_creator por categoría, país o tamaño; obtén distribuciones agregadas de edad/género/país para targeting.
Sentimiento a lo largo del tiempo /v1/aggregate
Filtra una marca, agrupa por sentiment (o usa el series[].sentiment mensual de /v1/sector) para ver la tendencia de percepción en la ventana.
Patrones de partnership y co-mención /v1/co-mentions
Encuentra los vídeos o canales que mencionan dos o más marcas juntas — colaboraciones, comparativas, encuadre competitivo.
values: [A, B]group_by: video_idProfundiza en las marcas de un vídeo /v1/aggregate
Agrupa por brand_name con un filtro de video_id para ver todas las marcas que menciona un vídeo concreto.
13 Glosario
- Share of Voice (SoV)
- La presencia de una marca como porcentaje del conjunto monitorizado durante un periodo — su «cuota de voz». Se reporta de dos formas: por volumen y por alcance.
- SoV por volumen
- Cuota medida por vídeos únicos — cada vídeo cuenta una vez, aparezca la marca las veces que aparezca.
- SoV por alcance
- Cuota medida por views — pondera cada mención por cuántas personas han podido verla.
- Mención vs. vídeo único
- Una
mentioncuenta cada aparición (100 en un vídeo = 100); ununique_videocuenta el vídeo una sola vez. - Puntuación de sentimiento
- Tono medio de las menciones, de −1 (negativo) a +1 (positivo).
- Co-mención
- Dos o más marcas apareciendo juntas en el mismo vídeo o canal — una señal de comparación, colaboración o encuadre competitivo.
- Coverage (cobertura)
lowcuando una marca tiene demasiado pocos vídeos para que sus porcentajes sean estadísticamente fiables.- Tema (topic)
- Un tema extraído por LLM y asociado a una mención (p. ej.
energy,oil-and-gas), con un recuento de frecuencia.
14 Preguntas frecuentes
¿Son estos datos de YouTube, TikTok o Instagram?
¿Qué es la API de Social Listening de Vídeo de YBOT?
¿Qué plataformas cubre?
¿Cómo se calcula la cuota de voz (Share of Voice)?
¿Dónde se alojan los datos? ¿Cumple con el RGPD?
¿Puedo obtener transcripciones de vídeo en bruto o datos personales?
¿Cómo consigo una API key?
¿Puedo usarla con un agente de IA?
15 Errores
Los errores son JSON con un message legible. Las violaciones de guardarraíl nombran el campo exacto que hay que corregir.
| Estado | Cuándo | Solución |
|---|---|---|
| 400 | Falló un guardarraíl — índice/campo no válido, >30 marcas, ventana >24 meses, faltan terms. | Lee message; corrige el campo indicado. |
| 401 | Falta la cabecera X-API-Key. | Envía la cabecera. |
| 403 | La key no tiene el scope data:search. | Usa una key con scope de datos. |
| 429 | Límite de peticiones o cuota mensual superados. | Aplica backoff; mejora el plan. |
| 503 | Backend de datos temporalmente no disponible. | Reintenta con backoff. |
16 Límites y cuota
| Límite | Valor |
|---|---|
| Marcas por petición de sector | ≤ 30 |
| Ventana de fechas de sector | ≤ 24 meses |
| Buckets / tamaño de resultado | tope por plan (search ≤ 10 para keys no raw) |
| Límite de peticiones y cuota mensual | Por plan (ventana fija + tope mensual) |
| Timeout de la petición de sector | ~20 s |
Los datos se calculan y almacenan en la UE (Scaleway) — sin nube estadounidense en el camino. La API devuelve únicamente agregados y campos de la lista de permitidos; los datos personales en bruto nunca salen.