### Estimate savings from an uploaded billing file

#### Endpoint

`post/v1/org/{org_id}/savings-estimate`

Parses a completed PDF or CSV billing upload and returns normalized costs and provider-specific savings estimates.

#### Path parameters

- `org_id`: string · uuid Required

#### Body

**Content-Type:** application/json

- `upload_id`: string · uuid Required

#### Responses

- **200 OK** (application/json)
  - `provider`: string, enum (possible values: `aws`, `azure`, `gcp`, `null`)
  - `source_format`: string Required
  - `period_start`: string · nullable Required
  - `period_end`: string · nullable Required
  - `account_id`: string · nullable Required
  - `currency`: string Required
  - `is_projected`: boolean Required
  - `line_items`: object · CostLineItem[] Required

**Show properties**
  - `total_cost`: object · ValueRange Read-only Required
  - `total_savings_estimate`: object · ValueRange Read-only Required

- **400 Bad request** (application/json)
- **401 Unauthorized** (application/json)
- **403 Forbidden** (application/json)
- **404 Not found** (application/json)
- **405 Method not allowed** (application/json)
- **409 Conflict** (application/json)
- **422 Unprocessable Content** (application/json)
- **500 Internal server error** (application/json)
- **default Default error response** (application/json)

### Example HTTP Request

```http
POST /v1/org/{org_id}/savings-estimate HTTP/1.1
Content-Type: application/json
Accept: */*
Content-Length: 52

{
  "upload_id": "123e4567-e89b-12d3-a456-426614174000"
}
```

### Example Response

```json
{
  "provider": "aws",
  "source_format": "text",
  "period_start": null,
  "period_end": null,
  "account_id": null,
  "currency": "text",
  "is_projected": true,
  "line_items": [
    {
      "service": "text",
      "reservable_service": null,
      "resource_type": null,
      "usage_quantity": {
        "estimate": 1,
        "lower_bound": null,
        "upper_bound": null
      },
      "usage_unit": null,
      "cost": {
        "estimate": 1,
        "lower_bound": null,
        "upper_bound": null
      },
      "region": null,
      "spend_type": "on_demand",
      "savings_estimate": {
        "estimate": 1,
        "lower_bound": null,
        "upper_bound": null
      }
    }
  ],
  "total_cost": {
    "estimate": 1,
    "lower_bound": null,
    "upper_bound": null
  },
  "total_savings_estimate": {
    "estimate": 1,
    "lower_bound": null,
    "upper_bound": null
  }
}
```
