> For the complete documentation index, see [llms.txt](https://docs.ospree.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.ospree.io/developers/rule-engine/api-endpoints/rule-evaluation.md).

# Rule Evaluation

Evaluate a transaction against the business's compliance rules.

## POST /api/v2/engine/evaluate

> Evaluate Transaction

```json
{"openapi":"3.1.0","info":{"title":"Ospree Compliance API","version":"2.0.0"},"tags":[{"name":"Rule Evaluation","description":"Evaluate a transaction against the business's compliance rules."}],"security":[{"HTTPBearer":[]}],"components":{"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}},"schemas":{"RuleEvalRequest":{"properties":{"transaction":{"$ref":"#/components/schemas/TransactionRequest","description":"Transaction details to evaluate against the rules"},"rule_codes":{"items":{"type":"string"},"type":"array","title":"Rule Codes","description":"List of rule codes to evaluate. An empty list evaluates all of the business's active rules. A listed code with no active configuration is reported in `data.results` with `status: \"error\"` rather than omitted."}},"type":"object","required":["transaction","rule_codes"],"title":"RuleEvalRequest"},"TransactionRequest":{"properties":{"transaction_id":{"type":"string","minLength":3,"title":"Transaction Id","description":"Unique transaction identifier"},"originator_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Originator Address","description":"Wallet involved in the transaction"},"originator_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Originator Name","description":"Sender identifier"},"originator_account_reference_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Originator Account Reference Id","description":"Sender account identifier"},"beneficiary_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Beneficiary Address","description":"Recepient wallet involved in the transaction"},"beneficiary_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Beneficiary Name","description":"Recipient identifier"},"beneficiary_account_reference_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Beneficiary Account Reference Id","description":"Recepient account identifier"},"amount":{"type":"number","exclusiveMinimum":0,"title":"Amount","description":"Amount transferred"},"currency":{"type":"string","maxLength":5,"minLength":2,"title":"Currency","description":"Currency code (e.g., AED, USD)"},"country_code":{"type":"string","minLength":2,"title":"Country Code","description":"Country to verify the threshold (use ISO 3166-1 alpha-2 country code, e.g. AE for United Arab Emirates)."},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata","description":"Additional transaction metadata"}},"type":"object","required":["transaction_id","amount","currency","country_code"],"title":"TransactionRequest"},"ApiFailResponse":{"properties":{"status":{"type":"string","title":"Status","default":"fail"},"message":{"type":"string","title":"Message"},"data":{"anyOf":[{},{"type":"null"}],"title":"Data"}},"type":"object","required":["message"],"title":"ApiFailResponse","description":"*summary*: Api fail response model"},"ApiErrorResponse":{"properties":{"status":{"type":"string","title":"Status","default":"error"},"code":{"type":"integer","title":"Code"},"message":{"type":"string","title":"Message"},"data":{"anyOf":[{},{"type":"null"}],"title":"Data"}},"type":"object","required":["code","message"],"title":"ApiErrorResponse","description":"*summary*: Api error response model"}}},"paths":{"/api/v2/engine/evaluate":{"post":{"tags":["Rule Evaluation"],"summary":"Evaluate Transaction","operationId":"evaluate_transaction_api_v2_engine_evaluate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleEvalRequest"}}},"required":true},"responses":{"200":{"description":"Evaluation completed. Per-rule verdicts are in `data.results`, which carries one entry for every rule evaluated and one for every requested `rule_codes` entry that has no active configuration.","content":{"application/json":{"schema":{}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Unprocessable Entity - Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}}}}
```
