razorshield-api / docs /API_CONTRACT.md
Vedant Sanjay Jadhav
feat: complete RazorShield AI risk platform
10ec54c
|
Raw
History Blame Contribute Delete
5.74 kB
# RazorShield API Contract & Integration Reference
This document defines the official Gradio API contract exposed by the Hugging Face Space backend (`vedantjadhav701/razorshield-api`) for integration with the Vercel Next.js frontend.
---
## 1. Overview
The backend exposes 5 logical API operations via Gradio HTTP / Client routes:
| Operation | Gradio `api_name` | Primary Function |
| :--- | :--- | :--- |
| **`analyze_transaction`** | `"analyze_transaction"` | Real-time transaction fraud & merchant incident risk analysis |
| **`analyze_merchant`** | `"analyze_merchant"` | Query live merchant temporal rolling state & active campaign info |
| **`run_scenario`** | `"run_scenario"` | Chronologically replay test scenarios for interactive demo |
| **`explain_evidence`** | `"explain_evidence"` | Direct structured evidence to zero-shot SLM explanation conversion |
| **`reset_demo_state`** | `"reset_demo_state"` | Reset all merchant temporal state, incident counters, & campaigns |
---
## 2. API Endpoint Specification
### Endpoint 1: `analyze_transaction`
Evaluates transaction fraud probability, merchant rolling temporal state, deployable spike model, persistent incident detection, and outputs grounded SLM explanations for elevated risk levels.
#### Request Inputs (Ordered Arguments for Gradio Client)
| Argument Index | Parameter | Type | Required | Default | Description |
| :---: | :--- | :--- | :---: | :--- | :--- |
| `0` | `merchant_id` | `str` | Yes | `"M_101"` | Unique merchant identifier |
| `1` | `transaction_id` | `str` | Yes | `"TX_994182"` | Unique transaction identifier |
| `2` | `customer_id` | `str` | No | `"C_1048"` | Customer identifier |
| `3` | `device_id` | `str` | No | `"D_882"` | Device identifier |
| `4` | `event_time` | `str` | Yes | `ISO timestamp` | Timestamp (e.g. `"2026-08-22T01:30:00"`) |
| `5` | `amount` | `float` | Yes | `125.50` | Transaction amount in USD |
| `6` | `payment_method` | `str` | No | `"card"` | `"card"`, `"ach"`, `"crypto"`, `"paypal"` |
| `7` | `transaction_type` | `str` | No | `"sale"` | `"sale"`, `"transfer"`, `"refund"` |
| `8` | `policy_mode` | `str` | No | `"BALANCED"` | `"CONSERVATIVE"`, `"BALANCED"`, `"HIGH_SENSITIVITY"` |
#### Response Schema (`AnalyzeTransactionResponse`)
```json
{
"transaction_id": "TX_994182",
"merchant_id": "M_101",
"transaction_risk": {
"fraud_probability": 0.8124
},
"merchant_risk": {
"spike_probability": 0.8841,
"fraud_excess_ratio": 8.24,
"velocity_ratio": 4.10,
"incident_state": "ALERT",
"severity": "HIGH",
"incident_score": 0.8483,
"suspicious_windows": 3
},
"campaign": {
"active": true,
"campaign_name": "PROMOTIONAL_SALE"
},
"decision": {
"action": "ALERT",
"policy_mode": "BALANCED"
},
"explanation": {
"title": "RazorShield Defensive Risk Assessment: ALERT (HIGH Severity)",
"summary": "RazorShield classified merchant M_101 activity as ALERT (HIGH severity) because a fraud anomaly persisted across 3 consecutive monitoring windows. Estimated fraud excess ratio is 8.2x baseline with volume velocity 4.1x baseline.",
"key_signals": [
"Policy Incident Score: 0.85",
"Fraud Excess Ratio: 8.2x baseline",
"Volume Velocity Ratio: 4.1x baseline",
"Consecutive Suspicious Windows: 3"
],
"campaign_context": "A promotional campaign is currently active for merchant M_101. Volume velocity (4.1x baseline) is normalized, but fraud excess (8.2x baseline) remains actionable.",
"recommended_action": "Initiate immediate merchant review, enforce step-up authentication, and review high-risk transaction batches.",
"confidence_note": "Decision (ALERT) is authoritatively determined by RazorShield policy engine."
},
"performance": {
"risk_engine_latency_ms": 0.619,
"slm_latency_ms": 472.03,
"total_latency_ms": 472.65
}
}
```
---
### Endpoint 2: `analyze_merchant`
#### Request Input: `merchant_id` (str)
#### Response:
```json
{
"merchant_id": "M_101",
"rolling_window": {
"rolling_txn_count_15m": 45,
"baseline_txn_count_15m": 10,
"velocity_ratio": 4.5,
"estimated_fraud_count": 0.85,
"expected_fraud_count": 0.10,
"fraud_excess_ratio": 8.5
},
"incident_state": {
"merchant_id": "M_101",
"current_spike_probability": 0.88,
"current_fraud_excess_ratio": 8.5,
"current_velocity_ratio": 4.5,
"suspicious_transaction_count": 3,
"consecutive_suspicious_windows": 3,
"campaign_active": true
}
}
```
---
### Endpoint 3: `run_scenario`
#### Request Inputs: `scenario_name` (str), `policy_mode` (str)
- Options: `"NORMAL"`, `"VOLUME_ONLY_SPIKE"`, `"AMOUNT_SHIFT"`, `"FRAUD_SPIKE"`, `"FRAUD_DURING_FLASH_SALE"`
---
### Endpoint 4: `explain_evidence`
#### Request Input: `evidence_json` (str)
Converts raw evidence JSON into grounded SLM output with validation report.
---
### Endpoint 5: `reset_demo_state`
#### Request Input: None
#### Response:
```json
{
"status": "SUCCESS",
"message": "All merchant states and campaigns reset."
}
```
---
## 3. Vercel / Client Integration Code Snippet (JS / TS)
```typescript
import { client } from "@gradio/client";
const spaceUrl = "vedantjadhav701/razorshield-api";
export async function analyzeTransaction(payload: any) {
const app = await client(spaceUrl);
const result = await app.predict("analyze_transaction", [
payload.merchant_id,
payload.transaction_id,
payload.customer_id || "C_UNKNOWN",
payload.device_id || "D_UNKNOWN",
payload.event_time,
payload.amount,
payload.payment_method || "card",
payload.transaction_type || "sale",
payload.policy_mode || "BALANCED"
]);
return JSON.parse(result.data[0]);
}
```