DecisaDocumentación

Documentación · Referencia de la API

/v1/conversions

Un solo endpoint cubre todos los tipos de conversión. Autenticado con Bearer usando la site key de tu workspace. Idempotente en (workspace_id, external_id).

Autenticación

Todas las solicitudes llevan un token Bearer en el encabezado Authorization. El token es la site key de tu workspace, con el prefijo dcs_sk_. La encuentras en Configuración → Claves de API.

Authorization: Bearer dcs_sk_live_…

Las site keys tienen alcance de workspace. Rótalas desde la misma página de configuración; las claves antiguas dejan de autenticar en un plazo de 60 segundos.

Endpoint

POST https://api.decisa.ai/v1/conversions
Content-Type: application/json
Authorization: Bearer dcs_sk_live_…

Cuerpo de la solicitud

{
  "type": "signup",
  "external_id": "user-1234",
  "visitor_id": "v_abc123...",
  "customer_email": "[email protected]",
  "value_cents": 0,
  "currency": "USD",
  "occurred_at": "2026-05-25T18:14:22Z",
  "metadata": {
    "plan": "pro",
    "trial": false
  }
}
CampoTipoDescripción
typestring · obligatorioUno de: signup, trial_start, subscription_start, sale, lead, app_install, custom.
external_idstring · obligatorioTu ID único para el registro. Se usa para la deduplicación.
visitor_idstring · recomendadoValor de la cookie propia dcs_vid. Sin esto, la conversión no puede unirse a un clic.
customer_emailstring · opcionalSe le aplica hash SHA256 antes de almacenarlo. Se usa para el pushback de CAPI.
value_centsinteger · opcionalIngresos en unidades menores. Obligatorio para los tipos que generan ingresos.
currencystring · opcionalISO 4217. Por defecto, la moneda del workspace.
occurred_atISO 8601 · opcionalSe usa la marca de tiempo del servidor si se omite.
metadataobject · opcionalFormato libre. No se usa para la atribución; se muestra en los paneles.

Respuesta exitosa (201)

{
  "data": {
    "id": "conv_01HZX...",
    "type": "signup",
    "external_id": "user-1234",
    "attributed": true,
    "attribution_model": "last-click",
    "attribution_model_version": "1.0.0",
    "matched_click_id": "clk_01HZX...",
    "matched_campaign_id": null,
    "occurred_at": "2026-05-25T18:14:22Z"
  },
  "meta": null,
  "error": null
}

attributed: false significa que aceptamos la conversión pero no encontramos un clic que calificara. La fila sigue siendo consultable en el panel bajo Sin atribuir.

Códigos de error

CampoTipoDescripción
401unauthorizedSite key ausente o inválida.
403workspace_disabledEl workspace está pausado por facturación o cumplimiento.
422invalid_payloadFalló la validación del esquema. Consulta `error.fields` para más detalles.
429rate_limitedSe excedió la tasa de ingesta del workspace. Reintenta con backoff.
500server_errorTransitorio. Es seguro reintentar: el endpoint es idempotente.

Idempotencia y reintentos

El endpoint es idempotente en (workspace_id, external_id). Reenviar el mismo payload devuelve la fila de conversión original con HTTP 200 (no 201). Úsalo sin restricciones: los reintentos de webhooks de Stripe, Shopify y Kiwify nunca crean duplicados.

Límites de tasa

Plan gratuito: 60 solicitudes / minuto. Planes de pago: 600 / minuto. Las ráfagas de hasta 2× la tasa sostenida se absorben sin generar 429. Hay límites más altos disponibles bajo solicitud.