Quickstart

Three commands cover most of what an agent needs from this site.

Check availability

curl -s https://indiandes.com/api/health
# {"status":"ok","service":"indiandes.com"}

Read any page as Markdown

curl -s -H 'Accept: text/markdown' https://indiandes.com/en/services
# Any page on the site returns Markdown when asked. Response headers report
# x-markdown-tokens and x-original-tokens so you can see what you saved.

Confirm a wrong URL is really wrong

curl -s -o /dev/null -w '%{http_code}\n' https://indiandes.com/no-such-page
# 404 — and the body is a short Markdown note listing the sitemap,
# llms.txt and this page.

Endpoints

MethodPathPurposeAccess
GET/api/healthAvailability probe. Returns {"status":"ok","service":"indiandes.com"}.None. Public, CORS-enabled, cached 60s.
POST/api/contactSubmits a business inquiry from the website form. Creates a lead and notifies the team.Approved IndiAndes browser origin, explicit consent, anti-abuse checks.

/api/analytics and /api/marketing-config exist for the website's own browser code. They are not part of the public contract, are not in the OpenAPI description, and may change without notice. Any other path under/api/ returns a 404 problem document.

Error model

Every failure under /api/ is an RFC 9457 problem document served asapplication/problem+json. The fields are stable: type,title, status, detail, code,hint, documentation and instance.error repeats code and is kept only for the site's original clients — read code.

HTTP/2 422
content-type: application/problem+json; charset=utf-8

{
  "type": "https://indiandes.com/developers#invalid-fields",
  "title": "One or more fields are invalid",
  "status": 422,
  "detail": "A required field is missing, malformed, or outside its allowed values.",
  "code": "invalid_fields",
  "hint": "Validate the body against the ContactInquiry schema in https://indiandes.com/openapi.json.",
  "documentation": "https://indiandes.com/developers",
  "instance": "/api/contact",
  "error": "invalid_fields"
}
StatusCodeMeaning
400bad_requestMalformed request
400invalid_jsonRequest body is not valid JSON
400invalid_eventUnknown analytics event
403invalid_originRequest origin is not approved
403cross_origin_forbiddenCross-origin request blocked
403forbiddenRequest refused
404not_foundEndpoint not found
405method_not_allowedMethod not allowed
413payload_too_largeRequest body is too large
415invalid_content_typeUnsupported media type
422invalid_fieldsOne or more fields are invalid
429rate_limitedToo many requests
500internal_errorUnexpected server error
503storage_unavailableLead storage is temporarily unavailable
503service_unavailableService temporarily unavailable

A 405 always carries an Allow header; a 429always carries Retry-After. The same codes are enumerated inopenapi.json undercomponents.schemas.Problem.

Rate limits and conditions

Machine-readable files

The home pages and this page also advertise these files in a Linkresponse header, so a client can find them without fetching HTML.

Notes for agents

API keys, sandbox and support

There are no API keys, no OAuth flow and no sandbox tenant, because there is nothing here that needs one: the public surface is read-only apart from a single consent-gated form. Exercise integrations against GET /api/health, which is safe to call repeatedly and returns the same shape as any other JSON endpoint.

Need something this page does not cover — a data feed, a partner integration, a scheduled export? Write to hi@indiandes.comand say what you are building.