CloudYali Developer Resources
Everything you need to work with CloudYali programmatically: the CloudYali public API, its OpenAPI 3.1 specification, structured error codes, and the agent-readable endpoints this site publishes. CloudYali is a FinOps platform for cloud cost visibility and management across AWS, Azure and GCP.
Product documentation lives at docs.cloudyali.io. API keys and account settings live in the CloudYali console.
CloudYali API quickstart
The public API needs no authentication. Start from the discovery document, then load the specification.
curl https://www.cloudyali.io/api curl https://www.cloudyali.io/openapi.json curl https://www.cloudyali.io/api/v1/features
Every successful response uses the envelope { "success": true, "data": … }. Every failure uses the structured error envelope described below.
CloudYali public API endpoints
Reachable, unauthenticated endpoints served from https://www.cloudyali.io.
| Resource | Format | Description |
|---|---|---|
| /openapi.jsonOpenAPI specification (JSON) | OpenAPI 3.1 / JSON | The complete machine-readable description of the CloudYali public API. Every operation has a unique operationId, typed parameters and response schemas, so it can be loaded directly into an LLM function-calling toolchain. |
| /api/openapi.yamlOpenAPI specification (YAML) | OpenAPI 3.1 / YAML | The same specification served as YAML for tools that prefer it. |
| /apiAPI index | JSON | Discovery document listing every public CloudYali endpoint with its operation id and description. Start here. |
| /api/v1/healthService health | JSON | Liveness check for the CloudYali public API. |
| /api/v1/featuresProduct capability catalog | JSON | Every CloudYali FinOps capability with the cloud providers it covers — cost visibility, cost savings, budget management, asset inventory, tag governance, AI cost tracking and integrations. |
| /api/v1/blogsBlog post index | JSON | Paginated list of published CloudYali articles on FinOps and cloud cost management, with canonical and Markdown URLs. |
| /api/v1/blogs/aws-backup-cold-tierSingle blog post | JSON | One article by slug, including the full body rendered as Markdown. |
| /api/demo-requestDemo request | JSON | POST a DemoRequest to reach the CloudYali sales team. GET returns endpoint availability without submitting anything. |
| /.well-known/api-catalogAPI catalog (RFC 9727) | application/linkset+json | The standard, guessable entry point. One fetch returns links to the CloudYali OpenAPI specification, developer documentation, health check and deprecation policy. |
| /developers/api-versioningAPI versioning and deprecation policy | HTML | How the CloudYali API is versioned, what counts as a breaking change, and the Deprecation and Sunset headers that announce a retirement. |
| /developers/cliCloudYali CLI | HTML / npm | Zero-dependency command-line client for the CloudYali public API. Every command prints JSON, so it composes with jq and drops into scripts. |
CloudYali API authentication
The endpoints listed above are public and require no credentials. The authenticated CloudYali platform API — the one that returns your own cost, budget and inventory data — is scoped to your account and is provisioned from the CloudYali console. Contact support@cloudyali.io for access and the current endpoint reference.
CloudYali API error codes
Every non-2xx response from a CloudYali endpoint is JSON — never an HTML error page. The code field is stable and safe to branch on, and hint tells you what to do about it.
{
"success": false,
"error": {
"code": "validation_error",
"message": "Missing required field: businessEmail",
"hint": "Provide every field listed in `details.required_fields` and retry.",
"details": { "missing_fields": ["businessEmail"] },
"documentation_url": "https://www.cloudyali.io/developers",
"request_id": "3f1c9a54-6f0e-4a1e-9a2d-0b7c2f5f1a44"
}
}| Code | HTTP | Meaning |
|---|---|---|
| bad_request | 400 | A query or path parameter was malformed. |
| invalid_json | 400 | The request body was not a valid JSON object. |
| validation_error | 400 / 422 | A field failed validation. `details` names it. |
| not_found | 404 | No such endpoint or resource. |
| method_not_allowed | 405 | That HTTP method is not supported for the path. |
| rate_limited | 429 | Too many requests. Honour `Retry-After`. |
| upstream_error | 502 | A dependency failed. The request was not applied. |
| configuration_error | 500 | The endpoint is not fully configured server-side. |
| internal_error | 500 | Unexpected server error. |
CloudYali API rate limits
The public API allows 120 requests per 60 seconds per client. You do not have to guess how much of that you have left — every response tells you.
RateLimit-Policy: "public";q=120;w=60 RateLimit: "public";r=118;t=47 X-RateLimit-Limit: 120 X-RateLimit-Remaining: 118 X-RateLimit-Reset: 1767225647
RateLimit-Policyis the IETF structured field for the published quota:qis the quota,wthe window in seconds. It is on every response.RateLimitis your live position:rrequests remaining,tseconds until the window resets. It appears on responses a shared cache will not store — a CDN must never replay one caller’s counters to another. TheX-RateLimit-*trio carries the same numbers for clients that read those instead.- Exceeding the quota returns
429withRetry-Afterin seconds and therate_limitederror code. Wait that long; do not retry sooner.
Enforcement happens at the origin, so a response served from CDN cache is not counted against you. If your workload needs more than this, tell us what you are building at support@cloudyali.io.
CloudYali API versioning and deprecation
The API is versioned in the URL path and is currently v1. Within a major version changes are additive only. Anything that could break a caller ships under a new major version path, and a retirement is announced at least 180 days ahead with the Deprecation and Sunset response headers.
The full contract — including what does and does not count as a breaking change — is at CloudYali API versioning and deprecation policy.
CloudYali resources for AI agents
CloudYali publishes machine-readable versions of its content so agents do not have to scrape rendered HTML.
| Resource | Format | Description |
|---|---|---|
| /llms.txtllms.txt | text/plain | Condensed, LLM-friendly summary of CloudYali: what the product does, how it compares to alternatives, and where the canonical pages live. |
| /llms-full.txtllms-full.txt | text/plain | The expanded version, including the full content inventory. |
| /.well-known/agent-skills/index.jsonAgent skills manifest | JSON | Machine-readable list of the agent capabilities this site exposes, with content hashes. |
| /agent-markdown/blogsMarkdown rendering of any page | text/markdown | Prefix any CloudYali path with /agent-markdown to get a clean Markdown rendering with no navigation chrome. Requesting a page with Accept: text/markdown does the same thing. |
| /.well-known/api-catalogAPI catalog (RFC 9727) | application/linkset+json | Standardised discovery document. If you only know the CloudYali domain, fetch this first. |
| /sitemap.xmlSitemap | XML | Every indexable CloudYali URL with last-modified timestamps. |
| /robots.txtrobots.txt | text/plain | Crawl policy. CloudYali explicitly allows AI crawlers and declares Content-Signal permissions. |
Using CloudYali with LLM function calling
The CloudYali OpenAPI document is written to convert cleanly into tool definitions: every operation has a unique operationId, a description written for a model rather than a human skimming docs, typed parameters with explicit bounds, and a declared response schema.
# Operation ids exposed by the CloudYali public API
getApiIndex GET /api
getServiceHealth GET /api/v1/health
listProductFeatures GET /api/v1/features
listBlogPosts GET /api/v1/blogs
getBlogPostBySlug GET /api/v1/blogs/{slug}
getDemoRequestStatus GET /api/demo-request
submitDemoRequest POST /api/demo-requestCloudYali CLI
cloudyali is a zero-dependency command-line client for the endpoints above. Every command prints JSON, so it composes with jq and drops into scripts without anyone writing an HTTP client first.
npx @cloudyali/cli features --provider AWS | jq '.features[].name'
Install instructions, the full command list and exit codes are on the CloudYali CLI page. If you would rather generate a client in your own language, the OpenAPI specification feeds openapi-generator directly.
CloudYali developer support
Questions about the CloudYali API, integrations or agent access: support@cloudyali.io. Include the request_id from any error response — it lets us find the exact request in our logs.