> ## Documentation Index
> Fetch the complete documentation index at: https://docs.clausum.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Assess outcome & feedback loop

> Close the antifraud loop after capture, chargebacks, and confirmed fraud with POST /api/v1/assess/outcome

After **`POST /api/v1/assess`** you know the **pre-capture** decision. Real outcomes arrive later: payment captured, chargeback lost, fraud confirmed, or false positive. Report them so Clausum updates blocklists, payer history, and optional release allowlists.

## When to call

| Outcome               | Typical trigger                     |
| --------------------- | ----------------------------------- |
| `captured`            | Payment settled successfully        |
| `chargeback_lost`     | Dispute closed against you          |
| `chargeback_won`      | Dispute won                         |
| `fraud_confirmed`     | You confirmed fraud (ops / case)    |
| `false_positive`      | Legitimate customer wrongly blocked |
| `refunded` / `failed` | Refund or hard failure              |

**Server only** — authenticate with **`clm_sk_*`** (permission `assess`). Do not call from the browser SDK.

## Request

```http theme={null}
POST /api/v1/assess/outcome
Authorization: Bearer clm_sk_xxx
Content-Type: application/json
Idempotency-Key: outcome-ps_abc-chargeback_lost

{
  "session_id": "ps_1716998400000_abc",
  "outcome": "chargeback_lost",
  "provider": "stripe",
  "provider_dispute_id": "dp_1Nxyz",
  "reason": "Issuer chargeback 10.4"
}
```

`session_id` is the same value you stored as **`clausum_session_id`** in PSP metadata.

## Response

```json theme={null}
{
  "outcome_id": "uuid",
  "session_id": "ps_1716998400000_abc",
  "outcome": "chargeback_lost",
  "feedback_applied": true,
  "feedback": { "blocklist": true },
  "idempotent_replay": false
}
```

Negative outcomes (`chargeback_lost`, `fraud_confirmed`) may add blocklist entries and increment payer dispute counters. Positive resolutions (`chargeback_won`, `false_positive`) may add a temporary release allowlist.

## Outbound webhook

Subscribe to **`assess.outcome_applied`** under **Conexiones → Empezar → Webhooks salientes**. Payload includes `session_id`, `outcome`, `outcome_id`, `feedback_applied`, and optional `provider` / `provider_dispute_id`.

Stripe **`charge.dispute.closed`** can feed the loop automatically when the charge metadata includes `clausum_session_id`.

## Dashboard

**Protección** shows a compact **Feedback loop** strip (ℹ️ for metrics). Wire your backend first — the card reflects outcomes reported in the last 30 days.

## Related

* [Browser SDK v1.3](/guides/browser-sdk) — `getHandoffPayload`, `getSessionId`
* [Webhook events](/concepts/webhook-events) — full outbound catalog
* [Stripe webhooks](/guides/stripe-webhooks) — inbound disputes
