Matcher Actions

Matcher actions are pre-configured matching rules. Instead of specifying matcher properties in every workflow, register a configuration once and reference it by name.


Registration

bash
curl -X POST http://localhost:3009/actions \
  -H "X-Org-Id: acme-corp" \
  -H "Content-Type: application/json" \
  -d '{
    "action_name": "invoice_payment_matcher",
    "kind": "matcher",
    "description": "Match invoices to payments by invoice number with 2% tolerance and 5-day date window",
    "left": "@input.invoices",
    "right": "@input.payments",
    "matchOn": ["invoice_number", "vendor_id"],
    "tolerance": 0.02,
    "dateWindowDays": 5,
    "fuzzyThreshold": 85,
    "descriptionKey": "description"
  }'

Properties

Property Type Required Description
action_name string Yes Unique name for this action
kind "matcher" Yes
left @path Yes Left dataset path
right @path Yes Right dataset path
matchOn string[] Yes Fields for exact matching
tolerance number No Numeric tolerance (decimal)
dateWindowDays number No Date window (±days)
fuzzyThreshold number No Text similarity 0–100
descriptionKey string No Field for fuzzy matching

All matching properties work identically to the Matcher primitive. The difference is that a matcher action saves the configuration for reuse.


Registered vs Primitive

Use the matcher primitive when matching configuration varies per workflow:

json
{ "type": "matcher", "properties": { "matchOn": ["invoice_id"], "tolerance": 0.01 } }

Use a registered matcher action when you have a standard matching configuration used across multiple workflows:

json
{ "type": "invoice_payment_matcher", "properties": { } }

Usage in a Workflow

json
{
  "type": "invoice_payment_matcher",
  "properties": {
    "invoices": "@input.new_invoices",
    "payments": "@input.recent_payments"
  }
}

Properties passed at execution time can override the registered defaults.


Usage as an Agent Tool

json
{
  "mode": "react",
  "objective": "Reconcile this batch of transactions",
  "tools": [{ "type": "action", "name": "invoice_payment_matcher" }]
}

The agent can invoke the matcher during its reasoning when it needs to compare datasets.

→ Next: Custom Table Actions