---
title: "Upload a billing file for a savings estimate"
method: POST
path: "/v1/org/{org_id}/uploads"
tags: ["Uploads"]
---

# Upload a billing file for a savings estimate

`POST /v1/org/{org_id}/uploads`

Accepts a multipart PDF, CSV, JSON, or text billing file, stores it in Archera's invoice upload bucket, and returns an upload ID. Use this upload ID with the savings-estimate operation. The upload status workflow is: PENDING before storage begins, PROCESSING while the file is being transferred, COMPLETE once it is available for analysis, and ERROR if storage fails.

## Response `201`

Created

- PublicUpload
  - `id` string, uuid, required
  - `created_at` string, date-time, required
  - `org_id` string, required
  - `file_name` string, required
  - `content_type` string, required
  - `size_bytes` integer, required
  - `description` string, nullable, required
  - `upload_status` 'PENDING' | 'PROCESSING' | 'COMPLETE' | 'ERROR', required
  - `source` 'agent_upload' | 'attachment' | 'partner_api', required
  - `detected_type` string, nullable, required
  - `available_actions` string[]

## Other responses

- `400` — Bad request
- `401` — Unauthorized
- `403` — Forbidden
- `404` — Not found
- `405` — Method not allowed
- `409` — Conflict
- `422` — Unprocessable Content
- `500` — Internal server error
- `default` — Default error response

---

[API](https://skmtc.net/archera/apis/archera-ai-api.md) · [All operations](https://skmtc.net/archera/apis/archera-ai-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/archera/archera-ai-api/versions/ed4f8fa35f31/schema)
