Hecho también para desarrolladores.
Programa historias, publicaciones y reels de Instagram desde tu propio código y consulta sus resultados. Usa la API REST, el servidor MCP para asistentes de IA y nuestras herramientas de código abierto, todo con una sola clave de API.
Inicio rápido
Crea una clave de API en la página Desarrolladores de la app. Después, lista tus cuentas de Instagram conectadas. Esta llamada funciona en todos los planes.
curl https://storylink.pro/api/v1/connections \
-H "Authorization: Bearer sl_live_…"
# → 200 OK
# { "data": [{ "id": "cnx_…", "platform": "instagram", "username": "…", "status": "active" }] }const res = await fetch("https://storylink.pro/api/v1/connections", {
headers: { Authorization: `Bearer ${process.env.STORYLINK_API_KEY}` },
});
const { data } = await res.json();
// data[0].username, data[0].statusimport os, requests
r = requests.get(
"https://storylink.pro/api/v1/connections",
headers={"Authorization": f"Bearer {os.environ['STORYLINK_API_KEY']}"},
)
for c in r.json()["data"]:
print(c["username"], c["status"])Autenticación
Envía tu clave en cada solicitud en el encabezado Authorization: Bearer sl_live_…. El encabezado X-Storylink-Api-Key también funciona.
- Free: lee datos del mes actual.
- Pro: lee todo tu historial.
- Business: además, crea y programa contenido con una clave que tenga «Permitir crear y programar contenido». Lo eliges al crear la clave y no puedes cambiarlo después.
Puedes limitar una clave a un espacio de trabajo. Una clave sin espacio de trabajo lee todos los espacios de trabajo de tu cuenta y escribe en el más antiguo.
POST /v1/stories, /v1/posts y /v1/reels aceptan un encabezado Idempotency-Key de hasta 255 caracteres. Durante 24 horas, un reintento con la misma clave y el mismo cuerpo recibe de nuevo la primera respuesta y no crea nada nuevo.
Guarda las claves en tu servidor. Nunca pongas una clave en un navegador ni en una app móvil. Si una clave se filtra, revócala en la página Desarrolladores.
Endpoints
La URL base es https://storylink.pro/api/v1. Las solicitudes y las respuestas son JSON.
Historias
- POST
/storiesProgramar - GET
/storiesListar - GET
/stories/{id}Obtener uno - PATCH
/stories/{id}Actualizar - DELETE
/stories/{id}Cancelar - POST
/stories/{id}/retry-publishReintentar una publicación fallida - GET
/stories/{id}/insightsEstadísticas
Publicaciones
- POST
/postsProgramar - GET
/postsListar - GET
/posts/{id}Obtener uno - PATCH
/posts/{id}Actualizar - DELETE
/posts/{id}Cancelar - POST
/posts/{id}/retry-publishReintentar una publicación fallida - GET
/posts/{id}/insightsEstadísticas
Reels
- POST
/reelsProgramar - GET
/reelsListar - GET
/reels/{id}Obtener uno - PATCH
/reels/{id}Actualizar - DELETE
/reels/{id}Cancelar - POST
/reels/{id}/retry-fb-cross-postReintentar la publicación cruzada en Facebook - GET
/reels/{id}/insightsEstadísticas
Multimedia
- POST
/media/uploadsCrear una subida
Conexiones
- GET
/connectionsListar cuentas - GET
/connections/{id}Obtener una cuenta - GET
/connections/{id}/followersHistorial de seguidores
La especificación OpenAPI incluye todos los esquemas de solicitud y respuesta.
Errores
Una solicitud fallida devuelve un objeto error con un code, un message y un docs_url. El docs_url enlaza al código en esta lista.
invalid_api_key- La clave de API no es válida.
api_key_revoked- Alguien revocó la clave de API.
api_key_expired- La clave de API caducó.
plan_not_entitled- Tu plan no incluye esta solicitud. Las escrituras requieren Business y los datos anteriores a este mes requieren Pro.
rate_limited- Demasiadas solicitudes. Espera los segundos que indica el encabezado Retry-After.
validation_failed- Falta un parámetro o no es válido. El campo param indica cuál.
media_not_ready- Una subida de multimedia aún no ha terminado.
connection_not_eligible- La conexión no puede hacer esto. Por ejemplo, un reel sin conexión de Instagram no puede reintentar su publicación cruzada en Facebook.
not_found- No existe nada con este id, o tu clave no puede verlo.
story_not_in_scheduled_state- El estado de la historia no lo permite. Solo puedes actualizar o cancelar una historia programada, y solo reintentar una fallida.
post_not_in_scheduled_state- El estado de la publicación no lo permite. Solo puedes actualizar o cancelar una publicación programada, y solo reintentar una fallida.
reel_not_in_scheduled_state- El estado del reel no lo permite. Solo puedes actualizar o cancelar un reel programado, y solo reintentar uno fallido.
workspace_read_only- La cuenta de Instagram del espacio de trabajo está desconectada. Las lecturas siguen funcionando, pero las escrituras no. Vuelve a conectar la cuenta en la app.
workspace_suspended- Storylink suspendió este espacio de trabajo. Contáctanos.
idempotency_key_reuse_with_different_body- Ya enviaste este Idempotency-Key antes, con un cuerpo distinto.
idempotency_request_in_progress- Una solicitud con este Idempotency-Key aún está en curso.
meta_api_error- Meta devolvió un error. El campo message tiene los detalles.
storage_cap_exceeded- Tu almacenamiento multimedia está lleno.
internal_error- Algo falló por nuestra parte. Inténtalo de nuevo o contáctanos.
Servidor MCP
Storylink ejecuta un servidor Model Context Protocol en https://storylink.pro/mcp. Conecta Claude u otro cliente MCP con tu clave de API. Después, pregunta por las visualizaciones, el alcance y las respuestas de tus historias, en todas tus cuentas.
Una clave de solo lectura tiene 15 herramientas. Una clave con permiso de escritura tiene 28.
claude mcp add --transport http storylink https://storylink.pro/mcp \
--header "Authorization: Bearer sl_live_…"{
"mcpServers": {
"storylink": {
"command": "npx",
"args": ["-y", "storylink-mcp"],
"env": { "STORYLINK_API_KEY": "sl_live_…" }
}
}
}El código fuente está en storylink-mcp. Para informes de Instagram listos para usar, añade storylink-skills.
Después pregunta, por ejemplo: «¿Por qué bajaron las visualizaciones de mis historias la semana pasada?»
Límites de uso
- 60 solicitudes por minuto por clave. El servidor MCP usa el mismo límite.
- Por encima del límite, la API devuelve
429 rate_limitedcon un encabezadoRetry-After. - Los archivos que subes cuentan para el almacenamiento de tu plan.
- También se aplican los límites de publicación de Instagram.
Código abierto
Estos proyectos son públicos en github.com/storylinkpro, con licencia MIT. Las issues y pull requests son bienvenidas.
npx @storylinkpro/instagram-stories-api stories
import { createClient } from "@storylinkpro/instagram-stories-api";
const ig = createClient({
accessToken: process.env.INSTAGRAM_ACCESS_TOKEN,
igUserId: process.env.INSTAGRAM_USER_ID,
});
for (const story of await ig.stories()) {
const { views, reach, replies } = await ig.storyInsights(story.id);
}Storylink no está afiliado a Meta Platforms, Inc.
Soporte
¿Estás creando algo?
Abre una issue en GitHub o escríbenos.