# Partial data

> Two forms of partial data: the partial status, unbilled, and optional fields missing from a complete result. How to recognise them and what to do with them.

A response can be partial in two ways, which should not be confused:

| Form | Where to see it | Billed |
|---|---|---|
| The `partial` status | `enrichment.status` | No |
| An unknown optional field in a complete result | `merchant.logo_url` absent, `merchant.location` set to `null` | Depends on the status (`resolved` is billed) |

## The `partial` status

`partial` means an identity exists but does not satisfy the resolution policy: a required field is missing, or its confidence is below the threshold. The enrichment is not billed (`billable: false`, `units: 0`), and in Sandbox it does not consume the allowance.

```json
"merchant": { "name": "Enseigne", "location": null, "confidence": 0.88 },
"enrichment": { "status": "partial", "reason": "missing_required_fields", "…": "…" }
```

This excerpt illustrates the shape: here `category` is missing, which is enough to make the result `partial`.

What a `partial` guarantees:

- `merchant` is not `null` and carries a `name`;
- `enrichment.reason` says why the result is not `resolved`.

| `reason` | What is missing | What you can do |
|---|---|---|
| `missing_required_fields` | A required field, most often `category` | Display the name, without a category |
| `confidence_below_threshold` | Sufficient confidence | Display with reservations, or have it reviewed |
| `logo_required`, `location_required` | A logo or location required by the policy | Does not occur under the policy in force |
| `policy_not_calibrated`, `unspecified` | See [Statuses](https://developer.noryo.app/en-GB/merchant/enrichments/statuses) | Treat as a generic `partial` |

## Optional fields of a complete result

Under the policy in force, a `resolved` result always carries `name` and `category`. The other fields depend on what the catalogue knows:

| Field | When it is unknown |
|---|---|
| `logo_url` | Omitted |
| `location` | Present, set to `null` |
| `location.city` or `location.postal_code` | One of the two may be omitted; never both |

A `resolved` result without a logo or location is still a complete, billed result: the policy does not require them.

## What to do with partial data

- **Do not promote a `partial` to `resolved`.** Its name may well be right, but Noryo does not stand behind it, which is why it is not billed.
- **Display what is there, without inventing the rest.** No generic logo presented as the brand's, no city inferred from your `country`.
- **Try again later if useful.** A refresh with the same economic input can end in `refresh_recalculated`; it is billed only in that case. See [Refresh](https://developer.noryo.app/en-GB/merchant/refresh).
- **Measure the share of `partial`** in your traffic, by reason: it is the most direct coverage signal. The [Usage](https://platform.noryo.app/usage) page of Platform counts them per day.

```ts
const m = body.merchant;
if (body.enrichment.status === "partial") {
  show({ name: m.name, category: m.category ?? null, logo: null, tentative: true });
}
```

---

Canonical page: https://developer.noryo.app/en-GB/merchant/results/partial-data
