Skip to content
Idioma: Español

API para desarrolladores

Enviar ventas y datos propios a LinkHarbor

Actualizado el 1 de noviembre de 2026 6 min de lectura

Asigna las ventas de tu tienda a clics en enlaces con los callbacks de venta, y envía datos en vivo de tus herramientas a tu página con «Custom (API)».

LinkHarbor también acepta datos desde fuera. Para dos casos hay endpoints propios con sus propios secretos, y para ellos no necesitas una clave de API: los callbacks de venta comunican las ventas de tu tienda, para que veas en tus estadísticas qué enlace trajo ingresos. La integración «Custom (API)» lleva datos en vivo de tus propias herramientas a tu página como widget y puede disparar notificaciones push.

Callbacks de venta: asignar ventas

Cómo encajan el ID de clic (lt_click_id), la asignación y los informes se explica en Atribuir conversiones y ventas; aquí encontrarás todos los campos y respuestas para desarrolladores. En resumen: cuando LinkHarbor redirige un clic contabilizado a un destino http o https, añade el parámetro lt_click_id; tu tienda lo guarda y lo devuelve después de la compra.

Crear un secreto de callback

La página «Callback y API» con la tarjeta «Secretos de callback»
Los secretos de callback se crean en la página «Callback y API»
  1. Abre «Callback y API»
  2. En la tarjeta «Secretos de callback», haz clic en «+ Crear nuevo secreto»
  3. Si quieres, ponle un nombre, por ejemplo «Callback de la tienda», y haz clic en «Crear secreto»
  4. Copia el secreto enseguida; solo se muestra una vez
Quién
Propietarios y admins, desde Creator Pro. En Creator Free aparece «Los secretos de callback están disponibles desde Creator Pro.»
Cuántos
Hasta 5 secretos por espacio de trabajo, por ejemplo uno por tienda.
«Editar»
Cambia el nombre y pon el estado en «Activo» o «Inactivo». Con un secreto inactivo, la API rechaza los callbacks.
«↺ Rotar»
Genera un secreto nuevo; el anterior deja de funcionar de inmediato.
«Último callback:»
Muestra cuándo se usó el secreto con éxito por última vez.

Enviar un 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}
CampoObligatorioSignificado
click_idSíEl valor de lt_click_id (10–36 caracteres)
order_idSíTu número de pedido (1–128 caracteres); cada número de pedido solo se cuenta una vez por espacio de trabajo
amountSíImporte como número decimal, por ejemplo "49.90"; sin valores negativos
currencySíMoneda como código de tres letras, por ejemplo EUR; la API convierte las minúsculas
occurred_atNoMomento de la compra (ISO 8601)
amount_base_minor, base_currency, fx_rateNoImporte convertido en la unidad más pequeña, moneda base y tipo de cambio, si vendes en varias monedas
metaNoTus propios datos adicionales como objeto plano: hasta 50 claves de 1–64 caracteres; los valores son texto (hasta 500 caracteres), un número, true/false o null; los objetos anidados y las listas se rechazan
workspace_idNoEl ID de tu espacio de trabajo; con él, la API indica un click_id desconocido como 404 en lugar de 403
RespuestaSignificado
200 {"ok":true,"conversion_id":…}Venta guardada, o este order_id ya estaba guardado (entonces, el ID de la conversión existente)
403 forbiddenSecreto o firma incorrectos, o click_id desconocido (sin workspace_id)
403 secret_inactiveEl secreto está en «Inactivo»
404 not_foundclick_id desconocido (solo con workspace_id y un secreto válido)
413 request_too_largeEl cuerpo supera 1 MB
422 validation_failedFalta un campo o no es válido, por ejemplo un valor en meta demasiado largo o anidado
429 rate_limitedMás de 120 callbacks por minuto desde tu dirección IP

Firma opcional

Además del secreto, puedes enviar el encabezado X-Callback-Signature. Contiene sha256= y la firma HMAC-SHA256 del cuerpo sin procesar en hexadecimal. La clave no es el secreto en sí, sino su hash SHA-256 en forma binaria. Si envías el encabezado, tiene que ser correcto; si no, el callback se rechaza.

Calcular la firma (PHP)
<?php
$body = json_encode($payload);
$key  = hash('sha256', getenv('LH_CALLBACK_SECRET'), true); // hash binario del secreto
$sig  = 'sha256=' . hash_hmac('sha256', $body, $key);
// Encabezados: X-Callback-Secret y X-Callback-Signature: $sig, cuerpo: $body

Dónde ves las ventas

Las ventas comunicadas aparecen como conversiones en tus estadísticas; consulta Atribuir conversiones y ventas. Mediante la API, las lees con read:stats en /v1/stats/…/conversions/breakdown.

Custom (API): tus propios datos en vivo

Con la integración «Custom (API)», cualquier programa capaz de enviar peticiones HTTP (un plugin de servidor de juego, un bot, un script de cron) puede enviar datos a LinkHarbor. Se convierten en un widget en vivo en tu página, y las reglas push pueden avisar a tus seguidores.

Conectar

  1. Abre «Integraciones» en el espacio de trabajo
  2. Elige «Custom (API)» y escribe un nombre
  3. Una vez conectada, el diálogo muestra la «URL de ingesta» y el «Secreto» (con «Mostrar secreto»)
  4. Guarda ambos en tu herramienta

Las integraciones están disponibles desde Creator Pro. Solo los propietarios y admins ven la URL de ingesta y el secreto, también después en la vista de detalle de la integración. Al desconectar y volver a conectar se crea un secreto nuevo. Cómo se conectan las integraciones en general se explica en Conectar una integración.

Enviar datos

Enviar un evento y el estado del 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
Nombre libre del evento, por ejemplo player.joined. Se convierte a minúsculas y es el nombre al que reaccionan las reglas push. Sin event, el evento se llama state.updated.
event_id
Clave opcional que evita el procesamiento doble. Si se vuelve a enviar el mismo event_id, LinkHarbor responde con duplicate: true y no hace nada.
data
Valores para los marcadores de los textos push, por ejemplo {player}. Hasta 40 claves, solo valores simples.
state
El estado completo del widget. Sustituye por completo al anterior. type es game_server (tarjeta de servidor de juego) o status (tarjeta de estado).

En lugar de Authorization: Bearer, también puedes enviar el secreto en el encabezado X-LinkHarbor-Secret. Se permiten 120 llamadas por minuto por dirección IP. Opcionalmente, firmas el cuerpo: el encabezado X-LinkHarbor-Signature contiene sha256= y la firma HMAC-SHA256 del cuerpo sin procesar con el secreto como clave. Si lo envías, tiene que ser correcto.

RespuestaSignificado
200 {"ok":true,…}Evento guardado, con duplicate: true para un event_id ya conocido
400 invalid_jsonEl cuerpo no es un objeto JSON
401 invalid_secretSecreto incorrecto o URL de ingesta desconocida
401 signature_invalidX-LinkHarbor-Signature no coincide con el cuerpo
413 request_too_largeEl cuerpo supera 64 KB
422 validation_failedNo hay ni event ni state en el cuerpo
429 rate_limitedMás de 120 llamadas por minuto desde tu dirección IP

¿No has encontrado nada?

Cuéntanos qué necesitas y nuestro equipo de soporte te ayudará personalmente.

Contactar con soporte