Verificaciones de transacción
Una verificación de transacción criba una transacción desde el punto de vista de su cliente: el dinero que recibió en un depósito o el dinero que envía en un retiro. Usa el mismo endpoint, el mismo scope (checks:write) y el mismo veredicto que una verificación de dirección, así que consulte esa página para ver cada campo de la respuesta.
Solicitud
| Campo | Obligatorio | Descripción |
|---|---|---|
subject | sí | "transaction". |
asset | sí | Un símbolo de activo tal como figura en Activos admitidos. |
tx_hash | sí | El hash de la transacción, de 160 caracteres como máximo. Su forma debe ser válida para el activo. |
direction | sí | "deposit" cuando su cliente recibe los fondos, "withdrawal" cuando los envía. |
address | a veces | La dirección de su cliente en la transacción, de 160 caracteres como máximo. Vea la sección siguiente. |
Los campos desconocidos se rechazan. Como en toda verificación, envíe un Idempotency-Key para que un reintento no pueda verificar ni cobrar dos veces; vea Idempotencia.
La dirección del cliente
address es la dirección de su cliente en la transacción: el destinatario de un depósito, el remitente de un retiro.
- En TRX, ETH, BNB y BASE puede omitirla. La API lee la transacción y usa el destinatario para un
deposity el remitente para unwithdrawal. La cuota, el saldo y la capacidad se comprueban primero, de modo que una cuenta rechazada no provoca ninguna consulta. - En cualquier otro activo es obligatoria, y una solicitud sin ella responde
422ADDRESS_REQUIRED. Activos admitidos muestra los activos que pueden derivarla. - Las claves sandbox siempre la necesitan. Una verificación de transacción con una clave sandbox sin
addresstambién respondeADDRESS_REQUIRED; vea Sandbox y live. - Si la envía, se usa tal cual. No se deriva nada.
El veredicto fija la dirección que se usó: el campo address de la respuesta, el informe de evidencias y una reproducción (rederive) la llevan, tanto si la envió usted como si la derivó la API. Compare el campo address con sus propios registros si depende del valor derivado.
Cuando se omite la dirección y no se puede leer la transacción, la solicitud responde 422 TRANSACTION_UNRESOLVED. Ocurre cuando el hash no existe en esa red, cuando no se puede decodificar el destinatario de un depósito o cuando la fuente de datos de la cadena no respondió a tiempo. No se acepta nada y no se cobra nada. Revise el hash y la red, reintente o envíe usted la dirección.
Ejemplos
Un depósito en TRON con la dirección omitida y un retiro en Ethereum con la dirección indicada.
- curl
- Node.js
- Python
# TRON deposit, address derived from the transaction
curl -s -X POST https://api.leeri.ai/v1/checks \
-H "Authorization: Bearer $LEERI_API_KEY" \
-H "Idempotency-Key: deposit-2291" \
-H "Content-Type: application/json" \
-d '{"subject":"transaction","asset":"TRX","tx_hash":"'"$TX_HASH"'","direction":"deposit"}'
# Ethereum withdrawal, address supplied
curl -s -X POST https://api.leeri.ai/v1/checks \
-H "Authorization: Bearer $LEERI_API_KEY" \
-H "Idempotency-Key: payout-5530" \
-H "Content-Type: application/json" \
-d '{"subject":"transaction","asset":"ETH","tx_hash":"'"$ETH_TX_HASH"'","direction":"withdrawal","address":"'"$ADDRESS"'"}'
async function checkTransaction(body, idempotencyKey) {
const response = await fetch('https://api.leeri.ai/v1/checks', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.LEERI_API_KEY}`,
'Idempotency-Key': idempotencyKey,
'Content-Type': 'application/json',
},
body: JSON.stringify({ subject: 'transaction', ...body }),
});
const payload = await response.json();
if (response.status === 422) {
const code = payload.errors[0].code;
if (code === 'TRANSACTION_UNRESOLVED') throw new Error('transaction not readable: check the hash and network, or send the address');
if (code === 'ADDRESS_REQUIRED') throw new Error('this asset needs the customer address');
}
return payload.data;
}
// TRON deposit, address derived from the transaction
await checkTransaction({ asset: 'TRX', tx_hash: txHash, direction: 'deposit' }, 'deposit-2291');
// Ethereum withdrawal, address supplied
await checkTransaction({ asset: 'ETH', tx_hash: ethTxHash, direction: 'withdrawal', address }, 'payout-5530');
import os
import requests
def check_transaction(body, idempotency_key):
response = requests.post(
"https://api.leeri.ai/v1/checks",
headers={
"Authorization": f"Bearer {os.environ['LEERI_API_KEY']}",
"Idempotency-Key": idempotency_key,
},
json={"subject": "transaction", **body},
timeout=30,
)
payload = response.json()
if response.status_code == 422:
code = payload["errors"][0]["code"]
if code == "TRANSACTION_UNRESOLVED":
raise RuntimeError("transaction not readable: check the hash and network, or send the address")
if code == "ADDRESS_REQUIRED":
raise RuntimeError("this asset needs the customer address")
return payload["data"]
# TRON deposit, address derived from the transaction
check_transaction({"asset": "TRX", "tx_hash": tx_hash, "direction": "deposit"}, "deposit-2291")
# Ethereum withdrawal, address supplied
check_transaction({"asset": "ETH", "tx_hash": eth_tx_hash, "direction": "withdrawal", "address": address}, "payout-5530")
Qué añade la respuesta
La respuesta es el mismo CheckView que devuelve una verificación de dirección, de modo que status puede ser completed o pending; vea Pending y sondeo. En una verificación de transacción se rellenan estos campos:
| Campo | Significado |
|---|---|
subject | transaction. |
tx_hash | La transacción que se verificó. |
direction | deposit o withdrawal, tal como la envió. |
address | La dirección del cliente que se usó, enviada o derivada. |
amount | El importe de la transacción como cadena decimal, nunca un número de coma flotante. null cuando no se conoce. |
risky_volume_usd | El valor en USD del flujo de la transacción vinculado a contrapartes de riesgo, como cadena decimal. null hasta que la verificación termina. |
Verificar una dirección por la que ya se le cobró en la misma cadena en los últimos 7 días es gratis, también cuando la verifica como transacción; vea Límites de solicitudes y cuotas.
Errores
Todo lo de Verificaciones de dirección es aplicable, además de:
| Estado | Código | Cuándo |
|---|---|---|
422 | ADDRESS_REQUIRED | address omitida para un activo que no puede derivarla, o con una clave sandbox. |
422 | TRANSACTION_UNRESOLVED | address omitida y no se pudo leer la transacción. Nunca se cobra. |
400 | VALIDATION_ERROR | Un tx_hash, direction o address con forma no válida, o un campo desconocido. |
Los elementos de un lote siempre envían address, porque un lote se acepta sin leer ninguna cadena.