# POST Activate a customiser

Puts the customiser live on the storefront. Activating one that is already live changes nothing and answers 200 with the same resource, so the operation is safe to repeat. Live customisers are what a plan pays for, so activation is checked against it. A 422 problem with code `activation_not_allowed` names the refusal in `reason`: `no_live_entitlement` (the store has no active subscription), `pricing_model_not_in_plan` (the plan does not include the pricing model this customiser charges by), or `active_customiser_limit_reached` (the store has already put as many customisers live as its plan allows — deactivate another, or upgrade). The check runs under a lock on the store, so two concurrent activations cannot both take the last slot. Requires `customisers:write` and an `Idempotency-Key`. The activation clears the customiser's cached storefront configuration and resynchronises translated content; it never regenerates your Shopify products, product images, or product cache. 400/401/403/404/409/429 behave as on the other writes.

- Source URL: https://www.signcustomiser.com/help/api/v3-post-activate-a-customiser/
- Markdown URL: https://www.signcustomiser.com/help/api/v3-post-activate-a-customiser.md
- Group: Customisers
- Method: POST
- Path: /api/v3/customisers/{customiser_id}/activate
- Auth: Bearer token
- Required scopes: `customisers:write`

## Path parameters

- customiser_id (string, required): The customiser id, from the list operation. Example: 1

## cURL example

```bash
curl https://web.signcustomiser.com/api/v3/customisers/1/activate \
  --request POST \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer YOUR_API_TOKEN'
```

## Response examples

### 200 POST 200 example 1

```json
{
  "data": {
    "object": "customiser",
    "id": 42,
    "name": "Neon sign builder",
    "active": true,
    "pricing_model": "frame_fit",
    "pricing_model_display_name": "Frame Fit",
    "sign_category": "neon",
    "product_family": "neon",
    "selection_mode": "per_word",
    "created_at": "2026-08-14T00:00:00Z",
    "updated_at": "2026-08-14T00:05:00Z"
  },
  "links": {
    "self": "https://web.signcustomiser.com/api/v3/customisers/42/activate",
    "documentation": "https://www.signcustomiser.com/help/api/"
  },
  "meta": {
    "api_version": "v3",
    "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
  }
}
```

### 400 Missing idempotency key

```json
{
  "type": "https://www.signcustomiser.com/help/api/problems/missing_idempotency_key",
  "title": "Missing idempotency key",
  "status": 400,
  "code": "missing_idempotency_key",
  "detail": "Provide an Idempotency-Key header for this write.",
  "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:write scope.",
  "required_scopes": [
    "customisers:write"
  ],
  "granted_scopes": [
    "customisers:read"
  ],
  "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
}
```

### 404 Unknown customiser

```json
{
  "type": "https://www.signcustomiser.com/help/api/problems/resource_not_found",
  "title": "Resource not found",
  "status": 404,
  "code": "resource_not_found",
  "detail": "The requested resource does not exist or does not belong to the authenticated store.",
  "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
}
```

### 409 Idempotency conflict

```json
{
  "type": "https://www.signcustomiser.com/help/api/problems/idempotency_key_conflict",
  "title": "Idempotency key conflict",
  "status": 409,
  "code": "idempotency_key_conflict",
  "detail": "This Idempotency-Key was already used for a different request body on this operation.",
  "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
}
```

### 422 Plan has no room

```json
{
  "type": "https://www.signcustomiser.com/help/api/problems/activation_not_allowed",
  "title": "Activation not allowed",
  "status": 422,
  "code": "activation_not_allowed",
  "detail": "This store has already put as many customisers live as its plan allows.",
  "errors": [
    {
      "pointer": "",
      "code": "activation_not_allowed",
      "detail": "This store has already put as many customisers live as its plan allows."
    }
  ],
  "reason": "active_customiser_limit_reached",
  "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
}
```

### 429 Option write budget exhausted

```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": 37,
  "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
}
```
