# normalizeSharingProduct

> **normalizeSharingProduct**(`candidate`): [`SharingPageProduct`](/developers/references/core-sdk/index/type-aliases/sharingpageproduct/) \| `null`

Defined in: utils/product/sanitizeProducts.ts:104

Normalise one untrusted candidate into a [SharingPageProduct](/developers/references/core-sdk/index/type-aliases/sharingpageproduct/), or null
when nothing usable survived. `products` is a public API boundary, so every
URL field is validated structurally before reaching `new URL(...)`.

A title-less entry is kept when it carries scope fields: the title is a
display concern, the scope fields are a reward-matching one.

## Parameters

### candidate

`unknown`

## Returns

[`SharingPageProduct`](/developers/references/core-sdk/index/type-aliases/sharingpageproduct/) \| `null`