# Get customiser pricing (`get_customiser_pricing`)

Reads one customiser pricing document: its pricing model, the Store currency, and the rates, modifiers, minimums and rounding rules that turn a shopper design into a price. This is the read to make before changing pricing and the reference for interpreting an order total. Amounts are integer minor units and dimensions are centimetres. It requires the pricing:read scope, has no side effects and is safe to retry.

- Source URL: https://www.signcustomiser.com/help/mcp/tools/get_customiser_pricing/
- Markdown URL: https://www.signcustomiser.com/help/mcp/tools/get_customiser_pricing.md
- MCP endpoint: https://web.signcustomiser.com/mcp
- Required scope: `pricing:read`
- Behaviour: read

## Purpose

Read the pricing rules a customiser applies, in the exact document shape a pricing replacement takes back.

## Annotations

| Hint | Value |
| --- | --- |
| readOnlyHint | true |
| destructiveHint | false |
| idempotentHint | true |
| openWorldHint | false |

## Prerequisites

- A customiser id from list_customisers.
- A merchant has connected this store and approved the pricing:read scope.

## Arguments

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `customiser_id` | integer | yes | The customiser id, from list_customisers. |

## Result

One pricing document. Its fields are those of the customiser own pricing model, so a frame_fit document and a simple_letter document do not carry the same members.

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `request_id` | string | yes |  |
| `store` | object | yes |  |
| `store.id` | integer | yes |  |
| `store.name` | string | yes |  |
| `customiser_id` | integer | yes |  |
| `pricing_model` | string | yes | The pricing model the document is written against. One of: `simple_letter`, `advanced_letter`, `frame_fit`. |
| `currency` | string or null | no | The ISO 4217 currency every amount in the document is expressed in, as integer minor units. |
| `document` | object | yes | The canonical pricing document, in the shape update_customiser_pricing takes back with mode replace. |

## Error cases

| Code | Recovery |
| --- | --- |
| `insufficient_scope` | The connection was approved without pricing:read. A connection holding only customisers:read can read the customiser but not its rates. |
| `resource_not_found` | No customiser with that id belongs to this store. Call list_customisers to rediscover a valid id. |

## Example: Read a simple_letter pricing document

Request:

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_customiser_pricing",
    "arguments": {
      "customiser_id": 42
    }
  }
}
```

Response:

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "structuredContent": {
      "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t",
      "store": {
        "id": 12,
        "name": "Demo Signs"
      },
      "customiser_id": 42,
      "pricing_model": "simple_letter",
      "currency": "USD",
      "document": {
        "customiser_id": 42,
        "pricing_model": "simple_letter",
        "pricing_model_display_name": "Simple Letter",
        "currency": "USD",
        "sizes": [
          {
            "size_id": 7,
            "name": "Small",
            "sort_order": 1,
            "width_cm": 50,
            "sizing_strategy": "fixed_width"
          }
        ]
      }
    }
  }
}
```

## Example: A connection that reads customisers but not pricing (error)

Request:

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_customiser_pricing",
    "arguments": {
      "customiser_id": 42
    }
  }
}
```

Response:

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "isError": true,
    "structuredContent": {
      "error": {
        "code": "insufficient_scope",
        "title": "Insufficient scope",
        "detail": "The tool [get_customiser_pricing] requires the pricing:read scope, which this connection was not granted.",
        "recovery": "The connection was authorised without the scope this tool needs. Ask the merchant to reconnect the connector and approve the scope named in required_scopes. Do not retry this call.",
        "required_scopes": [
          "pricing:read"
        ],
        "granted_scopes": [
          "customisers:read"
        ]
      }
    }
  }
}
```
