Developers
IndiAndes developer resources
indiandes.com is the website of IndiAndes, a cross-border trade advisory firm working between India and Latin America. Its machine-readable surface is deliberately small: a public health check, one consent-gated inquiry endpoint, and a set of files that describe the rest of the site to agents. Everything on this page is public and needs no key.
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
| Method | Path | Purpose | Access |
|---|---|---|---|
GET | /api/health | Availability probe. Returns {"status":"ok","service":"indiandes.com"}. | None. Public, CORS-enabled, cached 60s. |
POST | /api/contact | Submits 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"
}| Status | Code | Meaning |
|---|---|---|
| 400 | bad_request | Malformed request |
| 400 | invalid_json | Request body is not valid JSON |
| 400 | invalid_event | Unknown analytics event |
| 403 | invalid_origin | Request origin is not approved |
| 403 | cross_origin_forbidden | Cross-origin request blocked |
| 403 | forbidden | Request refused |
| 404 | not_found | Endpoint not found |
| 405 | method_not_allowed | Method not allowed |
| 413 | payload_too_large | Request body is too large |
| 415 | invalid_content_type | Unsupported media type |
| 422 | invalid_fields | One or more fields are invalid |
| 429 | rate_limited | Too many requests |
| 500 | internal_error | Unexpected server error |
| 503 | storage_unavailable | Lead storage is temporarily unavailable |
| 503 | service_unavailable | Service 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
- Inquiries. 8 requests per minute per IP on
/api/contact, then429withRetry-After: 60. - Body size. 32 KB on
/api/contact; larger bodies get413. - Origin.
/api/contactonly accepts requests from an approved IndiAndes website origin. There is no server-to-server variant. - Crawling. Please stay under roughly one request per second; the site is small and fully static apart from the two endpoints above.
- Content policy. Every response carries
Content-Signal: ai-train=no, search=yes, ai-input=yes. Quoting a page to answer a user is welcome; training on it is not.
Machine-readable files
openapi.json— OpenAPI 3.1 description of both public endpoints, including the typed error responses.api.md— The same contract in Markdown, for agents that would rather read prose than a schema..well-known/api-catalog— RFC 9727 linkset pointing at the description, the documentation and the health check..well-known/agent-skills/index.json— Agent Skills discovery index. The skill helps an agent match a user to the right IndiAndes service.llms.txt— One-page index of the site for language models: services, insights, developer files, Spanish pages.sitemap-index.xml— Every canonical URL in both languages, with content-derived lastmod dates.robots.txt— Crawl rules and the Content-Signal policy that also travels on every response header.
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
- Markdown negotiation. Send
Accept: text/markdownto any page URL and the same content comes back as Markdown. - Honest 404s. Nonexistent paths return a real
404. Clients that did not ask for HTML get a short Markdown note pointing at the sitemap,llms.txtand this page. - In-page tools. Pages register WebMCP tools through
navigator.modelContextwhen a browser agent exposes it, covering service lookup and contact details. - Do not submit the form. An inquiry reaches two people who will reply to it. Never post
/api/contactwithout the user's explicit approval — direct them to the contact page instead. - Prices and dates change. Quote the page you fetched, not a cached copy of this one.
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.