# GET List customiser prototypes

Lists every prototype a customiser can be created from, and says which of them this store may use. A prototype is a complete starting point: it fixes the sign category, the pricing model, the sizing strategy, the styling mode, and whether the AI sign designer is set up, and the create operation copies all of it along with a full set of demo options, sizes, fonts, and labels to edit. Pass a prototype's `id` as the create operation's `prototype`. `available` is false when the store's plan does not include the prototype; `unavailable_reasons` says why, and creating from it is refused with the same reasons. The operation is read-only, has no side effects, and is always safe to retry. Requires the `customisers:read` scope. A 401 problem means the key is missing, invalid, or expired; a 403 problem with code `insufficient_scope` means the key lacks `customisers:read`; a 429 problem means too many requests — wait `retry_after` seconds, then retry.

- Source URL: https://www.signcustomiser.com/help/api/v3-get-list-customiser-prototypes/
- Markdown URL: https://www.signcustomiser.com/help/api/v3-get-list-customiser-prototypes.md
- Group: Customisers
- Method: GET
- Path: /api/v3/customiser-prototypes
- Auth: Bearer token
- Required scopes: `customisers:read`

## cURL example

```bash
curl https://web.signcustomiser.com/api/v3/customiser-prototypes \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer YOUR_API_TOKEN'
```

## Response examples

### 200 GET 200 example 1

```json
{
  "data": [
    {
      "object": "customiser_prototype",
      "id": "neon-frame-fit",
      "name": "Neon Letter Signs - Price per square metre/foot",
      "description": "Neon and Flex LED neon letter signs.",
      "default_customiser_name": "Neon Sign Customiser",
      "sign_category": "neon",
      "pricing_model": "frame_fit",
      "sizing_strategy": null,
      "selection_mode": "per_word",
      "ai_sign_designer": false,
      "available": true,
      "unavailable_reasons": []
    },
    {
      "object": "customiser_prototype",
      "id": "lightbox-frame-fit",
      "name": "Lightbox Signs - Custom sizes",
      "description": "Custom-size 3D lightbox signs with frame-fit pricing.",
      "default_customiser_name": "Lightbox Customiser",
      "sign_category": "lightbox",
      "pricing_model": "frame_fit",
      "sizing_strategy": null,
      "selection_mode": "single_style",
      "ai_sign_designer": false,
      "available": false,
      "unavailable_reasons": [
        "lightbox"
      ]
    }
  ],
  "pagination": {
    "has_more": false,
    "next_cursor": null
  },
  "links": {
    "self": "https://web.signcustomiser.com/api/v3/customiser-prototypes",
    "documentation": "https://www.signcustomiser.com/help/api/",
    "next": null
  },
  "meta": {
    "api_version": "v3",
    "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
  }
}
```

### 401 Missing API key

```json
{
  "type": "https://www.signcustomiser.com/help/api/problems/missing_api_key",
  "title": "Missing API key",
  "status": 401,
  "code": "missing_api_key",
  "detail": "Provide a store API key as a bearer token.",
  "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
}
```

### 403 Insufficient scope

```json
{
  "type": "https://www.signcustomiser.com/help/api/problems/insufficient_scope",
  "title": "Insufficient scope",
  "status": 403,
  "code": "insufficient_scope",
  "detail": "This operation requires the customisers:read scope.",
  "required_scopes": [
    "customisers:read"
  ],
  "granted_scopes": [
    "store:read"
  ],
  "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
}
```

### 422 Unknown query parameter

```json
{
  "type": "https://www.signcustomiser.com/help/api/problems/unknown_parameter",
  "title": "Unknown query parameter",
  "status": 422,
  "code": "unknown_parameter",
  "detail": "This endpoint accepts no query parameters.",
  "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
}
```

### 429 Rate limited

```json
{
  "type": "https://www.signcustomiser.com/help/api/problems/rate_limited",
  "title": "Too many requests",
  "status": 429,
  "code": "rate_limited",
  "detail": "You have exceeded the request limit for this API key.",
  "retry_after": 60,
  "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
}
```
