curl -X POST 'https://verification.didit.me/v3/transactions/rules/' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"title": "Structuring - inbound (custom)", "description": "20+ inbound EUR transfers, all under 10,000 EUR, 30 days", "category": "finance", "mode": "TEST", "evaluation_mode": "ALL", "scope": {"transaction_types": ["finance"], "directions": ["INBOUND"]}, "conditions": [{"field": "currency", "operator": "eq", "value": "EUR"}, {"field": "amount", "operator": "lt", "value": 10000}], "aggregation": [{"metric": "count", "operator": "gte", "value": 20, "window": "30d", "filters": {"direction": "INBOUND", "transaction_type": "finance", "subject_vendor_data": "__current__", "currency": "EUR"}}, {"metric": "max", "field": "amount", "operator": "lt", "value": 10000, "window": "30d", "filters": {"direction": "INBOUND", "transaction_type": "finance", "subject_vendor_data": "__current__", "currency": "EUR"}}], "actions": [{"type": "add_score", "value": 35}]}'from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.transactions.rules.create(
title="Structuring - inbound (custom)",
description="20+ inbound EUR transfers, all under 10,000 EUR, 30 days",
category="finance",
mode="TEST",
evaluation_mode="ALL",
scope={
"transaction_types": ["finance"],
"directions": ["INBOUND"],
},
conditions=[{
"field": "currency",
"operator": "eq",
"value": "EUR",
}, {
"field": "amount",
"operator": "lt",
"value": 10000,
}],
aggregation=[{
"metric": "count",
"operator": "gte",
"value": 20.0,
"window": "30d",
"filters": {"direction": "INBOUND", "transaction_type": "finance", "subject_vendor_data": "__current__", "currency": "EUR"},
}, {
"metric": "max",
"field": "amount",
"operator": "lt",
"value": 10000.0,
"window": "30d",
"filters": {"direction": "INBOUND", "transaction_type": "finance", "subject_vendor_data": "__current__", "currency": "EUR"},
}],
actions=[{
"type": "add_score",
"value": 35,
}],
)
print(result)import Didit from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.transactions.rules.create({
title: "Structuring - inbound (custom)",
description: "20+ inbound EUR transfers, all under 10,000 EUR, 30 days",
category: "finance",
mode: "TEST",
evaluation_mode: "ALL",
scope: {
transaction_types: ["finance"],
directions: ["INBOUND"],
},
conditions: [{
field: "currency",
operator: "eq",
value: "EUR",
}, {
field: "amount",
operator: "lt",
value: 10000,
}],
aggregation: [{
metric: "count",
operator: "gte",
value: 20.0,
window: "30d",
filters: { direction: "INBOUND", transaction_type: "finance", subject_vendor_data: "__current__", currency: "EUR" },
}, {
metric: "max",
field: "amount",
operator: "lt",
value: 10000.0,
window: "30d",
filters: { direction: "INBOUND", transaction_type: "finance", subject_vendor_data: "__current__", currency: "EUR" },
}],
actions: [{
type: "add_score",
value: 35,
}],
});
console.log(result);ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.Transactions.Rules.Create(ctx, didit.TransactionRuleCreateRequest{
Title: "Structuring - inbound (custom)",
Description: didit.String("20+ inbound EUR transfers, all under 10,000 EUR, 30 days"),
Category: "finance",
Mode: "TEST",
EvaluationMode: didit.Some(didit.TransactionRuleCreateRequestEvaluationMode("ALL")),
Scope: didit.Some(didit.TransactionRuleScopeParam{
TransactionTypes: didit.Some([]string{"finance"}),
Directions: didit.Some([]didit.TransactionRuleScopeDirections{"INBOUND"}),
}),
Conditions: didit.Some([]didit.TransactionRuleConditionParam{{
Field: "currency",
Operator: "eq",
Value: didit.Some[any]("EUR"),
}, {
Field: "amount",
Operator: "lt",
Value: didit.Some[any](10000),
}}),
Aggregation: didit.Some([]didit.TransactionRuleAggregationParam{{
Metric: didit.Some(didit.TransactionRuleAggregationMetric("count")),
Operator: didit.Some(didit.TransactionRuleAggregationOperator("gte")),
Value: 20.0,
Window: didit.String("30d"),
Filters: didit.Some(map[string]any{"direction": "INBOUND", "transaction_type": "finance", "subject_vendor_data": "__current__", "currency": "EUR"}),
}, {
Metric: didit.Some(didit.TransactionRuleAggregationMetric("max")),
Field: didit.String("amount"),
Operator: didit.Some(didit.TransactionRuleAggregationOperator("lt")),
Value: 10000.0,
Window: didit.String("30d"),
Filters: didit.Some(map[string]any{"direction": "INBOUND", "transaction_type": "finance", "subject_vendor_data": "__current__", "currency": "EUR"}),
}}),
Actions: didit.Some([]didit.TransactionRuleActionParam{{
Type: "add_score",
Value: didit.Some[any](35),
}}),
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)import java.util.List;
import java.util.Map;
import me.didit.Didit;
import me.didit.types.TransactionRuleAction;
import me.didit.types.TransactionRuleActionAddScore;
import me.didit.types.TransactionRuleAggregation;
import me.didit.types.TransactionRuleCondition;
import me.didit.types.TransactionRuleCreateRequest;
import me.didit.types.TransactionRuleScope;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
var result = client.transactions().rules().create(TransactionRuleCreateRequest.builder()
.title("Structuring - inbound (custom)")
.description("20+ inbound EUR transfers, all under 10,000 EUR, 30 days")
.category("finance")
.mode(TransactionRuleCreateRequest.Mode.of("TEST"))
.evaluationMode(TransactionRuleCreateRequest.EvaluationMode.of("ALL"))
.scope(TransactionRuleScope.builder()
.transactionTypes(List.of("finance"))
.directions(List.of(TransactionRuleScope.Directions.of("INBOUND")))
.build())
.conditions(List.of(
TransactionRuleCondition.builder()
.field("currency")
.operator(TransactionRuleCondition.Operator.of("eq"))
.value("EUR")
.build(),
TransactionRuleCondition.builder()
.field("amount")
.operator(TransactionRuleCondition.Operator.of("lt"))
.value(10000)
.build()))
.aggregation(List.of(
TransactionRuleAggregation.builder()
.metric(TransactionRuleAggregation.Metric.of("count"))
.operator(TransactionRuleAggregation.Operator.of("gte"))
.value(20.0)
.window("30d")
.filters(Map.of("direction", "INBOUND", "transaction_type", "finance", "subject_vendor_data", "__current__", "currency", "EUR"))
.build(),
TransactionRuleAggregation.builder()
.metric(TransactionRuleAggregation.Metric.of("max"))
.field("amount")
.operator(TransactionRuleAggregation.Operator.of("lt"))
.value(10000.0)
.window("30d")
.filters(Map.of("direction", "INBOUND", "transaction_type", "finance", "subject_vendor_data", "__current__", "currency", "EUR"))
.build()))
.actions(List.of(TransactionRuleAction.ofAddScore(TransactionRuleActionAddScore.builder()
.type(TransactionRuleActionAddScore.Type.of("add_score"))
.value(35L)
.build())))
.build());
System.out.println(result);<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
$result = $didit->transactions->rules->create([
'title' => 'Structuring - inbound (custom)',
'description' => '20+ inbound EUR transfers, all under 10,000 EUR, 30 days',
'category' => 'finance',
'mode' => 'TEST',
'evaluation_mode' => 'ALL',
'scope' => [
'transaction_types' => ['finance'],
'directions' => ['INBOUND'],
],
'conditions' => [[
'field' => 'currency',
'operator' => 'eq',
'value' => 'EUR',
], [
'field' => 'amount',
'operator' => 'lt',
'value' => 10000,
]],
'aggregation' => [[
'metric' => 'count',
'operator' => 'gte',
'value' => 20.0,
'window' => '30d',
'filters' => ['direction' => 'INBOUND', 'transaction_type' => 'finance', 'subject_vendor_data' => '__current__', 'currency' => 'EUR'],
], [
'metric' => 'max',
'field' => 'amount',
'operator' => 'lt',
'value' => 10000.0,
'window' => '30d',
'filters' => ['direction' => 'INBOUND', 'transaction_type' => 'finance', 'subject_vendor_data' => '__current__', 'currency' => 'EUR'],
]],
'actions' => [[
'type' => 'add_score',
'value' => 35,
]],
]);
print_r($result->toArray());require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.transactions.rules.create(
title: "Structuring - inbound (custom)",
description: "20+ inbound EUR transfers, all under 10,000 EUR, 30 days",
category: "finance",
mode: "TEST",
evaluation_mode: "ALL",
scope: {
transaction_types: ["finance"],
directions: ["INBOUND"],
},
conditions: [{
field: "currency",
operator: "eq",
value: "EUR",
}, {
field: "amount",
operator: "lt",
value: 10000,
}],
aggregation: [{
metric: "count",
operator: "gte",
value: 20.0,
window: "30d",
filters: { direction: "INBOUND", transaction_type: "finance", subject_vendor_data: "__current__", currency: "EUR" },
}, {
metric: "max",
field: "amount",
operator: "lt",
value: 10000.0,
window: "30d",
filters: { direction: "INBOUND", transaction_type: "finance", subject_vendor_data: "__current__", currency: "EUR" },
}],
actions: [{
type: "add_score",
value: 35,
}]
)
puts result.to_husing System;
using System.Collections.Generic;
using System.Text.Json;
using Didit;
// Reads DIDIT_API_KEY.
using var client = new DiditClient();
var result = await client.Transactions.Rules.CreateAsync(new TransactionRuleCreateRequest
{
Title = "Structuring - inbound (custom)",
Description = "20+ inbound EUR transfers, all under 10,000 EUR, 30 days",
Category = "finance",
Mode = "TEST",
EvaluationMode = new TransactionRuleCreateRequestEvaluationMode("ALL"),
Scope = new TransactionRuleScope
{
TransactionTypes = new string[] { "finance" },
Directions = new TransactionRuleScopeDirections[] { "INBOUND" },
},
Conditions = new TransactionRuleCondition[]
{
new()
{
Field = "currency",
Operator = "eq",
Value = "EUR",
},
new()
{
Field = "amount",
Operator = "lt",
Value = 10000,
},
},
Aggregation = new TransactionRuleAggregation[]
{
new()
{
Metric = new TransactionRuleAggregationMetric("count"),
Operator = new TransactionRuleAggregationOperator("gte"),
Value = 20.0,
Window = "30d",
Filters = new Dictionary<string, object> { ["direction"] = "INBOUND", ["transaction_type"] = "finance", ["subject_vendor_data"] = "__current__", ["currency"] = "EUR" },
},
new()
{
Metric = new TransactionRuleAggregationMetric("max"),
Field = "amount",
Operator = new TransactionRuleAggregationOperator("lt"),
Value = 10000.0,
Window = "30d",
Filters = new Dictionary<string, object> { ["direction"] = "INBOUND", ["transaction_type"] = "finance", ["subject_vendor_data"] = "__current__", ["currency"] = "EUR" },
},
},
Actions = new TransactionRuleAction[]
{
new()
{
Type = new TransactionRuleActionType("add_score"),
Value = 35,
},
},
});
Console.WriteLine(JsonSerializer.Serialize(result));{
"uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"description": "<string>",
"category": "<string>",
"mode": "ACTIVE",
"evaluation_mode": "ALL",
"scope": {
"transaction_types": [
"<string>"
],
"directions": [
"INBOUND"
],
"action_types": [
"<string>"
]
},
"conditions": [
{
"field": "<string>",
"operator": "eq",
"value": "<unknown>",
"value_type": "list",
"score": 50,
"group_index": 123,
"group_logic": "AND",
"groups_logic": "OR"
}
],
"aggregation": [
{
"value": 123,
"metric": "count",
"field": "amount",
"operator": "eq",
"window": "1d",
"filters": {}
}
],
"actions": [
{
"type": "add_score",
"value": 123
}
],
"metadata": {},
"severity": "UNKNOWN",
"source": "PRESET",
"library_key": "<string>",
"latest_triggered_at": "2023-11-07T05:31:56Z",
"run_count": 123,
"approved_count": 123,
"reviewed_count": 123,
"declined_count": 123,
"awaiting_user_count": 123,
"approved_pct": 123,
"reviewed_pct": 123,
"declined_pct": 123,
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}{
"title": [
"A rule with this name already exists."
]
}创建交易监控规则 API - KYT 规则
通过 Didit API 创建自定义 KYT 规则:条件、速率窗口、范围与操作,附完整架构。先在测试模式下创建并回溯测试,再激活。
curl -X POST 'https://verification.didit.me/v3/transactions/rules/' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"title": "Structuring - inbound (custom)", "description": "20+ inbound EUR transfers, all under 10,000 EUR, 30 days", "category": "finance", "mode": "TEST", "evaluation_mode": "ALL", "scope": {"transaction_types": ["finance"], "directions": ["INBOUND"]}, "conditions": [{"field": "currency", "operator": "eq", "value": "EUR"}, {"field": "amount", "operator": "lt", "value": 10000}], "aggregation": [{"metric": "count", "operator": "gte", "value": 20, "window": "30d", "filters": {"direction": "INBOUND", "transaction_type": "finance", "subject_vendor_data": "__current__", "currency": "EUR"}}, {"metric": "max", "field": "amount", "operator": "lt", "value": 10000, "window": "30d", "filters": {"direction": "INBOUND", "transaction_type": "finance", "subject_vendor_data": "__current__", "currency": "EUR"}}], "actions": [{"type": "add_score", "value": 35}]}'from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.transactions.rules.create(
title="Structuring - inbound (custom)",
description="20+ inbound EUR transfers, all under 10,000 EUR, 30 days",
category="finance",
mode="TEST",
evaluation_mode="ALL",
scope={
"transaction_types": ["finance"],
"directions": ["INBOUND"],
},
conditions=[{
"field": "currency",
"operator": "eq",
"value": "EUR",
}, {
"field": "amount",
"operator": "lt",
"value": 10000,
}],
aggregation=[{
"metric": "count",
"operator": "gte",
"value": 20.0,
"window": "30d",
"filters": {"direction": "INBOUND", "transaction_type": "finance", "subject_vendor_data": "__current__", "currency": "EUR"},
}, {
"metric": "max",
"field": "amount",
"operator": "lt",
"value": 10000.0,
"window": "30d",
"filters": {"direction": "INBOUND", "transaction_type": "finance", "subject_vendor_data": "__current__", "currency": "EUR"},
}],
actions=[{
"type": "add_score",
"value": 35,
}],
)
print(result)import Didit from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.transactions.rules.create({
title: "Structuring - inbound (custom)",
description: "20+ inbound EUR transfers, all under 10,000 EUR, 30 days",
category: "finance",
mode: "TEST",
evaluation_mode: "ALL",
scope: {
transaction_types: ["finance"],
directions: ["INBOUND"],
},
conditions: [{
field: "currency",
operator: "eq",
value: "EUR",
}, {
field: "amount",
operator: "lt",
value: 10000,
}],
aggregation: [{
metric: "count",
operator: "gte",
value: 20.0,
window: "30d",
filters: { direction: "INBOUND", transaction_type: "finance", subject_vendor_data: "__current__", currency: "EUR" },
}, {
metric: "max",
field: "amount",
operator: "lt",
value: 10000.0,
window: "30d",
filters: { direction: "INBOUND", transaction_type: "finance", subject_vendor_data: "__current__", currency: "EUR" },
}],
actions: [{
type: "add_score",
value: 35,
}],
});
console.log(result);ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.Transactions.Rules.Create(ctx, didit.TransactionRuleCreateRequest{
Title: "Structuring - inbound (custom)",
Description: didit.String("20+ inbound EUR transfers, all under 10,000 EUR, 30 days"),
Category: "finance",
Mode: "TEST",
EvaluationMode: didit.Some(didit.TransactionRuleCreateRequestEvaluationMode("ALL")),
Scope: didit.Some(didit.TransactionRuleScopeParam{
TransactionTypes: didit.Some([]string{"finance"}),
Directions: didit.Some([]didit.TransactionRuleScopeDirections{"INBOUND"}),
}),
Conditions: didit.Some([]didit.TransactionRuleConditionParam{{
Field: "currency",
Operator: "eq",
Value: didit.Some[any]("EUR"),
}, {
Field: "amount",
Operator: "lt",
Value: didit.Some[any](10000),
}}),
Aggregation: didit.Some([]didit.TransactionRuleAggregationParam{{
Metric: didit.Some(didit.TransactionRuleAggregationMetric("count")),
Operator: didit.Some(didit.TransactionRuleAggregationOperator("gte")),
Value: 20.0,
Window: didit.String("30d"),
Filters: didit.Some(map[string]any{"direction": "INBOUND", "transaction_type": "finance", "subject_vendor_data": "__current__", "currency": "EUR"}),
}, {
Metric: didit.Some(didit.TransactionRuleAggregationMetric("max")),
Field: didit.String("amount"),
Operator: didit.Some(didit.TransactionRuleAggregationOperator("lt")),
Value: 10000.0,
Window: didit.String("30d"),
Filters: didit.Some(map[string]any{"direction": "INBOUND", "transaction_type": "finance", "subject_vendor_data": "__current__", "currency": "EUR"}),
}}),
Actions: didit.Some([]didit.TransactionRuleActionParam{{
Type: "add_score",
Value: didit.Some[any](35),
}}),
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)import java.util.List;
import java.util.Map;
import me.didit.Didit;
import me.didit.types.TransactionRuleAction;
import me.didit.types.TransactionRuleActionAddScore;
import me.didit.types.TransactionRuleAggregation;
import me.didit.types.TransactionRuleCondition;
import me.didit.types.TransactionRuleCreateRequest;
import me.didit.types.TransactionRuleScope;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
var result = client.transactions().rules().create(TransactionRuleCreateRequest.builder()
.title("Structuring - inbound (custom)")
.description("20+ inbound EUR transfers, all under 10,000 EUR, 30 days")
.category("finance")
.mode(TransactionRuleCreateRequest.Mode.of("TEST"))
.evaluationMode(TransactionRuleCreateRequest.EvaluationMode.of("ALL"))
.scope(TransactionRuleScope.builder()
.transactionTypes(List.of("finance"))
.directions(List.of(TransactionRuleScope.Directions.of("INBOUND")))
.build())
.conditions(List.of(
TransactionRuleCondition.builder()
.field("currency")
.operator(TransactionRuleCondition.Operator.of("eq"))
.value("EUR")
.build(),
TransactionRuleCondition.builder()
.field("amount")
.operator(TransactionRuleCondition.Operator.of("lt"))
.value(10000)
.build()))
.aggregation(List.of(
TransactionRuleAggregation.builder()
.metric(TransactionRuleAggregation.Metric.of("count"))
.operator(TransactionRuleAggregation.Operator.of("gte"))
.value(20.0)
.window("30d")
.filters(Map.of("direction", "INBOUND", "transaction_type", "finance", "subject_vendor_data", "__current__", "currency", "EUR"))
.build(),
TransactionRuleAggregation.builder()
.metric(TransactionRuleAggregation.Metric.of("max"))
.field("amount")
.operator(TransactionRuleAggregation.Operator.of("lt"))
.value(10000.0)
.window("30d")
.filters(Map.of("direction", "INBOUND", "transaction_type", "finance", "subject_vendor_data", "__current__", "currency", "EUR"))
.build()))
.actions(List.of(TransactionRuleAction.ofAddScore(TransactionRuleActionAddScore.builder()
.type(TransactionRuleActionAddScore.Type.of("add_score"))
.value(35L)
.build())))
.build());
System.out.println(result);<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
$result = $didit->transactions->rules->create([
'title' => 'Structuring - inbound (custom)',
'description' => '20+ inbound EUR transfers, all under 10,000 EUR, 30 days',
'category' => 'finance',
'mode' => 'TEST',
'evaluation_mode' => 'ALL',
'scope' => [
'transaction_types' => ['finance'],
'directions' => ['INBOUND'],
],
'conditions' => [[
'field' => 'currency',
'operator' => 'eq',
'value' => 'EUR',
], [
'field' => 'amount',
'operator' => 'lt',
'value' => 10000,
]],
'aggregation' => [[
'metric' => 'count',
'operator' => 'gte',
'value' => 20.0,
'window' => '30d',
'filters' => ['direction' => 'INBOUND', 'transaction_type' => 'finance', 'subject_vendor_data' => '__current__', 'currency' => 'EUR'],
], [
'metric' => 'max',
'field' => 'amount',
'operator' => 'lt',
'value' => 10000.0,
'window' => '30d',
'filters' => ['direction' => 'INBOUND', 'transaction_type' => 'finance', 'subject_vendor_data' => '__current__', 'currency' => 'EUR'],
]],
'actions' => [[
'type' => 'add_score',
'value' => 35,
]],
]);
print_r($result->toArray());require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.transactions.rules.create(
title: "Structuring - inbound (custom)",
description: "20+ inbound EUR transfers, all under 10,000 EUR, 30 days",
category: "finance",
mode: "TEST",
evaluation_mode: "ALL",
scope: {
transaction_types: ["finance"],
directions: ["INBOUND"],
},
conditions: [{
field: "currency",
operator: "eq",
value: "EUR",
}, {
field: "amount",
operator: "lt",
value: 10000,
}],
aggregation: [{
metric: "count",
operator: "gte",
value: 20.0,
window: "30d",
filters: { direction: "INBOUND", transaction_type: "finance", subject_vendor_data: "__current__", currency: "EUR" },
}, {
metric: "max",
field: "amount",
operator: "lt",
value: 10000.0,
window: "30d",
filters: { direction: "INBOUND", transaction_type: "finance", subject_vendor_data: "__current__", currency: "EUR" },
}],
actions: [{
type: "add_score",
value: 35,
}]
)
puts result.to_husing System;
using System.Collections.Generic;
using System.Text.Json;
using Didit;
// Reads DIDIT_API_KEY.
using var client = new DiditClient();
var result = await client.Transactions.Rules.CreateAsync(new TransactionRuleCreateRequest
{
Title = "Structuring - inbound (custom)",
Description = "20+ inbound EUR transfers, all under 10,000 EUR, 30 days",
Category = "finance",
Mode = "TEST",
EvaluationMode = new TransactionRuleCreateRequestEvaluationMode("ALL"),
Scope = new TransactionRuleScope
{
TransactionTypes = new string[] { "finance" },
Directions = new TransactionRuleScopeDirections[] { "INBOUND" },
},
Conditions = new TransactionRuleCondition[]
{
new()
{
Field = "currency",
Operator = "eq",
Value = "EUR",
},
new()
{
Field = "amount",
Operator = "lt",
Value = 10000,
},
},
Aggregation = new TransactionRuleAggregation[]
{
new()
{
Metric = new TransactionRuleAggregationMetric("count"),
Operator = new TransactionRuleAggregationOperator("gte"),
Value = 20.0,
Window = "30d",
Filters = new Dictionary<string, object> { ["direction"] = "INBOUND", ["transaction_type"] = "finance", ["subject_vendor_data"] = "__current__", ["currency"] = "EUR" },
},
new()
{
Metric = new TransactionRuleAggregationMetric("max"),
Field = "amount",
Operator = new TransactionRuleAggregationOperator("lt"),
Value = 10000.0,
Window = "30d",
Filters = new Dictionary<string, object> { ["direction"] = "INBOUND", ["transaction_type"] = "finance", ["subject_vendor_data"] = "__current__", ["currency"] = "EUR" },
},
},
Actions = new TransactionRuleAction[]
{
new()
{
Type = new TransactionRuleActionType("add_score"),
Value = 35,
},
},
});
Console.WriteLine(JsonSerializer.Serialize(result));{
"uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"description": "<string>",
"category": "<string>",
"mode": "ACTIVE",
"evaluation_mode": "ALL",
"scope": {
"transaction_types": [
"<string>"
],
"directions": [
"INBOUND"
],
"action_types": [
"<string>"
]
},
"conditions": [
{
"field": "<string>",
"operator": "eq",
"value": "<unknown>",
"value_type": "list",
"score": 50,
"group_index": 123,
"group_logic": "AND",
"groups_logic": "OR"
}
],
"aggregation": [
{
"value": 123,
"metric": "count",
"field": "amount",
"operator": "eq",
"window": "1d",
"filters": {}
}
],
"actions": [
{
"type": "add_score",
"value": 123
}
],
"metadata": {},
"severity": "UNKNOWN",
"source": "PRESET",
"library_key": "<string>",
"latest_triggered_at": "2023-11-07T05:31:56Z",
"run_count": 123,
"approved_count": 123,
"reviewed_count": 123,
"declined_count": 123,
"awaiting_user_count": 123,
"approved_pct": 123,
"reviewed_pct": 123,
"declined_pct": 123,
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}{
"title": [
"A rule with this name already exists."
]
}授权
您的应用 API 密钥,可在 Business Console 的“开发者 -> API 密钥”中获取。主密钥拥有完整访问权限。指定名称的密钥可设置作用域:针对每个资源设为无权限、只读或读写,限定于特定工作流或已通过的会话、限定于 IP 地址列表,以及设置到期日期。401 表示密钥错误、已撤销或已过期;403 表示未发送密钥、密钥无权访问该资源或操作,或请求来自其 IP 列表之外的地址;在会话路由上返回 404 表示该会话不在该密钥允许的工作流或状态范围内。没有媒体访问权限的密钥获取到的图片、视频和 PDF URL 将为 null;没有会话写入权限的密钥获取到的会话链接和 token 将为 null。请参阅 https://docs.didit.me/console/api-keys。
请求体
创建一条 CUSTOM 规则。处于 ACTIVE 模式的规则会立即对新交易生效,请先在 TEST 模式下创建并进行回测。
规则名称。在每个应用未删除的规则中必须唯一;重复将返回 400。
用于分组和报告的风险主题,例如 finance、aml_ctf、anomaly_detection、fatf、device_intelligence、crypto_monitoring、travel_rule、responsible_gaming、e_commerce。
ACTIVE 会进行实时评估。TEST 会评估并记录规则运行情况,但绝不会影响评分或状态,这是推荐的初始模式。DISABLED 则会被跳过。
ACTIVE, DISABLED, TEST 是否必须满足所有条件(ALL)还是至少满足一个条件(ANY)。当条件使用 group_index 时忽略此项。
ALL, ANY 该规则适用于哪些交易。仅接受这三个键。
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
一个规则操作。一条规则可包含多个操作;命中时将一并应用。处于 TEST 模式的规则会记录本应执行的操作,而不会实际应用任何操作。
- Option 1
- Option 2
- Option 3
- Option 4
- Option 5
- Option 6
Show child attributes
Show child attributes
存储在规则中的自由格式元数据。
响应
已创建的规则。
规则名称。在每个应用未删除的规则中必须唯一;重复将返回 400。
用于分组和报告的风险主题,例如 finance、aml_ctf、anomaly_detection、fatf、device_intelligence、crypto_monitoring、travel_rule、responsible_gaming、e_commerce。
ACTIVE 会进行实时评估。TEST 会评估并记录规则运行情况,但绝不会影响评分或状态,这是推荐的初始模式。DISABLED 则会被跳过。
ACTIVE, DISABLED, TEST 是否必须满足所有条件(ALL)还是至少满足一个条件(ANY)。当条件使用 group_index 时忽略此项。
ALL, ANY 该规则适用于哪些交易。仅接受这三个键。
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
一个规则操作。一条规则可包含多个操作;命中时将一并应用。处于 TEST 模式的规则会记录本应执行的操作,而不会实际应用任何操作。
- Option 1
- Option 2
- Option 3
- Option 4
- Option 5
- Option 6
Show child attributes
Show child attributes
存储在规则中的自由格式元数据。
规则库规则携带的信息性严重程度;不可在自定义规则上设置。
UNKNOWN, LOW, MEDIUM, HIGH, CRITICAL PRESET 规则来自规则库(安装/卸载,仅限模式编辑);CUSTOM 规则完全由您自定义。
PRESET, CUSTOM 稳定的库标识符;自定义规则为 null。
匹配此规则的交易数量。