{
  "openapi": "3.1.0",
  "info": {
    "title": "People Can Build — public agent API",
    "version": "1.0.0",
    "summary": "Company facts, reference projects and a quote-request action for AI agents (Custom GPTs, MCP clients, automations).",
    "description": "People Can sp. z o.o. (People Can Build) is a general contractor for exhibition stand construction based in Poznań, Poland, building across Europe (core market: Germany). Read endpoints are static JSON on www.peoplecanbuild.com. The quote-request action posts to the same Formspree endpoint as the website form; a human replies by email, usually within one business day. Never promise prices beyond the public ranges in /api/company.json.",
    "contact": { "name": "People Can Build", "email": "expo@peoplecanbuild.com", "url": "https://www.peoplecanbuild.com/contact/" },
    "x-llms-txt": "https://www.peoplecanbuild.com/llms.txt"
  },
  "servers": [{ "url": "https://www.peoplecanbuild.com" }],
  "paths": {
    "/api/company.json": {
      "get": {
        "operationId": "getCompanyProfile",
        "summary": "Company profile: services, markets, track record, client testimonials, contact (incl. contact.bookCall: Calendly booking link), public price ranges, design-fee formula",
        "responses": { "200": { "description": "Company profile", "content": { "application/json": { "schema": { "type": "object" } } } } }
      }
    },
    "/api/projects.json": {
      "get": {
        "operationId": "listReferenceProjects",
        "summary": "Reference projects with photos (client, show, year, city, sqm), plus trackRecord: every stand built in the years listed in trackRecord.coverage (currently 2025–2026; show, city, venue, sqm; client null = under NDA).",
        "responses": { "200": { "description": "Project list", "content": { "application/json": { "schema": { "type": "object", "properties": { "count": { "type": "integer" }, "projects": { "type": "array", "items": { "$ref": "#/components/schemas/Project" } } } } } } } }
      }
    },
    "/llms.txt": {
      "get": { "operationId": "getLlmsTxt", "summary": "Plain-text company summary for LLM agents (llmstxt.org)", "responses": { "200": { "description": "text/plain" } } }
    },
    "/llms-full.txt": {
      "get": { "operationId": "getLlmsFullTxt", "summary": "llms.txt plus the full text of all English blog articles", "responses": { "200": { "description": "text/plain" } } }
    },
    "/f/mwvdavyk": {
      "servers": [{ "url": "https://formspree.io" }],
      "post": {
        "operationId": "requestExhibitionStandQuote",
        "summary": "Send a quote request for an exhibition stand to People Can Build",
        "description": "Submits a quote request. Confirm the details with the user before sending — this creates a real enquiry read by a person. Set _source to the name of the calling agent/platform and found_via to 'ai_assistant'.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "$ref": "#/components/schemas/QuoteRequest" } },
            "application/x-www-form-urlencoded": { "schema": { "$ref": "#/components/schemas/QuoteRequest" } }
          }
        },
        "parameters": [{ "name": "Accept", "in": "header", "required": true, "schema": { "type": "string", "const": "application/json" } }],
        "responses": {
          "200": { "description": "Accepted — {\"ok\": true}" },
          "4XX": { "description": "Rejected (validation/spam). Fall back to email expo@peoplecanbuild.com." }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Project": {
        "type": "object",
        "properties": {
          "id": { "type": "string" }, "client": { "type": "string" }, "show": { "type": ["string", "null"] },
          "year": { "type": ["integer", "null"] }, "city": { "type": ["string", "null"] }, "sqm": { "type": ["integer", "null"] },
          "description": { "type": "string" }, "url": { "type": "string", "format": "uri" }
        }
      },
      "QuoteRequest": {
        "type": "object",
        "required": ["name", "email", "message"],
        "properties": {
          "name": { "type": "string", "description": "Full name of the requester" },
          "email": { "type": "string", "format": "email", "description": "Reply address" },
          "company": { "type": "string" },
          "phone": { "type": "string", "description": "With country code" },
          "role": { "type": "string", "enum": ["An agency", "A direct exhibitor"], "description": "Who is asking" },
          "show": { "type": "string", "description": "Trade show, venue city and dates, e.g. 'Intersolar 2027, Munich, June'" },
          "sqm": { "type": "string", "description": "Stand floor area in square meters" },
          "budget": { "type": "string", "enum": ["under €10k", "€10–25k", "€25–50k", "€50–100k", "over €100k"], "description": "Indicative construction budget range" },
          "message": { "type": "string", "description": "Project details: what should be built, design status (none / concept render / full design pack + links), timeline, scope wanted, special items (rigging, LED, double-deck, heavy exhibits), confidentiality needs" },
          "found_via": { "type": "string", "enum": ["search", "ai_assistant", "linkedin", "referral", "directory", "event", "other"], "default": "ai_assistant" },
          "_source": { "type": "string", "description": "Calling platform/agent name, e.g. 'chatgpt-action', 'mcp'" },
          "_subject": { "type": "string", "default": "Quote request via AI agent" }
        }
      }
    }
  }
}
