Customiser letter parts
Validate a letter part colour image attach
Dry-runs the attach: the slot must exist on this colour, the upload must exist for this store and this API key, and its purpose must be the slot's. Nothing is written, the upload is not consumed, and no idempotency key is spent.
Overview
Requires customisers:write.
The staged bytes are deliberately not read, so this cannot tell you
whether the file is a usable image — that verdict only exists once the
attach reads the object, and reading it here would let a preflight mark a
good upload rejected. Treat a valid verdict as "the upload is
attachable", not "the file is sound".
Authorisation
Bearer token required. Include it in theAuthorization header.
Required scope: customisers:write
Path parameters
The customiser id.
Example: 1
The letter type id.
Example: 3
The letter part the colour belongs to.
Example: face
The colour id.
Example: 7
Which image to write: `image`, `example_image` or `texture_image`.
Example: image
Request body
Request body example
{
"upload_id": "upl_9f2c4b7ad13e6058ba41cd"
}curl https://web.signcustomiser.com/api/v3/customisers/1/letter-types/3/letter-parts/face/colours/7/images/image/validate-update \
--request POST \
--header 'Accept: application/json' \
--header 'Authorization: Bearer YOUR_API_TOKEN' \
--header 'Content-Type: application/json' \
--data '{
"upload_id": "upl_9f2c4b7ad13e6058ba41cd"
}'{
"data": {
"object": "letter_part_colour_image_validation",
"operation": "update",
"customiser_id": 42,
"letter_type_id": 3,
"letter_part": "face",
"colour_id": 7,
"image_slot": "image",
"valid": true
},
"links": {
"self": "https://web.signcustomiser.com/api/v3/customisers/42/letter-types/3/letter-parts/face/colours/7/images/image/validate-update",
"documentation": "https://www.signcustomiser.com/help/api/"
},
"meta": {
"api_version": "v3",
"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/upload_purpose_mismatch",
"title": "Upload purpose mismatch",
"status": 422,
"code": "upload_purpose_mismatch",
"detail": "This slot accepts uploads created with purpose option_image, and this upload was created with purpose font_ttf. Create a new upload with the slot's purpose.",
"errors": [
{
"pointer": "/upload_id",
"code": "upload_purpose_mismatch",
"detail": "The upload's purpose is font_ttf.",
"allowed_values": [
"option_image"
]
}
],
"request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
}{
"type": "https://www.signcustomiser.com/help/api/problems/letter_types_not_supported",
"title": "Letter types not supported",
"status": 422,
"code": "letter_types_not_supported",
"detail": "This customiser cuts its sign from a single sheet, so it offers no letter types and none can be created. Read the customiser to see which families it supports.",
"errors": [
{
"pointer": "",
"code": "letter_types_not_supported",
"detail": "This customiser category does not offer letter types."
}
],
"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": 60,
"request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
}