Pular para o conteúdo
Entrar Lista de espera
Docs/Referência da API/Posts/Adotar post já publicado

Adotar post já publicado

POST /v1/posts/adopt escopo write

Registra no Praeko um Reel que já está agendado no Buffer (não chama o Buffer).

CabeçalhosAuthorization: Bearer praeko_… e X-Praeko-Contract: en. Sempre envie os dois.

Alias antigo em português (continua respondendo, marcado como obsoleto): /v1/posts/adotar.

Parâmetros

Nome Onde Descrição
Idempotency-Key cabeçalho Chave de idempotência (1 a 255 caracteres visíveis, por exemplo um UUID). Repetir o MESMO pedido com a mesma chave, em até 24 h, devolve a resposta guardada (com Idempotent-Replayed: true) sem executar de novo; outro pedido com a mesma chave dá 422 idempotency_key_reuse; um pedido ainda em andamento dá 409 idempotency_in_progress. Erros 5xx não são guardados. A chave vale por workspace e por rota. Veja Repetir uma requisição.

Corpo da requisição

JSON. Campos obrigatórios precisam ir; os outros podem ser omitidos.

Campo Tipo Descrição
title obrigatório texto Título do post. 1 a 200 caracteres.
network (opcional) texto Rede do post. Hoje só instagram. Valores: instagram; padrão: instagram.
scheduledFor obrigatório texto Horário em que o Reel sai. Data e hora ISO 8601 em UTC, por exemplo 2026-11-14T20:30:00Z. No passado, o post entra como já enviado.
external obrigatório objeto Onde o post está agendado fora do Praeko.
external.provider obrigatório texto Sempre buffer. Valores: buffer.
external.id obrigatório texto Id do post no Buffer.
texts (opcional) objeto Textos.
texts.instagram (opcional) objeto Legenda do Reel.
texts.instagram.text (opcional) texto Legenda.
text (opcional) texto Legenda, se não usar texts.instagram.text.
media (opcional) objeto Mídias só para exibição no painel.
media.video (opcional) texto Id da mídia de vídeo.
media.cover (opcional) texto Id da mídia de capa (dá a miniatura).
tags (opcional) string[] Etiquetas (até 40 caracteres cada). Cada um com até 40 caracteres.
id (opcional) texto Id do post no Praeko (3 a 64 caracteres entre letras, números, - e _).
Exemplo de corpo
{
  "title": "Reel de segunda: o teste que falhava",
  "network": "instagram",
  "scheduledFor": "2026-11-10T20:30:00.000Z",
  "external": {
    "provider": "buffer",
    "id": "6720a1b3c4d5e6f708192a3b"
  },
  "texts": {
    "instagram": {
      "text": "O teste que só falhava na segunda. #programação"
    }
  },
  "tags": [
    "bastidores"
  ]
}

Exemplo

curl -X POST "https://praeko.app/v1/posts/adopt" \
  -H "Authorization: Bearer $PRAEKO_KEY" \
  -H "X-Praeko-Contract: en" \
  -H "Content-Type: application/json" \
  -d '{
  "title": "Reel de segunda: o teste que falhava",
  "network": "instagram",
  "scheduledFor": "2026-11-10T20:30:00.000Z",
  "external": {
    "provider": "buffer",
    "id": "6720a1b3c4d5e6f708192a3b"
  },
  "texts": {
    "instagram": {
      "text": "O teste que só falhava na segunda. #programação"
    }
  },
  "tags": [
    "bastidores"
  ]
}'

Resposta

Status de sucesso Quando
200 Sucesso.
Resposta 200
{
  "id": "01KA3W2Y6H1RC5ZQ8M0T4VXE7N",
  "title": "O teste que só falhava na segunda (versão final)",
  "state": "queued",
  "type": "reel",
  "kind": "video",
  "origin": "api",
  "media": {
    "video": "01KA3VQ7M2T9XE4HB8N5RZ6C0D",
    "cover": null
  },
  "texts": {
    "instagram": {
      "text": "Reel de segunda: o teste que falhava"
    }
  },
  "tags": [
    "bastidores",
    "testes"
  ],
  "thumb": null,
  "items": [
    {
      "id": "01KA3W2Y6J9D3BNF7G2K5PQS8A",
      "network": "instagram",
      "channel": "01KA3V1G4C7N9PXS2WQ6HM8TDZ",
      "state": "scheduled",
      "scheduledFor": "2026-11-10T20:30:00.000Z",
      "custom": true,
      "mode": "now",
      "adopted": true,
      "runAt": null,
      "thumb": null
    }
  ],
  "createdAt": "2026-11-07T14:02:11.482Z",
  "updatedAt": "2026-11-07T15:40:03.120Z",
  "actions": []
}

Devolve o post adotado, no mesmo formato de GET /v1/posts/:id. O item sai marcado com adopted: true.

Exemplo lido do códigoEsta rota não dá para chamar nos testes sem um provedor de verdade (Buffer, vídeo no YouTube, TikTok…), então o exemplo foi montado lendo o código do servidor. As outras respostas saem de chamadas reais ao servidor de testes.

Erros

Status code Quando
400 empty_body O corpo veio vazio.
400 invalid_json O corpo não é um objeto JSON.
413 body_too_large O corpo passa de 1 MB.
422 invalid_field external, scheduledFor ou id inválidos.
409 already_adopted Esse post do Buffer já está no Praeko.
409 id_exists Já existe um post com esse id.
409 channel_not_connected O Instagram não está conectado.
422 idempotency_key_reuse A Idempotency-Key já foi usada com outro pedido (método, caminho, query ou corpo diferentes).
409 idempotency_in_progress Um pedido com a mesma Idempotency-Key ainda está em andamento (repita em instantes).
409 idempotency_response_too_large A resposta original passou de 256 KB e não foi guardada; consulte o recurso por GET.

Erros de qualquer rota

Status code Quando
401 unauthorized Faltou o cabeçalho Authorization: Bearer ….
401 invalid_api_key A chave não existe.
401 revoked_api_key A chave foi revogada.
401 expired_api_key A chave expirou.
403 forbidden O escopo da chave não basta para esta rota (veja o selo de escopo).
429 rate_limited Passou do limite de requisições por minuto.

O corpo de todo erro é { "error": { "code", "message", "details"? } }. Veja todos os códigos.

Testar

Testar

O teste ao vivo usa a sua chave e a sua conta. Para quem não entrou, fica desligado.

Entre para testar
Dúvida ou erro nesta página? contato@praeko.appVer .md

Digite para buscar páginas, rotas e códigos de erro.