Dunn Infrastructure Group API & developer resources

Dunn Infrastructure Group publishes its services, projects, markets, service areas, and glossary as a public JSON API, and every page on this site as markdown. No API key, no registration, no rate limit on reads. This page is the index of everything a developer or an AI agent needs.

Read endpoints

Base URL https://www.dunninfrastructuregroup.com. All read endpoints are unauthenticated, CORS-enabled, and cached at the edge for one hour.

GET/api/v1Index of every endpoint.
GET/api/v1/companyIdentity, licences, coverage, hours, and contact details.
GET/api/v1/servicesEvery construction scope self-performed in house.
GET/api/v1/services/{slug}One service, with process and FAQs.
GET/api/v1/projectsProjects. Filters: featured, service, city.
GET/api/v1/projects/{slug}One project case study.
GET/api/v1/marketsClient types with a dedicated offering.
GET/api/v1/markets/{slug}One market offering.
GET/api/v1/service-areasCities with crew coverage, with coordinates.
GET/api/v1/service-areas/{slug}One service area.
GET/api/v1/glossaryUtility terminology. Filter: q.
GET/api/v1/glossary/{slug}One glossary term.

Markdown content negotiation

This site follows the acceptmarkdown.com convention. Every page has a markdown representation with the same substance as the HTML. Responses carry Vary: Accept, so a cache can't hand you the wrong variant.

# Negotiate with the Accept header
curl -H "Accept: text/markdown" https://www.dunninfrastructuregroup.com/services/lift-station-services

# Or append .md to any path
curl https://www.dunninfrastructuregroup.com/who-we-serve/data-centers.md

# Rejecting both available types returns 406
curl -i -H "Accept: application/pdf" https://www.dunninfrastructuregroup.com/

Submitting a bid request

POST /api/v1/contact emails an estimator. It has a real-world side effect, so an agent should send it only when the person it represents has explicitly asked to be contacted, using that person's own details. Rate limited to 5 requests per minute per IP. For an emergency, call +1-912-663-1365 rather than posting.

curl -X POST https://www.dunninfrastructuregroup.com/api/v1/contact \
  -H "Content-Type: application/json" \
  -d '{
    "firstName": "Dana",
    "lastName": "Reyes",
    "companyName": "Coastal Site Contractors",
    "email": "dana@example.com",
    "phone": "912-555-0134",
    "heardAboutUs": "Referral",
    "selectedServices": ["sanitary-sewer-construction", "lift-station-services"],
    "timeline": "Q1 2027",
    "additionalInfo": "42-lot subdivision in Rincon. Plans at 90%."
  }'

Errors

Every API failure is a JSON object, never an HTML page. Branch on error.code, which is stable, rather than on the message. error.hint always names the next action that resolves the failure.

{
  "error": {
    "code": "not_found",
    "message": "No service exists with the identifier \"water-mains\".",
    "hint": "List every valid service identifier at https://www.dunninfrastructuregroup.com/api/v1/services, then retry with one of those slugs.",
    "status": 404,
    "documentation_url": "https://www.dunninfrastructuregroup.com/developers"
  }
}

Codes in use: not_found, method_not_allowed, not_acceptable, invalid_request, rate_limited, internal_error.

Questions

Email contact@dunninfrastructuregroup.com or use the contact page. Content from this API may be quoted with attribution to Dunn Infrastructure Group.