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
- Abra «Callback e API»
- No cartão «Segredos de callback», clique em «+ Criar novo segredo»
- Se quiser, dê-lhe um nome, por exemplo «Callback da loja», e clique em «Criar segredo»
- 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
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} | Campo | Obrigatório | Significado |
|---|---|---|
| click_id | Sim | O valor de lt_click_id (10–36 caracteres) |
| order_id | Sim | O seu número de encomenda (1–128 caracteres); cada número de encomenda só é contado uma vez por espaço de trabalho |
| amount | Sim | Montante como número decimal, por exemplo "49.90"; sem valores negativos |
| currency | Sim | Moeda como código de três letras, por exemplo EUR; a API converte as letras minúsculas |
| occurred_at | Não | Momento da compra (ISO 8601) |
| amount_base_minor, base_currency, fx_rate | Não | Montante convertido na unidade mais pequena, moeda base e taxa de câmbio, se vender em várias moedas |
| meta | Não | Os 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_id | Não | O ID do seu espaço de trabalho; com ele, a API indica um click_id desconhecido como 404 em vez de 403 |
| Resposta | Significado |
|---|---|
| 200 {"ok":true,"conversion_id":…} | Venda guardada – ou este order_id já estava guardado (nesse caso, o ID da conversão existente) |
| 403 forbidden | Segredo ou assinatura errados, ou click_id desconhecido (sem workspace_id) |
| 403 secret_inactive | O segredo está definido como «Inativo» |
| 404 not_found | click_id desconhecido (só com workspace_id e um segredo válido) |
| 413 request_too_large | O corpo tem mais de 1 MB |
| 422 validation_failed | Falta um campo ou é inválido, por exemplo um valor em meta demasiado longo ou aninhado |
| 429 rate_limited | Mais 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.
<?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
- Abra «Integrações» no espaço de trabalho
- Escolha «Custom (API)» e introduza um nome
- Depois de ligar, a caixa de diálogo mostra o «URL de ingestão» e o «Secret» (com «Mostrar secret»)
- 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
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.
| Resposta | Significado |
|---|---|
| 200 {"ok":true,…} | Evento guardado, com duplicate: true para um event_id já conhecido |
| 400 invalid_json | O corpo não é um objeto JSON |
| 401 invalid_secret | Secret errado ou URL de ingestão desconhecido |
| 401 signature_invalid | X-LinkHarbor-Signature não corresponde ao corpo |
| 413 request_too_large | O corpo tem mais de 64 KB |
| 422 validation_failed | Nem event nem state no corpo |
| 429 rate_limited | Mais de 120 chamadas por minuto a partir do seu endereço IP |
Também lhe pode ser útil
Não encontrou o que procura?
Diga-nos de que precisa e a nossa equipa de suporte ajuda-o pessoalmente.