| 1 | --- |
| 2 | title: "ProcureNet Wallet Confidence Score (WCS) Explained" |
| 3 | sidebarTitle: "WCS" |
| 4 | description: "Learn how ProcureNet scores buyer identity signals to determine session mode, transport, and checkout experience at orchestration time." |
| 5 | --- |
| 6 | |
| 7 | The Wallet Confidence Score (WCS) is ProcureNet's buyer identity scoring engine. Every time a session is created, the WCS engine evaluates the signals you supply — such as a customer ID, email address, phone number, or device fingerprint — assigns weighted point values to each, and produces a numeric score. That score determines which orchestration mode the session enters and which real-time transport protocol is used to deliver events. The higher the score, the more ProcureNet knows about the buyer, and the more streamlined the checkout experience becomes. |
| 8 | |
| 9 | ## Scoring Signals |
| 10 | |
| 11 | Each signal you pass in the `hints` object of `POST /api/v7/orchestrate` contributes a fixed number of points toward the total WCS. Signals are additive — providing more signals always raises the score. |
| 12 | |
| 13 | <ParamField body="customerId" type="string"> |
| 14 | **100 points** — The strongest possible signal. A recognized customer ID confirms a returning buyer with a known purchase history. Supplying this alone is enough to enter resolved mode. |
| 15 | </ParamField> |
| 16 | |
| 17 | <ParamField body="email" type="string"> |
| 18 | **40 points** — A verified email address. Combined with a customer ID, this raises the score to 140 and reinforces identity confidence. |
| 19 | </ParamField> |
| 20 | |
| 21 | <ParamField body="phone" type="string"> |
| 22 | **40 points** — A verified phone number. Carries the same weight as email and can substitute for it when email is unavailable. |
| 23 | </ParamField> |
| 24 | |
| 25 | <ParamField body="deviceId" type="string"> |
| 26 | **20 points** — A device fingerprint or persistent device identifier. Useful for recognizing repeat sessions from the same hardware even without account credentials. |
| 27 | </ParamField> |
| 28 | |
| 29 | The maximum possible score is **200 points**, achieved by supplying all four signals. |
| 30 | |
| 31 | ## Score Thresholds and Routing |
| 32 | |
| 33 | ProcureNet maps WCS ranges to orchestration modes and transport protocols. The assignment happens at session creation and is immutable for the lifetime of that session. |
| 34 | |
| 35 | | Score Range | Mode | Transport | Prefill Available | |
| 36 | |---|---|---|---| |
| 37 | | ≥ 100 | `resolved` | Server-Sent Events (SSE) | Yes | |
| 38 | | 40 – 99 | `partial` | WebSocket | No | |
| 39 | | < 40 | `anonymous` | WebSocket | No | |
| 40 | |
| 41 | See [Orchestration Modes](/concepts/orchestration-modes) for a full breakdown of what each mode enables. |
| 42 | |
| 43 | ## TypeScript Example |
| 44 | |
| 45 | The `WCSEngine.calculate()` method is called automatically during orchestration, but you can also invoke it directly in your integration code to predict routing before making the API call. |
| 46 | |
| 47 | ```typescript |
| 48 | import { WCSEngine } from './scoring/WCSEngine'; |
| 49 | |
| 50 | const result = WCSEngine.calculate({ |
| 51 | customerId: 'cust_123', |
| 52 | email: 'user@example.com', |
| 53 | phone: null, |
| 54 | deviceId: 'dev_456', |
| 55 | }); |
| 56 | |
| 57 | // result.score → 160 |
| 58 | // result.mode → 'resolved' |
| 59 | // result.transport → 'sse' |
| 60 | ``` |
| 61 | |
| 62 | In this example, `customerId` contributes 100 pts, `email` adds 40 pts, and `deviceId` adds 20 pts, producing a total of 160 — well above the resolved threshold. |
| 63 | |
| 64 | <Note> |
| 65 | You never need to call `WCSEngine.calculate()` yourself in production. ProcureNet computes the WCS automatically when you call `POST /api/v7/orchestrate`. Pass your buyer signals in the `hints` object of the request body, and the response will include `wcs_score`, `mode`, and `transport`. |
| 66 | </Note> |
| 67 | |
| 68 | <Tip> |
| 69 | Supplying a `customerId` alone guarantees resolved mode. At 100 points, it clears the threshold on its own — no additional signals required. |
| 70 | </Tip> |