{
  "openapi": "3.0.1",
  "info": {
    "title": "Productify.ai API",
    "description": "The Productify.ai API provides programmatic access to Productify.ai’s product data processing capabilities, allowing teams to integrate automated product data ingestion, extraction, enrichment, and normalisation directly into their existing systems.\n\nThe API supports both single and batch operations for generating structured product content, transforming existing product data, and extracting structured information from images and packaging (including tables, nutritional data, and back-of-pack information). It is designed for use in automated pipelines and background workflows, and can be embedded into PIM systems, ecommerce platforms, internal tooling, or agency workflows.\n\nAll endpoints are stateless, API-key authenticated, and suitable for high-volume processing.\n\nDocumentation & Tooling\nInteractive Swagger UI: https://api.productify.ai/swagger\n\nAPI Documentation: https://api.productify.ai/docs\n\nPostman Import URL: https://api.productify.ai/swagger/v1/swagger.json\n\n* For enterprise or white-label deployments, contact us to discuss throughput, schema alignment, and SLA requirements.",
    "termsOfService": "https://www.productify.ai/terms-and-conditions/",
    "contact": {
      "name": "Productify.ai Support",
      "email": "support@productify.ai"
    },
    "version": "v1",
    "x-logo": {
      "url": "https://media.happen.zone/productify/logoapidocumentation.svg",
      "altText": "Productify.ai Logo"
    }
  },
  "servers": [
    {
      "url": "https://api.productify.ai",
      "description": "Production server"
    }
  ],
  "paths": {
    "/Account/Balance": {
      "get": {
        "tags": [
          "Account"
        ],
        "summary": "Account Balance",
        "description": "Retrieve your workspace's Credit balance, as well as a breakdown of available operation types and costs.",
        "operationId": "AccountBalance",
        "parameters": [
          {
            "name": "ApiKey",
            "in": "header",
            "description": "API Key used for authentication",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "00000000-0000-0000-0000-000000000000"
          }
        ],
        "responses": {
          "200": {
            "description": "Account balance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Invalid API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/Batch/Generate/Ecommerce": {
      "post": {
        "tags": [
          "Batch Operations"
        ],
        "summary": "Create eCommerce Batch",
        "description": "Create and start processing on a batch of provided products.",
        "operationId": "CreateEcommerceBatch",
        "parameters": [
          {
            "name": "ApiKey",
            "in": "header",
            "description": "API Key used for authentication",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "00000000-0000-0000-0000-000000000000"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GenerateBatchRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/GenerateBatchRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/GenerateBatchRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Batch created - see detail",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateBatchResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Invalid API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/Batch/Generate": {
      "post": {
        "tags": [
          "Batch Operations"
        ],
        "summary": "Create eCommerce Batch",
        "description": "Create and start processing on a batch of provided products.",
        "operationId": "CreateEcommerceBatch",
        "parameters": [
          {
            "name": "ApiKey",
            "in": "header",
            "description": "API Key used for authentication",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "00000000-0000-0000-0000-000000000000"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GenerateBatchRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/GenerateBatchRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/GenerateBatchRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Batch created - see detail",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateBatchResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Invalid API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/Batch/Transform": {
      "post": {
        "tags": [
          "Batch Operations"
        ],
        "summary": "Create Text Batch",
        "description": "Create and start processing on a batch of provided text inputs.",
        "operationId": "CreateTextBatch",
        "parameters": [
          {
            "name": "ApiKey",
            "in": "header",
            "description": "API Key used for authentication",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "00000000-0000-0000-0000-000000000000"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TransformBatchRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/TransformBatchRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/TransformBatchRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Batch created - see detail",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateBatchResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Invalid API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/Batch/Extract": {
      "post": {
        "tags": [
          "Batch Operations"
        ],
        "summary": "Create Digitisation Batch",
        "description": "Create and start processing on a batch of provided images.",
        "operationId": "CreateDigitisationBatch",
        "parameters": [
          {
            "name": "ApiKey",
            "in": "header",
            "description": "API Key used for authentication",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "00000000-0000-0000-0000-000000000000"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ExtractBatchRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ExtractBatchRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ExtractBatchRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Batch created - see detail",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateBatchResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Invalid API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/Batch/Status": {
      "get": {
        "tags": [
          "Batch Operations"
        ],
        "summary": "Status of a Batch",
        "description": "You can poll this method to find the status of a specific batch.",
        "operationId": "BatchStatus",
        "parameters": [
          {
            "name": "batchId",
            "in": "query",
            "description": "The Batch ID to identify the specific batch",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "ApiKey",
            "in": "header",
            "description": "API Key used for authentication",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "00000000-0000-0000-0000-000000000000"
          }
        ],
        "responses": {
          "200": {
            "description": "Batch status",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BatchStatusResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Invalid API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/pricing/operation-costs": {
      "get": {
        "tags": [
          "Information"
        ],
        "summary": "Public operation costs",
        "description": "Returns public pricing for supported Productify.ai operations.",
        "operationId": "GetOperationCosts",
        "parameters": [
          {
            "name": "ApiKey",
            "in": "header",
            "description": "API Key used for authentication",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "00000000-0000-0000-0000-000000000000"
          }
        ],
        "responses": {
          "200": {
            "description": "Public operation pricing",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OperationCostsResponse"
                }
              }
            }
          }
        }
      }
    },
    "/pricing/bonus-tiers": {
      "get": {
        "tags": [
          "Information"
        ],
        "summary": "Public bonus tiers",
        "description": "Returns public credit purchase bonus tiers.",
        "operationId": "GetBonusTiersSummary",
        "parameters": [
          {
            "name": "ApiKey",
            "in": "header",
            "description": "API Key used for authentication",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "00000000-0000-0000-0000-000000000000"
          }
        ],
        "responses": {
          "200": {
            "description": "Public bonus tier pricing",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BonusTiersResponse"
                }
              }
            }
          }
        }
      }
    },
    "/workspace/detail": {
      "get": {
        "tags": [
          "Information"
        ],
        "summary": "Workspace details",
        "description": "Show information about the workspace your API key gives you access to.",
        "operationId": "WorkspaceDetails",
        "parameters": [
          {
            "name": "ApiKey",
            "in": "header",
            "description": "API Key used for authentication",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "00000000-0000-0000-0000-000000000000"
          }
        ],
        "responses": {
          "200": {
            "description": "Workspace details and information",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetWorkspaceDetailsResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Invalid API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/languages": {
      "get": {
        "tags": [
          "Information"
        ],
        "summary": "Supported languages",
        "description": "Returns a list of all supported languages that can be used by Productify.ai. Type: SupportedLanguage",
        "operationId": "SupportedLanguages",
        "parameters": [
          {
            "name": "ApiKey",
            "in": "header",
            "description": "API Key used for authentication",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "00000000-0000-0000-0000-000000000000"
          }
        ],
        "responses": {
          "200": {
            "description": "List of supported languages (SupportedLanguage)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LanguageResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Invalid API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/categories": {
      "get": {
        "tags": [
          "Information"
        ],
        "summary": "Supported product categories",
        "description": "Returns a list of all supported product categories that can be used by Productify.ai. Type: ProductGenerateCategory",
        "operationId": "SupportedCategories",
        "parameters": [
          {
            "name": "ApiKey",
            "in": "header",
            "description": "API Key used for authentication",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "00000000-0000-0000-0000-000000000000"
          }
        ],
        "responses": {
          "200": {
            "description": "List of supported product categories (ProductGenerateCategory)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductCategoryResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Invalid API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/taxonomies": {
      "get": {
        "tags": [
          "Information"
        ],
        "summary": "Supported taxonomies",
        "description": "Returns a list of all supported taxonomies that can be used by Productify.ai for product categorisation. Type: TaxonomyType",
        "operationId": "SupportedTaxonomies",
        "parameters": [
          {
            "name": "ApiKey",
            "in": "header",
            "description": "API Key used for authentication",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "00000000-0000-0000-0000-000000000000"
          }
        ],
        "responses": {
          "200": {
            "description": "List of supported taxonomies (TaxonomyType)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaxonomyResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Invalid API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/Result/Generate/Ecommerce": {
      "post": {
        "tags": [
          "Batch Results"
        ],
        "summary": "Ecommerce Batch Results",
        "description": "Get the results of a completed eCommerce batch.",
        "operationId": "GetEcommerceBatchResults",
        "parameters": [
          {
            "name": "ApiKey",
            "in": "header",
            "description": "API Key used for authentication",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "00000000-0000-0000-0000-000000000000"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BatchResultRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/BatchResultRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/BatchResultRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Batch results - see detail",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenerateResultResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Invalid API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/Result/Generate": {
      "post": {
        "tags": [
          "Batch Results"
        ],
        "summary": "Ecommerce Batch Results",
        "description": "Get the results of a completed eCommerce batch.",
        "operationId": "GetEcommerceBatchResults",
        "parameters": [
          {
            "name": "ApiKey",
            "in": "header",
            "description": "API Key used for authentication",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "00000000-0000-0000-0000-000000000000"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BatchResultRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/BatchResultRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/BatchResultRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Batch results - see detail",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenerateResultResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Invalid API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiServiceResponse"
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "Batch Results"
        ],
        "summary": "Ecommerce Batch Results",
        "description": "Get the results of a completed eCommerce batch.",
        "operationId": "GetEcommerceBatchResults",
        "parameters": [
          {
            "name": "ApiKey",
            "in": "header",
            "description": "API Key used for authentication",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "00000000-0000-0000-0000-000000000000"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BatchResultRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/BatchResultRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/BatchResultRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Batch results - see detail",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenerateResultResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Invalid API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/Result/Transform": {
      "post": {
        "tags": [
          "Batch Results"
        ],
        "summary": "Text Batch Results",
        "description": "Get the results of a completed text batch.",
        "operationId": "GetTextBatchResults",
        "parameters": [
          {
            "name": "ApiKey",
            "in": "header",
            "description": "API Key used for authentication",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "00000000-0000-0000-0000-000000000000"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BatchResultRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/BatchResultRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/BatchResultRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Batch results - see detail",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransformResultResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Invalid API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiServiceResponse"
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "Batch Results"
        ],
        "summary": "Text Batch Results",
        "description": "Get the results of a completed text batch.",
        "operationId": "GetTextBatchResults",
        "parameters": [
          {
            "name": "ApiKey",
            "in": "header",
            "description": "API Key used for authentication",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "00000000-0000-0000-0000-000000000000"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BatchResultRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/BatchResultRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/BatchResultRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Batch results - see detail",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransformResultResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Invalid API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/Result/Extract": {
      "post": {
        "tags": [
          "Batch Results"
        ],
        "summary": "Digitisation Batch Results",
        "description": "Get the results of a completed digitisation batch.",
        "operationId": "GetDigitisationBatchResults",
        "parameters": [
          {
            "name": "ApiKey",
            "in": "header",
            "description": "API Key used for authentication",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "00000000-0000-0000-0000-000000000000"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BatchResultRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/BatchResultRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/BatchResultRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Batch results - see detail",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExtractResultResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Invalid API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiServiceResponse"
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "Batch Results"
        ],
        "summary": "Digitisation Batch Results",
        "description": "Get the results of a completed digitisation batch.",
        "operationId": "GetDigitisationBatchResults",
        "parameters": [
          {
            "name": "ApiKey",
            "in": "header",
            "description": "API Key used for authentication",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "00000000-0000-0000-0000-000000000000"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BatchResultRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/BatchResultRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/BatchResultRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Batch results - see detail",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExtractResultResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Invalid API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/Single/Generate/Ecommerce": {
      "post": {
        "tags": [
          "Single Operations"
        ],
        "summary": "Perform Ecommerce Generate",
        "description": "Process and immediately return the Generated content for a single product.",
        "operationId": "GenerateSingle",
        "parameters": [
          {
            "name": "ApiKey",
            "in": "header",
            "description": "API Key used for authentication",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "00000000-0000-0000-0000-000000000000"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GenerateSingleRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/GenerateSingleRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/GenerateSingleRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Generate results - see detail",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenerateResultResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Invalid API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/Single/Generate": {
      "post": {
        "tags": [
          "Single Operations"
        ],
        "summary": "Perform Ecommerce Generate",
        "description": "Process and immediately return the Generated content for a single product.",
        "operationId": "GenerateSingle",
        "parameters": [
          {
            "name": "ApiKey",
            "in": "header",
            "description": "API Key used for authentication",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "00000000-0000-0000-0000-000000000000"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GenerateSingleRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/GenerateSingleRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/GenerateSingleRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Generate results - see detail",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenerateResultResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Invalid API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/Single/Transform": {
      "post": {
        "tags": [
          "Single Operations"
        ],
        "summary": "Perform Text",
        "description": "Process and immediately return the Text content for a single text input.",
        "operationId": "TextSingle",
        "parameters": [
          {
            "name": "ApiKey",
            "in": "header",
            "description": "API Key used for authentication",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "00000000-0000-0000-0000-000000000000"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TransformSingleRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/TransformSingleRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/TransformSingleRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Text results - see detail",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransformResultResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Invalid API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/Single/Extract": {
      "post": {
        "tags": [
          "Single Operations"
        ],
        "summary": "Perform Digitisation",
        "description": "Process and immediately return the Digitised content for a single image.",
        "operationId": "DigitisationSingle",
        "parameters": [
          {
            "name": "ApiKey",
            "in": "header",
            "description": "API Key used for authentication",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "00000000-0000-0000-0000-000000000000"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ExtractSingleRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ExtractSingleRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ExtractSingleRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Extract results - see detail",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExtractResultResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Invalid API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/Test": {
      "get": {
        "tags": [
          "Test"
        ],
        "summary": "System Test",
        "description": "Run a test of the services to check system health.",
        "operationId": "TestSystem",
        "parameters": [
          {
            "name": "ApiKey",
            "in": "header",
            "description": "API Key used for authentication",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "00000000-0000-0000-0000-000000000000"
          }
        ],
        "responses": {
          "200": {
            "description": "System status",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TestResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Invalid API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/health": {
      "get": {
        "tags": [
          "Test"
        ],
        "summary": "Health Check",
        "description": "Standard health check endpoint for monitoring systems.",
        "operationId": "HealthCheck",
        "parameters": [
          {
            "name": "ApiKey",
            "in": "header",
            "description": "API Key used for authentication",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "00000000-0000-0000-0000-000000000000"
          }
        ],
        "responses": {
          "200": {
            "description": "Service is healthy",
            "content": {
              "application/json": { }
            }
          },
          "503": {
            "description": "Service is unhealthy",
            "content": {
              "application/json": { }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "AccountResponse": {
        "type": "object",
        "properties": {
          "wasSuccessful": {
            "type": "boolean",
            "description": "Whether the request succeeded"
          },
          "responseMessage": {
            "type": "string",
            "description": "A message containing relevant information about the request's success or failure",
            "nullable": true
          },
          "creditBalance": {
            "type": "number",
            "description": "Current Credit balance for your workspace",
            "format": "double"
          },
          "generateCostBreakdown": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GenerateOperationTypeCostData"
            },
            "description": "A breakdown of all available generate type costs",
            "nullable": true
          },
          "transformCostBreakdown": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TransformOperationTypeCostData"
            },
            "description": "A breakdown of all available transform type costs",
            "nullable": true
          },
          "extractCostBreakdown": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ExtractOperationTypeCostData"
            },
            "description": "A breakdown of all available extract type costs",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ApiServiceResponse": {
        "type": "object",
        "properties": {
          "description": {
            "type": "string",
            "nullable": true
          },
          "heading": {
            "type": "string",
            "nullable": true
          },
          "wasSuccessful": {
            "type": "boolean"
          },
          "modelState": {
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "BackOfPackExtractionAllergen": {
        "type": "object",
        "properties": {
          "contains": {
            "type": "string",
            "description": "Allergen ingredients contained, comma separated.",
            "nullable": true
          },
          "mayContain": {
            "type": "string",
            "description": "May contain allergen ingredients, comma separated.",
            "nullable": true
          },
          "madeInFactoryThatUses": {
            "type": "string",
            "description": "Allergens that may be present from the factory, comma separated.",
            "nullable": true
          },
          "exactCopy": {
            "type": "string",
            "description": "The exact copy on the packaging.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "The allergens for the product"
      },
      "BackOfPackExtractionCertification": {
        "type": "object",
        "properties": {
          "halal": {
            "type": "boolean",
            "description": "The product is Halal"
          },
          "kosher": {
            "type": "boolean",
            "description": "The product is Kosher"
          },
          "vegetarian": {
            "type": "boolean",
            "description": "The product is vegetarian"
          },
          "vegan": {
            "type": "boolean",
            "description": "The product is vegan"
          },
          "dairyFree": {
            "type": "boolean",
            "description": "The product is dairy free"
          },
          "fatFree": {
            "type": "boolean",
            "description": "The product is fat free"
          },
          "organic": {
            "type": "boolean",
            "description": "The product is organic"
          },
          "noAddedPreservatives": {
            "type": "boolean",
            "description": "The product has no added preservatives"
          },
          "glutenFree": {
            "type": "boolean",
            "description": "The product has no gluten"
          }
        },
        "additionalProperties": false,
        "description": "The certifications for the product"
      },
      "BackOfPackExtractionResult": {
        "type": "object",
        "properties": {
          "brandName": {
            "type": "string",
            "description": "The brand name of the product",
            "nullable": true
          },
          "productName": {
            "type": "string",
            "description": "The name of the product",
            "nullable": true
          },
          "netQuantityUnitOfSize": {
            "type": "string",
            "description": "The numeric part of the net quantity",
            "nullable": true
          },
          "netQuantityUnitOfMeasure": {
            "type": "string",
            "description": "The net quantity unit of measure for the product",
            "nullable": true
          },
          "netQuantity": {
            "type": "string",
            "description": "The combined net quantity value for display",
            "nullable": true,
            "readOnly": true
          },
          "servingSizeUnitOfSize": {
            "type": "string",
            "description": "The numeric part of the serving size",
            "nullable": true
          },
          "servingSizeUnitOfMeasure": {
            "type": "string",
            "description": "The serving size unit of measure for the product",
            "nullable": true
          },
          "servingSize": {
            "type": "string",
            "description": "The combined serving size value for display",
            "nullable": true,
            "readOnly": true
          },
          "ingredients": {
            "type": "string",
            "description": "The ingredients of the product",
            "nullable": true
          },
          "allergens": {
            "$ref": "#/components/schemas/BackOfPackExtractionAllergen"
          },
          "origin": {
            "type": "string",
            "description": "The origin of the product",
            "nullable": true
          },
          "manufacturer": {
            "type": "string",
            "description": "The manufacturer of the product",
            "nullable": true
          },
          "marketingCopy": {
            "type": "string",
            "description": "Any marketing related copy on the product.",
            "nullable": true
          },
          "storageInstructions": {
            "type": "string",
            "description": "The storage instructions for the product",
            "nullable": true
          },
          "instructionsForUse": {
            "type": "string",
            "description": "The instructions for use of the product",
            "nullable": true
          },
          "claimsOnPackaging": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The claims on the packaging",
            "nullable": true
          },
          "packagingType": {
            "type": "string",
            "description": "The type of packaging for the product",
            "nullable": true
          },
          "customerServiceInformation": {
            "type": "string",
            "description": "The customer service information for the product",
            "nullable": true
          },
          "certifications": {
            "$ref": "#/components/schemas/BackOfPackExtractionCertification"
          },
          "barcodes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The barcodes associated with the product",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "The result of the back of pack extraction"
      },
      "BatchResultRequest": {
        "type": "object",
        "properties": {
          "pageSize": {
            "type": "integer",
            "description": "The index of the page of results to retrieve. Defaults to 0 to retrieve the first page of results.",
            "format": "int32"
          },
          "pageNumber": {
            "type": "integer",
            "description": "The number of results to include per page. Default is 100.",
            "format": "int32"
          },
          "batchId": {
            "type": "integer",
            "description": "The Productify.ai Identifier for the batch",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "BatchStatusResponse": {
        "type": "object",
        "properties": {
          "wasSuccessful": {
            "type": "boolean",
            "description": "Whether the request succeeded"
          },
          "responseMessage": {
            "type": "string",
            "description": "A message containing relevant information about the request's success or failure",
            "nullable": true
          },
          "batchId": {
            "type": "integer",
            "description": "The Productify.ai Identifier for the batch",
            "format": "int64"
          },
          "status": {
            "$ref": "#/components/schemas/BatchStatusSummary"
          },
          "hasError": {
            "type": "boolean",
            "description": "Indicates there are items with errors in the batch. There may still be items that have been processed successfully or partially."
          },
          "statusMessage": {
            "type": "string",
            "description": "The text value of the current Status of the Batch",
            "nullable": true,
            "readOnly": true
          },
          "createdDate": {
            "type": "string",
            "description": "The date the Batch was created",
            "format": "date-time"
          },
          "lastUpdatedDate": {
            "type": "string",
            "description": "The date the Batch was last updated",
            "format": "date-time"
          },
          "itemCount": {
            "type": "integer",
            "description": "The count of how many items in total there are to process",
            "format": "int64"
          },
          "itemProcessedCount": {
            "type": "integer",
            "description": "The count of how many items have finished processing",
            "format": "int64"
          }
        },
        "additionalProperties": false
      },
      "BatchStatusSummary": {
        "enum": [
          0,
          200,
          300,
          -1
        ],
        "type": "integer",
        "description": "Available options: Possible values: 0 = New, 200 = Processing, 300 = Processed, -1 = Cancelled",
        "format": "int32",
        "example": 0
      },
      "BatchType": {
        "enum": [
          0,
          1,
          20,
          30
        ],
        "type": "integer",
        "description": "Available options: Possible values: 0 = Unknown, 1 = Ecommerce, 20 = Text, 30 = Image Digitisation",
        "format": "int32",
        "example": 0
      },
      "BonusTierDetail": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true
          },
          "amount": {
            "type": "string",
            "nullable": true
          },
          "bonusPercent": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "BonusTiersResponse": {
        "type": "object",
        "properties": {
          "description": {
            "type": "string",
            "nullable": true
          },
          "heading": {
            "type": "string",
            "nullable": true
          },
          "wasSuccessful": {
            "type": "boolean"
          },
          "modelState": {
            "nullable": true
          },
          "bonusTiers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BonusTierDetail"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CreateBatchResponse": {
        "type": "object",
        "properties": {
          "wasSuccessful": {
            "type": "boolean",
            "description": "Whether the request succeeded"
          },
          "responseMessage": {
            "type": "string",
            "description": "A message containing relevant information about the request's success or failure",
            "nullable": true
          },
          "batchSizeLimitExceeded": {
            "type": "boolean",
            "description": "Indicates whether the requested operation exceeds the maximum number of items allowed in a batch"
          },
          "creditLimitReached": {
            "type": "boolean",
            "description": "Indicates whether the requested operation exceeds your workspace's available Credits"
          },
          "creditCost": {
            "type": "number",
            "description": "The cost in USD Credits of the operation",
            "format": "double"
          },
          "creditsRemaining": {
            "type": "number",
            "description": "How many Credits are remaining for your workspace after the operation",
            "format": "double"
          },
          "currentBalance": {
            "type": "number",
            "description": "Your workspace's current balance of Credits",
            "format": "double"
          },
          "validationResults": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/InputValidationResultData"
            },
            "description": "A list containing any validation errors on the inputs.",
            "nullable": true
          },
          "validations": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Strings containing the validation results for each identifier.",
            "nullable": true,
            "readOnly": true
          },
          "batchId": {
            "type": "integer",
            "description": "The Productify.ai Identifier for the created batch",
            "format": "int64"
          }
        },
        "additionalProperties": false
      },
      "ExtractBatchRequest": {
        "required": [
          "extractInputs"
        ],
        "type": "object",
        "properties": {
          "extractInputs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ExtractInputData"
            },
            "description": "The list of input images to extract content from"
          },
          "tableSelection": {
            "$ref": "#/components/schemas/TypeSelection"
          },
          "ocrSelection": {
            "$ref": "#/components/schemas/TypeSelection"
          },
          "nutritionalTableDataSelection": {
            "$ref": "#/components/schemas/TypeSelection"
          },
          "backOfPackSelection": {
            "$ref": "#/components/schemas/TypeSelection"
          },
          "statusWebhookURL": {
            "type": "string",
            "description": "A URL to which the status of the batch will be posted upon completion. Request structure is defined in the BatchStatusResponse model.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ExtractInputData": {
        "required": [
          "identifier",
          "imageUrls"
        ],
        "type": "object",
        "properties": {
          "identifier": {
            "maxLength": 1000,
            "minLength": 1,
            "type": "string",
            "description": "Your identifier for the Input"
          },
          "imageUrls": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "A list of externally accessible URLs to retrieve the images from."
          }
        },
        "additionalProperties": false
      },
      "ExtractOperationTypeCostData": {
        "type": "object",
        "properties": {
          "operationType": {
            "$ref": "#/components/schemas/ExtractType"
          },
          "estimatedOperations": {
            "type": "integer",
            "description": "An estimation of how many of this operation can be performed with your workspace's current Credit balance",
            "format": "int32"
          },
          "operationCost": {
            "type": "number",
            "description": "The cost in USD Credits for performing one of the Operation",
            "format": "double"
          }
        },
        "additionalProperties": false
      },
      "ExtractResultData": {
        "type": "object",
        "properties": {
          "identifier": {
            "type": "string",
            "description": "Your identifier for the input",
            "nullable": true
          },
          "tableDigitisationResult": {
            "type": "array",
            "items": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "description": "A list containing the rows of table digitisation result, each containing a list of the cells in the row.",
            "nullable": true
          },
          "textExtractionResult": {
            "type": "string",
            "description": "The text extraction result from OCR.",
            "nullable": true
          },
          "nutritionalTableDigitisationResult": {
            "$ref": "#/components/schemas/NutrientDataResult"
          },
          "backOfPackExtractionResult": {
            "$ref": "#/components/schemas/BackOfPackExtractionResult"
          }
        },
        "additionalProperties": false
      },
      "ExtractResultResponse": {
        "type": "object",
        "properties": {
          "wasSuccessful": {
            "type": "boolean",
            "description": "Whether the request succeeded"
          },
          "responseMessage": {
            "type": "string",
            "description": "A message containing relevant information about the request's success or failure",
            "nullable": true
          },
          "batchSizeLimitExceeded": {
            "type": "boolean",
            "description": "Indicates whether the requested operation exceeds the maximum number of items allowed in a batch"
          },
          "creditLimitReached": {
            "type": "boolean",
            "description": "Indicates whether the requested operation exceeds your workspace's available Credits"
          },
          "creditCost": {
            "type": "number",
            "description": "The cost in USD Credits of the operation",
            "format": "double"
          },
          "creditsRemaining": {
            "type": "number",
            "description": "How many Credits are remaining for your workspace after the operation",
            "format": "double"
          },
          "currentBalance": {
            "type": "number",
            "description": "Your workspace's current balance of Credits",
            "format": "double"
          },
          "validationResults": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/InputValidationResultData"
            },
            "description": "A list containing any validation errors on the inputs.",
            "nullable": true
          },
          "validations": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Strings containing the validation results for each identifier.",
            "nullable": true,
            "readOnly": true
          },
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ExtractResultData"
            },
            "description": "The list of extracted content results for all inputs",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ExtractSingleRequest": {
        "required": [
          "input"
        ],
        "type": "object",
        "properties": {
          "input": {
            "$ref": "#/components/schemas/ExtractInputData"
          },
          "tableSelection": {
            "$ref": "#/components/schemas/TypeSelection"
          },
          "ocrSelection": {
            "$ref": "#/components/schemas/TypeSelection"
          },
          "nutritionalTableDataSelection": {
            "$ref": "#/components/schemas/TypeSelection"
          },
          "backOfPackSelection": {
            "$ref": "#/components/schemas/TypeSelection"
          }
        },
        "additionalProperties": false
      },
      "ExtractType": {
        "enum": [
          0,
          1,
          2,
          3
        ],
        "type": "integer",
        "description": "Available options: Possible values: 0 = Table Digitisation, 1 = Text Extraction, 2 = Nutritional Table Digitisation, 3 = Back of Pack Extraction",
        "format": "int32",
        "example": 0
      },
      "FabResult": {
        "type": "object",
        "properties": {
          "features": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "benefits": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "attributes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "sentences": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Will contain three items for Features, Attributes and Benefits results, as well as a list of sentences composed of the features, attributes and benefits."
      },
      "GenerateBatchRequest": {
        "required": [
          "products"
        ],
        "type": "object",
        "properties": {
          "products": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProductData"
            },
            "description": "The list of input products to generate content for"
          },
          "marketingDescriptionSelection": {
            "$ref": "#/components/schemas/MarketingDescriptionSelection"
          },
          "shortDescriptionSelection": {
            "$ref": "#/components/schemas/ShortDescriptionSelection"
          },
          "headlineSelection": {
            "$ref": "#/components/schemas/TypeSelection"
          },
          "featuresAndBenefitsSelection": {
            "$ref": "#/components/schemas/TypeSelection"
          },
          "seoKeywordsSelection": {
            "$ref": "#/components/schemas/TypeSelection"
          },
          "productCategorisationSelection": {
            "$ref": "#/components/schemas/ProductCategorisationSelection"
          },
          "category": {
            "$ref": "#/components/schemas/ProductGenerateCategory"
          },
          "enableTranslation": {
            "type": "boolean",
            "description": "Optional.\r\n\r\nEnable Translations of Generated content. The Workspace must have the Translation feature enabled.",
            "nullable": true
          },
          "translationLanguage": {
            "$ref": "#/components/schemas/SupportedLanguage"
          },
          "statusWebhookURL": {
            "type": "string",
            "description": "(Optional) A URL to which the status of the batch will be posted upon completion. Request structure is defined in the BatchStatusResponse model.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "GenerateOperationTypeCostData": {
        "type": "object",
        "properties": {
          "operationType": {
            "$ref": "#/components/schemas/GenerateType"
          },
          "estimatedOperations": {
            "type": "integer",
            "description": "An estimation of how many of this operation can be performed with your workspace's current Credit balance",
            "format": "int32"
          },
          "operationCost": {
            "type": "number",
            "description": "The cost in USD Credits of performing one of the operation",
            "format": "double"
          }
        },
        "additionalProperties": false
      },
      "GenerateResultData": {
        "type": "object",
        "properties": {
          "identifier": {
            "type": "string",
            "description": "Your identifier for the Product",
            "nullable": true
          },
          "marketingDescriptionOptions": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "A list of three options for the marketing description.",
            "nullable": true
          },
          "shortDescriptionOptions": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "A list of three options for the short description.",
            "nullable": true
          },
          "featuresAndBenefits": {
            "$ref": "#/components/schemas/FabResult"
          },
          "seoKeywords": {
            "type": "string",
            "description": "A comma separated list of SEO keywords for the product.",
            "nullable": true
          },
          "headlineOptions": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "A list of three options for the product headline.",
            "nullable": true
          },
          "productCategorisation": {
            "$ref": "#/components/schemas/ProductCategorisationResult"
          }
        },
        "additionalProperties": false
      },
      "GenerateResultResponse": {
        "type": "object",
        "properties": {
          "wasSuccessful": {
            "type": "boolean",
            "description": "Whether the request succeeded"
          },
          "responseMessage": {
            "type": "string",
            "description": "A message containing relevant information about the request's success or failure",
            "nullable": true
          },
          "batchSizeLimitExceeded": {
            "type": "boolean",
            "description": "Indicates whether the requested operation exceeds the maximum number of items allowed in a batch"
          },
          "creditLimitReached": {
            "type": "boolean",
            "description": "Indicates whether the requested operation exceeds your workspace's available Credits"
          },
          "creditCost": {
            "type": "number",
            "description": "The cost in USD Credits of the operation",
            "format": "double"
          },
          "creditsRemaining": {
            "type": "number",
            "description": "How many Credits are remaining for your workspace after the operation",
            "format": "double"
          },
          "currentBalance": {
            "type": "number",
            "description": "Your workspace's current balance of Credits",
            "format": "double"
          },
          "validationResults": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/InputValidationResultData"
            },
            "description": "A list containing any validation errors on the inputs.",
            "nullable": true
          },
          "validations": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Strings containing the validation results for each identifier.",
            "nullable": true,
            "readOnly": true
          },
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GenerateResultData"
            },
            "description": "The list of generated content results for all inputs",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "GenerateSingleRequest": {
        "required": [
          "product"
        ],
        "type": "object",
        "properties": {
          "product": {
            "$ref": "#/components/schemas/ProductData"
          },
          "marketingDescriptionSelection": {
            "$ref": "#/components/schemas/MarketingDescriptionSelection"
          },
          "shortDescriptionSelection": {
            "$ref": "#/components/schemas/ShortDescriptionSelection"
          },
          "headlineSelection": {
            "$ref": "#/components/schemas/TypeSelection"
          },
          "featuresAndBenefitsSelection": {
            "$ref": "#/components/schemas/TypeSelection"
          },
          "seoKeywordsSelection": {
            "$ref": "#/components/schemas/TypeSelection"
          },
          "productCategorisationSelection": {
            "$ref": "#/components/schemas/ProductCategorisationSelection"
          },
          "category": {
            "$ref": "#/components/schemas/ProductGenerateCategory"
          },
          "enableTranslation": {
            "type": "boolean",
            "description": "Optional.\r\n\r\nEnable Translations of Generated content. The Workspace must have the Translation feature enabled.",
            "nullable": true
          },
          "translationLanguage": {
            "$ref": "#/components/schemas/SupportedLanguage"
          }
        },
        "additionalProperties": false
      },
      "GenerateType": {
        "enum": [
          0,
          1,
          2,
          4,
          5
        ],
        "type": "integer",
        "description": "Available options: Possible values: 0 = Marketing Description, 1 = Short Description, 2 = Features, Attributes & Benefits, 4 = SEO Keywords, 5 = Headline",
        "format": "int32",
        "example": 0
      },
      "GetWorkspaceDetailsResponse": {
        "type": "object",
        "properties": {
          "description": {
            "type": "string",
            "nullable": true
          },
          "heading": {
            "type": "string",
            "nullable": true
          },
          "wasSuccessful": {
            "type": "boolean"
          },
          "modelState": {
            "nullable": true
          },
          "name": {
            "type": "string",
            "description": "The name of the workspace.",
            "nullable": true
          },
          "defaultLanguage": {
            "$ref": "#/components/schemas/SupportedLanguage"
          },
          "unitOfMeasure": {
            "$ref": "#/components/schemas/UnitOfMeasure"
          },
          "isEnterprise": {
            "type": "boolean"
          },
          "apiKeyName": {
            "type": "string",
            "description": "The name of the API key that was used to access this workspace.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "InputError": {
        "type": "object",
        "properties": {
          "propertyName": {
            "type": "string",
            "description": "The property the error is on",
            "nullable": true
          },
          "errorMessage": {
            "type": "string",
            "description": "Details about the error on the property",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "InputValidationResultData": {
        "type": "object",
        "properties": {
          "identifier": {
            "type": "string",
            "description": "The Identifier supplied in the request",
            "nullable": true
          },
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/InputError"
            },
            "description": "All errors that occur on the input",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "LanguageDetail": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Unique identifier for the language",
            "format": "int32"
          },
          "name": {
            "type": "string",
            "description": "Display name of the language",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Details of a supported language"
      },
      "LanguageResponse": {
        "type": "object",
        "properties": {
          "description": {
            "type": "string",
            "nullable": true
          },
          "heading": {
            "type": "string",
            "nullable": true
          },
          "wasSuccessful": {
            "type": "boolean"
          },
          "modelState": {
            "nullable": true
          },
          "supportedLanguages": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LanguageDetail"
            },
            "description": "List of all supported languages",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Response containing all supported languages for translation and generation"
      },
      "MarketingDescriptionSelection": {
        "type": "object",
        "properties": {
          "selected": {
            "type": "boolean"
          },
          "targetOutputLength": {
            "$ref": "#/components/schemas/TargetOutputLength"
          },
          "excludeProductName": {
            "type": "boolean",
            "description": "Optional. Exclude the product name from the generated output. Defaults to false.",
            "nullable": true
          },
          "includeUnitOfSize": {
            "type": "boolean",
            "description": "Optional. Include the unit of size in the generated output. Defaults to false.",
            "nullable": true
          },
          "tone": {
            "$ref": "#/components/schemas/OperationAiTone"
          }
        },
        "additionalProperties": false
      },
      "Nutrient": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "description": "The Nutrient Type",
            "nullable": true
          },
          "unit": {
            "type": "string",
            "description": "The Unit of the Measurement",
            "nullable": true
          },
          "per100": {
            "type": "string",
            "description": "The Amount per 100g",
            "nullable": true
          },
          "perServing": {
            "type": "string",
            "description": "The Amount per Serving",
            "nullable": true
          },
          "nrvPerServing": {
            "type": "string",
            "description": "The NRV per Serving",
            "nullable": true
          },
          "nutrientCode": {
            "type": "string",
            "description": "The Nutrient Code",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A specific Nutrient specification"
      },
      "NutrientDataResult": {
        "type": "object",
        "properties": {
          "nutrients": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Nutrient"
            },
            "description": "The list of nutrients",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Will contain a list of Nutrient specifications"
      },
      "OperationAiTone": {
        "enum": [
          0,
          1,
          2,
          3,
          4
        ],
        "type": "integer",
        "description": "Available options: Possible values: 0 = Professional, 1 = Friendly, 2 = Optimistic, 3 = Informal, 4 = Scientific",
        "format": "int32",
        "example": 0
      },
      "OperationCostDetail": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true
          },
          "userOperationType": {
            "$ref": "#/components/schemas/UserOperationType"
          },
          "creditsCost": {
            "type": "number",
            "format": "double"
          }
        },
        "additionalProperties": false
      },
      "OperationCostsBatchDetail": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true
          },
          "batchType": {
            "$ref": "#/components/schemas/BatchType"
          },
          "operations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OperationCostDetail"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "OperationCostsResponse": {
        "type": "object",
        "properties": {
          "description": {
            "type": "string",
            "nullable": true
          },
          "heading": {
            "type": "string",
            "nullable": true
          },
          "wasSuccessful": {
            "type": "boolean"
          },
          "modelState": {
            "nullable": true
          },
          "translationAdditionalCost": {
            "type": "number",
            "format": "double"
          },
          "batches": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OperationCostsBatchDetail"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ProductCategorisationResult": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "fullCategoryPath": {
            "type": "string",
            "nullable": true
          },
          "parent": {
            "$ref": "#/components/schemas/ProductCategorisationResult"
          }
        },
        "additionalProperties": false,
        "description": "Will contain the product categorisation result starting at the lowest level. Each level contains its ID, Name, the full category path and its parent."
      },
      "ProductCategorisationSelection": {
        "type": "object",
        "properties": {
          "selected": {
            "type": "boolean"
          },
          "taxonomyType": {
            "$ref": "#/components/schemas/TaxonomyType"
          }
        },
        "additionalProperties": false
      },
      "ProductCategoryDetail": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Unique identifier for the product category",
            "format": "int32"
          },
          "name": {
            "type": "string",
            "description": "Display name of the product category",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Details of a supported product category"
      },
      "ProductCategoryResponse": {
        "type": "object",
        "properties": {
          "description": {
            "type": "string",
            "nullable": true
          },
          "heading": {
            "type": "string",
            "nullable": true
          },
          "wasSuccessful": {
            "type": "boolean"
          },
          "modelState": {
            "nullable": true
          },
          "supportedProductCategories": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProductCategoryDetail"
            },
            "description": "List of all supported product categories",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Response containing all supported product categories for content generation"
      },
      "ProductData": {
        "required": [
          "identifier",
          "productName"
        ],
        "type": "object",
        "properties": {
          "identifier": {
            "maxLength": 1000,
            "minLength": 1,
            "type": "string",
            "description": "The identifier you want to use for this product"
          },
          "productName": {
            "maxLength": 1000,
            "minLength": 1,
            "type": "string",
            "description": "A name for thepProduct to be used in generated content"
          },
          "additionalAttributes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "An optional list of any additional keywords or attributes to be used for generated content",
            "nullable": true
          },
          "imageUrl": {
            "maxLength": 1000,
            "type": "string",
            "description": "An optional externally accesible URL to retrieve the product image from, to be used for generating content",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ProductGenerateCategory": {
        "enum": [
          0,
          10,
          20,
          30,
          40,
          60,
          70,
          80,
          90,
          100,
          110,
          120,
          130,
          140,
          150,
          160,
          170,
          180,
          190,
          200,
          210
        ],
        "type": "integer",
        "description": "Product categories to help improve content generation. Possible values: 0 = Other, 10 = Automotive, 20 = Baby, Toddlers and Kids, 30 = Beauty, 40 = Beverages, 60 = Clothing, Shoes & Accessories, 70 = Consumer Electronics, 80 = DIY, 90 = Food & Groceries, 100 = Garden, Patio & Pool, 110 = Gaming & Entertainment, 120 = Health & Personal Care, 130 = Home & Furniture, 140 = Home Appliances, 150 = Household Essentials, 160 = Liquor, 170 = Mobile Phones, 180 = Office & Stationery, 190 = Party & Occasions, 200 = Pets, 210 = Sports and Outdoors",
        "format": "int32",
        "example": 0
      },
      "RephraseSelection": {
        "type": "object",
        "properties": {
          "selected": {
            "type": "boolean"
          },
          "tone": {
            "$ref": "#/components/schemas/OperationAiTone"
          }
        },
        "additionalProperties": false
      },
      "ShortDescriptionSelection": {
        "type": "object",
        "properties": {
          "selected": {
            "type": "boolean"
          },
          "excludeProductName": {
            "type": "boolean",
            "description": "Optional. Exclude the product name from the generated output. Defaults to false.",
            "nullable": true
          },
          "includeUnitOfSize": {
            "type": "boolean",
            "description": "Optional. Include the unit of size in the generated output. Defaults to false.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "SummariseSelection": {
        "type": "object",
        "properties": {
          "selected": {
            "type": "boolean"
          },
          "targetOutputLength": {
            "$ref": "#/components/schemas/TargetOutputLength"
          }
        },
        "additionalProperties": false
      },
      "SupportedLanguage": {
        "enum": [
          0,
          2,
          13,
          14,
          16,
          19,
          20,
          22,
          23,
          24,
          25,
          27,
          28,
          29,
          30,
          33,
          34,
          35,
          40,
          41,
          43,
          44,
          46,
          47,
          48,
          49,
          55,
          60,
          61,
          65,
          73,
          76,
          77,
          78,
          80,
          81,
          84,
          89,
          90,
          91,
          92,
          95,
          100,
          101,
          103,
          107,
          112
        ],
        "type": "integer",
        "description": "Supported languages for translation. Possible values: 0 = English, 2 = Afrikaans, 13 = Bosnian, 14 = Bulgarian, 16 = Catalan, 19 = Chinese (Simplified), 20 = Chinese (Traditional), 22 = Croatian, 23 = Czech, 24 = Danish, 25 = Dutch, 27 = Estonian, 28 = Filipino, 29 = Finnish, 30 = French, 33 = Georgian, 34 = German, 35 = Greek, 40 = Hebrew, 41 = Hindi, 43 = Hungarian, 44 = Icelandic, 46 = Indonesian, 47 = Irish (Gaeilge), 48 = Italian, 49 = Japanese, 55 = Korean, 60 = Latvian, 61 = Lithuanian, 65 = Malay, 73 = Norwegian, 76 = Persian, 77 = Polish, 78 = Portuguese, 80 = Romanian, 81 = Russian, 84 = Serbian, 89 = Slovak, 90 = Slovenian, 91 = Somali, 92 = Spanish, 95 = Swedish, 100 = Thai, 101 = Turkish, 103 = Ukrainian, 107 = Vietnamese, 112 = Zulu",
        "format": "int32",
        "example": 0
      },
      "TargetOutputLength": {
        "enum": [
          0,
          1,
          2
        ],
        "type": "integer",
        "description": "Available options: Possible values: 0 = Default, 1 = Shorter, 2 = Longer",
        "format": "int32",
        "example": 0
      },
      "TaxonomyDetail": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Unique identifier for the taxonomy",
            "format": "int32"
          },
          "name": {
            "type": "string",
            "description": "Display name of the taxonomy",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Details of a supported taxonomy"
      },
      "TaxonomyResponse": {
        "type": "object",
        "properties": {
          "description": {
            "type": "string",
            "nullable": true
          },
          "heading": {
            "type": "string",
            "nullable": true
          },
          "wasSuccessful": {
            "type": "boolean"
          },
          "modelState": {
            "nullable": true
          },
          "supportedTaxonomies": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TaxonomyDetail"
            },
            "description": "List of all supported taxonomies",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Response containing all supported taxonomies for product categorisation"
      },
      "TaxonomyType": {
        "enum": [
          0,
          1
        ],
        "type": "integer",
        "description": "Available options: Possible values: 0 = Google, 1 = GS1",
        "format": "int32",
        "example": 0
      },
      "TestResponse": {
        "type": "object",
        "properties": {
          "environment": {
            "type": "string",
            "nullable": true
          },
          "tests": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/TestResult"
            },
            "nullable": true
          },
          "wasSuccessful": {
            "type": "boolean",
            "readOnly": true
          },
          "db": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "TestResult": {
        "type": "object",
        "properties": {
          "wasSuccessful": {
            "type": "boolean"
          },
          "description": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "TranformInputData": {
        "required": [
          "identifier"
        ],
        "type": "object",
        "properties": {
          "identifier": {
            "maxLength": 1000,
            "minLength": 1,
            "type": "string",
            "description": "Your identifier for the input"
          },
          "text": {
            "maxLength": 2000,
            "type": "string",
            "description": "The text to be transformed",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "TransformBatchRequest": {
        "required": [
          "transformInputs"
        ],
        "type": "object",
        "properties": {
          "transformInputs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TranformInputData"
            },
            "description": "The list of input text to transform"
          },
          "summariseSelection": {
            "$ref": "#/components/schemas/SummariseSelection"
          },
          "rephraseSelection": {
            "$ref": "#/components/schemas/RephraseSelection"
          },
          "translateSelection": {
            "$ref": "#/components/schemas/TranslateSelection"
          },
          "statusWebhookURL": {
            "type": "string",
            "description": "A URL to which the status of the batch will be posted upon completion. Request structure is defined in the BatchStatusResponse model.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "TransformOperationTypeCostData": {
        "type": "object",
        "properties": {
          "operationType": {
            "$ref": "#/components/schemas/TransformType"
          },
          "estimatedOperations": {
            "type": "integer",
            "description": "An estimation of how many of this operation can be performed with your workspace's current Credit balance",
            "format": "int32"
          },
          "operationCost": {
            "type": "number",
            "description": "The cost in USD Credits for performing one of the operation",
            "format": "double"
          }
        },
        "additionalProperties": false
      },
      "TransformResultData": {
        "type": "object",
        "properties": {
          "identifier": {
            "type": "string",
            "description": "Your identifier for the input",
            "nullable": true
          },
          "summariseOptions": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "A list of three options for the summarised text.",
            "nullable": true
          },
          "rephraseOptions": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "A list of three options for the rephrased text.",
            "nullable": true
          },
          "translateResult": {
            "type": "string",
            "description": "The result of the translation.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "TransformResultResponse": {
        "type": "object",
        "properties": {
          "wasSuccessful": {
            "type": "boolean",
            "description": "Whether the request succeeded"
          },
          "responseMessage": {
            "type": "string",
            "description": "A message containing relevant information about the request's success or failure",
            "nullable": true
          },
          "batchSizeLimitExceeded": {
            "type": "boolean",
            "description": "Indicates whether the requested operation exceeds the maximum number of items allowed in a batch"
          },
          "creditLimitReached": {
            "type": "boolean",
            "description": "Indicates whether the requested operation exceeds your workspace's available Credits"
          },
          "creditCost": {
            "type": "number",
            "description": "The cost in USD Credits of the operation",
            "format": "double"
          },
          "creditsRemaining": {
            "type": "number",
            "description": "How many Credits are remaining for your workspace after the operation",
            "format": "double"
          },
          "currentBalance": {
            "type": "number",
            "description": "Your workspace's current balance of Credits",
            "format": "double"
          },
          "validationResults": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/InputValidationResultData"
            },
            "description": "A list containing any validation errors on the inputs.",
            "nullable": true
          },
          "validations": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Strings containing the validation results for each identifier.",
            "nullable": true,
            "readOnly": true
          },
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TransformResultData"
            },
            "description": "The list of transformed content results for all inputs",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "TransformSingleRequest": {
        "required": [
          "input"
        ],
        "type": "object",
        "properties": {
          "input": {
            "$ref": "#/components/schemas/TranformInputData"
          },
          "summariseSelection": {
            "$ref": "#/components/schemas/SummariseSelection"
          },
          "rephraseSelection": {
            "$ref": "#/components/schemas/RephraseSelection"
          },
          "translateSelection": {
            "$ref": "#/components/schemas/TranslateSelection"
          },
          "language": {
            "$ref": "#/components/schemas/SupportedLanguage"
          }
        },
        "additionalProperties": false
      },
      "TransformType": {
        "enum": [
          0,
          1,
          2
        ],
        "type": "integer",
        "description": "Available options: Possible values: 0 = Summarise, 1 = Rephrase, 2 = Translate",
        "format": "int32",
        "example": 0
      },
      "TranslateSelection": {
        "type": "object",
        "properties": {
          "selected": {
            "type": "boolean"
          },
          "language": {
            "$ref": "#/components/schemas/SupportedLanguage"
          }
        },
        "additionalProperties": false
      },
      "TypeSelection": {
        "type": "object",
        "properties": {
          "selected": {
            "type": "boolean"
          }
        },
        "additionalProperties": false,
        "description": "The default class for selection of a type with no extra properties"
      },
      "UnitOfMeasure": {
        "enum": [
          0,
          1
        ],
        "type": "integer",
        "description": "Available options: Possible values: 0 = Metric, 1 = Imperial",
        "format": "int32",
        "example": 0
      },
      "UserOperationType": {
        "enum": [
          0,
          100,
          101,
          102,
          103,
          104,
          105,
          200,
          201,
          202,
          300,
          301,
          302,
          303
        ],
        "type": "integer",
        "description": "Available options: Possible values: 0 = Unknown, 100 = Marketing Description, 101 = Short Description, 102 = Features, Attributes & Benefits, 103 = Categorisation, 104 = SEO Keywords, 105 = Headline, 200 = Summarise, 201 = Rephrase, 202 = Translate, 300 = Table Digitisation, 301 = Text Extraction, 302 = Nutritional Table Digitisation, 303 = Back of Pack Extraction",
        "format": "int32",
        "example": 0
      }
    }
  }
}