Compliance

OFAC exposure forecast

Forecast future OFAC wallet exposure for a wallet set using stored OFAC snapshot diffs when available, listedOn backfill when honest, or an explicit caller prior. Returns current exact-match baseline, metadata-weighted per-wallet risk, model limitations, and a report-shaped payload for audit handoff.

Browser note: GET on this URL serves human-readable docs. Paid execution still requires POST with x402 settlement.

Returns the history basis, target probability, per-wallet exposure rows, sensitivity table, and model limitations for compliance triage.

Example request body

Use this payload shape for the paid POST call.

{
  "addresses": [
    "0x1111111111111111111111111111111111111111",
    "0x2222222222222222222222222222222222222222"
  ],
  "address_metadata": [
    {
      "address": "0x1111111111111111111111111111111111111111",
      "exposure_usd": 250000,
      "relationship_tier": "critical",
      "last_activity_days": 4,
      "transaction_count_30d": 22,
      "policy_priority": 8
    },
    {
      "address": "0x2222222222222222222222222222222222222222",
      "exposure_usd": 1000,
      "relationship_tier": "low"
    }
  ],
  "horizon_days": 90,
  "iterations": 30000,
  "target": {
    "operator": ">=",
    "k": 1
  },
  "priors": {
    "list_add_rate_override_per_day": 0.25
  }
}

Request schema

The canonical body contract as exposed through discovery and OpenAPI.

{
  "type": "object",
  "properties": {
    "addresses": {
      "type": "array",
      "description": "Wallet addresses to forecast for future OFAC exact-match exposure.",
      "items": {
        "type": "string"
      },
      "minItems": 1,
      "maxItems": 500
    },
    "address_metadata": {
      "type": "array",
      "description": "Optional per-address business metadata used to weight exposure hazard.",
      "items": {
        "type": "object",
        "properties": {
          "address": {
            "type": "string",
            "description": "Wallet address this metadata row describes."
          },
          "exposure_usd": {
            "type": "number",
            "description": "Dollar exposure associated with this wallet."
          },
          "relationship_tier": {
            "type": "string",
            "description": "Relationship risk tier for this wallet.",
            "enum": [
              "low",
              "standard",
              "high",
              "critical"
            ]
          },
          "last_activity_days": {
            "type": "number",
            "description": "Days since the wallet was last active."
          },
          "transaction_count_30d": {
            "type": "number",
            "description": "Transaction count over the trailing 30 days."
          },
          "policy_priority": {
            "type": "number",
            "description": "Optional internal policy priority from 0 to 10."
          }
        },
        "required": [
          "address"
        ],
        "additionalProperties": false
      }
    },
    "asset": {
      "type": "string",
      "description": "Optional asset or network ticker filter, such as ETH, USDC, XBT, TRX, ARB, or BSC."
    },
    "horizon_days": {
      "type": "integer",
      "description": "Forecast horizon in days. Values are bounded to 7 through 365."
    },
    "iterations": {
      "type": "integer",
      "description": "Forecast trial count. Values are bounded to 1000 through 100000."
    },
    "target": {
      "type": "object",
      "description": "Target event for the forecast probability.",
      "properties": {
        "operator": {
          "type": "string",
          "enum": [
            ">=",
            ">",
            "==",
            "<=",
            "<"
          ]
        },
        "k": {
          "type": "integer",
          "description": "Target count threshold."
        }
      },
      "required": [
        "operator",
        "k"
      ],
      "additionalProperties": false
    },
    "tier_weights": {
      "type": "object",
      "description": "Optional overrides for low, standard, high, and critical relationship tier weights.",
      "additionalProperties": {
        "type": "number"
      }
    },
    "priors": {
      "type": "object",
      "description": "Explicit prior assumptions used only when the caller wants to override the OFAC history cadence.",
      "properties": {
        "list_add_rate_override_per_day": {
          "type": "number",
          "description": "Caller-supplied expected OFAC digital-currency address additions per day."
        }
      },
      "additionalProperties": false
    },
    "title": {
      "type": "string",
      "description": "Optional report title."
    },
    "summary_focus": {
      "type": "string",
      "description": "Optional summary focus for the report."
    }
  },
  "required": [
    "addresses"
  ],
  "additionalProperties": false
}

Example response

A representative output payload for the route.

{
  "success": true,
  "data": {
    "summary": {
      "target_probability": 0.12,
      "p50_expected_hits": 0,
      "p90_expected_hits": 1,
      "metadata_coverage_percent": 100
    },
    "forecast_model": {
      "history_basis": "snapshot_diff",
      "model_confidence": "standard"
    }
  },
  "report": {
    "report_meta": {
      "report_type": "compliance-exposure-forecast"
    },
    "headline_metrics": [],
    "tables": {
      "per_wallet_exposure": {
        "columns": [
          "address",
          "screening_status",
          "future_hit_probability"
        ],
        "rows": []
      }
    }
  },
  "source": "OFAC SDN Advanced XML"
}

cURL

Use this as the starting point for HTTP execution after the initial 402 challenge.

curl -X POST "https://api.aurelianflo.com/api/workflows/compliance/exposure-forecast" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  # include x402 settlement headers after the initial 402 challenge \
  -d '{
  "addresses": [
    "0x1111111111111111111111111111111111111111",
    "0x2222222222222222222222222222222222222222"
  ],
  "address_metadata": [
    {
      "address": "0x1111111111111111111111111111111111111111",
      "exposure_usd": 250000,
      "relationship_tier": "critical",
      "last_activity_days": 4,
      "transaction_count_30d": 22,
      "policy_priority": 8
    },
    {
      "address": "0x2222222222222222222222222222222222222222",
      "exposure_usd": 1000,
      "relationship_tier": "low"
    }
  ],
  "horizon_days": 90,
  "iterations": 30000,
  "target": {
    "operator": ">=",
    "k": 1
  },
  "priors": {
    "list_add_rate_override_per_day": 0.25
  }
}'

Related routes

Use these when you want the lower-level primitive, the buyer-facing memo workflow, or the agent install surface around this endpoint.