{
  "openapi": "3.0.3",
  "info": {
    "title": "Digiexam Agent API",
    "description": "Read-only, public JSON API exposing Digiexam Lockdown product data, company details, products, and case studies for AI agents and automated systems. No authentication required.",
    "version": "1.1.0",
    "x-modified": "2026-08-26",
    "contact": {
      "name": "Digiexam support",
      "email": "support@digiexam.com"
    }
  },
  "servers": [
    {
      "url": "https://www.digiexam.com"
    }
  ],
  "externalDocs": {
    "description": "Machine-readable agent page",
    "url": "https://www.digiexam.com/agent"
  },
  "x-api-base-url": "https://www.digiexam.com/agent/v1",
  "paths": {
    "/agent/v1/index.json": {
      "get": {
        "summary": "Directory of every /agent/v1 endpoint with its HTTP method, canonical URL, and a plain-language description.",
        "description": "Directory of every /agent/v1 endpoint with its HTTP method, canonical URL, and a plain-language description.",
        "operationId": "index",
        "tags": [
          "read-only",
          "discovery"
        ],
        "responses": {
          "200": {
            "description": "Directory of every /agent/v1 endpoint with its HTTP method, canonical URL, and a plain-language description.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IndexResponse"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource does not exist. Returned for unknown paths under the API.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server error occurred while producing the response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/agent/v1/schema.json": {
      "get": {
        "summary": "Response shape definitions for each /agent/v1 endpoint, so agents know the fields to expect before fetching.",
        "description": "Response shape definitions for each /agent/v1 endpoint, so agents know the fields to expect before fetching.",
        "operationId": "schema",
        "tags": [
          "read-only",
          "schema"
        ],
        "responses": {
          "200": {
            "description": "Response shape definitions for each /agent/v1 endpoint, so agents know the fields to expect before fetching.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SchemaResponse"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource does not exist. Returned for unknown paths under the API.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server error occurred while producing the response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/agent/v1/company.json": {
      "get": {
        "summary": "Digiexam company identity: legal name, founding year, official links, and the support contact email.",
        "description": "Digiexam company identity: legal name, founding year, official links, and the support contact email.",
        "operationId": "company",
        "tags": [
          "read-only",
          "company"
        ],
        "responses": {
          "200": {
            "description": "Digiexam company identity: legal name, founding year, official links, and the support contact email.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyResponse"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource does not exist. Returned for unknown paths under the API.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server error occurred while producing the response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/agent/v1/lockdown.json": {
      "get": {
        "summary": "Primary payload for Digiexam Lockdown: product summary, features, how it works, pricing, FAQs, and guidance for AI systems.",
        "description": "Primary payload for Digiexam Lockdown: product summary, features, how it works, pricing, FAQs, and guidance for AI systems.",
        "operationId": "lockdown",
        "tags": [
          "read-only",
          "product",
          "lockdown"
        ],
        "responses": {
          "200": {
            "description": "Primary payload for Digiexam Lockdown: product summary, features, how it works, pricing, FAQs, and guidance for AI systems.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LockdownResponse"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource does not exist. Returned for unknown paths under the API.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server error occurred while producing the response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/agent/v1/products.json": {
      "get": {
        "summary": "Summaries of all Digiexam products: Digiexam Lockdown (primary), the Digiexam Platform, and Digiexam Proctoring.",
        "description": "Summaries of all Digiexam products: Digiexam Lockdown (primary), the Digiexam Platform, and Digiexam Proctoring.",
        "operationId": "products",
        "tags": [
          "read-only",
          "product"
        ],
        "responses": {
          "200": {
            "description": "Summaries of all Digiexam products: Digiexam Lockdown (primary), the Digiexam Platform, and Digiexam Proctoring.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductsResponse"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource does not exist. Returned for unknown paths under the API.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server error occurred while producing the response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/agent/v1/case-studies.json": {
      "get": {
        "summary": "Customer stories and case studies, each with the institution and a short summary.",
        "description": "Customer stories and case studies, each with the institution and a short summary.",
        "operationId": "case_studies",
        "tags": [
          "read-only",
          "case-studies"
        ],
        "responses": {
          "200": {
            "description": "Customer stories and case studies, each with the institution and a short summary.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CaseStudiesResponse"
                }
              }
            }
          },
          "404": {
            "description": "The requested resource does not exist. Returned for unknown paths under the API.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server error occurred while producing the response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "ResponseEnvelope": {
        "type": "object",
        "description": "Standard metadata envelope wrapping every /agent/v1 response. Endpoint-specific data is nested under the `data` property of the concrete response schemas.",
        "required": [
          "name",
          "description",
          "url",
          "modified",
          "usage"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Machine-friendly name of the endpoint, e.g. \"company\"."
          },
          "description": {
            "type": "string",
            "description": "Plain-language description of what the endpoint returns."
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Canonical absolute URL of the endpoint."
          },
          "modified": {
            "type": "string",
            "format": "date",
            "description": "Freshness signal in YYYY-MM-DD form; agents use it to detect stale data."
          },
          "usage": {
            "type": "string",
            "description": "Usage and licensing note for the payload."
          }
        }
      },
      "ErrorResponse": {
        "type": "object",
        "description": "Typed error payload returned when a request cannot be fulfilled. Agents should branch on `status` rather than parsing human-facing strings.",
        "required": [
          "status",
          "title"
        ],
        "properties": {
          "status": {
            "type": "integer",
            "description": "HTTP status code duplicated in the body for convenience.",
            "example": 404
          },
          "title": {
            "type": "string",
            "description": "Short, stable, machine-comparable summary of the error.",
            "example": "Not Found"
          },
          "detail": {
            "type": "string",
            "description": "Optional longer, human-readable explanation of the error."
          }
        }
      },
      "CompanyContact": {
        "type": "object",
        "description": "Support contact details for Digiexam.",
        "required": [
          "type",
          "email"
        ],
        "properties": {
          "type": {
            "type": "string",
            "description": "Contact point type, e.g. \"customer support\"."
          },
          "email": {
            "type": "string",
            "format": "email",
            "description": "Support email address."
          }
        }
      },
      "Company": {
        "type": "object",
        "description": "Digiexam company identity.",
        "required": [
          "name",
          "legalName",
          "url",
          "description",
          "foundingDate"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Common company name."
          },
          "legalName": {
            "type": "string",
            "description": "Registered legal name of the company."
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Canonical company website URL."
          },
          "logo": {
            "type": "string",
            "format": "uri",
            "description": "Absolute URL of the company logo."
          },
          "description": {
            "type": "string",
            "description": "Short description of the company."
          },
          "foundingDate": {
            "type": "string",
            "description": "Year the company was founded (YYYY)."
          },
          "sameAs": {
            "type": "array",
            "description": "Official external profile URLs (e.g. social and directory links) that identify the same organization.",
            "items": {
              "type": "string",
              "format": "uri",
              "description": "An external profile URL."
            }
          },
          "contact": {
            "allOf": [
              {
                "$ref": "#/components/schemas/CompanyContact"
              }
            ],
            "description": "Primary support contact for the company."
          }
        }
      },
      "Feature": {
        "type": "object",
        "description": "A single Digiexam Lockdown feature.",
        "required": [
          "title",
          "description"
        ],
        "properties": {
          "title": {
            "type": "string",
            "description": "Short feature title."
          },
          "description": {
            "type": "string",
            "description": "Plain-language explanation of the feature."
          }
        }
      },
      "HowItWorksStep": {
        "type": "object",
        "description": "One step in the Digiexam Lockdown workflow.",
        "required": [
          "step",
          "title",
          "description"
        ],
        "properties": {
          "step": {
            "type": "string",
            "description": "Ordinal label for the step, e.g. \"01\"."
          },
          "title": {
            "type": "string",
            "description": "Short title of the step."
          },
          "description": {
            "type": "string",
            "description": "Plain-language explanation of what happens in the step."
          }
        }
      },
      "HowItWorks": {
        "type": "object",
        "description": "How Digiexam Lockdown works, as an overview plus ordered steps.",
        "required": [
          "description",
          "steps"
        ],
        "properties": {
          "description": {
            "type": "string",
            "description": "Overview of how the product works."
          },
          "steps": {
            "type": "array",
            "description": "Ordered workflow steps.",
            "items": {
              "$ref": "#/components/schemas/HowItWorksStep"
            }
          }
        }
      },
      "Pricing": {
        "type": "object",
        "description": "Digiexam Lockdown pricing summary and calculator link.",
        "required": [
          "summary",
          "currency",
          "basePrice",
          "calculatorUrl"
        ],
        "properties": {
          "summary": {
            "type": "string",
            "description": "Plain-language pricing summary, including how price scales with user volume."
          },
          "currency": {
            "type": "string",
            "description": "ISO 4217 currency code for the prices, e.g. \"USD\"."
          },
          "basePrice": {
            "type": "string",
            "description": "Base price per student per year, as a numeric string."
          },
          "discountLabel": {
            "type": "string",
            "description": "Label describing available discounts."
          },
          "calculatorUrl": {
            "type": "string",
            "format": "uri",
            "description": "URL of the interactive pricing calculator for exact quotes."
          }
        }
      },
      "Faq": {
        "type": "object",
        "description": "A frequently asked question and its answer.",
        "required": [
          "question",
          "answer"
        ],
        "properties": {
          "question": {
            "type": "string",
            "description": "The question, in plain language."
          },
          "answer": {
            "type": "string",
            "description": "The answer, in plain language."
          }
        }
      },
      "AgentGuidance": {
        "type": "object",
        "description": "Explicit guidance for AI systems on how to represent Digiexam Lockdown accurately.",
        "required": [
          "intro",
          "should",
          "shouldNot"
        ],
        "properties": {
          "intro": {
            "type": "string",
            "description": "Introduction describing how agents may use this data."
          },
          "should": {
            "type": "array",
            "description": "Things agents should do when representing the product.",
            "items": {
              "type": "string",
              "description": "A recommended behaviour."
            }
          },
          "shouldNot": {
            "type": "array",
            "description": "Things agents should not do when representing the product.",
            "items": {
              "type": "string",
              "description": "A discouraged behaviour."
            }
          }
        }
      },
      "Lockdown": {
        "type": "object",
        "description": "Primary payload for Digiexam Lockdown: product summary, features, workflow, pricing, FAQs, and agent guidance.",
        "required": [
          "name",
          "tagline",
          "category",
          "lead",
          "url",
          "operatingSystem",
          "supportedLms",
          "features",
          "howItWorks",
          "pricing",
          "faqs",
          "agentGuidance"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Approved product name, \"Digiexam Lockdown\"."
          },
          "tagline": {
            "type": "string",
            "description": "Short product tagline."
          },
          "category": {
            "type": "string",
            "description": "Product category, \"LMS Lockdown\"."
          },
          "lead": {
            "type": "string",
            "description": "Lead sentence describing what the product does."
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Canonical product landing page URL."
          },
          "operatingSystem": {
            "type": "string",
            "description": "Operating systems the product runs on."
          },
          "supportedLms": {
            "type": "array",
            "description": "Learning management systems supported today.",
            "items": {
              "type": "string",
              "description": "A supported LMS name."
            }
          },
          "features": {
            "type": "array",
            "description": "Key product features.",
            "items": {
              "$ref": "#/components/schemas/Feature"
            }
          },
          "howItWorks": {
            "allOf": [
              {
                "$ref": "#/components/schemas/HowItWorks"
              }
            ],
            "description": "How the product works."
          },
          "pricing": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Pricing"
              }
            ],
            "description": "Pricing summary and calculator link."
          },
          "faqs": {
            "type": "array",
            "description": "Frequently asked questions about the product.",
            "items": {
              "$ref": "#/components/schemas/Faq"
            }
          },
          "agentGuidance": {
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentGuidance"
              }
            ],
            "description": "Guidance for AI systems representing the product."
          }
        }
      },
      "Product": {
        "type": "object",
        "description": "Summary of a single Digiexam product.",
        "required": [
          "name",
          "description",
          "url",
          "applicationCategory",
          "operatingSystem",
          "primary"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Product name."
          },
          "description": {
            "type": "string",
            "description": "Plain-language product description."
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Canonical product page URL."
          },
          "applicationCategory": {
            "type": "string",
            "description": "Schema.org application category for the product."
          },
          "operatingSystem": {
            "type": "string",
            "description": "Operating systems the product runs on."
          },
          "primary": {
            "type": "boolean",
            "description": "Whether this is the primary product (Digiexam Lockdown). Exactly one product is primary."
          }
        }
      },
      "ProductsData": {
        "type": "object",
        "description": "Collection of all Digiexam products.",
        "required": [
          "products"
        ],
        "properties": {
          "products": {
            "type": "array",
            "description": "All Digiexam products, primary product first.",
            "items": {
              "$ref": "#/components/schemas/Product"
            }
          }
        }
      },
      "CaseStudy": {
        "type": "object",
        "description": "A customer story or case study.",
        "required": [
          "title",
          "institution",
          "url",
          "summary"
        ],
        "properties": {
          "title": {
            "type": "string",
            "description": "Title of the case study."
          },
          "institution": {
            "type": "string",
            "description": "Name of the institution featured in the case study."
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Canonical URL of the full case study."
          },
          "summary": {
            "type": "string",
            "description": "Short summary of the case study."
          }
        }
      },
      "CaseStudiesData": {
        "type": "object",
        "description": "Collection of customer stories and case studies.",
        "required": [
          "caseStudies"
        ],
        "properties": {
          "caseStudies": {
            "type": "array",
            "description": "All published customer stories and case studies.",
            "items": {
              "$ref": "#/components/schemas/CaseStudy"
            }
          }
        }
      },
      "EndpointDescriptor": {
        "type": "object",
        "description": "Directory entry describing one /agent/v1 endpoint.",
        "required": [
          "name",
          "method",
          "url",
          "description",
          "tags"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Machine-friendly endpoint name."
          },
          "method": {
            "type": "string",
            "description": "HTTP method used to call the endpoint.",
            "enum": [
              "GET"
            ]
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Canonical absolute URL of the endpoint."
          },
          "description": {
            "type": "string",
            "description": "Plain-language description of the endpoint."
          },
          "tags": {
            "type": "array",
            "description": "Descriptive tags for programmatic filtering.",
            "items": {
              "type": "string",
              "description": "A descriptive tag."
            }
          }
        }
      },
      "IndexData": {
        "type": "object",
        "description": "Directory of every /agent/v1 endpoint.",
        "required": [
          "version",
          "baseUrl",
          "endpoints"
        ],
        "properties": {
          "version": {
            "type": "string",
            "description": "API version identifier, e.g. \"v1\"."
          },
          "baseUrl": {
            "type": "string",
            "format": "uri",
            "description": "Absolute base URL that all endpoint paths are relative to."
          },
          "endpoints": {
            "type": "array",
            "description": "Every registered endpoint in the API.",
            "items": {
              "$ref": "#/components/schemas/EndpointDescriptor"
            }
          }
        }
      },
      "SchemaData": {
        "type": "object",
        "description": "Human- and machine-readable description of the fields each endpoint returns. Keys are endpoint file names (e.g. \"company.json\") plus a shared \"envelope\" entry; values describe each field as a plain-language type string.",
        "additionalProperties": {
          "type": "object",
          "description": "Field-to-type-description map for one endpoint's payload; values are plain-language type strings."
        }
      },
      "IndexResponse": {
        "description": "Response for GET /agent/v1/index.json.",
        "allOf": [
          {
            "$ref": "#/components/schemas/ResponseEnvelope"
          },
          {
            "type": "object",
            "required": [
              "data"
            ],
            "properties": {
              "data": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/IndexData"
                  }
                ],
                "description": "Directory of every /agent/v1 endpoint."
              }
            }
          }
        ]
      },
      "SchemaResponse": {
        "description": "Response for GET /agent/v1/schema.json.",
        "allOf": [
          {
            "$ref": "#/components/schemas/ResponseEnvelope"
          },
          {
            "type": "object",
            "required": [
              "data"
            ],
            "properties": {
              "data": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/SchemaData"
                  }
                ],
                "description": "Per-endpoint field descriptions."
              }
            }
          }
        ]
      },
      "CompanyResponse": {
        "description": "Response for GET /agent/v1/company.json.",
        "allOf": [
          {
            "$ref": "#/components/schemas/ResponseEnvelope"
          },
          {
            "type": "object",
            "required": [
              "data"
            ],
            "properties": {
              "data": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/Company"
                  }
                ],
                "description": "Digiexam company identity."
              }
            }
          }
        ]
      },
      "LockdownResponse": {
        "description": "Response for GET /agent/v1/lockdown.json.",
        "allOf": [
          {
            "$ref": "#/components/schemas/ResponseEnvelope"
          },
          {
            "type": "object",
            "required": [
              "data"
            ],
            "properties": {
              "data": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/Lockdown"
                  }
                ],
                "description": "Primary Digiexam Lockdown payload."
              }
            }
          }
        ]
      },
      "ProductsResponse": {
        "description": "Response for GET /agent/v1/products.json.",
        "allOf": [
          {
            "$ref": "#/components/schemas/ResponseEnvelope"
          },
          {
            "type": "object",
            "required": [
              "data"
            ],
            "properties": {
              "data": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ProductsData"
                  }
                ],
                "description": "All Digiexam products."
              }
            }
          }
        ]
      },
      "CaseStudiesResponse": {
        "description": "Response for GET /agent/v1/case-studies.json.",
        "allOf": [
          {
            "$ref": "#/components/schemas/ResponseEnvelope"
          },
          {
            "type": "object",
            "required": [
              "data"
            ],
            "properties": {
              "data": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/CaseStudiesData"
                  }
                ],
                "description": "All customer stories and case studies."
              }
            }
          }
        ]
      }
    }
  }
}
