{
  "openapi": "3.1.0",
  "jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
  "info": {
    "title": "Automancer public data API",
    "version": "1.0.0",
    "summary": "Read-only, key-free JSON facts about Automancer Ltd and its published work.",
    "description": "Static JSON endpoints describing Automancer Ltd, a UK AI & workflow automation consultancy: business facts, services with published from-prices, case studies, field notes and a full page inventory.\n\nEverything here is PUBLIC DATA requiring no authentication, no API key and no payment. The API is strictly READ-ONLY: only GET exists; there are no write operations, user accounts or tracking. All responses are generated at build time and change only at deploy, so they cache well.\n\nHuman-readable documentation: https://automancer.uk/developers — start there, or at https://automancer.uk/api/index.json for machine discovery.",
    "contact": {
      "name": "Automancer",
      "email": "waseem@automancer.uk",
      "url": "https://automancer.uk/contact"
    },
    "termsOfService": "https://automancer.uk/terms"
  },
  "servers": [
    {
      "url": "https://automancer.uk",
      "description": "Production static site (GitHub Pages)."
    }
  ],
  "security": [],
  "tags": [
    {
      "name": "public-data",
      "description": "Public, static, unauthenticated facts about the business and its published content."
    }
  ],
  "paths": {
    "/api/index.json": {
      "get": {
        "operationId": "getApiIndex",
        "summary": "API discovery document",
        "description": "This discovery document: lists every JSON endpoint with a one-line description, plus related machine-readable surfaces (llms.txt, feeds, agent manifest, sitemap).",
        "tags": [
          "public-data"
        ],
        "parameters": [],
        "security": [],
        "responses": {
          "200": {
            "description": "The current payload as static JSON, generated at build time. This site is read-only: no other method or status exists.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiIndex"
                }
              }
            }
          }
        }
      }
    },
    "/api/business.json": {
      "get": {
        "operationId": "getBusinessFacts",
        "summary": "Canonical business facts",
        "description": "Canonical business facts: legal name, trading name, company registration, ICO registration, contact details, address and areas served.",
        "tags": [
          "public-data"
        ],
        "parameters": [],
        "security": [],
        "responses": {
          "200": {
            "description": "The current payload as static JSON, generated at build time. This site is read-only: no other method or status exists.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BusinessFacts"
                }
              }
            }
          }
        }
      }
    },
    "/api/services.json": {
      "get": {
        "operationId": "getServices",
        "summary": "Services and published from-prices",
        "description": "Service offerings with published from-prices (GBP), billing units and stable ids — the same data the /services pricing page is generated from.",
        "tags": [
          "public-data"
        ],
        "parameters": [],
        "security": [],
        "responses": {
          "200": {
            "description": "The current payload as static JSON, generated at build time. This site is read-only: no other method or status exists.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServicesResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/case-studies.json": {
      "get": {
        "operationId": "getCaseStudies",
        "summary": "All case studies with full text",
        "description": "Every published case study: title, summary, sector, tags, publication date, headline stats and the full body text as raw Markdown.",
        "tags": [
          "public-data"
        ],
        "parameters": [],
        "security": [],
        "responses": {
          "200": {
            "description": "The current payload as static JSON, generated at build time. This site is read-only: no other method or status exists.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CaseStudiesResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/field-notes.json": {
      "get": {
        "operationId": "getFieldNotes",
        "summary": "All field notes with full text",
        "description": "Every published field note article: title, description, author, date, category, tags and the full body text as raw Markdown.",
        "tags": [
          "public-data"
        ],
        "parameters": [],
        "security": [],
        "responses": {
          "200": {
            "description": "The current payload as static JSON, generated at build time. This site is read-only: no other method or status exists.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FieldNotesResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/pages.json": {
      "get": {
        "operationId": "getPageInventory",
        "summary": "Inventory of every page on the site",
        "description": "Every page emitted by this site: canonical URL, title, description, type, last-modified date and its Markdown twin URL where one exists.",
        "tags": [
          "public-data"
        ],
        "parameters": [],
        "security": [],
        "responses": {
          "200": {
            "description": "The current payload as static JSON, generated at build time. This site is read-only: no other method or status exists.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PageInventoryResponse"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "ApiIndex": {
        "type": "object",
        "description": "The /api/index.json discovery document.",
        "additionalProperties": false,
        "properties": {
          "schemaVersion": {
            "type": "string",
            "description": "Semver-ish version of this payload shape."
          },
          "name": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "generatedAt": {
            "type": "string",
            "description": "Build time — payloads change only at deploy.",
            "format": "date-time"
          },
          "endpoints": {
            "type": "array",
            "description": "Every JSON endpoint on this site.",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "path": {
                  "type": "string"
                },
                "description": {
                  "type": "string"
                }
              },
              "required": [
                "path",
                "description"
              ]
            }
          },
          "related": {
            "type": "array",
            "description": "Related machine-readable surfaces that are not under /api/ (docs page, OpenAPI spec, plain-text guides, feeds, manifests).",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "path": {
                  "type": "string"
                },
                "description": {
                  "type": "string"
                }
              },
              "required": [
                "path",
                "description"
              ]
            }
          }
        },
        "required": [
          "schemaVersion",
          "generatedAt",
          "name",
          "url",
          "endpoints",
          "related"
        ]
      },
      "BusinessFacts": {
        "type": "object",
        "description": "The /api/business.json payload.",
        "additionalProperties": false,
        "properties": {
          "schemaVersion": {
            "type": "string"
          },
          "generatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "legalName": {
            "type": "string",
            "description": "Registered company name."
          },
          "tradingName": {
            "type": "string",
            "description": "Name the business trades under."
          },
          "companyNumber": {
            "type": "string",
            "description": "Companies House registration number."
          },
          "placeOfRegistration": {
            "type": "string",
            "description": "Jurisdiction of registration."
          },
          "icoRegistration": {
            "type": "string",
            "description": "Information Commissioner's Office data-protection registration."
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "email": {
            "type": "string",
            "format": "email"
          },
          "phone": {
            "type": "string",
            "description": "Human-formatted voicemail line; messages reach a person."
          },
          "phoneTel": {
            "type": "string",
            "description": "E.164 form for tel: links."
          },
          "address": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "streetAddress": {
                "type": "string"
              },
              "addressLocality": {
                "type": "string"
              },
              "postalCode": {
                "type": "string"
              },
              "addressCountry": {
                "type": "string",
                "description": "ISO 3166-1 alpha-2 country code.",
                "maxLength": 2
              }
            },
            "required": [
              "streetAddress",
              "addressLocality",
              "postalCode",
              "addressCountry"
            ]
          },
          "areasServed": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "description": {
            "type": "string",
            "description": "One-paragraph description of the business."
          }
        },
        "required": [
          "schemaVersion",
          "generatedAt",
          "legalName",
          "tradingName",
          "companyNumber",
          "placeOfRegistration",
          "icoRegistration",
          "url",
          "email",
          "phone",
          "phoneTel",
          "address",
          "areasServed",
          "description"
        ]
      },
      "ServicesResponse": {
        "type": "object",
        "description": "The /api/services.json payload.",
        "additionalProperties": false,
        "properties": {
          "schemaVersion": {
            "type": "string"
          },
          "generatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "currency": {
            "type": "string",
            "description": "ISO 4217 currency code all prices use.",
            "enum": [
              "GBP"
            ]
          },
          "note": {
            "type": "string",
            "description": "Pricing caveat as published."
          },
          "services": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "id": {
                  "type": "string",
                  "description": "Stable kebab-case id derived from the service name."
                },
                "name": {
                  "type": "string"
                },
                "description": {
                  "type": "string"
                },
                "priceFrom": {
                  "type": "number",
                  "description": "Published \"from\" price."
                },
                "priceCurrency": {
                  "type": "string",
                  "enum": [
                    "GBP"
                  ]
                },
                "priceUnit": {
                  "type": "string",
                  "description": "What the from-price buys one unit of.",
                  "enum": [
                    "project",
                    "month"
                  ]
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                }
              },
              "required": [
                "id",
                "name",
                "description",
                "priceFrom",
                "priceCurrency",
                "priceUnit",
                "url"
              ]
            }
          }
        },
        "required": [
          "schemaVersion",
          "generatedAt",
          "currency",
          "services"
        ]
      },
      "CaseStudiesResponse": {
        "type": "object",
        "description": "The /api/case-studies.json payload.",
        "additionalProperties": false,
        "properties": {
          "schemaVersion": {
            "type": "string"
          },
          "generatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "count": {
            "type": "integer"
          },
          "note": {
            "type": "string"
          },
          "caseStudies": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "slug": {
                  "type": "string",
                  "description": "URL slug — the same id used by /work/<slug>."
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "type": "string"
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "markdownUrl": {
                  "type": "string",
                  "format": "uri"
                },
                "datePublished": {
                  "type": "string",
                  "format": "date-time"
                },
                "sector": {
                  "type": "string"
                },
                "tags": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "status": {
                  "type": "string",
                  "description": "Delivery status as published (e.g. \"Live in production\")."
                },
                "stats": {
                  "type": "array",
                  "description": "Headline numbers quoted in the case study.",
                  "items": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "value": {
                        "type": "string"
                      },
                      "label": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "value",
                      "label"
                    ]
                  }
                },
                "body": {
                  "type": "string",
                  "description": "Full body text as raw Markdown."
                }
              },
              "required": [
                "slug",
                "title",
                "description",
                "url",
                "markdownUrl",
                "datePublished",
                "sector",
                "tags",
                "stats",
                "body"
              ]
            }
          }
        },
        "required": [
          "schemaVersion",
          "generatedAt",
          "count",
          "caseStudies"
        ]
      },
      "FieldNotesResponse": {
        "type": "object",
        "description": "The /api/field-notes.json payload.",
        "additionalProperties": false,
        "properties": {
          "schemaVersion": {
            "type": "string"
          },
          "generatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "count": {
            "type": "integer"
          },
          "fieldNotes": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "slug": {
                  "type": "string",
                  "description": "URL slug — the same id used by /field-notes/<slug>."
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "type": "string"
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "markdownUrl": {
                  "type": "string",
                  "format": "uri"
                },
                "datePublished": {
                  "type": "string",
                  "format": "date-time"
                },
                "author": {
                  "type": "string"
                },
                "category": {
                  "type": "string",
                  "description": "Editorial category; falls back to sector when uncategorised."
                },
                "tags": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "body": {
                  "type": "string",
                  "description": "Full body text as raw Markdown."
                }
              },
              "required": [
                "slug",
                "title",
                "description",
                "url",
                "markdownUrl",
                "datePublished",
                "author",
                "tags",
                "body"
              ]
            }
          }
        },
        "required": [
          "schemaVersion",
          "generatedAt",
          "count",
          "fieldNotes"
        ]
      },
      "PageInventoryResponse": {
        "type": "object",
        "description": "The /api/pages.json payload.",
        "additionalProperties": false,
        "properties": {
          "schemaVersion": {
            "type": "string"
          },
          "generatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "count": {
            "type": "integer"
          },
          "pages": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "type": "string"
                },
                "markdownUrl": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "format": "uri",
                  "description": "Markdown twin URL, or null where none is published."
                },
                "type": {
                  "type": "string",
                  "description": "schema.org-flavoured page type (WebPage, CollectionPage, CaseStudy, …)."
                },
                "lastModified": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "required": [
                "url",
                "title",
                "description",
                "markdownUrl",
                "type",
                "lastModified"
              ]
            }
          }
        },
        "required": [
          "schemaVersion",
          "generatedAt",
          "count",
          "pages"
        ]
      }
    }
  },
  "x-generated-at": "2026-08-24T08:08:20.649Z",
  "x-markdown-twins": {
    "description": "Every HTML content page is also available as clean Markdown at its own path plus \".md\" (e.g. /about.md), served as text/markdown with YAML front matter.",
    "index": "https://automancer.uk/index.md"
  },
  "externalDocs": {
    "description": "Developer & agent documentation — every surface this site offers, with examples.",
    "url": "https://automancer.uk/developers"
  }
}
