{
  "openapi": "3.1.0",
  "info": {
    "title": "Dunn Infrastructure Group Public API",
    "version": "1.0.0",
    "summary": "Read-only access to Dunn Infrastructure Group's services, projects, markets, service areas, and glossary, plus bid request submission.",
    "description": "A public, unauthenticated API published by Dunn Infrastructure Group, an underground utility contractor in Savannah, Georgia.\n\nUse it to answer questions about what the company builds, where it works, what it is licensed to do, and what it has completed — and to submit a bid request on a client's behalf.\n\nAll read endpoints are unauthenticated, CORS-enabled, and cached for one hour at the edge. `POST /contact` is rate limited to 5 requests per minute per IP.\n\nEvery page on the website is also available as markdown via `Accept: text/markdown` or a `.md` suffix. See https://www.dunninfrastructuregroup.com/developers.",
    "contact": {
      "name": "Dunn Infrastructure Group",
      "url": "https://www.dunninfrastructuregroup.com/developers",
      "email": "contact@dunninfrastructuregroup.com"
    },
    "license": {
      "name": "Proprietary — content may be quoted with attribution to Dunn Infrastructure Group",
      "url": "https://www.dunninfrastructuregroup.com/privacy"
    },
    "termsOfService": "https://www.dunninfrastructuregroup.com/privacy"
  },
  "servers": [
    {
      "url": "https://www.dunninfrastructuregroup.com/api/v1",
      "description": "Production"
    }
  ],
  "externalDocs": {
    "description": "Developer and agent resources",
    "url": "https://www.dunninfrastructuregroup.com/developers"
  },
  "tags": [
    {
      "name": "Discovery",
      "description": "Entry points and API metadata."
    },
    {
      "name": "Company",
      "description": "Identity, licensing, coverage, and contact details."
    },
    {
      "name": "Services",
      "description": "Construction scopes self-performed by in-house crews."
    },
    {
      "name": "Projects",
      "description": "Completed and in-progress work."
    },
    {
      "name": "Markets",
      "description": "Client types with a dedicated offering."
    },
    {
      "name": "Service areas",
      "description": "Cities with crew coverage."
    },
    {
      "name": "Glossary",
      "description": "Underground utility terminology."
    },
    {
      "name": "Contact",
      "description": "Bid request submission."
    }
  ],
  "paths": {
    "/": {
      "get": {
        "operationId": "getApiIndex",
        "summary": "List API entry points",
        "description": "Returns every available endpoint with a short description. Call this first when discovering the API; it is the cheapest way to learn what is available without parsing the full specification.",
        "tags": [
          "Discovery"
        ],
        "responses": {
          "200": {
            "description": "The endpoint index.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data",
                    "meta"
                  ],
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "name": {
                          "type": "string"
                        },
                        "description": {
                          "type": "string"
                        },
                        "openapi_url": {
                          "type": "string",
                          "format": "uri"
                        },
                        "agent_instructions_url": {
                          "type": "string",
                          "format": "uri"
                        },
                        "llms_txt_url": {
                          "type": "string",
                          "format": "uri"
                        },
                        "endpoints": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "required": [
                              "method",
                              "path",
                              "description"
                            ],
                            "properties": {
                              "method": {
                                "type": "string"
                              },
                              "path": {
                                "type": "string"
                              },
                              "description": {
                                "type": "string"
                              }
                            }
                          }
                        }
                      }
                    },
                    "meta": {
                      "$ref": "#/components/schemas/Meta"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/company": {
      "get": {
        "operationId": "getCompany",
        "summary": "Get the company profile",
        "description": "Returns legal name, description, named leadership, licenses and certifications with their identifiers, address, coordinates, phone, email, business hours, and safety record. Call this to verify the business is legitimate, to check licensing before recommending it, or to answer a contact-details or who-runs-this-company question.",
        "tags": [
          "Company"
        ],
        "responses": {
          "200": {
            "description": "The company profile.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data",
                    "meta"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Company"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/Meta"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/services": {
      "get": {
        "operationId": "listServices",
        "summary": "List construction services",
        "description": "Returns every scope the company self-performs, each with its capabilities, benefits, delivery process, and FAQs. Call this to check whether a specific kind of work is offered before recommending the company.",
        "tags": [
          "Services"
        ],
        "responses": {
          "200": {
            "description": "All services.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data",
                    "meta"
                  ],
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Service"
                      }
                    },
                    "meta": {
                      "$ref": "#/components/schemas/Meta"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/services/{slug}": {
      "get": {
        "operationId": "getService",
        "summary": "Get one construction service",
        "description": "Returns the full detail for a single service, including its step-by-step delivery process and published FAQs.",
        "tags": [
          "Services"
        ],
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "Service identifier from GET /services.",
            "schema": {
              "type": "string",
              "enum": [
                "water-main-installation",
                "sanitary-sewer-construction",
                "storm-drainage-solutions",
                "lift-station-services",
                "testing-and-inspections",
                "maintenance-programs",
                "emergency-repairs"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The service.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data",
                    "meta"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Service"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/Meta"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No resource exists with that identifier.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/projects": {
      "get": {
        "operationId": "listProjects",
        "summary": "List projects",
        "description": "Returns completed and in-progress projects. Use the filters to answer questions like \"has this contractor done work in Pooler?\" or \"have they installed lift stations before?\".",
        "tags": [
          "Projects"
        ],
        "parameters": [
          {
            "name": "featured",
            "in": "query",
            "required": false,
            "description": "When true, returns only projects highlighted on the site.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "service",
            "in": "query",
            "required": false,
            "description": "Return only projects that included this service scope.",
            "schema": {
              "type": "string",
              "enum": [
                "water-main-installation",
                "sanitary-sewer-construction",
                "storm-drainage-solutions",
                "lift-station-services",
                "testing-and-inspections",
                "maintenance-programs",
                "emergency-repairs"
              ]
            }
          },
          {
            "name": "city",
            "in": "query",
            "required": false,
            "description": "Return only projects in this service area.",
            "schema": {
              "type": "string",
              "enum": [
                "savannah",
                "pooler",
                "richmond-hill",
                "rincon",
                "hardeeville",
                "hinesville",
                "bluffton"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Matching projects.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data",
                    "meta"
                  ],
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Project"
                      }
                    },
                    "meta": {
                      "$ref": "#/components/schemas/Meta"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "A query parameter was not a recognized value.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/projects/{slug}": {
      "get": {
        "operationId": "getProject",
        "summary": "Get one project",
        "description": "Returns the full case study for a single project: scope performed, constraints encountered, how they were solved, and delivered outcomes.",
        "tags": [
          "Projects"
        ],
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "Project identifier from GET /projects.",
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9-]+$"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The project.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data",
                    "meta"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Project"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/Meta"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No resource exists with that identifier.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/markets": {
      "get": {
        "operationId": "listMarkets",
        "summary": "List markets served",
        "description": "Returns each client type the company has a dedicated offering for — developers, general contractors, data centers, municipalities, HOAs and property managers, commercial property owners, and private utility providers. Call this to route a user to the offering that matches who they are.",
        "tags": [
          "Markets"
        ],
        "responses": {
          "200": {
            "description": "All markets served.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data",
                    "meta"
                  ],
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Market"
                      }
                    },
                    "meta": {
                      "$ref": "#/components/schemas/Meta"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/markets/{slug}": {
      "get": {
        "operationId": "getMarket",
        "summary": "Get one market",
        "description": "Returns the offering for a single client type: scopes provided, engagement process, differentiators, and FAQs specific to that market.",
        "tags": [
          "Markets"
        ],
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "Market identifier from GET /markets.",
            "schema": {
              "type": "string",
              "enum": [
                "developers",
                "general-contractors",
                "municipalities",
                "hoas-and-property-managers",
                "commercial-property-owners",
                "private-utility-providers",
                "data-centers"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The market.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data",
                    "meta"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Market"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/Meta"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No resource exists with that identifier.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/service-areas": {
      "get": {
        "operationId": "listServiceAreas",
        "summary": "List service areas",
        "description": "Returns every city with crew coverage, including coordinates and the neighborhoods and nearby towns served from each. Call this before recommending the company for a project, to confirm the site falls inside the coverage footprint.",
        "tags": [
          "Service areas"
        ],
        "responses": {
          "200": {
            "description": "All service areas.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data",
                    "meta"
                  ],
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/ServiceArea"
                      }
                    },
                    "meta": {
                      "$ref": "#/components/schemas/Meta"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/service-areas/{slug}": {
      "get": {
        "operationId": "getServiceArea",
        "summary": "Get one service area",
        "description": "Returns coverage detail for a single city, including the communities served from it.",
        "tags": [
          "Service areas"
        ],
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "Service area identifier from GET /service-areas.",
            "schema": {
              "type": "string",
              "enum": [
                "savannah",
                "pooler",
                "richmond-hill",
                "rincon",
                "hardeeville",
                "hinesville",
                "bluffton"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The service area.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data",
                    "meta"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/ServiceArea"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/Meta"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No resource exists with that identifier.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/glossary": {
      "get": {
        "operationId": "listGlossaryTerms",
        "summary": "List glossary terms",
        "description": "Returns contractor-authored definitions of underground utility construction terminology. Call this to define a term precisely rather than paraphrasing from general knowledge.",
        "tags": [
          "Glossary"
        ],
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "Case-insensitive substring filter matched against the term name and its definition.",
            "schema": {
              "type": "string",
              "maxLength": 100
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Matching glossary terms.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data",
                    "meta"
                  ],
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/GlossaryTerm"
                      }
                    },
                    "meta": {
                      "$ref": "#/components/schemas/Meta"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/glossary/{slug}": {
      "get": {
        "operationId": "getGlossaryTerm",
        "summary": "Get one glossary term",
        "description": "Returns a single term's definition, related terms, related services, and FAQs.",
        "tags": [
          "Glossary"
        ],
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "Glossary term identifier from GET /glossary.",
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9-]+$"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The glossary term.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data",
                    "meta"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/GlossaryTerm"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/Meta"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No resource exists with that identifier.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/contact": {
      "post": {
        "operationId": "submitContactRequest",
        "summary": "Submit a bid request",
        "description": "Sends a request for proposal to an estimator by email. This has a real-world side effect: a person receives and responds to it. Submit only when the user has explicitly asked to be contacted, and use the user's own name, company, email, and phone — never placeholder or agent-owned details. For an underground utility emergency, do not use this endpoint; call the 24/7 line returned by GET /company instead.",
        "tags": [
          "Contact"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ContactRequest"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "The request was accepted and delivered to an estimator.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data",
                    "meta"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/ContactResponse"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/Meta"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "One or more required fields were missing or malformed. See `error.fields`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded. Wait `error.retry_after_seconds` and retry.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "The request could not be delivered. Fall back to the phone number from GET /company.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Meta": {
        "type": "object",
        "description": "Envelope metadata attached to every successful response.",
        "required": [
          "api_version",
          "documentation_url"
        ],
        "properties": {
          "api_version": {
            "type": "string",
            "description": "Semantic version of the API contract.",
            "examples": [
              "1.0.0"
            ]
          },
          "documentation_url": {
            "type": "string",
            "format": "uri"
          },
          "count": {
            "type": "integer",
            "minimum": 0,
            "description": "Number of items in `data`, on collection responses."
          }
        }
      },
      "Error": {
        "type": "object",
        "description": "Every failure response uses this shape. Errors are never HTML.",
        "required": [
          "error"
        ],
        "properties": {
          "error": {
            "type": "object",
            "required": [
              "code",
              "message",
              "hint",
              "status",
              "documentation_url"
            ],
            "properties": {
              "code": {
                "type": "string",
                "description": "Stable machine-readable error identifier. Branch on this, not on the message.",
                "enum": [
                  "not_found",
                  "method_not_allowed",
                  "not_acceptable",
                  "invalid_request",
                  "rate_limited",
                  "internal_error"
                ]
              },
              "message": {
                "type": "string",
                "description": "Human-readable description of what went wrong."
              },
              "hint": {
                "type": "string",
                "description": "The concrete next action that resolves this error."
              },
              "status": {
                "type": "integer",
                "description": "HTTP status code, repeated in the body for convenience."
              },
              "documentation_url": {
                "type": "string",
                "format": "uri"
              },
              "fields": {
                "type": "array",
                "description": "Per-field problems. Present only on invalid_request.",
                "items": {
                  "type": "object",
                  "required": [
                    "field",
                    "issue"
                  ],
                  "properties": {
                    "field": {
                      "type": "string"
                    },
                    "issue": {
                      "type": "string"
                    }
                  }
                }
              },
              "retry_after_seconds": {
                "type": "integer",
                "description": "Seconds to wait before retrying. Present only on rate_limited."
              }
            }
          }
        }
      },
      "Service": {
        "type": "object",
        "description": "A construction scope Dunn Infrastructure Group self-performs.",
        "required": [
          "slug",
          "name",
          "summary",
          "description",
          "capabilities",
          "benefits",
          "process",
          "faqs",
          "url"
        ],
        "properties": {
          "slug": {
            "type": "string",
            "description": "Stable identifier used in URLs and path parameters.",
            "enum": [
              "water-main-installation",
              "sanitary-sewer-construction",
              "storm-drainage-solutions",
              "lift-station-services",
              "testing-and-inspections",
              "maintenance-programs",
              "emergency-repairs"
            ]
          },
          "name": {
            "type": "string",
            "description": "Display name of the service."
          },
          "summary": {
            "type": "string",
            "description": "One-sentence description."
          },
          "description": {
            "type": "string",
            "description": "Full paragraph description of the scope."
          },
          "capabilities": {
            "type": "array",
            "description": "Specific work included in this scope.",
            "items": {
              "type": "string"
            }
          },
          "benefits": {
            "type": "array",
            "description": "Outcomes a client gets from this scope.",
            "items": {
              "type": "string"
            }
          },
          "process": {
            "type": "array",
            "description": "Ordered delivery steps.",
            "items": {
              "type": "object",
              "required": [
                "step",
                "title",
                "description"
              ],
              "properties": {
                "step": {
                  "type": "integer",
                  "minimum": 1,
                  "description": "1-based position in the sequence."
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "type": "string"
                }
              }
            }
          },
          "faqs": {
            "type": "array",
            "description": "Question and answer pairs published for this resource.",
            "items": {
              "type": "object",
              "required": [
                "question",
                "answer"
              ],
              "properties": {
                "question": {
                  "type": "string"
                },
                "answer": {
                  "type": "string"
                }
              }
            }
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Canonical human-readable page for this service."
          }
        }
      },
      "Project": {
        "type": "object",
        "description": "A completed or in-progress construction project.",
        "required": [
          "slug",
          "name",
          "category",
          "summary",
          "description",
          "featured",
          "location",
          "client",
          "completion_date",
          "scope",
          "url"
        ],
        "properties": {
          "slug": {
            "type": "string",
            "description": "Stable identifier used in URLs and path parameters."
          },
          "name": {
            "type": "string"
          },
          "category": {
            "type": "string",
            "description": "Scope categories delivered, e.g. \"Water, sewer, & storm\"."
          },
          "summary": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "featured": {
            "type": "boolean",
            "description": "Whether the project is highlighted on the site."
          },
          "location": {
            "type": "string",
            "description": "City and state of the project site."
          },
          "client": {
            "type": "string",
            "description": "Contracting client. May be withheld where the client has not authorized release."
          },
          "completion_date": {
            "type": "string",
            "description": "Completion year, or a status such as \"Mobilizing\" or \"In progress\"."
          },
          "scope": {
            "type": "array",
            "description": "Work performed on this project.",
            "items": {
              "type": "string"
            }
          },
          "challenges": {
            "type": "array",
            "description": "Site or schedule constraints encountered.",
            "items": {
              "type": "string"
            }
          },
          "solutions": {
            "type": "array",
            "description": "How each constraint was addressed.",
            "items": {
              "type": "string"
            }
          },
          "outcomes": {
            "type": "array",
            "description": "Delivered results.",
            "items": {
              "type": "string"
            }
          },
          "url": {
            "type": "string",
            "format": "uri"
          }
        }
      },
      "Market": {
        "type": "object",
        "description": "A client type Dunn Infrastructure Group has a dedicated offering for.",
        "required": [
          "slug",
          "name",
          "summary",
          "headline",
          "services_offered",
          "process",
          "differentiators",
          "faqs",
          "url"
        ],
        "properties": {
          "slug": {
            "type": "string",
            "description": "Stable identifier used in URLs and path parameters.",
            "enum": [
              "developers",
              "general-contractors",
              "municipalities",
              "hoas-and-property-managers",
              "commercial-property-owners",
              "private-utility-providers",
              "data-centers"
            ]
          },
          "name": {
            "type": "string"
          },
          "summary": {
            "type": "string"
          },
          "headline": {
            "type": "string",
            "description": "Positioning line used on the market page."
          },
          "services_offered": {
            "type": "array",
            "description": "Scopes offered to this market.",
            "items": {
              "type": "object",
              "required": [
                "title",
                "description"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "description": {
                  "type": "string"
                }
              }
            }
          },
          "process": {
            "type": "array",
            "description": "Ordered delivery steps.",
            "items": {
              "type": "object",
              "required": [
                "step",
                "title",
                "description"
              ],
              "properties": {
                "step": {
                  "type": "integer",
                  "minimum": 1,
                  "description": "1-based position in the sequence."
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "type": "string"
                }
              }
            }
          },
          "differentiators": {
            "type": "array",
            "description": "Reasons this market chooses Dunn.",
            "items": {
              "type": "object",
              "required": [
                "title",
                "description"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "description": {
                  "type": "string"
                }
              }
            }
          },
          "faqs": {
            "type": "array",
            "description": "Question and answer pairs published for this resource.",
            "items": {
              "type": "object",
              "required": [
                "question",
                "answer"
              ],
              "properties": {
                "question": {
                  "type": "string"
                },
                "answer": {
                  "type": "string"
                }
              }
            }
          },
          "url": {
            "type": "string",
            "format": "uri"
          }
        }
      },
      "GlossaryTerm": {
        "type": "object",
        "description": "A defined underground utility construction term.",
        "required": [
          "slug",
          "term",
          "definition",
          "summary",
          "faqs",
          "related_terms",
          "related_services",
          "url"
        ],
        "properties": {
          "slug": {
            "type": "string",
            "description": "Stable identifier used in URLs and path parameters."
          },
          "term": {
            "type": "string",
            "description": "The term being defined."
          },
          "definition": {
            "type": "string",
            "description": "The definition."
          },
          "summary": {
            "type": "string",
            "description": "Closing summary of why the term matters."
          },
          "faqs": {
            "type": "array",
            "description": "Question and answer pairs published for this resource.",
            "items": {
              "type": "object",
              "required": [
                "question",
                "answer"
              ],
              "properties": {
                "question": {
                  "type": "string"
                },
                "answer": {
                  "type": "string"
                }
              }
            }
          },
          "related_terms": {
            "type": "array",
            "description": "Slugs of related glossary terms.",
            "items": {
              "type": "string"
            }
          },
          "related_services": {
            "type": "array",
            "description": "Slugs of services where this term applies.",
            "items": {
              "type": "string"
            }
          },
          "url": {
            "type": "string",
            "format": "uri"
          }
        }
      },
      "ServiceArea": {
        "type": "object",
        "description": "A city Dunn Infrastructure Group has a dedicated service page and crew coverage for.",
        "required": [
          "slug",
          "city",
          "state",
          "state_code",
          "postal_code",
          "latitude",
          "longitude",
          "communities_served",
          "description",
          "url"
        ],
        "properties": {
          "slug": {
            "type": "string",
            "description": "Stable identifier used in URLs and path parameters.",
            "enum": [
              "savannah",
              "pooler",
              "richmond-hill",
              "rincon",
              "hardeeville",
              "hinesville",
              "bluffton"
            ]
          },
          "city": {
            "type": "string"
          },
          "state": {
            "type": "string"
          },
          "state_code": {
            "type": "string",
            "description": "Two-letter US state code.",
            "examples": [
              "GA",
              "SC"
            ]
          },
          "postal_code": {
            "type": "string"
          },
          "latitude": {
            "type": "number",
            "format": "double"
          },
          "longitude": {
            "type": "number",
            "format": "double"
          },
          "communities_served": {
            "type": "array",
            "description": "Neighborhoods and nearby towns covered from this city.",
            "items": {
              "type": "string"
            }
          },
          "description": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          }
        }
      },
      "Company": {
        "type": "object",
        "description": "Company identity, licensing, coverage, and contact details.",
        "required": [
          "name",
          "legal_name",
          "description",
          "url",
          "email",
          "telephone",
          "address",
          "hours",
          "licenses"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "legal_name": {
            "type": "string"
          },
          "tagline": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "mission": {
            "type": "string"
          },
          "vision": {
            "type": "string"
          },
          "founded": {
            "type": "string",
            "description": "Year the entity was formed."
          },
          "leadership_experience_years": {
            "type": "integer",
            "description": "Years of underground utility experience across company leadership."
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "logo": {
            "type": "string",
            "format": "uri"
          },
          "email": {
            "type": "string",
            "format": "email"
          },
          "telephone": {
            "type": "string",
            "description": "E.164-style phone number."
          },
          "address": {
            "type": "object",
            "required": [
              "street",
              "locality",
              "region",
              "postal_code",
              "country"
            ],
            "properties": {
              "street": {
                "type": "string"
              },
              "locality": {
                "type": "string"
              },
              "region": {
                "type": "string"
              },
              "postal_code": {
                "type": "string"
              },
              "country": {
                "type": "string"
              }
            }
          },
          "geo": {
            "type": "object",
            "required": [
              "latitude",
              "longitude"
            ],
            "properties": {
              "latitude": {
                "type": "number",
                "format": "double"
              },
              "longitude": {
                "type": "number",
                "format": "double"
              }
            }
          },
          "hours": {
            "type": "object",
            "properties": {
              "weekday": {
                "type": "string"
              },
              "weekend": {
                "type": "string"
              },
              "emergency": {
                "type": "string"
              }
            }
          },
          "licenses": {
            "type": "array",
            "description": "Held licenses and certifications with issuing jurisdiction.",
            "items": {
              "type": "object",
              "required": [
                "type",
                "identifier",
                "jurisdiction"
              ],
              "properties": {
                "type": {
                  "type": "string"
                },
                "identifier": {
                  "type": "string"
                },
                "jurisdiction": {
                  "type": "string"
                }
              }
            }
          },
          "certifications": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "name",
                "issuer",
                "status"
              ],
              "properties": {
                "name": {
                  "type": "string"
                },
                "issuer": {
                  "type": "string"
                },
                "status": {
                  "type": "string"
                }
              }
            }
          },
          "leadership": {
            "type": "array",
            "description": "Named company leadership. Name and role only — no biographies are published.",
            "items": {
              "type": "object",
              "required": [
                "name",
                "role"
              ],
              "properties": {
                "name": {
                  "type": "string"
                },
                "role": {
                  "type": "string",
                  "description": "Job title, e.g. \"CEO\"."
                }
              }
            }
          },
          "values": {
            "type": "array",
            "description": "Stated company values.",
            "items": {
              "type": "object",
              "required": [
                "title",
                "description"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "description": {
                  "type": "string"
                }
              }
            }
          },
          "safety_record": {
            "type": "object",
            "properties": {
              "workers_compensation_claims": {
                "type": "integer"
              },
              "recordable_incidents": {
                "type": "integer"
              },
              "since": {
                "type": "string"
              }
            }
          },
          "social_profiles": {
            "type": "array",
            "description": "Canonical profile URLs on third-party platforms.",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "ContactRequest": {
        "type": "object",
        "description": "A request for proposal. Submit only on the explicit instruction of the person being represented, using their own contact details — this delivers a real email to an estimator.",
        "required": [
          "firstName",
          "lastName",
          "email",
          "phone",
          "companyName",
          "selectedServices",
          "timeline",
          "additionalInfo"
        ],
        "properties": {
          "firstName": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100,
            "description": "Given name of the person making the request."
          },
          "lastName": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100,
            "description": "Family name of the person making the request."
          },
          "companyName": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200,
            "description": "Company the requester represents."
          },
          "email": {
            "type": "string",
            "format": "email",
            "maxLength": 254,
            "description": "Reply-to address for the estimator."
          },
          "phone": {
            "type": "string",
            "minLength": 7,
            "maxLength": 32,
            "description": "Callback number."
          },
          "heardAboutUs": {
            "type": "string",
            "maxLength": 200,
            "description": "How the requester found Dunn Infrastructure Group."
          },
          "selectedServices": {
            "type": "array",
            "minItems": 1,
            "description": "Services the project needs. Use slugs from GET /services, or free text if none fit.",
            "items": {
              "type": "string"
            }
          },
          "timeline": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200,
            "description": "When the work needs to happen, e.g. \"Q1 2027\" or \"Emergency\"."
          },
          "additionalInfo": {
            "type": "string",
            "minLength": 1,
            "maxLength": 5000,
            "description": "Project location, scope, plan set status, and any constraints."
          }
        }
      },
      "ContactResponse": {
        "type": "object",
        "required": [
          "submitted",
          "message"
        ],
        "properties": {
          "submitted": {
            "type": "boolean"
          },
          "message": {
            "type": "string",
            "description": "What happens next."
          },
          "reference": {
            "type": "string",
            "description": "Provider message id for the delivered email, when available."
          }
        }
      }
    }
  }
}