{
  "openapi": "3.1.0",
  "info": {
    "title": "Tityra Information and Website Form API",
    "version": "1.2.0",
    "description": "Public read-only company, audience and MX Audit information, plus the origin-restricted website enquiry form contract. Form submission requires website verification; it does not start an audit, take payment or return a report."
  },
  "servers": [
    {
      "url": "https://tityra.com/",
      "description": "Current website origin"
    }
  ],
  "paths": {
    "/api/site.json": {
      "get": {
        "operationId": "getCompanyInformation",
        "summary": "Get company, Machine Experience, audience, industry-page and MX Audit information",
        "responses": {
          "200": {
            "description": "Public company, Machine Experience, audience, industry-page and audit information",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyInformation"
                },
                "example": {
                  "name": "Tityra",
                  "legal_name": "Digital Domain Technologies Limited",
                  "trading_name": "CogNovaMX",
                  "url": "https://tityra.com/",
                  "type": "mx_audit_service",
                  "description": "Tityra's MX Audit identifies issues that make website content difficult for AI agents and automated systems to access and understand, with findings and recommendations.",
                  "mx_definition": "Machine Experience (MX) focuses on making digital content easier for software, including AI systems, to access, interpret and use.",
                  "discovery_questions": {
                    "discovery": "SEO, GEO & AEO: \"Can people find your content in search and AI answers?\"",
                    "readability": "Machine Experience (MX): \"Can software access, interpret and use your content?\""
                  },
                  "address": {
                    "street_address": "33 Merchant Way",
                    "locality": "York",
                    "postal_code": "YO23 3TS",
                    "country": "United Kingdom",
                    "country_code": "GB"
                  },
                  "contact": {
                    "email": "info@tityra.com"
                  },
                  "same_as": [
                    "https://find-and-update.company-information.service.gov.uk/company/03651124",
                    "https://www.linkedin.com/company/tityra"
                  ],
                  "machine_readable": {
                    "markdown": "https://tityra.com/index.md",
                    "llms": "https://tityra.com/llms.txt",
                    "api_catalog": "https://tityra.com/.well-known/api-catalog",
                    "openapi": "https://tityra.com/openapi.json",
                    "llms_full": "https://tityra.com/llms-full.txt",
                    "api_docs": "https://tityra.com/api-docs.md",
                    "auth": "https://tityra.com/auth.md",
                    "publishers_markdown": "https://tityra.com/publishers.md",
                    "machine_experience_markdown": "https://tityra.com/machine-experience.md",
                    "privacy_markdown": "https://tityra.com/privacy.md",
                    "cookies_markdown": "https://tityra.com/cookies.md",
                    "ecommerce_markdown": "https://tityra.com/ecommerce.md",
                    "technology_markdown": "https://tityra.com/technology.md",
                    "agencies_markdown": "https://tityra.com/agencies.md"
                  },
                  "services": [
                    {
                      "name": "MX Audit",
                      "type": "machine_readability_audit",
                      "url": "https://tityra.com/#pricing",
                      "description": "We review how your websites and digital content are delivered and structured, then provide documented findings and practical recommendations for your team. When machines miss important information, your content may be represented incompletely or inaccurately in AI-powered tools and answers.",
                      "served_versus_rendered_check": "For website audits, we compare the original HTML with the page after JavaScript runs to identify differences in the available content.",
                      "deliverable": "Structured PDF report with documented findings and practical recommendations for improvement.",
                      "pricing": [
                        {
                          "name": "Free MX Audit",
                          "amount": 0,
                          "currency": "GBP",
                          "unit": "up to 10 pages scanned",
                          "description": "Automated scan, reviewed by a member of our team before delivery.",
                          "vat_note": "Free.",
                          "cta": "Request this audit",
                          "id": "free",
                          "subtitle": "Start with your first 10 pages",
                          "deliverables": [
                            "Machine-readability assessment",
                            "Documented findings",
                            "PDF report"
                          ],
                          "request_url": "mailto:info@tityra.com?subject=Free%20MX%20Audit%20request"
                        },
                        {
                          "name": "MX Audit",
                          "amount": 100,
                          "currency": "GBP",
                          "unit": "100 pages scanned",
                          "description": "Automated analysis, reviewed by a member of our team before delivery.",
                          "vat_note": "Excluding VAT. UK VAT is added where it applies.",
                          "value_added_tax_included": false,
                          "cta": "Request an MX Audit",
                          "id": "automated",
                          "subtitle": "A clear view of your content",
                          "deliverables": [
                            "Automated content analysis",
                            "Documented findings",
                            "Practical recommendations"
                          ],
                          "request_url": "mailto:info@tityra.com?subject=MX%20Audit%20request"
                        },
                        {
                          "name": "Expert Review",
                          "amount": 1000,
                          "currency": "GBP",
                          "unit": "day",
                          "description": "Human-led investigation and review, subject to agreed scope.",
                          "vat_note": "Excluding VAT. UK VAT is added where it applies.",
                          "value_added_tax_included": false,
                          "cta": "Discuss your audit",
                          "id": "human",
                          "subtitle": "Go deeper with expert analysis",
                          "deliverables": [
                            "In-depth audit",
                            "Expert review of findings",
                            "Recommendations for improvement"
                          ],
                          "request_url": "mailto:info@tityra.com?subject=Expert%20Review%20request"
                        }
                      ],
                      "repeat_audits": "Quarterly or more frequently to track improvements.",
                      "sample_report_url": "https://tityra.com/assets/reports/specimen-report.pdf",
                      "request": {
                        "label": "Request an MX Audit",
                        "method": "mx_audit_modal",
                        "url": "https://tityra.com/#pricing",
                        "company_required": true,
                        "required_fields": [
                          "name",
                          "work email",
                          "company",
                          "website URL",
                          "audit package",
                          "audit scope / type",
                          "relationship to website",
                          "authorisation"
                        ],
                        "optional_fields": [
                          "organisation type",
                          "notes"
                        ],
                        "authorisation_statement": "I own this website or I'm authorised to request an audit of it.",
                        "authorisation_default": false,
                        "authority_review": "Manual review required before work begins or a report is disclosed. The declaration alone is not proof of authority.",
                        "online_requests_enabled": true,
                        "endpoint": "https://tityra.com/api/contact",
                        "http_method": "POST",
                        "plan_options": [
                          {
                            "value": "free",
                            "label": "Free MX Audit"
                          },
                          {
                            "value": "automated",
                            "label": "MX Audit"
                          },
                          {
                            "value": "human",
                            "label": "Expert Review"
                          }
                        ],
                        "scope_options": [
                          {
                            "value": "website",
                            "label": "Website"
                          },
                          {
                            "value": "documents",
                            "label": "Documents"
                          },
                          {
                            "value": "digital-content",
                            "label": "Digital content"
                          },
                          {
                            "value": "mixed",
                            "label": "Website, documents, and digital content"
                          }
                        ],
                        "relationship_options": [
                          {
                            "value": "owner-team",
                            "label": "Owner / team"
                          },
                          {
                            "value": "agency",
                            "label": "Agency / authorised representative"
                          },
                          {
                            "value": "other",
                            "label": "Other"
                          }
                        ],
                        "organisation_options": [
                          {
                            "value": "publisher",
                            "label": "Publisher / media group"
                          },
                          {
                            "value": "ecommerce",
                            "label": "Ecommerce / retail"
                          },
                          {
                            "value": "technology",
                            "label": "SaaS / technology"
                          },
                          {
                            "value": "agency",
                            "label": "Agency / partner"
                          },
                          {
                            "value": "other",
                            "label": "Other"
                          }
                        ],
                        "success_message": "Thanks for requesting an MX Audit. We've received your request. Each report is reviewed by a member of our team before delivery, so you won't receive an instant report. We'll contact you by email about the next steps.",
                        "starts_audit_automatically": false,
                        "takes_payment": false,
                        "guidance": "Audit links open the form for the selected package when JavaScript is available, or an email request otherwise. You can also email info@tityra.com with your chosen package, website URL and proposed scope. Scope and authority are confirmed before work begins; requests do not start an automatic audit or take payment.",
                        "email_url": "mailto:info@tityra.com"
                      },
                      "assessment_scope": "Website checks include HTML structure, Schema.org data and automated accessibility checks, plus available source, date and usage information. Checks for other digital content depend on the format and agreed scope.",
                      "assessment_limits": "Scores summarise the agreed checks. They do not certify full accessibility conformance or predict AI citations, rankings or recommendations.",
                      "report_delivery": "Each report is reviewed by a member of our team before delivery. Reports are not instant; next steps are agreed by email.",
                      "pdf_review_scope": "Includes a review of the first PDF discovered, where available. Additional PDF reviews are available on request.",
                      "sample_report_label": "See a composite sample report"
                    }
                  ],
                  "company_number": "03651124",
                  "company_register_url": "https://find-and-update.company-information.service.gov.uk/company/03651124",
                  "publishers_url": "https://tityra.com/publishers",
                  "privacy_notice_url": "https://tityra.com/privacy",
                  "cookie_information_url": "https://tityra.com/cookies",
                  "audiences": {
                    "url": "https://tityra.com/#who-its-for",
                    "heading": "Built for businesses with content that matters.",
                    "description": "Whether you manage hundreds of pages, complex digital resources or multiple websites, Tityra helps you understand how machines experience your content.",
                    "groups": [
                      {
                        "name": "Publishers & Media",
                        "description": "For organisations managing articles, digital publications and multiple content brands.",
                        "status": "available",
                        "url": "https://tityra.com/publishers"
                      },
                      {
                        "name": "Ecommerce & Retail",
                        "description": "For businesses with content-heavy online stores, product information and digital catalogues.",
                        "status": "available",
                        "url": "https://tityra.com/ecommerce"
                      },
                      {
                        "name": "SaaS & Technology",
                        "description": "For companies publishing product information, documentation and knowledge resources.",
                        "status": "available",
                        "url": "https://tityra.com/technology"
                      },
                      {
                        "name": "Agencies & Partners",
                        "description": "For teams helping clients identify and improve machine-readability issues across websites.",
                        "status": "available",
                        "url": "https://tityra.com/agencies"
                      }
                    ]
                  },
                  "audit_process": {
                    "url": "https://tityra.com/#process",
                    "heading": "From a first check to a clear plan",
                    "description": "Choose your audit and share the websites and digital content you want reviewed. We agree the scope with you, then assess your content and organise the findings into a report. Use the recommendations to plan improvements; repeat the audit to measure what changed.",
                    "cta": "Get your free MX Audit"
                  },
                  "publishing_groups": {
                    "url": "https://tityra.com/publishers",
                    "heading": "Many brands. One clearer view of your content.",
                    "description": "Your articles are written for readers. AI agents and other automated systems may receive a different view. Tityra's Machine Experience (MX) Audit helps publishing groups identify what makes their content difficult for machines to access and understand.",
                    "portfolio_heading": "A shared portfolio. Different ways to deliver a page.",
                    "portfolio_description": "News sites, specialist titles and digital publications often combine different platforms, archives and templates. We look at the content machines can actually access, then show your team where delivery and structure need attention.",
                    "assessment_heading": "The same page. Two different experiences.",
                    "checks": [
                      {
                        "heading": "Content delivery",
                        "description": "What is available in the original HTML? What only appears after JavaScript runs? We compare both views to identify differences in the content machines receive."
                      },
                      {
                        "heading": "Article structure",
                        "description": "Headings, article boundaries and available structured data help describe a page. We examine these across the agreed article and section templates."
                      },
                      {
                        "heading": "Source and context",
                        "description": "Authors, publication dates, source information and usage context matter beyond the article text. We document unclear or missing information."
                      },
                      {
                        "heading": "Shared templates",
                        "description": "An issue in a shared template can affect many pages. Findings are organised by brand and template to help your team decide where to start."
                      }
                    ],
                    "workflow_heading": "Documented findings your team can work with.",
                    "workflow": [
                      {
                        "heading": "Agree a representative sample",
                        "description": "Start with selected brands, articles, sections or templates. We confirm the scope and your authority to request the audit before work begins."
                      },
                      {
                        "heading": "See the issues and documented findings",
                        "description": "Your report documents the findings and the pages they relate to. Each report is reviewed by a member of our team before delivery; it is not an instant scan result."
                      },
                      {
                        "heading": "Choose what to improve",
                        "description": "Practical recommendations help publishing, product and development teams prioritise changes. Agree an Expert Review if you need a deeper investigation."
                      }
                    ],
                    "options_heading": "Start small. Build a clearer picture.",
                    "assessment_limits": "The audit assesses the agreed content and checks. Findings do not guarantee search rankings, AI citations or recommendations."
                  },
                  "privacy_notice": {
                    "url": "https://tityra.com/privacy",
                    "title": "Privacy notice",
                    "description": "How personal information is used when you contact Tityra or request an MX Audit.",
                    "status": "approved",
                    "indexed": true
                  },
                  "machine_experience_url": "https://tityra.com/machine-experience",
                  "machine_experience": {
                    "url": "https://tityra.com/machine-experience",
                    "title": "What Is Machine Experience (MX)? | Tityra",
                    "heading": "What is Machine Experience?",
                    "description": "Machine Experience (MX) focuses on making digital content easier for software, including AI systems, to access, interpret and use.",
                    "introduction": "When you visit a website, you see a page designed for people. Software may receive the original HTML, a rendered page or structured data. Those views can contain different information.",
                    "discovery_heading": "Being found is just the start.",
                    "discovery_description": "Visibility helps people discover your content. Machine Experience examines what software can access and how clearly that content is described. These are complementary questions.",
                    "discovery_questions": [
                      {
                        "label": "SEO, GEO & AEO",
                        "question": "Can people find your content in search and AI answers?",
                        "description": "Focus on visibility in search results and AI-generated answers."
                      },
                      {
                        "label": "Machine Experience (MX)",
                        "question": "Can software access, interpret and use your content?",
                        "description": "Focus on access, clear structure and the context software needs."
                      }
                    ],
                    "principles": [
                      {
                        "heading": "Content is available",
                        "description": "Can software retrieve the content? Check what arrives in the original HTML and what appears after JavaScript runs."
                      },
                      {
                        "heading": "Meaning is explicit",
                        "description": "Headings, article boundaries and structured data help describe what a page contains and how its parts relate."
                      },
                      {
                        "heading": "Context is clear",
                        "description": "Authors, dates, sources and usage information give software context beyond the main text."
                      }
                    ],
                    "example_heading": "Different views of the same page",
                    "example_description": "The content people see on a page may differ from what software receives. Comparing the two shows which information is available and what may be missing.",
                    "audit_heading": "See what needs attention.",
                    "audit_description": "We review how your websites and digital content are delivered and structured, then provide documented findings and practical recommendations for your team. When machines miss important information, your content may be represented incompletely or inaccurately in AI-powered tools and answers."
                  },
                  "ecommerce_url": "https://tityra.com/ecommerce",
                  "ecommerce_retail": {
                    "url": "https://tityra.com/ecommerce",
                    "heading": "Help machines understand what you sell.",
                    "description": "Your product pages help customers choose what to buy. AI agents and other automated systems may receive less of that information. Tityra's Machine Experience (MX) Audit shows where product details are difficult to access or understand, so your team knows what to improve.",
                    "portfolio_heading": "Product pages, categories and buying guides.",
                    "portfolio_description": "Descriptions, specifications, variants and buying guides often sit across different templates. We review an agreed sample of your store and catalogue, then show which information machines can access and where details need attention.",
                    "assessment_heading": "What software receives from your store.",
                    "checks": [
                      {
                        "heading": "Content delivery",
                        "description": "Can software access your product descriptions and specifications? We compare the initial page with the fully loaded page to identify information that may be missing from one view."
                      },
                      {
                        "heading": "Product information",
                        "description": "Product names, identifiers, specifications and variants should describe what is being sold. We examine the page structure and available product data for missing or unclear details."
                      },
                      {
                        "heading": "Shopping context",
                        "description": "Prices, currencies, availability, delivery and returns information give context to a product. Within the agreed scope, we check how clearly that information is presented to software."
                      },
                      {
                        "heading": "Shared templates",
                        "description": "A template issue can affect a whole category or catalogue. We organise findings across the agreed product, category and guide pages to help your team prioritise changes."
                      }
                    ],
                    "workflow_heading": "Findings for the people running your store.",
                    "workflow": [
                      {
                        "heading": "Choose a representative sample",
                        "description": "Start with selected products, categories, variants or buying guides. We confirm the scope and your authority to request the audit before work begins."
                      },
                      {
                        "heading": "See the issues and documented findings",
                        "description": "Your report records the findings and the pages they relate to. Each report is reviewed by a member of our team before delivery; it is not an instant scan result."
                      },
                      {
                        "heading": "Plan changes with your team",
                        "description": "Practical recommendations help ecommerce, content and development teams decide what to improve. An Expert Review is available when you need a deeper investigation."
                      }
                    ],
                    "options_heading": "Start with a sample of your store.",
                    "assessment_limits": "The audit assesses the agreed content and checks. Findings do not guarantee search rankings, AI citations or recommendations."
                  },
                  "technology_url": "https://tityra.com/technology",
                  "saas_technology": {
                    "url": "https://tityra.com/technology",
                    "heading": "Make your product knowledge easier to access.",
                    "description": "Your product pages, documentation and support articles explain how your software works. AI agents and other automated systems may receive a different view. Tityra's Machine Experience (MX) Audit identifies information that is difficult for machines to access and understand.",
                    "portfolio_heading": "Documentation, product pages and support content.",
                    "portfolio_description": "A product can be described across your main website, documentation platform and knowledge base. We review an agreed sample of those resources, including reference pages and guides, to see how clearly they describe your product to software.",
                    "assessment_heading": "What machines receive from your documentation.",
                    "checks": [
                      {
                        "heading": "Content delivery",
                        "description": "Can software access the instructions, examples and reference information on a page? We compare the initial page with the fully loaded page to identify content that may be missing from one view."
                      },
                      {
                        "heading": "Documentation structure",
                        "description": "Headings, steps, code examples and links help distinguish an explanation from an instruction or reference. We examine the structure of the agreed guides, reference pages and support articles."
                      },
                      {
                        "heading": "Product and version context",
                        "description": "Product names, versions, update dates and prerequisites help explain when information applies. We document missing or unclear context across the pages in scope."
                      },
                      {
                        "heading": "Shared templates",
                        "description": "A template issue can affect many guides or reference pages. We group findings across your agreed resources so documentation, product and development teams can decide where to start."
                      }
                    ],
                    "workflow_heading": "Documented findings for your product and documentation teams.",
                    "workflow": [
                      {
                        "heading": "Choose the resources to review",
                        "description": "Start with selected product pages, documentation, reference pages or support articles. We confirm the scope and your authority to request the audit before work begins."
                      },
                      {
                        "heading": "See the issues and documented findings",
                        "description": "Your report records the findings and the pages they relate to. Each report is reviewed by a member of our team before delivery; it is not an instant scan result."
                      },
                      {
                        "heading": "Plan changes with your team",
                        "description": "Practical recommendations help your team improve content delivery, structure and context. An Expert Review is available when you need a deeper investigation."
                      }
                    ],
                    "options_heading": "Start with a sample of your documentation.",
                    "assessment_limits": "The audit assesses the agreed content and checks. Findings do not guarantee search rankings, AI citations or recommendations."
                  },
                  "agencies_url": "https://tityra.com/agencies",
                  "agencies_partners": {
                    "url": "https://tityra.com/agencies",
                    "heading": "Review your clients' content with documented findings.",
                    "description": "Your clients need to know what machines can access and understand on their websites. Tityra's Machine Experience (MX) Audit documents content delivery and structure issues, with documented findings your team can use to discuss improvements with the client.",
                    "portfolio_heading": "Across client websites and shared templates.",
                    "portfolio_description": "A client may have several websites, a large archive or a mix of platforms. We review an agreed sample of pages and templates, then organise the findings so your team can see where an issue appears and who needs to address it.",
                    "assessment_heading": "What machines receive from a client website.",
                    "checks": [
                      {
                        "heading": "Content delivery",
                        "description": "We compare the initial page with the fully loaded page to identify content that software may miss. Findings show the affected pages and the differences between those views."
                      },
                      {
                        "heading": "Page structure",
                        "description": "Headings, content boundaries and available structured data help describe a page. We examine these across the agreed page types, including articles, products and service information where relevant."
                      },
                      {
                        "heading": "Source and context",
                        "description": "Names, dates, sources and other supporting details help software interpret content. We document missing or unclear information within the agreed scope."
                      },
                      {
                        "heading": "Shared templates",
                        "description": "The same issue can appear across many pages that use one template. We group related findings to help your team distinguish a local content change from a change to the website itself."
                      }
                    ],
                    "workflow_heading": "A report your team can take to the client.",
                    "workflow": [
                      {
                        "heading": "Agree the scope and client authority",
                        "description": "Choose the client websites, pages and templates to review. We confirm the scope and your authority to request an audit of those websites before work begins."
                      },
                      {
                        "heading": "Review the documented findings with your team",
                        "description": "The report presents documented findings and links them to the relevant pages. Each report is reviewed by a member of our team before delivery; submitting a request does not start an automatic scan."
                      },
                      {
                        "heading": "Plan the work with your client",
                        "description": "Use the recommendations to discuss changes with the people responsible for content and development. An Expert Review is available for issues that need a deeper investigation."
                      }
                    ],
                    "options_heading": "Start with an agreed client sample.",
                    "assessment_limits": "The audit assesses the agreed content and checks. Findings do not guarantee search rankings, AI citations or recommendations."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/contact": {
      "post": {
        "operationId": "submitWebsiteEnquiry",
        "summary": "Submit a verified website audit request or general enquiry",
        "description": "Website browser form endpoint, not an unrestricted agent API. Requires an allowed Origin and configured Turnstile verification. Accepts application/json and returns JSON responses. Maximum body size 24 KiB; validated attempts are limited to five per IP per ten-minute window in each server process. Resend delivery uses submissionId as an idempotency key. Submissions do not start scans, take payment or deliver reports; scope and authority require manual review.",
        "parameters": [
          {
            "name": "Origin",
            "in": "header",
            "required": true,
            "description": "Must match the configured website allowlist. Localhost origins are accepted only in development.",
            "schema": {
              "type": "string",
              "format": "uri"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/AuditRequest"
                  },
                  {
                    "$ref": "#/components/schemas/GeneralEnquiry"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Audit request saved in the CRM or enquiry accepted by the email provider, not an audit result. The hidden anti-spam field can return a generic acknowledgement without delivery.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "const": "no-store"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FormAccepted"
                },
                "examples": {
                  "audit": {
                    "value": {
                      "ok": true,
                      "message": "Thanks for requesting an MX Audit. We've received your request. Each report is reviewed by a member of our team before delivery, so you won't receive an instant report. We'll contact you by email about the next steps."
                    }
                  },
                  "general": {
                    "value": {
                      "ok": true,
                      "message": "Your message has been sent. We will get back to you soon."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Malformed JSON or invalid request shape.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "const": "no-store"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FormError"
                }
              }
            }
          },
          "403": {
            "description": "Origin rejected or verification missing, failed or expired.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "const": "no-store"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FormError"
                }
              }
            }
          },
          "413": {
            "description": "Body exceeds 24 KiB.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "const": "no-store"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FormError"
                }
              }
            }
          },
          "415": {
            "description": "Content-Type must be application/json.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "const": "no-store"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FormError"
                }
              }
            }
          },
          "422": {
            "description": "Invalid fields, selections, UUID, URL or required authorisation.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "const": "no-store"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FormError"
                }
              }
            }
          },
          "429": {
            "description": "Per-process IP rate limit or capacity reached.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "const": "no-store"
                }
              },
              "Retry-After": {
                "schema": {
                  "type": "string",
                  "enum": [
                    "600"
                  ]
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FormError"
                }
              }
            }
          },
          "502": {
            "description": "Email provider rejected the message or transport failed.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "const": "no-store"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FormError"
                }
              }
            }
          },
          "503": {
            "description": "Collection disabled, configuration missing or verification unavailable.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "const": "no-store"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FormError"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "CompanyInformation": {
        "type": "object",
        "required": [
          "name",
          "legal_name",
          "trading_name",
          "url",
          "type",
          "description",
          "mx_definition",
          "discovery_questions",
          "address",
          "contact",
          "same_as",
          "machine_readable",
          "services",
          "company_number",
          "company_register_url",
          "publishers_url",
          "privacy_notice_url",
          "cookie_information_url",
          "audiences",
          "audit_process",
          "publishing_groups",
          "privacy_notice",
          "machine_experience_url",
          "machine_experience",
          "ecommerce_url",
          "ecommerce_retail",
          "technology_url",
          "saas_technology",
          "agencies_url",
          "agencies_partners"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri-reference"
          },
          "contact": {
            "type": "object",
            "required": [
              "email"
            ],
            "properties": {
              "email": {
                "type": "string",
                "format": "email"
              }
            }
          },
          "services": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Service"
            }
          },
          "legal_name": {
            "type": "string"
          },
          "trading_name": {
            "type": "string"
          },
          "company_number": {
            "type": "string",
            "pattern": "^[0-9]{8}$"
          },
          "company_register_url": {
            "type": "string",
            "format": "uri"
          },
          "same_as": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uri"
            }
          },
          "mx_definition": {
            "type": "string"
          },
          "discovery_questions": {
            "type": "object",
            "properties": {
              "discovery": {
                "type": "string"
              },
              "readability": {
                "type": "string"
              }
            }
          },
          "address": {
            "type": "object",
            "required": [
              "street_address",
              "locality",
              "postal_code",
              "country",
              "country_code"
            ],
            "properties": {
              "street_address": {
                "type": "string"
              },
              "locality": {
                "type": "string"
              },
              "postal_code": {
                "type": "string"
              },
              "country": {
                "type": "string"
              },
              "country_code": {
                "type": "string"
              }
            }
          },
          "type": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "machine_readable": {
            "type": "object",
            "required": [
              "markdown",
              "llms",
              "api_catalog",
              "openapi",
              "llms_full",
              "api_docs",
              "auth",
              "publishers_markdown",
              "machine_experience_markdown",
              "privacy_markdown",
              "cookies_markdown",
              "ecommerce_markdown",
              "technology_markdown",
              "agencies_markdown"
            ],
            "properties": {
              "markdown": {
                "type": "string",
                "format": "uri-reference"
              },
              "llms": {
                "type": "string",
                "format": "uri-reference"
              },
              "api_catalog": {
                "type": "string",
                "format": "uri-reference"
              },
              "openapi": {
                "type": "string",
                "format": "uri-reference"
              },
              "llms_full": {
                "type": "string",
                "format": "uri-reference"
              },
              "api_docs": {
                "type": "string",
                "format": "uri-reference"
              },
              "auth": {
                "type": "string",
                "format": "uri-reference"
              },
              "publishers_markdown": {
                "type": "string",
                "format": "uri-reference"
              },
              "machine_experience_markdown": {
                "type": "string",
                "format": "uri-reference"
              },
              "privacy_markdown": {
                "type": "string",
                "format": "uri-reference"
              },
              "cookies_markdown": {
                "type": "string",
                "format": "uri-reference"
              },
              "ecommerce_markdown": {
                "type": "string",
                "format": "uri-reference"
              },
              "technology_markdown": {
                "type": "string",
                "format": "uri-reference"
              },
              "agencies_markdown": {
                "type": "string",
                "format": "uri-reference"
              }
            }
          },
          "publishers_url": {
            "type": "string",
            "format": "uri-reference"
          },
          "privacy_notice_url": {
            "type": "string",
            "format": "uri-reference"
          },
          "cookie_information_url": {
            "type": "string",
            "format": "uri-reference"
          },
          "audiences": {
            "$ref": "#/components/schemas/Audiences"
          },
          "audit_process": {
            "$ref": "#/components/schemas/AuditProcess"
          },
          "publishing_groups": {
            "$ref": "#/components/schemas/PublishingGroups"
          },
          "privacy_notice": {
            "type": "object",
            "required": [
              "url",
              "title",
              "description",
              "status",
              "indexed"
            ],
            "properties": {
              "url": {
                "type": "string",
                "format": "uri-reference"
              },
              "title": {
                "type": "string"
              },
              "description": {
                "type": "string"
              },
              "status": {
                "type": "string",
                "enum": [
                  "draft",
                  "approved"
                ]
              },
              "indexed": {
                "type": "boolean"
              }
            }
          },
          "machine_experience_url": {
            "type": "string",
            "format": "uri-reference"
          },
          "machine_experience": {
            "$ref": "#/components/schemas/MachineExperience"
          },
          "ecommerce_url": {
            "type": "string",
            "format": "uri-reference"
          },
          "ecommerce_retail": {
            "$ref": "#/components/schemas/EcommerceRetail"
          },
          "technology_url": {
            "type": "string",
            "format": "uri-reference"
          },
          "saas_technology": {
            "$ref": "#/components/schemas/SaasTechnology"
          },
          "agencies_url": {
            "type": "string",
            "format": "uri-reference"
          },
          "agencies_partners": {
            "$ref": "#/components/schemas/AgenciesPartners"
          }
        }
      },
      "Service": {
        "type": "object",
        "required": [
          "name",
          "type",
          "url",
          "description",
          "served_versus_rendered_check",
          "deliverable",
          "pricing",
          "repeat_audits",
          "sample_report_url",
          "request",
          "assessment_scope",
          "assessment_limits",
          "report_delivery"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri-reference"
          },
          "description": {
            "type": "string"
          },
          "deliverable": {
            "type": "string"
          },
          "served_versus_rendered_check": {
            "type": "string"
          },
          "pricing": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ServicePrice"
            }
          },
          "repeat_audits": {
            "type": "string"
          },
          "sample_report_url": {
            "type": "string",
            "format": "uri-reference"
          },
          "request": {
            "type": "object",
            "properties": {
              "label": {
                "type": "string"
              },
              "method": {
                "type": "string",
                "enum": [
                  "mx_audit_modal"
                ]
              },
              "url": {
                "type": "string",
                "format": "uri-reference"
              },
              "company_required": {
                "type": "boolean"
              },
              "required_fields": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "optional_fields": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "authorisation_statement": {
                "type": "string"
              },
              "authorisation_default": {
                "type": "boolean"
              },
              "authority_review": {
                "type": "string"
              },
              "online_requests_enabled": {
                "type": "boolean"
              },
              "endpoint": {
                "type": "string",
                "format": "uri-reference"
              },
              "http_method": {
                "type": "string",
                "enum": [
                  "POST"
                ]
              },
              "plan_options": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/SelectOption"
                }
              },
              "scope_options": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/SelectOption"
                }
              },
              "relationship_options": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/SelectOption"
                }
              },
              "organisation_options": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/SelectOption"
                }
              },
              "success_message": {
                "type": "string"
              },
              "starts_audit_automatically": {
                "const": false
              },
              "takes_payment": {
                "const": false
              },
              "guidance": {
                "type": "string",
                "description": "How generic free-audit and package-specific calls to action open the request form."
              }
            },
            "required": [
              "label",
              "method",
              "url",
              "company_required",
              "required_fields",
              "optional_fields",
              "authorisation_statement",
              "authorisation_default",
              "authority_review",
              "online_requests_enabled",
              "endpoint",
              "http_method",
              "plan_options",
              "scope_options",
              "relationship_options",
              "organisation_options",
              "success_message",
              "starts_audit_automatically",
              "takes_payment"
            ]
          },
          "assessment_scope": {
            "type": "string",
            "description": "Published checks and the agreed content scope."
          },
          "assessment_limits": {
            "type": "string",
            "description": "Limits of the assessment and interpretation of audit scores."
          },
          "report_delivery": {
            "type": "string"
          },
          "pdf_review_scope": {
            "type": "string",
            "description": "Published scope for the included PDF review and additional PDF reviews."
          },
          "sample_report_label": {
            "type": "string",
            "description": "Public label accompanying the sample report URL."
          }
        }
      },
      "ServicePrice": {
        "type": "object",
        "required": [
          "id",
          "name",
          "subtitle",
          "amount",
          "currency",
          "unit",
          "description",
          "vat_note",
          "cta",
          "deliverables"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "amount": {
            "type": "number",
            "minimum": 0
          },
          "currency": {
            "type": "string",
            "enum": [
              "GBP"
            ]
          },
          "unit": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "vat_note": {
            "type": "string",
            "description": "VAT wording accompanying the published price."
          },
          "value_added_tax_included": {
            "type": "boolean",
            "description": "Whether the published amount includes VAT."
          },
          "id": {
            "type": "string",
            "enum": [
              "free",
              "automated",
              "human"
            ]
          },
          "subtitle": {
            "type": "string"
          },
          "cta": {
            "type": "string"
          },
          "deliverables": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "Audience": {
        "type": "object",
        "required": [
          "name",
          "description",
          "status"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "available",
              "content_in_preparation"
            ]
          },
          "url": {
            "type": "string",
            "format": "uri-reference"
          }
        }
      },
      "Audiences": {
        "type": "object",
        "required": [
          "url",
          "heading",
          "description",
          "groups"
        ],
        "properties": {
          "url": {
            "type": "string",
            "format": "uri-reference"
          },
          "heading": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "groups": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Audience"
            }
          }
        }
      },
      "AuditProcess": {
        "type": "object",
        "required": [
          "url",
          "heading",
          "description",
          "cta"
        ],
        "properties": {
          "url": {
            "type": "string",
            "format": "uri-reference"
          },
          "heading": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "cta": {
            "type": "string"
          }
        }
      },
      "ContentSection": {
        "type": "object",
        "required": [
          "heading",
          "description"
        ],
        "properties": {
          "heading": {
            "type": "string"
          },
          "description": {
            "type": "string"
          }
        }
      },
      "PublishingGroups": {
        "type": "object",
        "required": [
          "url",
          "heading",
          "description",
          "portfolio_heading",
          "portfolio_description",
          "assessment_heading",
          "checks",
          "workflow_heading",
          "workflow",
          "options_heading",
          "assessment_limits"
        ],
        "properties": {
          "url": {
            "type": "string",
            "format": "uri-reference"
          },
          "heading": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "portfolio_heading": {
            "type": "string"
          },
          "portfolio_description": {
            "type": "string"
          },
          "assessment_heading": {
            "type": "string"
          },
          "checks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ContentSection"
            }
          },
          "workflow_heading": {
            "type": "string"
          },
          "workflow": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ContentSection"
            }
          },
          "options_heading": {
            "type": "string"
          },
          "assessment_limits": {
            "type": "string"
          }
        }
      },
      "SelectOption": {
        "type": "object",
        "required": [
          "value",
          "label"
        ],
        "properties": {
          "value": {
            "type": "string"
          },
          "label": {
            "type": "string"
          }
        }
      },
      "AuditRequest": {
        "type": "object",
        "required": [
          "type",
          "plan",
          "name",
          "email",
          "submissionId",
          "company",
          "websiteUrl",
          "contentType",
          "relationship",
          "authorisation"
        ],
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 120,
            "description": "Required name; trimmed, non-empty and without control characters.",
            "minLength": 1
          },
          "email": {
            "type": "string",
            "maxLength": 254,
            "description": "Required valid email address.",
            "format": "email"
          },
          "submissionId": {
            "type": "string",
            "format": "uuid",
            "pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-4[a-fA-F0-9]{3}-[89abAB][a-fA-F0-9]{3}-[a-fA-F0-9]{12}$",
            "description": "Version-4 UUID reused only for retries of the same unchanged payload.",
            "maxLength": 36
          },
          "turnstileToken": {
            "type": "string",
            "maxLength": 2048,
            "description": "Required when verification is configured (production requires configuration). Must match the Origin hostname and audit/contact action."
          },
          "website": {
            "type": "string",
            "maxLength": 200,
            "description": "Reserved hidden anti-spam field. Leave empty; this is not the audit URL."
          },
          "type": {
            "const": "mx-audit"
          },
          "plan": {
            "type": "string",
            "enum": [
              "free",
              "automated",
              "human"
            ]
          },
          "company": {
            "type": "string",
            "maxLength": 160,
            "description": "Required company name, trimmed and without control characters.",
            "minLength": 1
          },
          "websiteUrl": {
            "type": "string",
            "maxLength": 2000,
            "description": "Absolute http/https URL with a dotted hostname, no embedded credentials, whitespace or control characters. Required for all scopes.",
            "format": "uri",
            "pattern": "^https?://[^\\s/@]+\\.[^\\s/@]+(?:[/:?#]|$)"
          },
          "contentType": {
            "type": "string",
            "enum": [
              "website",
              "documents",
              "digital-content",
              "mixed"
            ]
          },
          "relationship": {
            "type": "string",
            "enum": [
              "owner-team",
              "agency",
              "other"
            ]
          },
          "authorisation": {
            "type": "boolean",
            "const": true,
            "description": "I own this website or I'm authorised to request an audit of it."
          },
          "organisationType": {
            "type": "string",
            "enum": [
              "",
              "publisher",
              "ecommerce",
              "technology",
              "agency",
              "other"
            ]
          },
          "notes": {
            "type": "string",
            "maxLength": 4000,
            "description": "Optional scope notes; do not include passwords or sensitive personal information."
          }
        }
      },
      "GeneralEnquiry": {
        "type": "object",
        "required": [
          "name",
          "email",
          "submissionId",
          "project"
        ],
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 120,
            "description": "Required name; trimmed, non-empty and without control characters.",
            "minLength": 1
          },
          "email": {
            "type": "string",
            "maxLength": 254,
            "description": "Required valid email address.",
            "format": "email"
          },
          "submissionId": {
            "type": "string",
            "format": "uuid",
            "pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-4[a-fA-F0-9]{3}-[89abAB][a-fA-F0-9]{3}-[a-fA-F0-9]{12}$",
            "description": "Version-4 UUID reused only for retries of the same unchanged payload.",
            "maxLength": 36
          },
          "turnstileToken": {
            "type": "string",
            "maxLength": 2048,
            "description": "Required when verification is configured (production requires configuration). Must match the Origin hostname and audit/contact action."
          },
          "website": {
            "type": "string",
            "maxLength": 200,
            "description": "Reserved hidden anti-spam field. Leave empty; this is not the audit URL."
          },
          "type": {
            "const": "",
            "description": "Omit or send an empty string for a general enquiry."
          },
          "phone": {
            "type": "string",
            "maxLength": 50,
            "description": "Optional phone number."
          },
          "project": {
            "type": "string",
            "maxLength": 5000,
            "description": "Required enquiry details, trimmed and non-empty.",
            "minLength": 1
          }
        }
      },
      "FormAccepted": {
        "type": "object",
        "required": [
          "ok",
          "message"
        ],
        "properties": {
          "ok": {
            "type": "boolean",
            "const": true
          },
          "message": {
            "type": "string"
          }
        }
      },
      "FormError": {
        "type": "object",
        "required": [
          "ok",
          "message"
        ],
        "properties": {
          "ok": {
            "type": "boolean",
            "const": false
          },
          "message": {
            "type": "string"
          }
        }
      },
      "MachineExperience": {
        "type": "object",
        "required": [
          "url",
          "title",
          "heading",
          "description",
          "introduction",
          "discovery_heading",
          "discovery_description",
          "discovery_questions",
          "principles",
          "example_heading",
          "example_description",
          "audit_heading",
          "audit_description"
        ],
        "properties": {
          "url": {
            "type": "string",
            "format": "uri-reference"
          },
          "title": {
            "type": "string"
          },
          "heading": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "introduction": {
            "type": "string"
          },
          "discovery_heading": {
            "type": "string"
          },
          "discovery_description": {
            "type": "string"
          },
          "discovery_questions": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "label",
                "question",
                "description"
              ],
              "properties": {
                "label": {
                  "type": "string"
                },
                "question": {
                  "type": "string"
                },
                "description": {
                  "type": "string"
                }
              }
            }
          },
          "principles": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ContentSection"
            }
          },
          "example_heading": {
            "type": "string"
          },
          "example_description": {
            "type": "string"
          },
          "audit_heading": {
            "type": "string"
          },
          "audit_description": {
            "type": "string"
          }
        }
      },
      "EcommerceRetail": {
        "type": "object",
        "required": [
          "url",
          "heading",
          "description",
          "portfolio_heading",
          "portfolio_description",
          "assessment_heading",
          "checks",
          "workflow_heading",
          "workflow",
          "options_heading",
          "assessment_limits"
        ],
        "properties": {
          "url": {
            "type": "string",
            "format": "uri-reference"
          },
          "heading": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "portfolio_heading": {
            "type": "string"
          },
          "portfolio_description": {
            "type": "string"
          },
          "assessment_heading": {
            "type": "string"
          },
          "checks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ContentSection"
            }
          },
          "workflow_heading": {
            "type": "string"
          },
          "workflow": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ContentSection"
            }
          },
          "options_heading": {
            "type": "string"
          },
          "assessment_limits": {
            "type": "string"
          }
        },
        "description": "Ecommerce & Retail page content, assessment checks and reviewed-audit workflow."
      },
      "SaasTechnology": {
        "type": "object",
        "required": [
          "url",
          "heading",
          "description",
          "portfolio_heading",
          "portfolio_description",
          "assessment_heading",
          "checks",
          "workflow_heading",
          "workflow",
          "options_heading",
          "assessment_limits"
        ],
        "properties": {
          "url": {
            "type": "string",
            "format": "uri-reference"
          },
          "heading": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "portfolio_heading": {
            "type": "string"
          },
          "portfolio_description": {
            "type": "string"
          },
          "assessment_heading": {
            "type": "string"
          },
          "checks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ContentSection"
            }
          },
          "workflow_heading": {
            "type": "string"
          },
          "workflow": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ContentSection"
            }
          },
          "options_heading": {
            "type": "string"
          },
          "assessment_limits": {
            "type": "string"
          }
        },
        "description": "SaaS & Technology page content, assessment checks and reviewed-audit workflow."
      },
      "AgenciesPartners": {
        "type": "object",
        "required": [
          "url",
          "heading",
          "description",
          "portfolio_heading",
          "portfolio_description",
          "assessment_heading",
          "checks",
          "workflow_heading",
          "workflow",
          "options_heading",
          "assessment_limits"
        ],
        "properties": {
          "url": {
            "type": "string",
            "format": "uri-reference"
          },
          "heading": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "portfolio_heading": {
            "type": "string"
          },
          "portfolio_description": {
            "type": "string"
          },
          "assessment_heading": {
            "type": "string"
          },
          "checks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ContentSection"
            }
          },
          "workflow_heading": {
            "type": "string"
          },
          "workflow": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ContentSection"
            }
          },
          "options_heading": {
            "type": "string"
          },
          "assessment_limits": {
            "type": "string"
          }
        },
        "description": "Agencies & Partners page content, assessment checks and reviewed-audit workflow."
      }
    }
  },
  "security": [],
  "externalDocs": {
    "description": "API documentation and form requirements",
    "url": "https://tityra.com/api-docs.md"
  }
}
