Referencia de la API
Resumen
La API de SNSTracker te permite gestionar de forma programática feeds y canales de monitorización. Puedes crear feeds (vídeos, publicaciones, etc.) y canales (cuentas, perfiles), actualizarlos para obtener los datos más recientes y recibir notificaciones en tiempo real mediante webhooks.
Autenticación
Todas las solicitudes a la API requieren autenticación usando una clave de API. Incluye tu clave de API en el encabezado X-API-Key.
Cómo obtener tu clave de API:
- Inicia sesión en SNSTracker
- Ve a Settings → API Keys
- Crea una nueva clave de API o usa una existente
- Copia la clave de API (solo la verás una vez cuando se cree)
Endpoints de la API
1. Crear Feeds
Crea feeds de monitorización enviando URLs de feeds (vídeos, publicaciones, etc.).
POST /api/v1/feedsSolicitud
Encabezados:
X-API-Key: Tu clave de API (obligatorio)Content-Type:application/json
Cuerpo de la solicitud:
{
"urls": [
"https://www.tiktok.com/@user/video/1234567890",
"https://www.instagram.com/p/ABC123/"
],
"collectionId": "coll_abc123xyz"
}Parámetros:
urls(obligatorio): Arreglo de URLs de feeds a monitorizar. Máximo 200 URLs por solicitud.collectionId(opcional): ID de la colección donde se agregarán los feeds. Si no se proporciona, se usará la colección predeterminada de tu equipo.
Respuesta
Respuesta exitosa (200):
{
"code": 0,
"message": "ok",
"data": {
"success": 2,
"failed": 0,
"total": 2,
"results": [
{
"index": 0,
"url": "https://www.tiktok.com/@user/video/1234567890",
"platform": "tiktok",
"feedId": "feed_abc123xyz",
"success": true
},
{
"index": 1,
"url": "https://www.instagram.com/p/ABC123/",
"platform": "instagram",
"feedId": "feed_def456uvw",
"success": true
}
],
"errors": [],
"message": "Feeds creados correctamente. Los datos se actualizarán en breve."
}
}Campos de respuesta:
success: Número de feeds creados correctamentefailed: Número de creaciones de feeds fallidastotal: Número total de URLs proporcionadasresults: Arreglo de resultados para cada URLindex: Índice basado en cero en el arreglo de solicitudurl: La URL validada y estandarizadaplatform: Plataforma detectada (tiktok, instagram, youtube, etc.)feedId: Identificador único del feed creadosuccess: Si el feed se creó correctamenteskipped: (opcional) Si el feed se omitió porque ya existeresumed: (opcional) Si se reanudó un feed detenidoerror: (opcional) Mensaje de error si falló la creación
errors: Arreglo de errores para URLs fallidas
Solicitud de ejemplo
curl -X POST https://snstracker.com/api/v1/feeds \
-H "X-API-Key: your-api-key-here" \
-H "Content-Type: application/json" \
-d '{
"urls": [
"https://www.tiktok.com/@user/video/1234567890"
]
}'2. Actualizar Feeds
Actualiza feeds existentes para obtener los datos más recientes de inmediato. Solo se pueden actualizar los feeds con estado "Pending" o "Tracked".
POST /api/v1/feeds/refreshSolicitud
Encabezados:
X-API-Key: Tu clave de API (obligatorio)Content-Type:application/json
Cuerpo de la solicitud:
{
"feedIds": ["feed_abc123xyz", "feed_def456uvw"]
}Parámetros:
feedIds(obligatorio): Arreglo de IDs de feeds a actualizar
Respuesta
Respuesta exitosa (200):
{
"code": 0,
"message": "ok",
"data": {
"success": true,
"feedIds": ["feed_abc123xyz", "feed_def456uvw"],
"total": 2,
"message": "Se actualizaron correctamente 2 feed(s)"
}
}Campos de respuesta:
success: Si la operación de actualización fue exitosafeedIds: Arreglo de IDs de feeds que se actualizarontotal: Número de feeds actualizadosmessage: Mensaje de éxito
Solicitud de ejemplo
curl -X POST https://snstracker.com/api/v1/feeds/refresh \
-H "X-API-Key: your-api-key-here" \
-H "Content-Type: application/json" \
-d '{
"feedIds": ["feed_abc123xyz"]
}'3. Crear Canales
Crea canales de monitorización enviando URLs de canales (perfiles de cuentas, etc.).
Channel pricing note: Xiaohongshu channel tasks are priced separately from the default channel task price and currently cost 10 credits per successful request.
POST /api/v1/channelsSolicitud
Encabezados:
X-API-Key: Tu clave de API (obligatorio)Content-Type:application/json
Cuerpo de la solicitud:
{
"urls": [
"https://www.tiktok.com/@username",
"https://www.instagram.com/username/"
],
"collectionId": "coll_abc123xyz"
}Parámetros:
urls(obligatorio): Arreglo de URLs de canales a monitorizar. Máximo 5 URLs por solicitud.collectionId(opcional): ID de la colección donde se agregarán los canales. Si no se proporciona, se usará la colección predeterminada de tu equipo.
Respuesta
Respuesta exitosa (200):
{
"code": 0,
"message": "ok",
"data": {
"success": 2,
"failed": 0,
"total": 2,
"results": [
{
"index": 0,
"url": "https://www.tiktok.com/@username",
"platform": "tiktok",
"channelId": "channel_abc123xyz",
"success": true
},
{
"index": 1,
"url": "https://www.instagram.com/username/",
"platform": "instagram",
"channelId": "channel_def456uvw",
"success": true
}
],
"errors": [],
"message": "Canales creados correctamente. Los datos se actualizarán en breve."
}
}Campos de respuesta:
success: Número de canales creados correctamentefailed: Número de creaciones de canales fallidastotal: Número total de URLs proporcionadasresults: Arreglo de resultados para cada URLindex: Índice basado en cero en el arreglo de solicitudurl: La URL validada y estandarizadaplatform: Plataforma detectada (tiktok, instagram, youtube, etc.)channelId: Identificador único del canal creadosuccess: Si el canal se creó correctamenteskipped: (opcional) Si el canal se omitió porque ya existeresumed: (opcional) Si se reanudó un canal detenidoerror: (opcional) Mensaje de error si falló la creación
errors: Arreglo de errores para URLs fallidas
Solicitud de ejemplo
curl -X POST https://snstracker.com/api/v1/channels \
-H "X-API-Key: your-api-key-here" \
-H "Content-Type: application/json" \
-d '{
"urls": [
"https://www.tiktok.com/@username"
]
}'4. Actualizar Canales
Actualiza canales existentes para obtener los datos más recientes de inmediato. Solo se pueden actualizar los canales con estado "Pending" o "Tracked".
Channel pricing note: Xiaohongshu channel tasks are priced separately from the default channel task price and currently cost 10 credits per successful request.
POST /api/v1/channels/refreshSolicitud
Encabezados:
X-API-Key: Tu clave de API (obligatorio)Content-Type:application/json
Cuerpo de la solicitud:
{
"channelIds": ["channel_abc123xyz", "channel_def456uvw"]
}Parámetros:
channelIds(obligatorio): Arreglo de IDs de canales a actualizar
Respuesta
Respuesta exitosa (200):
{
"code": 0,
"message": "ok",
"data": {
"success": true,
"channelIds": ["channel_abc123xyz", "channel_def456uvw"],
"total": 2,
"message": "Se actualizaron correctamente 2 canal(es)"
}
}Campos de respuesta:
success: Si la operación de actualización fue exitosachannelIds: Arreglo de IDs de canales que se actualizarontotal: Número de canales actualizadosmessage: Mensaje de éxito
Solicitud de ejemplo
curl -X POST https://snstracker.com/api/v1/channels/refresh \
-H "X-API-Key: your-api-key-here" \
-H "Content-Type: application/json" \
-d '{
"channelIds": ["channel_abc123xyz"]
}'5. Sincronizar Feed
Sincroniza datos del feed directamente desde el servicio de scraping. Este endpoint obtiene los datos más recientes del feed de inmediato y consume créditos tras una sincronización exitosa. Todos los miembros y claves de API del equipo comparten un único límite entre todos los endpoints de sincronización. El límite compartido es de 1 para Starter o sin suscripción vigente, 5 para Standard y 10 para Premium.
⚠️ Nota importante: Este endpoint de sincronización es independiente y NO se integra con la plataforma web. Las operaciones de sincronización:
- NO crearán ni actualizarán registros de feeds en el panel web
- NO aparecerán en tu lista de feeds ni en tus colecciones
- NO activarán webhooks ni notificaciones
- SOLO devolverán los datos obtenidos directamente en la respuesta de la API
Este endpoint está diseñado para recuperación de datos única vía API. Para crear feeds de monitorización persistentes que aparezcan en la plataforma web, usa el endpoint Crear Feeds.
POST /api/v1/feeds/syncSolicitud
Encabezados:
X-API-Key: Tu clave de API (obligatorio)Content-Type:application/json
Cuerpo de la solicitud:
{
"url": "https://www.tiktok.com/@user/video/1234567890"
}Parámetros:
url(obligatorio): URL del feed a sincronizar. Debe ser una cadena válida y no vacía.
Respuesta
Respuesta exitosa (200):
{
"code": 0,
"message": "ok",
"data": {
"success": true,
"url": "https://www.tiktok.com/@user/video/1234567890",
"feedInfo": {
"feed_id": "1234567890",
"platform": 1,
"platform_name": "tiktok",
"url": "https://www.tiktok.com/@user/video/1234567890",
"views": 1000000,
"likes": 200000,
"comments": 1000,
"shares": 2000,
"bookmarks": 200,
"engagement": 512000,
"description": "Descripción del video",
"hashtags": ["tag1", "tag2"],
"publish_at": 1234567890
}
}
}Campos de respuesta:
success: Si la operación de sincronización fue exitosaurl: La URL del feed sincronizadofeedInfo: Información completa del feed incluyendo métricas, descripción, hashtags, etc.
Respuestas de error:
429 Too Many Requests: Se alcanzó el límite compartido del equipo. La solicitud no se pone en cola.400 Bad Request: Créditos insuficientes o URL inválida
Solicitud de ejemplo
curl -X POST https://snstracker.com/api/v1/feeds/sync \
-H "X-API-Key: your-api-key-here" \
-H "Content-Type: application/json" \
-d '{
"url": "https://www.tiktok.com/@user/video/1234567890"
}'6. Sincronizar Canal
Sincroniza datos del canal directamente desde el servicio de scraping. Este endpoint obtiene los datos más recientes del canal de inmediato y consume créditos tras una sincronización exitosa. Todos los miembros y claves de API del equipo comparten un único límite entre todos los endpoints de sincronización. El límite compartido es de 1 para Starter o sin suscripción vigente, 5 para Standard y 10 para Premium.
Channel pricing note: Xiaohongshu channel tasks are priced separately from the default channel task price and currently cost 10 credits per successful request.
⚠️ Nota importante: Este endpoint de sincronización es independiente y NO se integra con la plataforma web. Las operaciones de sincronización:
- NO crearán ni actualizarán registros de canales en el panel web
- NO aparecerán en tu lista de canales ni en tus colecciones
- NO activarán webhooks ni notificaciones
- SOLO devolverán los datos obtenidos directamente en la respuesta de la API
Este endpoint está diseñado para recuperación de datos única vía API. Para crear canales de monitorización persistentes que aparezcan en la plataforma web, usa el endpoint Crear Canales.
POST /api/v1/channels/syncSolicitud
Encabezados:
X-API-Key: Tu clave de API (obligatorio)Content-Type:application/json
Cuerpo de la solicitud:
{
"url": "https://www.tiktok.com/@username"
}Parámetros:
url(obligatorio): URL del canal a sincronizar. Debe ser una cadena válida y no vacía.
Respuesta
Respuesta exitosa (200):
{
"code": 0,
"message": "ok",
"data": {
"success": true,
"url": "https://www.tiktok.com/@username",
"channelInfo": {
"id": "1234567890",
"platform": 1,
"platform_name": "tiktok",
"username": "username",
"nickname": "User Name",
"description": "Descripción del canal",
"followers": 1000000,
"followings": 2000,
"likes": 200000000,
"total_count": 1000,
"track_count": 1000,
"status": 1
}
}
}Campos de respuesta:
success: Si la operación de sincronización fue exitosaurl: La URL del canal sincronizadochannelInfo: Información completa del canal incluyendo métricas, descripción, etc.
Respuestas de error:
429 Too Many Requests: Se alcanzó el límite compartido del equipo. La solicitud no se pone en cola.400 Bad Request: Créditos insuficientes o URL inválida
Solicitud de ejemplo
curl -X POST https://snstracker.com/api/v1/channels/sync \
-H "X-API-Key: your-api-key-here" \
-H "Content-Type: application/json" \
-d '{
"url": "https://www.tiktok.com/@username"
}'7. Sincronizar contenido de un canal
Devuelve una página con un máximo de 12 elementos por solicitud para Instagram y Reels, sin paginación automática. instagram incluye imágenes, vídeos y carruseles; reels devuelve vídeos Reels.
POST /api/v1/channels/feeds/sync
X-API-Key: your-api-key
Content-Type: application/jsonRequest and pagination
{
"platform": "instagram",
"channel_name": "instagram"
}countes un entero positivo opcional que indica la cantidad deseada de elementos en esta página, sin valor predeterminado. Los límites dependen de la plataforma: Instagram y Reels devuelven como máximo 12 elementos por solicitud, y pueden devolver menos. Si se omite, se usa el tamaño de página predeterminado de la plataforma.- Omite
cursorpara la primera página. Para la siguiente, envía elnext_cursoranterior sin modificar y conservaplatformychannel_name. Al terminar:has_more=false,next_cursor=null.
{
"platform": "instagram",
"channel_name": "instagram",
"cursor": "previous-next-cursor"
}Cada página obtenida correctamente cuesta 10 créditos, incluidas las páginas vacías. Solo las solicitudes fallidas son gratuitas; se requiere un saldo inicial de 10 créditos. Comparte la concurrencia del equipo con las demás API de sincronización y no crea registros en el panel.
Response example (placeholder cursor) — reels, lunacut.edit, count=1
{
"code": 0,
"message": "ok",
"data": {
"success": true,
"platform": "reels",
"channel_name": "lunacut.edit",
"channel_url": "https://www.instagram.com/lunacut.edit/",
"requested_count": 1,
"returned_count": 1,
"has_more": true,
"next_cursor": "cursor-from-response",
"items": [
{
"feed_id": "4009169989985582972",
"platform": 5,
"platform_name": "reels",
"type": "video",
"url": "https://www.instagram.com/reel/Dejbt1JPz98/",
"author_username": "lunacut.edit",
"publish_at": 1792150387,
"duration": 70.077,
"view_count": 310475
}
]
}
}platform and channel_name are required. channel_name is the username, not the display name; leading @ is accepted and dots are preserved. requested_count is null when count is omitted; returned_count equals items.length. Unknown metrics/timestamps are null. Posts may lack timestamps and carousel details. items uses the existing feed fields, including video_url, image_urls and cover_url; the example shows only selected fields. publish_at is Unix seconds and duration is seconds. Upstream order is preserved, without a most-popular sorting option; deduplicate across pages by feed_id. Empty pages can still have a next cursor; a carousel counts as one post.
Las métricas de items, como vistas (view_count), Me gusta (like_count), guardados (bookmark_count) y comentarios (comment_count), dependen de la plataforma y de los datos de su listado de contenido. Algunas pueden no estar disponibles. Las métricas no disponibles se devuelven como null, que no significa cero.
Para consultar métricas ausentes del listado, llama por separado a POST /api/v1/feeds/sync usando la url del elemento en el campo url del cuerpo de la solicitud. Esta consulta de detalle se cobra por separado según las reglas de ese endpoint. Los resultados dependen de los datos disponibles en la plataforma; no se garantiza recuperar todas las métricas faltantes.
HTTP: 400 invalid input/cursor or insufficient initial credits; 401 invalid API key; 403 disabled team or inaccessible channel; 402 insufficient credits at settlement; 429 team concurrency limit (Retry-After: 1); 502 upstream/invalid page; 503 service unavailable; 504 timeout.
8. Obtener información adicional del perfil
POST /api/v1/channels/about/syncSolo Instagram y Reels. La entrada es el mismo url obligatorio de /api/v1/channels/sync: https://www.instagram.com/lunacut.edit/ o https://www.instagram.com/lunacut.edit/reels/. No requiere platform, count ni cursor. No acepta publicaciones ni otras plataformas.
curl -X POST https://snstracker.com/api/v1/channels/about/sync \
-H "X-API-Key: your-api-key-here" \
-H "Content-Type: application/json" \
-d '{"url":"https://www.instagram.com/lunacut.edit/"}'Cada solicitud correcta cuesta 80 créditos, incluso con campos null. Los errores no se cobran; se requieren al menos 80 créditos antes de consultar. Comparte la concurrencia del equipo con las demás API síncronas: Starter/sin suscripción activa 1, Standard 5, Premium 10. No crea registros ni envía webhooks.
Ejemplo de respuesta; los campos dependen de la información pública de la cuenta.
{
"code": 0,
"message": "ok",
"data": {
"success": true,
"url": "https://www.instagram.com/lunacut.edit/",
"channelAbout": {
"platform": 6,
"platform_name": "instagram",
"username": "lunacut.edit",
"channel_url": "https://www.instagram.com/lunacut.edit/",
"country": "Brazil",
"country_visible": true,
"date_joined": "2020-05",
"date_joined_text": "May 2020"
}
}
}country: país/región público, solo si country_visible=true; no es la ubicación IP en tiempo real. country_visible: visibilidad o null si se desconoce. date_joined: mes de registro (YYYY-MM) o null si falta/no se reconoce. date_joined_text: texto original de registro o null. No incluye biografía, seguidores ni nombres anteriores.
400 / 401 / 402 / 403 / 429 (Retry-After: 1) / 502 / 503 / 504.
Integración de Webhooks
SNSTracker admite webhooks para recibir notificaciones en tiempo real cuando el contenido monitoreado cumple tus umbrales configurados. Puedes configurar webhooks para recibir notificaciones sobre:
- Actualizaciones de feeds: Cuando las visualizaciones, la interacción (me gusta + comentarios + compartidos) aumentan según tu umbral
- Actualizaciones de canales: Cuando los seguidores, seguidos o me gusta aumentan según tu umbral
Configurar Webhooks
- Configura los destinos de webhook en la configuración de tus Colecciones
- Habilita las notificaciones en la configuración de tu Colección
- Establece los umbrales para las métricas que quieres monitorizar
Para instrucciones detalladas de configuración de webhooks, consulta la Guía de configuración de Webhooks.
Respuestas de error
Todos los endpoints pueden devolver las siguientes respuestas de error:
401 Unauthorized - Falta la clave de API
{
"code": -1,
"message": "X-API-Key header is required"
}401 Unauthorized - Clave de API inválida
{
"code": -1,
"message": "Invalid API key"
}400 Bad Request - Entrada inválida
{
"code": -1,
"message": "Invalid request: urls must be an array"
}400 Bad Request - Demasiadas URLs (Crear Feeds)
{
"code": -1,
"message": "Maximum 200 URLs allowed per request"
}400 Bad Request - Demasiadas URLs (Crear Canales)
{
"code": -1,
"message": "Maximum 200 URLs allowed per request"
}400 Bad Request - Créditos insuficientes
{
"code": -1,
"message": "Insufficient credits. Required: 10, Available: 5"
}429 Too Many Requests - Concurrencia de sincronización del equipo
{
"code": -1,
"message": "Maximum concurrent sync requests (1) reached for this team. Currently active: 1. Wait for a request to complete, or contact official support to increase the limit."
}403 Forbidden - Colección inválida
{
"code": -1,
"message": "Collection not found or does not belong to your team"
}404 Not Found
{
"code": -1,
"message": "No feeds found"
}o
{
"code": -1,
"message": "No channels found"
}Ejemplos de uso
Ejemplo en Python - Crear Feeds
import requests
url = "https://snstracker.com/api/v1/feeds"
headers = {
"X-API-Key": "your-api-key-here",
"Content-Type": "application/json"
}
data = {
"urls": [
"https://www.tiktok.com/@user/video/1234567890",
"https://www.instagram.com/p/ABC123/"
]
}
response = requests.post(url, json=data, headers=headers)
result = response.json()
if result["code"] == 0:
print(f"Successfully created {result['data']['success']} feeds")
for feed in result["data"]["results"]:
print(f" - {feed['url']}: {feed['feedId']}")
else:
print(f"Error: {result['message']}")Ejemplo en JavaScript - Actualizar Feeds
const response = await fetch('https://snstracker.com/api/v1/feeds/refresh', {
method: 'POST',
headers: {
'X-API-Key': 'your-api-key-here',
'Content-Type': 'application/json',
},
body: JSON.stringify({
feedIds: ['feed_abc123xyz', 'feed_def456uvw'],
}),
});
const result = await response.json();
if (result.code === 0) {
console.log(`Successfully refreshed ${result.data.total} feeds`);
result.data.feedIds.forEach((feedId) => {
console.log(` - ${feedId}`);
});
} else {
console.error(`Error: ${result.message}`);
}Notas importantes
-
Validación de URLs: Todas las URLs se validan automáticamente antes de la creación. Las URLs inválidas se rechazarán.
-
Elementos duplicados: Si un elemento con la misma URL ya existe en la colección:
- Si está activo, se omitirá (marcado con
skipped: true) - Si está detenido, se reanudará (marcado con
resumed: true)
- Si está activo, se omitirá (marcado con
-
Recolección de datos: Después de una creación exitosa, los elementos se ponen en cola para la recolección de datos. Los datos estarán disponibles poco después de la creación.
-
Estado de actualización: Solo se pueden actualizar los elementos con estado "Pending" o "Tracked". Los elementos con otros estados se filtrarán.
-
Créditos: Asegúrate de tener suficientes créditos antes de hacer solicitudes. Las operaciones de sincronización consumen créditos inmediatamente tras una recuperación de datos exitosa. Xiaohongshu channel tasks are priced separately and currently cost 10 credits per successful request.
/api/v1/channels/feeds/sync: Cada página obtenida correctamente cuesta 10 créditos, incluidas las páginas vacías. Solo las solicitudes fallidas son gratuitas; se requiere un saldo inicial de 10 créditos. Comparte la concurrencia del equipo con las demás API de sincronización y no crea registros en el panel./api/v1/channels/about/sync: Cada solicitud correcta cuesta 80 créditos, incluso con camposnull. Los errores no se cobran; se requieren al menos 80 créditos antes de consultar. Comparte la concurrencia del equipo con las demás API síncronas: Starter/sin suscripción activa 1, Standard 5, Premium 10. No crea registros ni envía webhooks. -
Concurrencia de sincronización del equipo (
/api/v1/feeds/sync+/api/v1/channels/sync+/api/v1/channels/feeds/sync+/api/v1/channels/about/sync): Todos los miembros y claves de API del equipo comparten un único límite entre todos los endpoints de sincronización. El límite compartido es de 1 para Starter o sin suscripción vigente, 5 para Standard y 10 para Premium. El límite sigue la suscripción vigente; una configuración específica del equipo establecida por el soporte oficial tiene prioridad. Para aumentar el límite del equipo, contacta con el soporte oficial. -
Sincronizar vs Crear: Los endpoints de sincronización (
/api/v1/feeds/syncy/api/v1/channels/sync+/api/v1/channels/feeds/sync+/api/v1/channels/about/sync) son independientes y NO se integran con la plataforma web. Solo devuelven datos en la respuesta de la API y no crean registros en el panel. Para crear elementos de monitorización persistentes que aparezcan en la plataforma web, usa los endpoints de Crear (/api/v1/feedsy/api/v1/channels) en su lugar. -
Reintentos: Tras un 429, espera a que termine una solicitud activa y reintenta con intervalos crecientes respetando
Retry-After. Tras un 503, reintenta más tarde. -
Plataformas compatibles: TikTok, Instagram, YouTube y otras plataformas principales de redes sociales.
Solución de problemas
Problema: "X-API-Key header is required"
Solución: Asegúrate de incluir el encabezado X-API-Key en tu solicitud.
Problema: "Invalid API key"
Solución: Verifica que tu clave de API sea correcta. Puedes crear una nueva en Settings → API Keys.
Problema: "Maximum URLs allowed per request"
Solución: Divide tus URLs en varias solicitudes. Los feeds permiten hasta 200 URLs, los canales permiten hasta 5 URLs por solicitud.
Problema: "No collection found"
Solución: Crea una colección primero en el panel, o especifica un ID de colección existente.
Problema: "Insufficient credits"
Solución: Compra más créditos o revisa tu plan de suscripción.
Problema: "No refreshable items found"
Solución: Solo se pueden actualizar los elementos con estado "Pending" o "Tracked". Revisa el estado de tus elementos.
Problema: Algunas URLs fallan la validación
Solución: Revisa el arreglo errors en la respuesta para ver mensajes de error específicos. Asegúrate de que las URLs sean de plataformas compatibles y de acceso público.