Skip to content
Idioma: Português

API para programadores

Enviar vendas e dados próprios ao LinkHarbor

Atualizado a 1 de novembro de 2026 6 min de leitura

Associe vendas da sua loja a cliques com callbacks de venda e envie dados em direto das suas ferramentas para a página com «Custom (API)».

O LinkHarbor também aceita dados vindos de fora. Para dois casos existem endpoints próprios com segredos próprios – não precisa de chave de API para eles: os callbacks de venda comunicam vendas da sua loja, para que veja nas estatísticas que link gerou receita. A integração «Custom (API)» leva dados em direto das suas próprias ferramentas para a sua página como widget e pode disparar notificações push.

Callbacks de venda: associar vendas

Como o ID do clique (lt_click_id), a atribuição e os relatórios se relacionam está explicado em Atribuir conversões e vendas; aqui encontra todos os campos e respostas para programadores. Em resumo: quando o LinkHarbor redireciona um clique contado para um destino http ou https, acrescenta o parâmetro lt_click_id; a sua loja guarda-o e devolve-o após a compra.

Criar um segredo de callback

A página «Callback e API» com o cartão «Segredos de callback»
Os segredos de callback criam-se na página «Callback e API»
  1. Abra «Callback e API»
  2. No cartão «Segredos de callback», clique em «+ Criar novo segredo»
  3. Se quiser, dê-lhe um nome, por exemplo «Callback da loja», e clique em «Criar segredo»
  4. Copie o segredo de imediato – só é mostrado uma vez
Quem
Proprietários e admins, a partir do Creator Pro. No Creator Free aparece «Os segredos de callback estão disponíveis a partir do Creator Pro.»
Quantos
Até 5 segredos por espaço de trabalho, por exemplo um por loja.
«Editar»
Altere o nome e defina o estado como «Ativo» ou «Inativo». Com um segredo inativo, a API recusa os callbacks.
«↺ Rodar»
Gera um novo segredo; o antigo deixa de funcionar de imediato.
«Último callback:»
Mostra quando o segredo foi usado com sucesso pela última vez.

Enviar um callback

POST /v1/callbacks/sale
curl -X POST https://dock.at-harbor.com/v1/callbacks/sale \
  -H "Content-Type: application/json" \
  -H "X-Callback-Secret: $LH_CALLBACK_SECRET" \
  -d '{
    "click_id": "3f1c2a9e-8d4b-4a51-9f0e-6b7c1d2e3f40",
    "order_id": "A-10023",
    "amount": "49.90",
    "currency": "EUR",
    "occurred_at": "2026-11-01T10:15:00Z"
  }'
# → {"ok":true,"conversion_id":123}
CampoObrigatórioSignificado
click_idSimO valor de lt_click_id (10–36 caracteres)
order_idSimO seu número de encomenda (1–128 caracteres); cada número de encomenda só é contado uma vez por espaço de trabalho
amountSimMontante como número decimal, por exemplo "49.90"; sem valores negativos
currencySimMoeda como código de três letras, por exemplo EUR; a API converte as letras minúsculas
occurred_atNãoMomento da compra (ISO 8601)
amount_base_minor, base_currency, fx_rateNãoMontante convertido na unidade mais pequena, moeda base e taxa de câmbio, se vender em várias moedas
metaNãoOs seus próprios dados adicionais como objeto plano: até 50 chaves com 1–64 caracteres; os valores são texto (até 500 caracteres), um número, true/false ou null; objetos aninhados e listas são recusados
workspace_idNãoO ID do seu espaço de trabalho; com ele, a API indica um click_id desconhecido como 404 em vez de 403
RespostaSignificado
200 {"ok":true,"conversion_id":…}Venda guardada – ou este order_id já estava guardado (nesse caso, o ID da conversão existente)
403 forbiddenSegredo ou assinatura errados, ou click_id desconhecido (sem workspace_id)
403 secret_inactiveO segredo está definido como «Inativo»
404 not_foundclick_id desconhecido (só com workspace_id e um segredo válido)
413 request_too_largeO corpo tem mais de 1 MB
422 validation_failedFalta um campo ou é inválido, por exemplo um valor em meta demasiado longo ou aninhado
429 rate_limitedMais de 120 callbacks por minuto a partir do seu endereço IP

Assinatura opcional

Além do segredo, pode enviar o cabeçalho X-Callback-Signature. Contém sha256= e a assinatura HMAC-SHA256 do corpo em bruto em hexadecimal. A chave não é o próprio segredo, mas o respetivo hash SHA-256 em formato binário. Se enviar o cabeçalho, tem de estar correto – caso contrário, o callback é recusado.

Calcular a assinatura (PHP)
<?php
$body = json_encode($payload);
$key  = hash('sha256', getenv('LH_CALLBACK_SECRET'), true); // hash binário do segredo
$sig  = 'sha256=' . hash_hmac('sha256', $body, $key);
// Cabeçalhos: X-Callback-Secret e X-Callback-Signature: $sig, corpo: $body

Onde vê as vendas

As vendas comunicadas aparecem como conversões nas suas estatísticas, veja Atribuir conversões e vendas. Através da API, lê-as com read:stats em /v1/stats/…/conversions/breakdown.

Custom (API): os seus próprios dados em direto

Com a integração «Custom (API)», qualquer programa capaz de enviar pedidos HTTP – um plugin de servidor de jogos, um bot, um script cron – pode enviar dados para o LinkHarbor. Esses dados tornam-se um widget em direto na sua página, e as regras de push podem notificar os seus seguidores.

Ligar

  1. Abra «Integrações» no espaço de trabalho
  2. Escolha «Custom (API)» e introduza um nome
  3. Depois de ligar, a caixa de diálogo mostra o «URL de ingestão» e o «Secret» (com «Mostrar secret»)
  4. Guarde ambos na sua ferramenta

As integrações estão disponíveis a partir do Creator Pro. Só proprietários e admins veem o URL de ingestão e o secret, também mais tarde na vista de detalhe da integração. Desligar e voltar a ligar cria um novo secret. Como ligar integrações em geral está explicado em Ligar uma integração.

Enviar dados

Enviar um evento e o estado do widget
curl -X POST "$INGEST_URL" \
  -H "Authorization: Bearer $INGEST_SECRET" \
  -H "Content-Type: application/json" \
  -d '{
    "event": "player.joined",
    "event_id": "join-2026-11-01T20:01:02Z-steve",
    "data": { "player": "Steve" },
    "state": {
      "type": "game_server",
      "name": "Survival SMP",
      "online": true,
      "players_online": 3,
      "players_max": 20
    }
  }'
# → {"ok":true,"event_id":4711,"duplicate":false,"event_type":"player.joined"}
event
Nome livre do evento, por exemplo player.joined. É convertido para minúsculas e é o nome a que as regras de push reagem. Sem event, o evento chama-se state.updated.
event_id
Chave opcional que impede o processamento duplicado. Se o mesmo event_id for enviado de novo, o LinkHarbor responde com duplicate: true e não faz nada.
data
Valores para os marcadores nos textos de push, por exemplo {player}. Até 40 chaves, apenas valores simples.
state
O estado completo do widget. Substitui totalmente o anterior. type é game_server (cartão de servidor de jogo) ou status (cartão de estado).

Em vez de Authorization: Bearer, também pode enviar o secret no cabeçalho X-LinkHarbor-Secret. São permitidas 120 chamadas por minuto por endereço IP. Opcionalmente, pode assinar o corpo: o cabeçalho X-LinkHarbor-Signature contém sha256= e a assinatura HMAC-SHA256 do corpo em bruto com o secret como chave. Se o enviar, tem de estar correto.

RespostaSignificado
200 {"ok":true,…}Evento guardado, com duplicate: true para um event_id já conhecido
400 invalid_jsonO corpo não é um objeto JSON
401 invalid_secretSecret errado ou URL de ingestão desconhecido
401 signature_invalidX-LinkHarbor-Signature não corresponde ao corpo
413 request_too_largeO corpo tem mais de 64 KB
422 validation_failedNem event nem state no corpo
429 rate_limitedMais de 120 chamadas por minuto a partir do seu endereço IP

Não encontrou o que procura?

Diga-nos de que precisa e a nossa equipa de suporte ajuda-o pessoalmente.

Contactar o suporte