# POST Validate customiser labels

Dry-run a labels merge patch without persisting anything. The request body is the same merge patch the update operation accepts, and the response is exactly what that update would produce on the failing paths: the identical 422 problem (`validation_failed` with pointers and `allowed_values`, or `unknown_field`) — the same validation code path runs, only persistence is skipped. On a patch that would apply, the response is a 200 `customiser_labels_validation` confirmation. Nothing is written, no caches are touched, no idempotency key is consumed, and no activity is recorded, so the operation is always safe to repeat. The verdict is advisory: nothing binds it to a later update, and the labels can legitimately change between the two calls. Requires the `customisers:write` scope (it is the write's dry-run twin). A 400 problem means the body is not valid JSON; a 422 problem with code `invalid_document` means the body is not a JSON object. 401/403/404/429 behave as on the read operation, with `customisers:write` as the required scope.

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

## Path parameters

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

## Body parameters

- adding_to_cart (string, optional): No description provided.
- allow_custom_background (boolean, optional): No description provided.
- apply_style (string, optional): No description provided.
- aspect_ratio_warning (string, optional): No description provided.
- backboard_upload_error (string, optional): No description provided.
- backgrounds (string, optional): No description provided.
- backlight_title (string, optional): No description provided.
- border_included (string, optional): No description provided.
- bottom_side (string, optional): No description provided.
- braille_fixed_size_info_label (string, optional): No description provided.
- braille_frame_too_small_message (string, optional): No description provided.
- braille_overview_fitted_to_screen_label (string, optional): No description provided.
- braille_translation_failed_message (string, optional): No description provided.
- braille_translation_pending_message (string, optional): No description provided.
- braille_untranslatable_modal_button_label (string, optional): No description provided.
- braille_untranslatable_modal_label (string, optional): No description provided.
- cancel (string, optional): No description provided.
- char_limit_reached (string, optional): No description provided.
- character_limit_message (string, optional): No description provided.
- character_text (string, optional): No description provided.
- click_word_desktop (string, optional): No description provided.
- cm_button (string, optional): No description provided.
- colour_min_size_message (string, optional): No description provided.
- colour_title (string, optional): No description provided.
- contact_description (string, optional): No description provided.
- contact_header (string, optional): No description provided.
- copy_button (string, optional): No description provided.
- create_product_failed (string, optional): No description provided.
- creating_product (string, optional): No description provided.
- crop_confirm (string, optional): No description provided.
- crop_modal_title (string, optional): No description provided.
- crop_upload (string, optional): No description provided.
- custom_design_button_label (string, optional): No description provided.
- custom_design_form_file_label (string, optional): No description provided.
- custom_design_form_input_error (string, optional): No description provided.
- custom_design_form_message_error (string, optional): No description provided.
- custom_design_form_message_success (string, optional): No description provided.
- custom_design_form_size_error (string, optional): No description provided.
- custom_design_form_submit_message (string, optional): No description provided.
- custom_design_form_total_size_error (string, optional): No description provided.
- custom_design_steps_header (string, optional): No description provided.
- custom_design_tab_title (string, optional): No description provided.
- custom_design_type (string, optional): No description provided.
- custom_sizing_message (string, optional): No description provided.
- default_text (string, optional): No description provided.
- display_initial_background_image (boolean, optional): No description provided.
- display_initial_review_image (boolean, optional): No description provided.
- edit_design (string, optional): No description provided.
- editing_word (string, optional): No description provided.
- etsy_button (string, optional): No description provided.
- etsy_copied_button (string, optional): No description provided.
- etsy_copy_details_button (string, optional): No description provided.
- etsy_customisation_summary_label (string, optional): No description provided.
- etsy_download_preview_button (string, optional): No description provided.
- etsy_listing_url_missing (string, optional): No description provided.
- etsy_preparing_image (string, optional): No description provided.
- etsy_preview_error (string, optional): No description provided.
- etsy_return_button (string, optional): No description provided.
- etsy_step1 (string, optional): No description provided.
- etsy_step2 (string, optional): No description provided.
- etsy_step3 (string, optional): No description provided.
- etsy_suggested_price_label (string, optional): No description provided.
- etsy_summary_colour_label (string, optional): No description provided.
- etsy_summary_description (string, optional): No description provided.
- etsy_summary_design_label (string, optional): No description provided.
- etsy_summary_face_colour_label (string, optional): No description provided.
- etsy_summary_halo_colour_label (string, optional): No description provided.
- etsy_summary_icon_label (string, optional): No description provided.
- etsy_summary_line_label (string, optional): No description provided.
- etsy_summary_no (string, optional): No description provided.
- etsy_summary_not_selected (string, optional): No description provided.
- etsy_summary_side_colour_label (string, optional): No description provided.
- etsy_summary_title (string, optional): No description provided.
- etsy_summary_trim_colour_label (string, optional): No description provided.
- etsy_summary_tube_colour_label (string, optional): No description provided.
- etsy_summary_uploaded_design_label (string, optional): No description provided.
- etsy_summary_yes (string, optional): No description provided.
- example (string, optional): No description provided.
- extra_colour_exclusion_message (string, optional): No description provided.
- extras_title (string, optional): No description provided.
- file_label (string, optional): No description provided.
- file_upload_label (string, optional): No description provided.
- font_title (string, optional): No description provided.
- generating_image (string, optional): No description provided.
- header_text (string, optional): No description provided.
- height_input (string, optional): No description provided.
- icon_button_label (string, optional): No description provided.
- icon_title (string, optional): No description provided.
- inch_button (string, optional): No description provided.
- inclusions (string, optional): No description provided.
- inclusions_header (string, optional): No description provided.
- invalid_characters (string, optional): No description provided.
- jacket_colour_exclusion_message (string, optional): No description provided.
- jacket_title (string, optional): No description provided.
- label_under_price (string, optional): No description provided.
- left_side (string, optional): No description provided.
- letter_parts_description (string, optional): No description provided.
- letter_parts_title (string, optional): No description provided.
- lightbox_product_type_title (string, optional): No description provided.
- line_limit_reached (string, optional): No description provided.
- lines_text (string, optional): No description provided.
- loading_manual_clear_text (string, optional): No description provided.
- logo_button_text (string, optional): No description provided.
- logo_text (string, optional): No description provided.
- logo_upload_design_ready (string, optional): No description provided.
- logo_upload_failed_description (string, optional): No description provided.
- logo_upload_failed_title (string, optional): No description provided.
- logo_upload_file_too_large (string, optional): No description provided.
- logo_upload_form_description (string, optional): No description provided.
- logo_upload_form_email_placeholder (string, optional): No description provided.
- logo_upload_form_name_placeholder (string, optional): No description provided.
- logo_upload_form_submit_button (string, optional): No description provided.
- logo_upload_form_submitted_description (string, optional): No description provided.
- logo_upload_form_submitted_title (string, optional): No description provided.
- logo_upload_form_title (string, optional): No description provided.
- logo_upload_pending_description (string, optional): No description provided.
- logo_upload_pending_title (string, optional): No description provided.
- logo_upload_try_another (string, optional): No description provided.
- main_tab_title (string, optional): No description provided.
- manual_button (string, optional): No description provided.
- material_mounting_exclusion_message (string, optional): No description provided.
- material_support_exclusion_message (string, optional): No description provided.
- material_title (string, optional): No description provided.
- max_sign_char (string, optional): No description provided.
- max_sign_modal_button_label (string, optional): No description provided.
- max_sign_modal_label (string, optional): No description provided.
- min_character_message (string, optional): No description provided.
- min_height_sign_warning (string, optional): No description provided.
- mounting_colour_exclusion_message (string, optional): No description provided.
- mounting_colour_min_size_message (string, optional): No description provided.
- mounting_colour_title (string, optional): No description provided.
- mounting_letter_part_title (string, optional): No description provided.
- mounting_support_exclusion_message (string, optional): No description provided.
- mounting_title (string, optional): No description provided.
- options_tab (string, optional): No description provided.
- preview_note (string, optional): No description provided.
- price (string, optional): No description provided.
- price_after_label (string, optional): No description provided.
- price_box_text (string, optional): No description provided.
- price_button_add (string, optional): No description provided.
- price_button_finish (string, optional): No description provided.
- product_title (string, optional): No description provided.
- product_type_title (string, optional): No description provided.
- qualities_header (string, optional): No description provided.
- quote_button (string, optional): No description provided.
- recenter (string, optional): No description provided.
- recenter_warning (string, optional): No description provided.
- retry (string, optional): No description provided.
- right_side (string, optional): No description provided.
- rotation (string, optional): No description provided.
- shape_finished_size (string, optional): No description provided.
- shape_proportions_fixed_by (string, optional): No description provided.
- shape_size_adjusted_to_fixed_proportions (string, optional): No description provided.
- shape_size_adjusted_to_range (string, optional): No description provided.
- shape_sizing_empty_feasible_range (string, optional): No description provided.
- shape_sizing_invalid_canonical_bounds (string, optional): No description provided.
- shape_sizing_invalid_intent (string, optional): No description provided.
- shape_sizing_preset_requires_custom (string, optional): No description provided.
- share_design (string, optional): No description provided.
- share_design_modal_description (string, optional): No description provided.
- share_design_modal_title (string, optional): No description provided.
- show_background_preview (boolean, optional): No description provided.
- show_contact_section (boolean, optional): No description provided.
- show_custom_design (boolean, optional): No description provided.
- show_custom_design_link (boolean, optional): No description provided.
- show_inclusion_section (boolean, optional): No description provided.
- show_preview_note (boolean, optional): No description provided.
- show_review_images (boolean, optional): No description provided.
- show_review_section (boolean, optional): No description provided.
- show_styled_note (boolean, optional): No description provided.
- show_text_editor_overlay (boolean, optional): No description provided.
- sign_header (string, optional): No description provided.
- size_title (string, optional): No description provided.
- slider_button (string, optional): No description provided.
- summary_header (string, optional): No description provided.
- support_colour_min_size_message (string, optional): No description provided.
- support_colour_title (string, optional): No description provided.
- support_title (string, optional): No description provided.
- tap_word_mobile (string, optional): No description provided.
- text_align_center (string, optional): No description provided.
- text_align_left (string, optional): No description provided.
- text_align_right (string, optional): No description provided.
- text_align_title (string, optional): No description provided.
- text_button_label (string, optional): No description provided.
- text_label (string, optional): No description provided.
- text_orientation_horizontal (string, optional): No description provided.
- text_orientation_title (string, optional): No description provided.
- text_orientation_vertical_stacked (string, optional): No description provided.
- text_title (string, optional): No description provided.
- top_side (string, optional): No description provided.
- upload_background (string, optional): No description provided.
- uploading_images (string, optional): No description provided.
- user_bg_scale_cancel (string, optional): No description provided.
- user_bg_scale_continue (string, optional): No description provided.
- user_bg_scale_description (string, optional): No description provided.
- user_bg_scale_error (string, optional): No description provided.
- user_bg_scale_title (string, optional): No description provided.
- visualiser_off (string, optional): No description provided.
- visualiser_on (string, optional): No description provided.
- width_input (string, optional): No description provided.
- zoom_in (string, optional): No description provided.
- zoom_out (string, optional): No description provided.

## Request body example

```json
{
  "adding_to_cart": "Adding to Cart",
  "allow_custom_background": true,
  "apply_style": "Apply to all",
  "aspect_ratio_warning": "Values may be modified to maintain the required aspect ratio",
  "backboard_upload_error": "Maximum upload size 2mb",
  "backgrounds": "Backgrounds",
  "backlight_title": "Backlight",
  "border_included": "(includes {border} border)",
  "bottom_side": "Bottom",
  "braille_fixed_size_info_label": "Braille dots stay at their accessibility-standard size; larger sign sizes carry larger tactile lettering.",
  "braille_frame_too_small_message": "Choose a bigger sign size so the braille can fit at its fixed size.",
  "braille_overview_fitted_to_screen_label": "Overview — fitted to screen",
  "braille_translation_failed_message": "Braille translation could not refresh. Please try again.",
  "braille_translation_pending_message": "Translating to Braille…",
  "braille_untranslatable_modal_button_label": "Get a custom quote",
  "braille_untranslatable_modal_label": "Some of your text cannot be turned into braille automatically. Send us your design and we will quote it for you.",
  "cancel": "Cancel",
  "char_limit_reached": "You have exceeded the maximum number of characters for the current size.",
  "character_limit_message": "The maximum number of characters for this current size has been reached.",
  "character_text": "characters max per line for current size",
  "click_word_desktop": "Click on a word to begin customising it.",
  "cm_button": "Use cm",
  "colour_min_size_message": "The selected colour is only available for larger sizes.",
  "colour_title": "Color",
  "contact_description": "Feel free to reach out through our Live Chat, read through our FAQ page or send us an email.",
  "contact_header": "Have some questions? We're here for you!",
  "copy_button": "Copy",
  "create_product_failed": "Something went wrong",
  "creating_product": "Creating Product",
  "crop_confirm": "Confirm",
  "crop_modal_title": "Resize your image",
  "crop_upload": "Upload your own image",
  "custom_design_button_label": "Got a logo? Get a quote",
  "custom_design_form_file_label": "Accepted file types include JPEG, PNG, SVG, PDF, AI and EPS.",
  "custom_design_form_input_error": "Invalid input.",
  "custom_design_form_message_error": "Form submission failed. Please try again.",
  "custom_design_form_message_success": "Thank you for your submission.",
  "custom_design_form_size_error": "File size cannot exceed 10MB.",
  "custom_design_form_submit_message": "Submitting form, please wait.",
  "custom_design_form_total_size_error": "Total file size cannot exceed 20MB.",
  "custom_design_steps_header": "How it works",
  "custom_design_tab_title": "Custom",
  "custom_design_type": "form",
  "custom_sizing_message": "Enter text to set a custom size",
  "default_text": "Start Typing",
  "display_initial_background_image": true,
  "display_initial_review_image": true,
  "edit_design": "Edit my design",
  "editing_word": "Editing",
  "etsy_button": "Continue to Etsy",
  "etsy_copied_button": "Copied",
  "etsy_copy_details_button": "Copy details",
  "etsy_customisation_summary_label": "Customisation summary",
  "etsy_download_preview_button": "Download preview",
  "etsy_listing_url_missing": "Your Etsy listing link hasn't been set up yet. Contact the shop to get the link.",
  "etsy_preparing_image": "Preparing image",
  "etsy_preview_error": "Preview couldn't be generated. Please try again.",
  "etsy_return_button": "Return To Etsy To Place An Order",
  "etsy_step1": "Copy your details",
  "etsy_step2": "Return to Etsy",
  "etsy_step3": "Paste into the personalisation box",
  "etsy_suggested_price_label": "Suggested price",
  "etsy_summary_colour_label": "Colour",
  "etsy_summary_description": "Copy these details into the personalisation box on Etsy, then add this item to your basket there.",
  "etsy_summary_design_label": "Design",
  "etsy_summary_face_colour_label": "Face",
  "etsy_summary_halo_colour_label": "Halo",
  "etsy_summary_icon_label": "Icon",
  "etsy_summary_line_label": "Line",
  "etsy_summary_no": "No",
  "etsy_summary_not_selected": "Not selected",
  "etsy_summary_side_colour_label": "Side",
  "etsy_summary_title": "Your Etsy order details",
  "etsy_summary_trim_colour_label": "Trim",
  "etsy_summary_tube_colour_label": "Tube",
  "etsy_summary_uploaded_design_label": "Uploaded design",
  "etsy_summary_yes": "Yes",
  "example": "Example",
  "extra_colour_exclusion_message": "The selected option is not available with this colour.",
  "extras_title": "Extras",
  "file_label": "Upload your logo",
  "file_upload_label": "Drop an image here or tap to browse",
  "font_title": "Font",
  "generating_image": "Generating Image",
  "header_text": "CREATE YOUR CUSTOM SIGN",
  "height_input": "Height",
  "icon_button_label": "Icons",
  "icon_title": "Icons",
  "inch_button": "Use inches",
  "inclusions": "Your Custom Sign\nPower Supply\nDigital Installation Guide\nFree Express Shipping\n12-Month Warranty",
  "inclusions_header": "What's included in your custom sign?",
  "invalid_characters": "Text contains invalid characters: {characters}. Please try another font.",
  "jacket_colour_exclusion_message": "The selected jacket option is not available for this colour.",
  "jacket_title": "Jacket",
  "label_under_price": "",
  "left_side": "Left",
  "letter_parts_description": "",
  "letter_parts_title": "",
  "lightbox_product_type_title": "Lightbox",
  "line_limit_reached": "You have exceeded the maximum number of lines for the current size.",
  "lines_text": "lines",
  "loading_manual_clear_text": "Your design is being added to the cart. Please wait...",
  "logo_button_text": "Submit Custom Design",
  "logo_text": "To Submit a Custom Design, please click on the button below",
  "logo_upload_design_ready": "Design Ready!",
  "logo_upload_failed_description": "Fill out the form to send us an inquiry, we'll automatically attach this image",
  "logo_upload_failed_title": "We couldn't process your image",
  "logo_upload_file_too_large": "This file is too large. Choose a file up to {limit} MB.",
  "logo_upload_form_description": "We'll keep processing your file and send the customisable version to your email when ready.",
  "logo_upload_form_email_placeholder": "Your email",
  "logo_upload_form_name_placeholder": "Your name",
  "logo_upload_form_submit_button": "Submit Request",
  "logo_upload_form_submitted_description": "We'll process your image in the background and email you when it's ready.",
  "logo_upload_form_submitted_title": "Request Submitted!",
  "logo_upload_form_title": "Taking longer than expected?",
  "logo_upload_pending_description": "Depending on the complexity of the image, this may take a few minutes.",
  "logo_upload_pending_title": "Processing your image",
  "logo_upload_try_another": "Try another image",
  "main_tab_title": "Text",
  "manual_button": "Enter dimensions manually",
  "material_mounting_exclusion_message": "The selected material is not available with this mounting option.",
  "material_support_exclusion_message": "The selected material is not available with this backboard.",
  "material_title": "Material",
  "max_sign_char": "characters max",
  "max_sign_modal_button_label": "Get a quote",
  "max_sign_modal_label": "Size is over the limit. Contact us for a quote.",
  "min_character_message": "or more characters are required for this size, please add more characters.",
  "min_height_sign_warning": "The overall sign height is too small. Please increase the height.",
  "mounting_colour_exclusion_message": "The selected mounting option is not available with this colour.",
  "mounting_colour_min_size_message": "This colour requires a larger sign size.",
  "mounting_colour_title": "Mounting colour",
  "mounting_letter_part_title": "Mounting Side",
  "mounting_support_exclusion_message": "The selected mounting option is not available with this backboard.",
  "mounting_title": "Mounting",
  "options_tab": "Options",
  "preview_note": "Colours may appear different in real life",
  "price": "",
  "price_after_label": "",
  "price_box_text": "Free shipping, One year guarantee",
  "price_button_add": "Add to Bag",
  "price_button_finish": "Finish",
  "product_title": "Custom Sign:",
  "product_type_title": "Letter Type",
  "qualities_header": "Good to know",
  "quote_button": "Finalize Quote",
  "recenter": "Recenter",
  "recenter_warning": "Click to reset position",
  "retry": "Try Again",
  "right_side": "Right",
  "rotation": "Rotation",
  "shape_finished_size": "Finished size: {width} × {height} {unit}",
  "shape_proportions_fixed_by": "Proportions fixed by {shape}",
  "shape_size_adjusted_to_fixed_proportions": "Your saved size was adjusted to match this shape’s fixed proportions.",
  "shape_size_adjusted_to_range": "Size adjusted to fit the available range.",
  "shape_sizing_empty_feasible_range": "This shape cannot be sized within the available minimum and maximum dimensions.",
  "shape_sizing_invalid_canonical_bounds": "This shape is unavailable because its proportions could not be loaded.",
  "shape_sizing_invalid_intent": "Enter a valid size to continue.",
  "shape_sizing_preset_requires_custom": "Choose a custom size for this shape.",
  "share_design": "Share my design",
  "share_design_modal_description": "",
  "share_design_modal_title": "Share Your Design",
  "show_background_preview": true,
  "show_contact_section": true,
  "show_custom_design": true,
  "show_custom_design_link": true,
  "show_inclusion_section": true,
  "show_preview_note": true,
  "show_review_images": true,
  "show_review_section": true,
  "show_styled_note": true,
  "show_text_editor_overlay": true,
  "sign_header": "YOUR SIGN",
  "size_title": "Size",
  "slider_button": "Switch back to slider",
  "summary_header": "YOUR SIGN DETAILS:",
  "support_colour_min_size_message": "The selected backboard colour is only available for larger sizes.",
  "support_colour_title": "Backboard Color",
  "support_title": "Backboard",
  "tap_word_mobile": "Tap on a word to begin customising it.",
  "text_align_center": "Center",
  "text_align_left": "Left",
  "text_align_right": "Right",
  "text_align_title": "Text Align",
  "text_button_label": "Got a text sign? Customise now",
  "text_label": "Write your text",
  "text_orientation_horizontal": "Horizontal",
  "text_orientation_title": "Orientation",
  "text_orientation_vertical_stacked": "Vertical",
  "text_title": "Text",
  "top_side": "Top",
  "upload_background": "Upload Background",
  "uploading_images": "Uploading Images",
  "user_bg_scale_cancel": "Cancel",
  "user_bg_scale_continue": "Continue",
  "user_bg_scale_description": "Specify the width and height this image represents in order to see your sign at a realistic scale.",
  "user_bg_scale_error": "Width and height must be numbers greater than 0.",
  "user_bg_scale_title": "Relative Scale",
  "visualiser_off": "Off",
  "visualiser_on": "On",
  "width_input": "Width",
  "zoom_in": "Zoom In",
  "zoom_out": "Zoom Out"
}
```

## cURL example

```bash
curl https://web.signcustomiser.com/api/v3/customisers/1/labels/validate-update \
  --request POST \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer YOUR_API_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "adding_to_cart": "Adding to Cart",
  "allow_custom_background": true,
  "apply_style": "Apply to all",
  "aspect_ratio_warning": "Values may be modified to maintain the required aspect ratio",
  "backboard_upload_error": "Maximum upload size 2mb",
  "backgrounds": "Backgrounds",
  "backlight_title": "Backlight",
  "border_included": "(includes {border} border)",
  "bottom_side": "Bottom",
  "braille_fixed_size_info_label": "Braille dots stay at their accessibility-standard size; larger sign sizes carry larger tactile lettering.",
  "braille_frame_too_small_message": "Choose a bigger sign size so the braille can fit at its fixed size.",
  "braille_overview_fitted_to_screen_label": "Overview — fitted to screen",
  "braille_translation_failed_message": "Braille translation could not refresh. Please try again.",
  "braille_translation_pending_message": "Translating to Braille…",
  "braille_untranslatable_modal_button_label": "Get a custom quote",
  "braille_untranslatable_modal_label": "Some of your text cannot be turned into braille automatically. Send us your design and we will quote it for you.",
  "cancel": "Cancel",
  "char_limit_reached": "You have exceeded the maximum number of characters for the current size.",
  "character_limit_message": "The maximum number of characters for this current size has been reached.",
  "character_text": "characters max per line for current size",
  "click_word_desktop": "Click on a word to begin customising it.",
  "cm_button": "Use cm",
  "colour_min_size_message": "The selected colour is only available for larger sizes.",
  "colour_title": "Color",
  "contact_description": "Feel free to reach out through our Live Chat, read through our FAQ page or send us an email.",
  "contact_header": "Have some questions? We'"'"'re here for you!",
  "copy_button": "Copy",
  "create_product_failed": "Something went wrong",
  "creating_product": "Creating Product",
  "crop_confirm": "Confirm",
  "crop_modal_title": "Resize your image",
  "crop_upload": "Upload your own image",
  "custom_design_button_label": "Got a logo? Get a quote",
  "custom_design_form_file_label": "Accepted file types include JPEG, PNG, SVG, PDF, AI and EPS.",
  "custom_design_form_input_error": "Invalid input.",
  "custom_design_form_message_error": "Form submission failed. Please try again.",
  "custom_design_form_message_success": "Thank you for your submission.",
  "custom_design_form_size_error": "File size cannot exceed 10MB.",
  "custom_design_form_submit_message": "Submitting form, please wait.",
  "custom_design_form_total_size_error": "Total file size cannot exceed 20MB.",
  "custom_design_steps_header": "How it works",
  "custom_design_tab_title": "Custom",
  "custom_design_type": "form",
  "custom_sizing_message": "Enter text to set a custom size",
  "default_text": "Start Typing",
  "display_initial_background_image": true,
  "display_initial_review_image": true,
  "edit_design": "Edit my design",
  "editing_word": "Editing",
  "etsy_button": "Continue to Etsy",
  "etsy_copied_button": "Copied",
  "etsy_copy_details_button": "Copy details",
  "etsy_customisation_summary_label": "Customisation summary",
  "etsy_download_preview_button": "Download preview",
  "etsy_listing_url_missing": "Your Etsy listing link hasn'"'"'t been set up yet. Contact the shop to get the link.",
  "etsy_preparing_image": "Preparing image",
  "etsy_preview_error": "Preview couldn'"'"'t be generated. Please try again.",
  "etsy_return_button": "Return To Etsy To Place An Order",
  "etsy_step1": "Copy your details",
  "etsy_step2": "Return to Etsy",
  "etsy_step3": "Paste into the personalisation box",
  "etsy_suggested_price_label": "Suggested price",
  "etsy_summary_colour_label": "Colour",
  "etsy_summary_description": "Copy these details into the personalisation box on Etsy, then add this item to your basket there.",
  "etsy_summary_design_label": "Design",
  "etsy_summary_face_colour_label": "Face",
  "etsy_summary_halo_colour_label": "Halo",
  "etsy_summary_icon_label": "Icon",
  "etsy_summary_line_label": "Line",
  "etsy_summary_no": "No",
  "etsy_summary_not_selected": "Not selected",
  "etsy_summary_side_colour_label": "Side",
  "etsy_summary_title": "Your Etsy order details",
  "etsy_summary_trim_colour_label": "Trim",
  "etsy_summary_tube_colour_label": "Tube",
  "etsy_summary_uploaded_design_label": "Uploaded design",
  "etsy_summary_yes": "Yes",
  "example": "Example",
  "extra_colour_exclusion_message": "The selected option is not available with this colour.",
  "extras_title": "Extras",
  "file_label": "Upload your logo",
  "file_upload_label": "Drop an image here or tap to browse",
  "font_title": "Font",
  "generating_image": "Generating Image",
  "header_text": "CREATE YOUR CUSTOM SIGN",
  "height_input": "Height",
  "icon_button_label": "Icons",
  "icon_title": "Icons",
  "inch_button": "Use inches",
  "inclusions": "Your Custom Sign\nPower Supply\nDigital Installation Guide\nFree Express Shipping\n12-Month Warranty",
  "inclusions_header": "What'"'"'s included in your custom sign?",
  "invalid_characters": "Text contains invalid characters: {characters}. Please try another font.",
  "jacket_colour_exclusion_message": "The selected jacket option is not available for this colour.",
  "jacket_title": "Jacket",
  "label_under_price": "",
  "left_side": "Left",
  "letter_parts_description": "",
  "letter_parts_title": "",
  "lightbox_product_type_title": "Lightbox",
  "line_limit_reached": "You have exceeded the maximum number of lines for the current size.",
  "lines_text": "lines",
  "loading_manual_clear_text": "Your design is being added to the cart. Please wait...",
  "logo_button_text": "Submit Custom Design",
  "logo_text": "To Submit a Custom Design, please click on the button below",
  "logo_upload_design_ready": "Design Ready!",
  "logo_upload_failed_description": "Fill out the form to send us an inquiry, we'"'"'ll automatically attach this image",
  "logo_upload_failed_title": "We couldn'"'"'t process your image",
  "logo_upload_file_too_large": "This file is too large. Choose a file up to {limit} MB.",
  "logo_upload_form_description": "We'"'"'ll keep processing your file and send the customisable version to your email when ready.",
  "logo_upload_form_email_placeholder": "Your email",
  "logo_upload_form_name_placeholder": "Your name",
  "logo_upload_form_submit_button": "Submit Request",
  "logo_upload_form_submitted_description": "We'"'"'ll process your image in the background and email you when it'"'"'s ready.",
  "logo_upload_form_submitted_title": "Request Submitted!",
  "logo_upload_form_title": "Taking longer than expected?",
  "logo_upload_pending_description": "Depending on the complexity of the image, this may take a few minutes.",
  "logo_upload_pending_title": "Processing your image",
  "logo_upload_try_another": "Try another image",
  "main_tab_title": "Text",
  "manual_button": "Enter dimensions manually",
  "material_mounting_exclusion_message": "The selected material is not available with this mounting option.",
  "material_support_exclusion_message": "The selected material is not available with this backboard.",
  "material_title": "Material",
  "max_sign_char": "characters max",
  "max_sign_modal_button_label": "Get a quote",
  "max_sign_modal_label": "Size is over the limit. Contact us for a quote.",
  "min_character_message": "or more characters are required for this size, please add more characters.",
  "min_height_sign_warning": "The overall sign height is too small. Please increase the height.",
  "mounting_colour_exclusion_message": "The selected mounting option is not available with this colour.",
  "mounting_colour_min_size_message": "This colour requires a larger sign size.",
  "mounting_colour_title": "Mounting colour",
  "mounting_letter_part_title": "Mounting Side",
  "mounting_support_exclusion_message": "The selected mounting option is not available with this backboard.",
  "mounting_title": "Mounting",
  "options_tab": "Options",
  "preview_note": "Colours may appear different in real life",
  "price": "",
  "price_after_label": "",
  "price_box_text": "Free shipping, One year guarantee",
  "price_button_add": "Add to Bag",
  "price_button_finish": "Finish",
  "product_title": "Custom Sign:",
  "product_type_title": "Letter Type",
  "qualities_header": "Good to know",
  "quote_button": "Finalize Quote",
  "recenter": "Recenter",
  "recenter_warning": "Click to reset position",
  "retry": "Try Again",
  "right_side": "Right",
  "rotation": "Rotation",
  "shape_finished_size": "Finished size: {width} × {height} {unit}",
  "shape_proportions_fixed_by": "Proportions fixed by {shape}",
  "shape_size_adjusted_to_fixed_proportions": "Your saved size was adjusted to match this shape’s fixed proportions.",
  "shape_size_adjusted_to_range": "Size adjusted to fit the available range.",
  "shape_sizing_empty_feasible_range": "This shape cannot be sized within the available minimum and maximum dimensions.",
  "shape_sizing_invalid_canonical_bounds": "This shape is unavailable because its proportions could not be loaded.",
  "shape_sizing_invalid_intent": "Enter a valid size to continue.",
  "shape_sizing_preset_requires_custom": "Choose a custom size for this shape.",
  "share_design": "Share my design",
  "share_design_modal_description": "",
  "share_design_modal_title": "Share Your Design",
  "show_background_preview": true,
  "show_contact_section": true,
  "show_custom_design": true,
  "show_custom_design_link": true,
  "show_inclusion_section": true,
  "show_preview_note": true,
  "show_review_images": true,
  "show_review_section": true,
  "show_styled_note": true,
  "show_text_editor_overlay": true,
  "sign_header": "YOUR SIGN",
  "size_title": "Size",
  "slider_button": "Switch back to slider",
  "summary_header": "YOUR SIGN DETAILS:",
  "support_colour_min_size_message": "The selected backboard colour is only available for larger sizes.",
  "support_colour_title": "Backboard Color",
  "support_title": "Backboard",
  "tap_word_mobile": "Tap on a word to begin customising it.",
  "text_align_center": "Center",
  "text_align_left": "Left",
  "text_align_right": "Right",
  "text_align_title": "Text Align",
  "text_button_label": "Got a text sign? Customise now",
  "text_label": "Write your text",
  "text_orientation_horizontal": "Horizontal",
  "text_orientation_title": "Orientation",
  "text_orientation_vertical_stacked": "Vertical",
  "text_title": "Text",
  "top_side": "Top",
  "upload_background": "Upload Background",
  "uploading_images": "Uploading Images",
  "user_bg_scale_cancel": "Cancel",
  "user_bg_scale_continue": "Continue",
  "user_bg_scale_description": "Specify the width and height this image represents in order to see your sign at a realistic scale.",
  "user_bg_scale_error": "Width and height must be numbers greater than 0.",
  "user_bg_scale_title": "Relative Scale",
  "visualiser_off": "Off",
  "visualiser_on": "On",
  "width_input": "Width",
  "zoom_in": "Zoom In",
  "zoom_out": "Zoom Out"
}'
```

## Response examples

### 200 Patch would apply

```json
{
  "data": {
    "object": "customiser_labels_validation",
    "operation": "update",
    "customiser_id": 42,
    "valid": true
  },
  "links": {
    "self": "https://web.signcustomiser.com/api/v3/customisers/42/labels/validate-update",
    "documentation": "https://www.signcustomiser.com/help/api/"
  },
  "meta": {
    "api_version": "v3",
    "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
  }
}
```

### 400 Malformed JSON body

```json
{
  "type": "https://www.signcustomiser.com/help/api/problems/malformed_json",
  "title": "Malformed JSON",
  "status": 400,
  "code": "malformed_json",
  "detail": "The request body is not valid JSON: Syntax error.",
  "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: Authorization: Bearer <api key>. Keys are created in the merchant admin under Integrate → API Tokens.",
  "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, but the API key grants the following scopes: customisers:read. Create a key that includes the required scope in the merchant admin under Integrate → API Tokens.",
  "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"
}
```

### 422 Validation failed

```json
{
  "type": "https://www.signcustomiser.com/help/api/problems/validation_failed",
  "title": "Validation failed",
  "status": 422,
  "code": "validation_failed",
  "detail": "The request payload failed validation. Correct the fields listed in errors and retry.",
  "errors": [
    {
      "pointer": "/custom_design_type",
      "code": "unsupported_value",
      "detail": "The selected custom design type is invalid.",
      "allowed_values": [
        "none",
        "link",
        "form",
        "live"
      ]
    }
  ],
  "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. Wait 60 seconds, then retry.",
  "retry_after": 60,
  "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
}
```
