Base URL: https://app.cloudfix.com/api/v3
This summary focuses on typical workflows: retrieving and grouping recommendations, acting on them, and reporting.
Authentication
-
Most endpoints require an Authorization header.
-
Supported formats:
-
Authorization: Bearer
-
Authorization: api-token
-
Authorization: cft_
-
-
API tokens can be created in the CloudFix UI (Settings/API) or via POST /api/v3/tokens.
Public endpoints (no auth required):
-
POST /api/v3/auth/login
curl -s -X POST "https://app.cloudfix.com/api/v3/auth/login" \
-H "Content-Type: application/json" \
-d '{"username":"[email protected]","password":"YOUR_PASSWORD"}'
-
POST /api/v3/auth/refresh
curl -s -X POST "https://app.cloudfix.com/api/v3/auth/refresh" \
-H "Content-Type: application/json" \
-d '{"refreshToken":"<refresh_token>"}'
-
GET /api/v3/reports/view/{hash}
curl -s "https://app.cloudfix.com/api/v3/reports/view/<hash>"
Recommendations (find, group, act)
-
GET /api/v3/recommendations - list recommendations, examples
curl -s "https://app.cloudfix.com/api/v3/recommendations?pageNumber=1&pageLimit=10" \ -H "Authorization: Bearer <token>"
curl -s "https://app.cloudfix.com/api/v3/recommendations?finderFixerId=EbsDeleteOldVolumeSnapshots&pageNumber=1&pageLimit=10" \ -H "Authorization: Bearer <token>"
curl -s "https://app.cloudfix.com/api/v3/recommendations?finderFixerId=EbsDeleteOldVolumeSnapshots&filterBy=accountId&filterValue=123456789012&pageNumber=1&pageLimit=10" \
-H "Authorization: Bearer <token>"
curl -s "https://app.cloudfix.com/api/v3/recommendations/summary?account=123456789012" \ -H "Authorization: Bearer <token>"
-
GET /api/v3/recommendations/summary - grouped summary by type
curl -s "https://app.cloudfix.com/api/v3/recommendations/summary" \ -H "Authorization: Bearer <token>"
-
GET /api/v3/recommendations/summary-filters - valid OU/account/region/tag filters
curl -s "https://app.cloudfix.com/api/v3/recommendations/summary-filters" \ -H "Authorization: Bearer <token>"
-
POST /api/v3/recommendations/postpone - snooze recommendations
curl -s -X POST "https://app.cloudfix.com/api/v3/recommendations/postpone" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"recommendationIds":["rec-123"],"postponeUntil":1735689600000,"reason":"Quarterly review"}'
-
POST /api/v3/recommendations/manual-fix - mark recommendations manually fixed
curl -s -X POST "https://app.cloudfix.com/api/v3/recommendations/manual-fix" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"recommendationIds":["rec-123"]}'
Execute or schedule changes
-
POST /api/v3/create-change-requests - create change requests for recommendation IDs
curl -s -X POST "https://app.cloudfix.com/api/v3/create-change-requests" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"recommendationIds":["rec-123"],"executeOnSchedule":true}'
-
GET /api/v3/fixers/execution-schedule - view fixer schedule
curl -s "https://app.cloudfix.com/api/v3/fixers/execution-schedule" \ -H "Authorization: Bearer <token>"
-
POST /api/v3/fixers/execution-schedule - update fixer schedule
curl -s -X POST "https://app.cloudfix.com/api/v3/fixers/execution-schedule" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"fixerExecutionSchedule":"cron(0 2 * * ? *)"}'
Reports and savings
-
GET /api/v3/recommendations/report - fetch a recommendation report by ID
curl -s "https://app.cloudfix.com/api/v3/recommendations/report?recommendationId=rec-123" \ -H "Authorization: Bearer <token>"
-
POST /api/v3/shared-reports - create a shareable report link
curl -s -X POST "https://app.cloudfix.com/api/v3/shared-reports" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"recommendationId":"rec-123"}'
-
GET /api/v3/shared-reports/{hash} - fetch a shared report
curl -s "https://app.cloudfix.com/api/v3/shared-reports/<hash>" \ -H "Authorization: Bearer <token>"
-
GET /api/v3/report/savings - tenant savings report
curl -s "https://app.cloudfix.com/api/v3/report/savings" \ -H "Authorization: Bearer <token>"
-
GET /api/v3/report/realized-savings - realized savings report
curl -s "https://app.cloudfix.com/api/v3/report/realized-savings" \ -H "Authorization: Bearer <token>"
-
GET /api/v3/savings/history - savings history
curl -s "https://app.cloudfix.com/api/v3/savings/history" \ -H "Authorization: Bearer <token>"
-
POST /api/v3/report/cost-ranking - cost ranking
curl -s -X POST "https://app.cloudfix.com/api/v3/report/cost-ranking" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"from":"2024-01-01","to":"2024-12-31"}'
Integrations
-
GET /api/v3/events/webhook - list webhooks
curl -s "https://app.cloudfix.com/api/v3/events/webhook" \ -H "Authorization: Bearer <token>"
-
POST /api/v3/events/webhook - create/update webhook
curl -s -X POST "https://app.cloudfix.com/api/v3/events/webhook" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"name":"order-updates","url":"https://example.com/webhook","secret":"supersecretkey","active":true}'
-
DELETE /api/v3/events/webhook - delete webhook
curl -s -X DELETE "https://app.cloudfix.com/api/v3/events/webhook?name=order-updates" \ -H "Authorization: Bearer <token>"
-
POST /api/v3/events/webhook/update-external-id - update external id
curl -s -X POST "https://app.cloudfix.com/api/v3/events/webhook/update-external-id" \
-H "Content-Type: application/json" \
-d '{"externalId":"EXT-123","recommendationId":"rec-123"}'
-
GET /api/v3/integrations/email - list email integrations
curl -s "https://app.cloudfix.com/api/v3/integrations/email" \ -H "Authorization: Bearer <token>"
-
POST /api/v3/integrations/email - create email integration
curl -s -X POST "https://app.cloudfix.com/api/v3/integrations/email" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"email":"[email protected]","categories":["category1","category2"]}'
-
PUT /api/v3/integrations/email/{emailIntegrationId} - update email integration
curl -s -X PUT "https://app.cloudfix.com/api/v3/integrations/email/123" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"email":"[email protected]","categories":["category1","category2"]}'
-
DELETE /api/v3/integrations/email/{emailIntegrationId} - delete email integration
curl -s -X DELETE "https://app.cloudfix.com/api/v3/integrations/email/123" \ -H "Authorization: Bearer <token>"
-
POST /api/v3/integrations/email/sync - sync email integrations
curl -s -X POST "https://app.cloudfix.com/api/v3/integrations/email/sync" \ -H "Authorization: Bearer <token>"
Not in scope for the API
-
UI rendering and export features (charts, PDF exports, report layout)
-
Viewer-only presentation behavior for shared reports
-
One-click UI execution controls beyond the change-request and scheduling endpoints
-
Client-side analytics and telemetry
Persistence Notes
-
Configuration, recommendations, and reports are stored server-side in CloudFix services.
-
Token lifecycle and revocation are handled by the backend.
-
Exact data retention is plan- and policy-dependent; contact CloudFix Support for retention details.
Bill Gleeson
Comments