Rayrovisk Agency API

API interna para sincronização e análise do Instagram profissional da Rayra.

Autenticação

Os endpoints /v1/* exigem o token de sessão da pessoa autenticada, no header:

Authorization: Bearer <token>

O token é o mesmo emitido no login do produto. Nunca coloque o token na URL ou compartilhe seu valor.

Uso rápido

cd /Users/roberto/Projects/rayrovisk-project/platform

# Verificar o servidor
curl https://api-staging.rayrovisk.com/health

# As chamadas abaixo exigem o token de sessão da pessoa autenticada.

# Verificar a conexão com o Instagram
curl https://api-staging.rayrovisk.com/v1/connections/instagram \
  -H "Authorization: Bearer $ACCESS_TOKEN"

# Sincronizar perfil, publicações e engajamento
curl -X POST https://api-staging.rayrovisk.com/v1/sync \
  -H "Authorization: Bearer $ACCESS_TOKEN"

# Consultar o perfil
curl https://api-staging.rayrovisk.com/v1/profile \
  -H "Authorization: Bearer $ACCESS_TOKEN"

# Consultar as 25 publicações mais recentes
curl "https://api-staging.rayrovisk.com/v1/media?limit=25&offset=0" \
  -H "Authorization: Bearer $ACCESS_TOKEN"

# Consultar o resumo analítico
curl "https://api-staging.rayrovisk.com/v1/analytics/summary" \
  -H "Authorization: Bearer $ACCESS_TOKEN"

Endpoints

MétodoRotaAcessoDescrição
GET/healthPúblicoConfirma que o servidor está ativo.
GET/v1/connections/instagramBearerMostra conta conectada, permissões e expiração.
POST/v1/connections/instagram/authorizeBearerInicia a autorização OAuth do Instagram para a pessoa autenticada.
POST/v1/connections/instagram/refreshBearer + assinaturaRenova o token de longa duração.
POST/v1/syncBearer; assinatura da segunda vezBusca todas as páginas de mídia e atualiza o engajamento.
GET/v1/profileBearerRetorna o último snapshot do perfil.
GET/v1/media?limit=25&offset=0BearerRetorna mídias com curtidas, comentários, views, alcance, salvos e compartilhamentos. Aceita de 1 a 500 itens; use offset para percorrer o total em páginas.
GET/v1/analytics/summaryBearerCalcula totais, médias, taxas, cobertura, desempenho por formato e rankings de publicações.
GET/v1/sync-runs?limit=25&offset=0BearerLista as sincronizações da própria pessoa, da mais recente para a mais antiga, com horários, contagens e a falha já higienizada.
GET/v1/findingsBearerRetorna os achados ativos da própria pessoa, com as publicações em que cada um se apoia.
GET/v1/findings/:findingIdBearerRetorna um achado da própria pessoa em qualquer situação, inclusive dispensado.
GET/v1/public-profile?handle=usuarioBearerBusca pública limitada de um perfil do Instagram (ADR-0020), sem exigir assinatura. Sujeita a limite por pessoa e a uma chave de desativação.
GET/v1/public-read/profile?handle=usuarioPúblicoLeitura antes da conta (ADR-0065): o perfil e os números calculados das publicações públicas mais recentes. Limite por endereço, teto diário e chave de desativação.
GET/v1/public-read/text?handle=usuarioPúblicoO texto da mesma leitura, escrito por um modelo sobre legendas, capas e os números. Só depois da rota acima.
GET/POST/webhooks/metaMetaVerificação e recebimento de webhooks assinados.
POST/auth/instagram/deauthorizeMetaQuem remove o app no Instagram: revoga a conexão e apaga o token.
POST/auth/instagram/data-deletionMetaPedido de exclusão feito na Meta: apaga os dados do Instagram e devolve o código de confirmação.
GET/auth/instagram/data-deletion/:codePúblicoSituação de um pedido de exclusão, pelo código de confirmação.

Resposta da sincronização

{
  "profileMediaCount": 260,
  "mediaCount": 260,
  "mediaInsightsRequested": 260,
  "mediaInsightsCount": 260,
  "mediaInsightsErrors": 0,
  "mediaInsightsSkipped": 0,
  "storedMediaCount": 260,
  "storedMediaWithInsightsCount": 260
}

Na primeira carga, o sistema busca o histórico disponível. Nas próximas sincronizações, atualiza os 50 posts mais recentes e preserva os snapshots históricos já coletados.