Skip to content

AWS API Reference

This section provides the API reference documentation for AWS cost export endpoints, auto-generated from docstrings.

Interactive Documentation

Swagger UI

  • URL: /docs
  • Features: Request/response testing, parameter exploration

ReDoc

  • URL: /redoc
  • Features: Sidebar navigation, endpoint discovery

AWS Endpoints Reference

Export AWS cost data using POST request with JSON body.

Request Body Parameters: - start_date (str, optional): Start date in YYYY-MM-DD format - end_date (str, optional): End date in YYYY-MM-DD format - profile (str, optional): AWS profile name (default: "default") - group_by (str, optional): Cost grouping dimension (default: "LINKED_ACCOUNT") - granularity (str, optional): Time granularity - "MONTHLY" or "DAILY" (default: "MONTHLY")

Assumes AWS credentials are already configured in the user's terminal.

Source code in api/main.py
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
@app.post("/aws/cost/export")
async def export_aws_costs_post(request: Request):
    """
    Export AWS cost data using POST request with JSON body.

    Request Body Parameters:
    - start_date (str, optional): Start date in YYYY-MM-DD format
    - end_date (str, optional): End date in YYYY-MM-DD format
    - profile (str, optional): AWS profile name (default: "default")
    - group_by (str, optional): Cost grouping dimension (default: "LINKED_ACCOUNT")
    - granularity (str, optional): Time granularity - "MONTHLY" or "DAILY" (default: "MONTHLY")

    Assumes AWS credentials are already configured in the user's terminal.
    """
    try:
        # Parse JSON body if present
        try:
            body = await request.json()
        except Exception:
            body = {}

        # Extract parameters with defaults
        start_date = body.get("start_date")
        end_date = body.get("end_date")
        profile = body.get("profile", "default")
        group_by = body.get("group_by", "LINKED_ACCOUNT")
        granularity = body.get("granularity", "MONTHLY")

        # Set default dates if not provided
        if not start_date:
            start_date = (datetime.now() - timedelta(days=90)).strftime("%Y-%m-%d")

        if not end_date:
            end_date = datetime.now().strftime("%Y-%m-%d")

        print(f"Fetching AWS cost data from {start_date} to {end_date}")
        print(f"Using profile: {profile}, Group by: {group_by}")

        # Call the existing eraXplor AWS function
        cost_data = monthly_account_cost_export(
            start_date_input=start_date,
            end_date_input=end_date,
            aws_profile_name_input=profile,
            cost_groupby_key_input=group_by,
            granularity=granularity,
        )

        print(f"Retrieved {len(cost_data)} cost records")

        response_data = {
            "success": True,
            "message": "AWS cost data exported successfully",
            "total_records": len(cost_data),
            "cost_data": cost_data,
            "request_parameters": {
                "start_date": start_date,
                "end_date": end_date,
                "profile": profile,
                "group_by": group_by,
                "granularity": granularity,
            },
        }

        return response_data

    except Exception as e:
        print(f"Error exporting AWS costs: {str(e)}")
        return JSONResponse(
            {"error": True, "message": f"Error exporting AWS costs: {str(e)}"},
            status_code=500,
        )

Export AWS cost data using GET request with query parameters.

Query Parameters: - start_date (str, optional): Start date in YYYY-MM-DD format - end_date (str, optional): End date in YYYY-MM-DD format - profile (str, optional): AWS profile name (default: "default") - group_by (str, optional): Cost grouping dimension (default: "LINKED_ACCOUNT") - granularity (str, optional): Time granularity - "MONTHLY" or "DAILY" (default: "MONTHLY")

Assumes AWS credentials are already configured in the user's terminal.

Source code in api/main.py
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
@app.get("/aws/cost/export")
async def export_aws_costs_get(
    start_date: str = None,
    end_date: str = None,
    profile: str = "default",
    group_by: str = "LINKED_ACCOUNT",
    granularity: str = "MONTHLY",
):
    """
    Export AWS cost data using GET request with query parameters.

    Query Parameters:
    - start_date (str, optional): Start date in YYYY-MM-DD format
    - end_date (str, optional): End date in YYYY-MM-DD format
    - profile (str, optional): AWS profile name (default: "default")
    - group_by (str, optional): Cost grouping dimension (default: "LINKED_ACCOUNT")
    - granularity (str, optional): Time granularity - "MONTHLY" or "DAILY" (default: "MONTHLY")

    Assumes AWS credentials are already configured in the user's terminal.
    """
    try:
        # Set default dates if not provided
        if not start_date:
            start_date = (datetime.now() - timedelta(days=90)).strftime("%Y-%m-%d")

        if not end_date:
            end_date = datetime.now().strftime("%Y-%m-%d")

        print(f"Fetching AWS cost data from {start_date} to {end_date}")
        print(f"Using profile: {profile}, Group by: {group_by}")

        # Call the existing eraXplor AWS function
        cost_data = monthly_account_cost_export(
            start_date_input=start_date,
            end_date_input=end_date,
            aws_profile_name_input=profile,
            cost_groupby_key_input=group_by,
            granularity=granularity,
        )

        print(f"Retrieved {len(cost_data)} cost records")

        response_data = {
            "success": True,
            "message": "AWS cost data exported successfully",
            "total_records": len(cost_data),
            "cost_data": cost_data,
            "request_parameters": {
                "start_date": start_date,
                "end_date": end_date,
                "profile": profile,
                "group_by": group_by,
                "granularity": granularity,
            },
        }

        return response_data

    except Exception as e:
        print(f"Error exporting AWS costs: {str(e)}")
        return JSONResponse(
            {"error": True, "message": f"Error exporting AWS costs: {str(e)}"},
            status_code=500,
        )

Authentication

  • AWS CLI configured with profiles
  • Credentials in ~/.aws/credentials
  • IAM permissions for Cost Explorer API

Rate Limiting

AWS Cost Explorer has its own quotas - no built-in limiting.