S
SocialAPI

API de Redes Sociais,
Simples e Segura.

Publique e agende conteúdo no Facebook, Instagram, YouTube e TikTok com uma única API. Segurança HMAC robusta para proteger suas requisições.

Atualizado: 2025-08-20 20:31 UTC

Comece a Usar em Minutos

Siga estes 3 passos para configurar e fazer sua primeira chamada na API.

URL Base da API (Endpoint)

https://social-api.meuapp.online/
1

Solicite sua API Key e Secret

Entre em contato conosco pelo WhatsApp para solicitar suas credenciais de acesso. Você receberá uma API Key (identificador) e um Secret (chave secreta) para autenticar suas requisições.

Solicitar Credenciais via WhatsApp

Você receberá algo como:

# Guarde estas chaves em um local seguro
API_KEY_ID = "cliente_exemplo_a1b2c3d4"
SECRET_HEX = "abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890"
2

Conecte as Redes Sociais

Acesse as URLs de autorização (OAuth) no navegador para conectar as contas. Depois, atribua-as ao seu cliente no formulário de administração.

3

Teste a Autenticação HMAC

Faça uma chamada para o endpoint de "ping" enviando os cabeçalhos HMAC para garantir que sua assinatura está correta.

# Gere a assinatura e substitua 
curl "{{base_url}}/v1/auth_ping" \
  -H "X-Key-Id: {{key_id}}" \
  -H "X-Timestamp: $(date +%s)" \
  -H "X-Nonce: $(openssl rand -hex 12)" \
  -H "X-Signature: "
              

Autenticação HMAC

Toda requisição segura deve conter os cabeçalhos: X-Key-Id, X-Timestamp, X-Nonce, e X-Signature.

String Canonical
$canonical = "$method\n$path\n$timestamp\n$nonce\n" . hash('sha256', $rawBody);

Para requisições multipart, use um hash de uma string vazia. Para JSON, use o corpo JSON bruto.

Assinatura
$signature = base64_encode(hash_hmac('sha256', $canonical, hex2bin($secret), true));

O segredo (secret) é o valor hexadecimal gerado no Passo 1. O resultado é enviado no header X-Signature.

Endpoints da API

Requisições Seguras (HMAC)

Estes endpoints são o núcleo da API e requerem uma assinatura HMAC válida em todos os cabeçalhos.

Método Rota Descrição
GET /v1/auth_ping Valida a assinatura HMAC para testar as credenciais.
POST /v1/posts Cria uma nova tarefa de postagem (imediata ou agendada).
GET /v1/get_task_result Consulta o status e o resultado de uma tarefa via ?task_id=....

Autorização (OAuth)

Use estes endpoints a partir de um navegador para conectar as contas das redes sociais. Nenhuma autenticação HMAC é necessária aqui.

Método Rota Descrição
GET /v1/auth/facebook Inicia o fluxo de autorização para Facebook e Instagram.
GET /v1/auth/youtube Inicia o fluxo de autorização para YouTube.
GET /v1/auth/tiktok Inicia o fluxo de autorização para TikTok.

Exemplos de Uso

1. Função Utilitária para Assinar HMAC
<?php
function hmacHeaders(string $method, string $path, string $rawBody=''): array {
  $ts = (string) time();
  $nonce = bin2hex(random_bytes(12));
  $hash = hash('sha256', $rawBody);
  $canonical = "$method\n$path\n$ts\n$nonce\n$hash";
  $sig = base64_encode(hash_hmac('sha256', $canonical, hex2bin(getenv('SOCIALAPI_SECRET_HEX')), true));
  return [
    'X-Key-Id: ' . getenv('SOCIALAPI_KEY_ID'),
    'X-Timestamp: ' . $ts,
    'X-Nonce: ' . $nonce,
    'X-Signature: ' . $sig,
  ];
}
2. POST JSON (imagem por URL — Facebook)
<?php
$payload = json_encode([
  'account' => 'radiogospelhd',
  'account_ids' => ['facebook'],
  'post_type' => 'image',
  'text' => "Meu Post\n\nDescrição",
  'media_urls' => ['https://.../image.jpg'],
  'article_url' => 'https://example.com/artigo'
], JSON_UNESCAPED_UNICODE);

$headers = hmacHeaders('POST', '/v1/posts', $payload);
$headers[] = 'Content-Type: application/json';

$ch = curl_init('https://social-api.meuapp.online/v1/posts');
curl_setopt_array($ch, [
  CURLOPT_POST => true,
  CURLOPT_POSTFIELDS => $payload,
  CURLOPT_HTTPHEADER => $headers,
  CURLOPT_RETURNTRANSFER => true,
]);
echo curl_exec($ch);
3. POST Multipart (vídeo por arquivo — YouTube)
<?php
$headers = hmacHeaders('POST', '/v1/posts', ''); // Corpo vazio para multipart
$fields = [
  'media'       => new CURLFile('/caminho/absoluto/video.mp4'),
  'post_type'   => 'video',
  'text'        => "Título do Vídeo\n\nDescrição completa.",
  'account'     => 'radiogospelhd',
  'account_ids' => '["youtube"]', // JSON string para multipart
];
$ch = curl_init('https://social-api.meuapp.online/v1/posts');
curl_setopt_array($ch, [
  CURLOPT_POST => true,
  CURLOPT_POSTFIELDS => $fields,
  CURLOPT_HTTPHEADER => $headers,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_TIMEOUT => 600,
]);
echo curl_exec($ch);
Consultar Resultado da Tarefa
curl "https://social-api.meuapp.online/v1/get_task_result?task_id=task_..."
Exemplo de Resposta:
{
"status": "complete",
"message": "Tarefa concluída.",
"data": {
  "facebook": {
    "status":"ok",
    "id":"...",
    "permalink":"..."
  }
}
}
Mapeamento de Plataformas
  • ["facebook"] — Publica foto ou vídeo na Página do Facebook.
  • ["instagram"] — Publica vídeo como um Reel no Instagram.
  • ["youtube"] — Publica um vídeo comum no canal do YouTube.
  • ["tiktok"] — Publica um vídeo no TikTok (em modo sandbox: SELF_ONLY).

Perguntas Frequentes

Onde vejo os logs de erro detalhados?

Todos os erros e informações de postagens são registrados no arquivo post.log, localizado na raiz do projeto da API.

Qual a diferença entre agendado e publicado?

Se você enviar o parâmetro scheduled_time com uma data no futuro, a API do Facebook/Instagram aceitará o post e retornará um ID, mas o link permanente (permalink) só estará disponível após a publicação efetiva no horário agendado.