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

# Estimate Fees

> Estimate official fees for one transaction and identify unresolved components

Submit one transaction per request. The response is a `fee_estimate` object at the top level, with no `data` wrapper. Requires `trademarks:read`, costs **one check unit per request**, and does not require an `Idempotency-Key`. The endpoint does not persist a filing or take payment.

```typescript theme={null}
const estimate = await signa.fees.estimate({
  office: 'US',
  route: 'direct',
  action: 'filing',
  classes: [9, 42],
});
console.log(estimate.complete, estimate.total_minor, estimate.currency);
```

`classes` accepts an integer count from 1 to 45 or a unique list of Nice class numbers from 1 to 45. Duplicate classes, unknown fields, invalid calendar dates, and batch envelopes are rejected.

All amounts are native currency minor units, without currency conversion. `subtotal_minor` sums included components. **`total_minor` is null unless the estimate is complete.** Read `lines[]`, `omissions[]`, and `assumptions[]` before using the amount. A successful HTTP response can contain unsupported offices, unsupported actions, missing inputs, unsupported dates, or unverified components; these are explicit line statuses rather than guessed charges or zeros.

Each included line identifies its fee rule and schedule, effective and verification dates, and source citations with snapshot paths and SHA-256 checksums. `dataset_version` identifies the compiled dataset, and `as_of` is the selected `payment_date`, defaulting to the server's UTC calculation date. The response uses `private, no-store` caching.

## Madrid requests

Use `office: 'WO'` (or the `WIPO` alias) and identify designated offices separately:

```typescript theme={null}
const estimate = await signa.fees.estimate({
  office: 'WO',
  route: 'madrid',
  action: 'filing',
  classes: [9, 42],
  designations: ['EM', 'GB'],
  colour: false,
  applicant: { ldc_eligible: false },
});
```

The verified dataset does not currently include individual designation fee amounts. This example therefore returns a partial subtotal for verified components, unresolved designation lines, and a null total. Do not treat the Madrid basic fee as the full application cost.

`designations` is valid only for WO Madrid filing, renewal, or subsequent designation requests. `colour` and `applicant` are valid only for WO Madrid filing. Set `applicant.ldc_eligible: true` only when the caller attests that **all predicates in the WIPO least-developed-country reduction footnote hold for every applicant**. This is an eligibility attestation, not a country-code shortcut.

## Dates and transition rules

Use `payment_date` to supply the payment date; omission uses the server calculation date. GB renewal requests can supply `renewal_due_date`. GB filing requests can supply `application_date` and `application_in_payment_grace`. Missing facts needed to select a schedule are reported explicitly. Dates older than verified applicability coverage return unsupported components rather than extrapolated fees. `late` requests a supported late-payment calculation where the dataset contains verified rules.

```typescript theme={null}
const estimate = await signa.fees.estimate({
  office: 'GB',
  route: 'direct',
  action: 'renewal',
  classes: 2,
  payment_date: '2026-03-31',
  renewal_due_date: '2026-04-01',
});
```
