Antes de empezar
- Tracer en ejecución y alcanzable, con una API key — consulta Primeros pasos
- Las variables y el modelo de alcance — consulta el Motor de reglas
- Un id de cuenta de prueba al que puedas enviar validaciones, que ningún tráfico de clientes use
- La frase de la política, por escrito, con quien la escribió disponible para una pregunta
X-API-Key.
Paso 1: Mapea la frase sobre los campos
Una regla lee lo que la solicitud de validación transporta. Descompón la frase cláusula por cláusula y pon cada una en la columna a la que pertenece.
Los dos primeros son campos que Tracer define. Los dos últimos son campos que tu integración tiene que enviar — Tracer no tiene una opinión sobre qué significan “sin presencia física” o “dispositivo nuevo”. Esa es la pregunta que hay que llevar de vuelta a quien escribió la política: ¿qué bandera de nuestro payload dice que el dispositivo es nuevo?
subType llega a las expresiones en minúsculas, así que "card_not_present" es la forma contra la que hay que comparar. Si tu integración ya usa subType para otra cosa, lleva el modo de entrada en metadata y compara contra eso — ambos funcionan igual en una expresión.Paso 2: Divide la regla entre alcance y expresión
Dos cosas de esa tabla — el tipo de transacción y la cuenta — son cosas que Tracer puede filtrar antes de que corra una expresión. Esas pertenecen a los
scopes de la regla. Las comparaciones de valores pertenecen a la expression.
Alcance, que decide si la regla se considera siquiera:
amount > 5000 es estrictamente mayor, así que una transacción de exactamente 5000.00 no la dispara — verifica eso contra la política antes de seguir, porque “por encima de” y “desde” son reglas distintas.
Una regla que lee una clave de metadata que la solicitud no transporta no coincide, y las demás reglas siguen corriendo. Por eso la expresión de arriba no necesita una prueba de presencia para deviceFirstSeen; consulta el Motor de reglas.
Paso 3: Crea la regla como borrador
POST /v1/rules crea la regla en DRAFT. Un borrador no se evalúa, así que nada de lo que hagas aquí alcanza al tráfico.
accountId de ese alcance es tu cuenta de prueba. Es lo que mantiene el paso 4 fuera del tráfico de clientes; el paso 5 lo quita.
Un 201 responde con la regla almacenada:
name que devuelve puede diferir de la cadena que enviaste. Toma el ruleId de la respuesta — ese es el identificador que usa cada llamada de abajo. Consulta Crear una regla.
La expresión se compila en esta llamada, así que una expresión que no puede correr nunca llega a ser un borrador. Un error de sintaxis responde 0340, una expresión que no devuelve un booleano responde 0341, y una cuyo costo estimado está por encima de CEL_COST_LIMIT responde 0342.
Paso 4: Ensáyala en una cuenta que nadie más use
El alcance que fijaste es lo que mantiene contenido el ensayo: la regla se considera solo para transacciones de esa única cuenta de prueba, así que activarla la pone frente a exactamente el tráfico que le envíes.
1
Activa la regla con alcance
status: "ACTIVE" y un activatedAt. Consulta Activar una regla.2
Envía una transacción que la política debería rechazar
3
Lee la decisión
ruleId en matchedRuleIds es el ensayo pasando.4
Envía los casos que no deberían disparar
Cambia un valor a la vez y repite la llamada con un
requestId nuevo: "amount": "5000.00" para el límite exacto, "deviceFirstSeen": false para un dispositivo conocido, "subType": "purchase" para una venta con presencia física. Cada una debería volver sin tu ruleId en matchedRuleIds.Un ensayo es una validación real. Almacena un registro de decisión y escribe un evento de auditoría, y una decisión
ALLOW consume los límites de gasto que cubren esa cuenta. Por eso importa la cuenta de prueba.ruleId no está en matchedRuleIds, recórrelo en este orden: ¿la regla está ACTIVE (GET /v1/rules/{id})?, ¿la transacción coincide con el alcance que fijaste?, ¿los valores que enviaste satisfacen la expresión?
Paso 5: Ponla en producción
Pasar a producción significa una edición: quita la cuenta de prueba del alcance para que la regla aplique a la población que nombra la política.
1
Deja de evaluar la versión de ensayo
Editar el alcance no exige El estado pasa a
INACTIVE. Desactivar primero hace que el cambio surta efecto en un momento que tú controlas y deja un hueco visible en el rastro de auditoría. Cada instancia sirve las reglas desde una caché que refresca por sondeo (cada 10 segundos por defecto, RULE_SYNC_POLL_INTERVAL_SECONDS), así que espera esa ventana para que la desactivación llegue a todas las instancias; GET /v1/rules confirma el estado almacenado, no que cada instancia ya se haya puesto al día.INACTIVE. Consulta Desactivar una regla.2
Reemplaza el alcance
scopes reemplaza el arreglo completo — envía cada objeto de alcance que quieras que la regla conserve. Consulta Actualizar una regla.3
Activa
RULE_SYNC_POLL_INTERVAL_SECONDS, predeterminado 10). La desactivación viaja del mismo modo. Espera esa misma ventana después de activar antes de dar la regla por aplicada en todas las instancias.4
Confirma qué está vivo
GET /v1/rules/{id} devuelve la expresión y los alcances tal como están almacenados (Recuperar una regla). Ambos reportan el estado almacenado, no lo que guarda la caché de cada instancia.Una validación carga su conjunto de reglas una vez, desde la caché de la instancia que la atiende, cuando empieza la llamada. Una regla que se activa mientras una validación está en vuelo no forma parte de esa decisión, y las decisiones ya registradas no cambian cuando las reglas cambian después.
Paso 6: Conoce dónde queda tu regla entre las demás
Las reglas no tienen un campo de prioridad ni un orden que configurar. Las reglas cuyo alcance coincide con una transacción se evalúan juntas, y la decisión viene de la acción más estricta que disparó: primero una regla
DENY, luego un límite de gasto excedido, luego REVIEW, luego ALLOW, luego el valor predeterminado configurado para cuando no hay coincidencia. matchedRuleIds transporta cada regla que coincidió, sea cual sea la acción que cada una tiene.
Dos consecuencias para la regla que acabas de escribir:
-
Una regla
ALLOWno exime a nadie de una reglaDENY. Si la política tiene una excepción — clientes VIP, un comercio asociado — la excepción pertenece dentro de la expresiónDENY, como una condición más que la hace más estrecha:Fíjate en lo que eso cuesta: la regla estrechada ahora leemetadata.customerTier, y una solicitud que no transporta esa clave no coincide con ella. -
Tu regla se suma al conjunto que evalúa cada transacción que coincide.
MAX_RULES_PER_REQUESTlimita cuántas reglas evalúa una validación; cuando el conjunto es mayor, la respuesta reportatruncated: true— consulta variables de entorno.
Paso 7: Cambia la regla cuando cambie la política
Lo que haces depende del campo, no de cómo le está yendo a la regla.
Un
PATCH queda almacenado cuando responde, y llega a la evaluación en la siguiente sincronización de reglas. Cuando el cambio importa al minuto, desactiva primero y activa de nuevo después — esa secuencia además deja un hueco visible en el rastro de auditoría donde la regla no estaba haciendo cumplir la política, que es lo que buscará quien revise.
El ciclo de vida es un conjunto cerrado de movimientos: DRAFT se activa o se elimina; ACTIVE se desactiva; INACTIVE vuelve a DRAFT, vuelve a ACTIVE o se elimina; DELETED es el final. Cualquier otra cosa responde 422 con el código de error 0349 — incluida una solicitud de pasar a borrador una regla que todavía está ACTIVE.
Paso 8: Retira o elimina la regla
Para dejar de hacer cumplir la política sin perder nada, desactiva. La regla conserva su expresión, sus alcances y su historia, deja de evaluarse, y
POST /v1/rules/{id}/activate la trae de vuelta. Ese es el movimiento para una política suspendida, estacional o bajo revisión.
Para quitarla, elimina — y solo después de desactivar, porque una regla en ACTIVE no se puede eliminar:
204 responde en caso de éxito. Consulta Eliminar una regla.
Qué quita la eliminación:
- La regla deja de responder en
GET /v1/rules/{id}, que devuelve404con el código de error0347a partir de entonces. - Ya no aparece en
GET /v1/rules, yDELETEDno es un valor que acepte el filtrostatus. DELETEDes el final del ciclo de vida. Ningún endpoint saca a una regla de ahí — una regla eliminada vuelve solo como una regla nueva que crees de nuevo.
- El rastro de auditoría conserva el ciclo de vida de la regla, y el evento
RULE_DELETEDtransporta la definición — nombre, descripción, expresión, acción, alcances — tal como estaba al eliminarla. Consulta Auditoría y compliance. - Las decisiones que produjo la regla conservan su
ruleIdenmatchedRuleIds. Una denegación de hace seis meses todavía la nombra — consulta Revisar una transacción denegada. - El nombre queda disponible de nuevo para una regla nueva en el mismo contexto.
Errores frecuentes
Códigos de error
La lista completa está en la Lista de errores de Tracer.

