Tutorial da API do LinkedIn: Publicando com a Posts API

Tutorial da API do LinkedIn: Publicando com a Posts API

Como publicar no LinkedIn pela Posts API: envio de imagens e documentos, o cabeçalho x-restli-id e por que perfis pessoais e páginas precisam de dois apps.

Publicar no LinkedIn é uma única chamada POST https://api.linkedin.com/rest/posts, com a URN da publicação criada retornada no cabeçalho de resposta x-restli-id, não no corpo. Mídia funciona registrando um envio primeiro, enviando os bytes e depois referenciando a URN retornada. As complicações são o modelo de permissões e o versionamento mensal da API do LinkedIn.

O que a Posts API consegue publicar, e o que ela não consegue?

Para publicações orgânicas (não patrocinadas), a tabela de tipos de conteúdo do LinkedIn é explícita.

Tipo de conteúdoSuporte orgânico
Somente textoSim
ImagensSim
VídeosSim
Documentos (PDF, DOC, DOCX, PPT, PPTX)Sim
ArtigoSim
MultiImageSim
EnqueteSim
CarrosselNão, apenas patrocinado

Publicações de documentos são a surpresa boa: carrosséis em PDF, o formato que performa bem no LinkedIn, têm suporte total pela Documents API. Os limites são um arquivo de no máximo 100 MB e no máximo 300 páginas. Publicações de carrossel orgânico, no sentido de anúncios do LinkedIn, não são suportadas; o equivalente orgânico é o MultiImage. Publicações de artigo não raspam a URL automaticamente para você, então é preciso fornecer o título, a descrição e uma URN de imagem de miniatura você mesmo.

A lacuna estrutural é a divisão de permissões. Publicar como pessoa precisa de w_member_social. Publicar como página de empresa precisa de w_organization_social, com r_organization_social para leitura de volta, e o membro autenticado precisa ter um papel de ADMINISTRATOR, CONTENT_ADMIN ou DIRECT_SPONSORED_CONTENT_POSTER nessa página. Na prática, são produtos de API diferentes com solicitações de acesso separadas, e é por isso que uma ferramenta que publica tanto em um perfil quanto em uma página acaba mantendo dois apps LinkedIn separados. A nossa própria integração faz exatamente isso.

Nota: os números aqui foram verificados na documentação da Posts API, Images API e Documents API do LinkedIn no Microsoft Learn, em setembro de 2026. As plataformas mudam esses dados sem aviso.

Como funciona a autenticação, e quanto tempo leva a revisão de acesso?

OAuth de três pernas para obter um token de membro, e então toda solicitação carrega três cabeçalhos: Authorization: Bearer, X-Restli-Protocol-Version: 2.0.0, e LinkedIn-Version no formato AAAAMM. Esse último não é opcional e não é permanente. O LinkedIn lança versões mensais e descontinua as antigas, com um aviso de descontinuação atualmente na página informando que a Marketing Version 202508 será descontinuada em 17 de agosto de 2026. Uma versão que você fixou no ano passado vira uma indisponibilidade.

O acesso aos produtos de gestão de comunidade é concedido por aplicação. O LinkedIn não publica um prazo de revisão nessa documentação para desenvolvedores, então trate a duração como desconhecida. Note também que r_member_social é uma permissão restrita “disponível apenas para usuários aprovados”, então ler as próprias publicações de um membro de volta é um pedido separado de escrevê-las.

Não conseguimos verificar os tempos de vida do token de acesso do LinkedIn nas páginas das APIs Posts, Images ou Documents, que não os declaram. Leia o número atual na própria documentação de autenticação do LinkedIn em vez de um número em um post de blog, incluindo este.

Qual é a sequência de chamadas de publicação?

Para uma publicação de texto é uma chamada. Para mídia são três:

  1. POST /rest/images?action=initializeUpload (ou /rest/documents?action=initializeUpload) com um initializeUploadRequest.owner definido como a URN da pessoa ou organização.
  2. Leia uploadUrl e a URN do recurso (image ou document) no objeto value da resposta.
  3. Envie os bytes para uploadUrl. Um envio de documento bem-sucedido retorna 201.
  4. POST /rest/posts com author, commentary, visibility, distribution, lifecycleState: "PUBLISHED", e content.media.id definido como a URN do recurso.
  5. Leia a URN da publicação criada no cabeçalho de resposta x-restli-id do 201. Ela não está no corpo.
# 1. register the upload
curl -X POST 'https://api.linkedin.com/rest/documents?action=initializeUpload' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'X-Restli-Protocol-Version: 2.0.0' -H 'LinkedIn-Version: 202608' \
  -d '{"initializeUploadRequest":{"owner":"urn:li:organization:5515715"}}'
# -> value.uploadUrl, value.document = urn:li:document:...

# 2. upload the bytes
curl -i --upload-file ./deck.pdf -H "Authorization: Bearer $TOKEN" "$UPLOAD_URL"

# 3. create the post, then read x-restli-id from the 201
curl -i -X POST 'https://api.linkedin.com/rest/posts' \
  -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
  -H 'X-Restli-Protocol-Version: 2.0.0' -H 'LinkedIn-Version: 202608' \
  -d '{
    "author": "urn:li:organization:5515715",
    "commentary": "Our Q3 teardown, 12 pages.",
    "visibility": "PUBLIC",
    "distribution": {"feedDistribution":"MAIN_FEED","targetEntities":[],
                     "thirdPartyDistributionChannels":[]},
    "content": {"media": {"title":"deck.pdf","id":"urn:li:document:..."}},
    "lifecycleState": "PUBLISHED",
    "isReshareDisabledByAuthor": false
  }'

Os recursos têm seu próprio campo de status: WAITING_UPLOAD, PROCESSING, PROCESSING_FAILED ou AVAILABLE. Referenciar um que ainda não chegou a AVAILABLE é uma causa comum de uma publicação que sai sem a mídia.

Quais são os limites de taxa?

A tabela de erros da Posts API do LinkedIn documenta 429 TOO_MANY_REQUESTS com a orientação de reduzir a frequência de solicitações e tentar novamente após um atraso, mas a página não informa números específicos por app ou por membro. Não conseguimos verificar números concretos de limitação nas páginas das APIs Posts, Images ou Documents. O LinkedIn publica limites diários no nível de aplicação e de membro no portal para desenvolvedores para o seu próprio app, que é a única fonte precisa para sua cota, então leia lá em vez de presumir um número compartilhado.

Dois limites são declarados de forma concreta e vale a pena projetar em torno deles: documentos têm limite de 100 MB e 300 páginas, e imagens precisam ter menos de 36.152.320 pixels, em JPG, GIF ou PNG, com GIFs limitados a 250 quadros.

Nota: os números aqui foram verificados na documentação da Posts API, Images API e Documents API do LinkedIn no Microsoft Learn, em setembro de 2026. As plataformas mudam esses dados sem aviso.

O que realmente vai custar três semanas?

Dois apps, duas revisões. Publicação em perfil pessoal e publicação em página de empresa são produtos separados com aprovações separadas. Se seu produto promete os dois, você está rodando dois fluxos OAuth, dois conjuntos de credenciais e dois processos de revisão, e um pode ser aprovado enquanto o outro não.

Versionamento mensal. LinkedIn-Version precisa de um plano: um aumento agendado, um teste que exercita a versão atual e alguém que leia os avisos de descontinuação. Esse é o custo de manutenção que as pessoas esquecem quando estimam a construção.

Pipeline de mídia. Envio em duas etapas para imagens, documentos e vídeo, cada um com seu próprio endpoint e seu próprio status de recurso para aguardar, além de validação de formato e tamanho antes de desperdiçar um envio.

Assíncrono e falha parcial. Um 201 de /rest/posts é a confirmação mais forte que qualquer uma das grandes plataformas dá, mas a etapa de recurso antes dela é assíncrona, e lifecycleState pode voltar como PUBLISH_FAILED, exigindo uma edição para tentar novamente. Modele um estado processing, como abordado em nosso guia de API de agendamento de redes sociais, e nunca reporte sucesso apenas com base na chamada de envio.

Se você também estiver redigindo o texto, o contador de caracteres do LinkedIn mostra onde cai o corte do “ver mais”.

A versão resumida

  • Uma chamada POST /rest/posts; a URN da publicação volta em x-restli-id, não no corpo.
  • Mídia precisa de initializeUpload, um envio e então a URN do recurso em content.media.id.
  • Documentos (PDF e arquivos do Office) são suportados organicamente, até 100 MB e 300 páginas.
  • Perfis pessoais e páginas de empresa usam permissões diferentes e, na prática, dois apps.
  • LinkedIn-Version é obrigatório e as versões são descontinuadas. Agende os aumentos.

Fazer isso uma vez em vez de uma vez por plataforma

Se o LinkedIn é uma entre várias redes que você precisa cobrir, o trabalho por plataforma se multiplica em vez de somar. O BulkPublish publica em 15 plataformas por uma única API REST, incluindo perfis pessoais e páginas de empresa do LinkedIn (ambos os apps, ambas as revisões, já feitos) e publicações de documento do LinkedIn. Cabeçalhos de versão, verificação de recursos e renovação de token ficam do nosso lado, e uma publicação direcionada a várias redes reporta partial quando uma delas falha, em vez de fingir que deu certo. A referência da API está em /developers/ e a visão geral da integração REST em /integrations/rest-api/.

Relacionados