Documentación

Conversiones

Cada venta que tu sistema cierra, reportada una vez. La venta queda registrada en Ventas con la pieza, el grupo, la campaña, el mercado y la oferta que la trajeron, cuando el clic lo permite, y se envía a tus propias cuentas de Google Ads (conversiones sin conexión por gclid, gbraid o wbraid) y de Meta (Conversions API, por fbclid, fbc o fbp). El correo y el teléfono, cuando los envías, se normalizan y se guardan solo como SHA-256.

Reportar una venta#

POST /api/v1/conversions Bearer

Registra una venta de una de tus ofertas. order_id es la llave de idempotencia de tu organización: reportar el mismo pedido otra vez responde la venta ya registrada ( duplicate: true ) y no la cuenta dos veces. Con test: true validamos el cuerpo y resolvemos la atribución sin registrar nada ni enviarlo a las redes.

Content-Type: application/json

Cuerpo de la solicitud

offer string requerido

La oferta vendida: su id o la clave externa que le diste en Ventas → Ofertas.

amount string requerido

El valor de la venta, como texto decimal ( "49.00" ) o número. Cero o más.

currency string requerido

Código ISO 4217 de la moneda ( USD , PEN ).

occurred_at string requerido

Cuándo se cerró la venta, en ISO 8601 con zona ( 2026-09-25T14:03:00-05:00 ). No puede estar en el futuro.

order_id string requerido

Tu número de pedido, hasta 128 caracteres. Único por organización.

gclid string

El clic de Google Ads que trajo al comprador.

gbraid string

El clic de Google Ads en apps de iOS.

wbraid string

El clic de Google Ads en la web de iOS.

fbclid string

El clic de Meta que trajo al comprador.

fbc string

La cookie _fbc del navegador del comprador.

fbp string

La cookie _fbp del navegador del comprador.

dcid string

El parámetro dcid que Datil agrega a cada URL de destino: la campaña que compró el clic.

dcrid string

El parámetro dcrid de la URL de destino: la pieza que produjo el clic.

email string

El correo del comprador, tal cual o como SHA-256 hexadecimal del correo en minúsculas y sin espacios. Lo guardamos solo como SHA-256.

phone string

El teléfono del comprador con código de país ( +51987654321 ), o su SHA-256 hexadecimal. Lo guardamos solo como SHA-256.

utm_source string

La fuente de la visita que terminó en la venta.

utm_medium string

El medio de la visita.

utm_campaign string

La campaña de la visita.

utm_content string

El contenido de la visita.

utm_term string

El término de la visita.

client_user_agent string

El navegador del comprador; mejora la coincidencia en Meta.

client_ip_address string

La dirección IP del comprador; mejora la coincidencia en Meta.

test boolean

true valida y resuelve la atribución sin registrar ni enviar la venta.

Devuelve · 201 con la venta registrada · 200 con la venta ya registrada del mismo order_id ( duplicate: true ) o con el resultado de una prueba ( test: true ) · 401 sin llave válida · 403 con una llave sin acceso a Ventas o una organización sin Ventas · 422 validation_failed con errors para cada regla: missing_field:… , invalid_format:amount , invalid_format:currency , invalid_format:occurred_at , invalid_format:email , invalid_format:gclid · 422 unknown_offer para una oferta que tu organización no tiene · 429 al superar el límite de solicitudes.

cURL
curl -X POST https://edge.datil.com/api/v1/conversions \
  -H "Authorization: Bearer $DATIL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "offer": "plan-pro",
  "amount": "49.00",
  "currency": "USD",
  "occurred_at": "2026-09-25T14:03:00-05:00",
  "order_id": "PED-2026-0042",
  "gclid": "Cj0KCQjw8--2BhCHARIsAF_w1gw",
  "fbc": "fb.1.1727287380000.IwAR2F4-dbP0l7Mn",
  "email": "ana@example.com",
  "utm_source": "google",
  "utm_campaign": "plan-pro-ec"
}'
Respuesta · 201
{
  "id": "7b0f6a52-3c1e-4d7e-9a57-0c1f5c2e9b10",
  "object": "conversion",
  "test": false,
  "duplicate": false,
  "order_id": "PED-2026-0042",
  "offer": {
    "id": "5d2c1f0e-8a4b-4c3d-9e6f-1a2b3c4d5e6f",
    "external_key": "plan-pro"
  },
  "amount": "49.00",
  "currency": "USD",
  "occurred_at": "2026-09-25T19:03:00Z",
  "event": "paid_first_invoice",
  "attribution": {
    "click_id": "0e9d8c7b-6a5f-4e3d-2c1b-0a9f8e7d6c5b",
    "piece_id": "1f2e3d4c-5b6a-4978-8695-a4b3c2d1e0f9",
    "ad_group_id": "2a3b4c5d-6e7f-4a8b-9c0d-1e2f3a4b5c6d",
    "campaign_id": "3b4c5d6e-7f8a-4b9c-8d0e-2f3a4b5c6d7e",
    "market_id": "4c5d6e7f-8a9b-4c0d-9e1f-3a4b5c6d7e8f",
    "offering_id": "5d2c1f0e-8a4b-4c3d-9e6f-1a2b3c4d5e6f",
    "channel": "google_search"
  },
  "forwarding": {
    "google": "pending",
    "meta": "pending"
  },
  "created_at": "2026-09-25T19:03:02Z"
}

Consultar una venta#

GET /api/v1/conversions/:id Bearer

Una venta de tu organización: la atribución que resolvió y en qué estado está con cada red ( forwarding ).

Parámetros

id string requerido

El id de la venta que devolvió el reporte.

Devuelve · 200 con la venta · 404 not_found para una venta que no es de tu organización · 401 sin llave válida.

cURL
curl "https://edge.datil.com/api/v1/conversions/7b0f6a52-3c1e-4d7e-9a57-0c1f5c2e9b10" \
  -H "Authorization: Bearer $DATIL_API_KEY"
Respuesta · 200
{
  "id": "7b0f6a52-3c1e-4d7e-9a57-0c1f5c2e9b10",
  "object": "conversion",
  "test": false,
  "duplicate": false,
  "order_id": "PED-2026-0042",
  "offer": {
    "id": "5d2c1f0e-8a4b-4c3d-9e6f-1a2b3c4d5e6f",
    "external_key": "plan-pro"
  },
  "amount": "49.00",
  "currency": "USD",
  "occurred_at": "2026-09-25T19:03:00Z",
  "event": "paid_first_invoice",
  "attribution": {
    "click_id": "0e9d8c7b-6a5f-4e3d-2c1b-0a9f8e7d6c5b",
    "piece_id": "1f2e3d4c-5b6a-4978-8695-a4b3c2d1e0f9",
    "ad_group_id": "2a3b4c5d-6e7f-4a8b-9c0d-1e2f3a4b5c6d",
    "campaign_id": "3b4c5d6e-7f8a-4b9c-8d0e-2f3a4b5c6d7e",
    "market_id": "4c5d6e7f-8a9b-4c0d-9e1f-3a4b5c6d7e8f",
    "offering_id": "5d2c1f0e-8a4b-4c3d-9e6f-1a2b3c4d5e6f",
    "channel": "google_search"
  },
  "forwarding": {
    "google": "pending",
    "meta": "pending"
  },
  "created_at": "2026-09-25T19:03:02Z"
}

La atribución#

La cadena que la venta resolvió, de la pieza a la oferta. Cada clave es nula cuando el clic no la nombra o nombra filas de otra organización.

Campos

click_id string

El clic registrado que trajo al comprador.

piece_id string

La pieza (anuncio) que produjo el clic.

ad_group_id string

El grupo de la pieza.

campaign_id string

La campaña que compró el clic.

market_id string

El mercado de la campaña.

offering_id string

La oferta vendida.

channel string

El canal de la visita, cuando se conoce.

El envío a las redes#

Dónde está la venta con cada red, en forwarding.google y forwarding.meta . La venta solo se envía a las cuentas que tu organización conectó en Ventas → Cuentas; nunca a otras.

Campos

pending string

En cola o esperando un reintento.

uploaded string

La red la aceptó.

held string

Retenida por la configuración: sin cuenta conectada, sin píxel o sin acción de conversión. Sale sola cuando la configuración existe.

skipped string

No lleva nada con qué la red pueda coincidir.

failed string

La red la rechazó después de los reintentos.

none string

La venta no lleva identificadores de esa red.

test string

Una prueba: no se envía.

Sin conexión — reintentando…

Esenciales

Sesión, seguridad, idioma y tema. Sin ellas el sitio no funciona.

Siempre activas