Customiser extras
Delete an extra choice image
Clears one of a choice's two picture slots and deletes the stored file,
returning a receipt naming what was removed and the extra as it now
stands. Requires customisers:write and an Idempotency-Key.
Overview
Deleting from a slot that holds no image answers 404. Nothing is refused: a choice with no picture is the state every extra created over this API starts in, and the customer customiser draws such a choice as its label. The delete clears the customiser's cached storefront configuration and runs the advisory language sync, and never regenerates Shopify products, product images, or the product cache.
Authorisation
Bearer token required. Include it in theAuthorization header.
Required scope: customisers:write
Path parameters
The customiser id.
Example: 1
The extra id.
Example: 9
The choice's value, percent-encoded as one path segment.
Example: oak
Which picture to remove: `image` or `example_image`.
Example: image
curl https://web.signcustomiser.com/api/v3/customisers/1/extras/9/choices/oak/images/image \
--request DELETE \
--header 'Accept: application/json' \
--header 'Authorization: Bearer YOUR_API_TOKEN'{
"data": {
"object": "file_deletion_receipt",
"slot": "image",
"customiser_id": 42,
"extra_id": 9,
"choice_value": "oak",
"deleted": true,
"removed_file": {
"filename": "oak.png",
"url": "https://cdn.example.com/files/2f1c9c0e-6a7b-4c1d-8e2f-3a4b5c6d7e8f.png"
},
"resource": {
"object": "extra",
"id": 9,
"customiser_id": 42,
"name": "Backing",
"description": null,
"input_type": "image_choice",
"true_label": null,
"false_label": null,
"default_value": null,
"char_limit": null,
"yes_colour_exclusions": null,
"no_colour_exclusions": null,
"select_options": [
{
"value": "oak",
"label": "Oak",
"hexcode": null,
"image_url": null,
"example_image_url": null,
"base_price": 0,
"price_multiplier": 0,
"price_multiplier_target": "base_letter_price"
}
],
"image_url": null,
"base_price": null,
"currency": "USD",
"price_multiplier": null,
"price_multiplier_target": null,
"sort_order": 1,
"created_at": "2026-08-13T00:00:00Z",
"updated_at": "2026-08-13T00:05:00Z"
}
},
"links": {
"self": "https://web.signcustomiser.com/api/v3/customisers/42/extras/9/choices/oak/images/image",
"documentation": "https://www.signcustomiser.com/help/api/"
},
"meta": {
"api_version": "v3",
"request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
}
}{
"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"
}{
"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"
}{
"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"
}{
"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"
}{
"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"
}{
"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"
}