Feito também para desenvolvedores.
Agenda histórias, publicações e reels do Instagram a partir do teu próprio código e consulta os resultados. Usa a API REST, o servidor MCP para assistentes de IA e as nossas ferramentas de código aberto, tudo com uma só chave de API.
Início rápido
Cria uma chave de API na página Desenvolvedores da app. Depois, lista as tuas contas do Instagram ligadas. Esta chamada funciona em todos os planos.
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"])Autenticação
Envia a tua chave em cada pedido no cabeçalho Authorization: Bearer sl_live_…. O cabeçalho X-Storylink-Api-Key também funciona.
- Free: lê dados do mês atual.
- Pro: lê todo o teu histórico.
- Business: também cria e agenda conteúdo, com uma chave que tenha «Permitir criar e agendar conteúdo». Escolhes isto ao criar a chave e não o podes alterar depois.
Podes limitar uma chave a um espaço de trabalho. Uma chave sem espaço de trabalho lê todos os espaços de trabalho da tua conta e escreve no mais antigo.
POST /v1/stories, /v1/posts e /v1/reels aceitam um cabeçalho Idempotency-Key com até 255 caracteres. Durante 24 horas, uma nova tentativa com a mesma chave e o mesmo corpo recebe de novo a primeira resposta e não cria nada novo.
Guarda as chaves no teu servidor. Nunca coloques uma chave num navegador ou numa app móvel. Se uma chave for exposta, revoga-a na página Desenvolvedores.
Endpoints
O URL base é https://storylink.pro/api/v1. Os pedidos e as respostas são JSON.
Histórias
- POST
/storiesAgendar - GET
/storiesListar - GET
/stories/{id}Obter um - PATCH
/stories/{id}Atualizar - DELETE
/stories/{id}Cancelar - POST
/stories/{id}/retry-publishRepetir uma publicação falhada - GET
/stories/{id}/insightsEstatísticas
Publicações
- POST
/postsAgendar - GET
/postsListar - GET
/posts/{id}Obter um - PATCH
/posts/{id}Atualizar - DELETE
/posts/{id}Cancelar - POST
/posts/{id}/retry-publishRepetir uma publicação falhada - GET
/posts/{id}/insightsEstatísticas
Reels
- POST
/reelsAgendar - GET
/reelsListar - GET
/reels/{id}Obter um - PATCH
/reels/{id}Atualizar - DELETE
/reels/{id}Cancelar - POST
/reels/{id}/retry-fb-cross-postRepetir a publicação cruzada no Facebook - GET
/reels/{id}/insightsEstatísticas
Multimédia
- POST
/media/uploadsCriar um carregamento
Ligações
- GET
/connectionsListar contas - GET
/connections/{id}Obter uma conta - GET
/connections/{id}/followersHistórico de seguidores
A especificação OpenAPI tem todos os esquemas de pedido e resposta.
Erros
Um pedido falhado devolve um objeto error com um code, uma message e um docs_url. O docs_url aponta para o código nesta lista.
invalid_api_key- A chave de API não é válida.
api_key_revoked- A chave de API foi revogada.
api_key_expired- A chave de API expirou.
plan_not_entitled- O teu plano não inclui este pedido. As escritas exigem Business e os dados anteriores a este mês exigem Pro.
rate_limited- Demasiados pedidos. Espera os segundos indicados no cabeçalho Retry-After.
validation_failed- Falta um parâmetro ou não é válido. O campo param indica qual.
media_not_ready- Um carregamento de multimédia ainda não terminou.
connection_not_eligible- A ligação não pode fazer isto. Por exemplo, um reel sem ligação ao Instagram não pode repetir a publicação cruzada no Facebook.
not_found- Não existe nada com este id, ou a tua chave não o pode ver.
story_not_in_scheduled_state- O estado da história não o permite. Só podes atualizar ou cancelar uma história agendada e só repetir uma falhada.
post_not_in_scheduled_state- O estado da publicação não o permite. Só podes atualizar ou cancelar uma publicação agendada e só repetir uma falhada.
reel_not_in_scheduled_state- O estado do reel não o permite. Só podes atualizar ou cancelar um reel agendado e só repetir um falhado.
workspace_read_only- A conta do Instagram do espaço de trabalho está desligada. As leituras continuam a funcionar, mas as escritas não. Volta a ligar a conta na app.
workspace_suspended- A Storylink suspendeu este espaço de trabalho. Contacta-nos.
idempotency_key_reuse_with_different_body- Já enviaste esta Idempotency-Key antes, com um corpo diferente.
idempotency_request_in_progress- Um pedido com esta Idempotency-Key ainda está em curso.
meta_api_error- A Meta devolveu um erro. O campo message tem os detalhes.
storage_cap_exceeded- O teu armazenamento de multimédia está cheio.
internal_error- Algo falhou do nosso lado. Tenta de novo ou contacta-nos.
Servidor MCP
A Storylink tem um servidor Model Context Protocol em https://storylink.pro/mcp. Liga o Claude ou outro cliente MCP com a tua chave de API. Depois, pergunta pelas visualizações, pelo alcance e pelas respostas das tuas histórias, em todas as tuas contas.
Uma chave só de leitura tem 15 ferramentas. Uma chave que pode escrever tem 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_…" }
}
}
}O código-fonte está em storylink-mcp. Para relatórios do Instagram prontos a usar, adiciona storylink-skills.
Depois pergunta, por exemplo: «Porque é que as visualizações das minhas histórias caíram na semana passada?»
Limites de pedidos
- 60 pedidos por minuto por chave. O servidor MCP usa o mesmo limite.
- Acima do limite, a API devolve
429 rate_limitedcom um cabeçalhoRetry-After. - A multimédia que carregas conta para o armazenamento do teu plano.
- Os limites de publicação do próprio Instagram também se aplicam.
Código aberto
Estes projetos são públicos em github.com/storylinkpro, com licença MIT. Issues e pull requests são bem-vindos.
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);
}A Storylink não é afiliada da Meta Platforms, Inc.
Suporte
Estás a criar algo?
Abre uma issue no GitHub ou escreve-nos.