# POST Validate an AI sign design job create

Dry-runs `POST /api/v3/ai-sign-design-jobs` with the same body. It returns the problem the create would return, or a verdict with the resolved `product_family` and the credits a job needs and has available. Requires `ai_sign_designs:write`, and `customisers:read` for a customiser context. Nothing is reserved, the source is not used or verified, no idempotency key is used, no budget is spent and no work starts. The create checks everything again, including the source bytes.

- Source URL: https://www.signcustomiser.com/help/api/v3-post-validate-an-ai-sign-design-job-create/
- Markdown URL: https://www.signcustomiser.com/help/api/v3-post-validate-an-ai-sign-design-job-create.md
- Group: AI sign designs
- Method: POST
- Path: /api/v3/ai-sign-design-jobs/validate-create
- Auth: Bearer token
- Required scopes: `ai_sign_designs:write`

## Body parameters

- source_file (object, optional): No description provided.
- product_family (string, optional): No description provided.
- customiser_id (integer, optional): No description provided.
- letter_type_id (integer, optional): No description provided.
- output_formats (array, optional): No description provided.

## Request body example

```json
{
  "source_file": {
    "id": "aisrc_9f2c4b7ad13e6058ba41cd4201"
  },
  "product_family": "neon",
  "customiser_id": 16,
  "letter_type_id": 16,
  "output_formats": [
    "svg",
    "eps",
    "illustrator_pdf"
  ]
}
```

## cURL example

```bash
curl https://web.signcustomiser.com/api/v3/ai-sign-design-jobs/validate-create \
  --request POST \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer YOUR_API_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "source_file": {
    "id": "aisrc_9f2c4b7ad13e6058ba41cd4201"
  },
  "product_family": "neon",
  "customiser_id": 16,
  "letter_type_id": 16,
  "output_formats": [
    "svg",
    "eps",
    "illustrator_pdf"
  ]
}'
```

## Response examples

### 200 POST 200 example 1

```json
{
  "data": {
    "object": "ai_sign_design_job_validation",
    "operation": "create",
    "valid": true,
    "product_family": "neon",
    "required_units": 1,
    "available_units": 24
  },
  "links": {
    "self": "https://web.signcustomiser.com/api/v3/ai-sign-design-jobs/validate-create",
    "documentation": "https://www.signcustomiser.com/help/api/"
  },
  "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 ai_sign_designs:write scope.",
  "required_scopes": [
    "ai_sign_designs:write"
  ],
  "granted_scopes": [
    "ai_sign_designs:read"
  ],
  "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
}
```

### 404 Unknown source

```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 Low credit

```json
{
  "type": "https://www.signcustomiser.com/help/api/problems/insufficient_credits",
  "title": "Insufficient credits",
  "status": 409,
  "code": "insufficient_credits",
  "detail": "A design job reserves 1 credit before it starts, and this store has 0 available. Nothing was reserved, and the source was not used. Add credits in the merchant admin, then retry with the same source.",
  "required_units": 1,
  "available_units": 0,
  "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
}
```

### 422 No design context

```json
{
  "type": "https://www.signcustomiser.com/help/api/problems/ai_sign_design_context_required",
  "title": "Design context required",
  "status": 422,
  "code": "ai_sign_design_context_required",
  "detail": "Name the design context: either product_family for a standalone design, or customiser_id for a design in one of your customisers.",
  "errors": [
    {
      "pointer": "/product_family",
      "code": "required",
      "detail": "Name the design context: either product_family for a standalone design, or customiser_id for a design in one of your customisers.",
      "allowed_values": [
        "neon",
        "channel_letter",
        "metal_cut_out"
      ]
    }
  ],
  "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
}
```

### 429 Designer busy

```json
{
  "type": "https://www.signcustomiser.com/help/api/problems/ai_sign_design_capacity_reached",
  "title": "AI sign design capacity reached",
  "status": 429,
  "code": "ai_sign_design_capacity_reached",
  "detail": "The most design jobs that can run at the same time are already running. Nothing was reserved, and the source was not used. Retry with the same Idempotency-Key and body after retry_after seconds.",
  "retry_after": 30,
  "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
}
```

### 503 AI sign designer turned off

```json
{
  "type": "https://www.signcustomiser.com/help/api/problems/ai_sign_designer_unavailable",
  "title": "AI sign designer unavailable",
  "status": 503,
  "code": "ai_sign_designer_unavailable",
  "detail": "The AI sign designer is turned off for this store. Sources and designs that already exist stay readable. Read GET /api/v3/ai-sign-design-capabilities and try again when available is true.",
  "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
}
```
