Auth: X-API-KEY: <your key> header
Use when: The user has documents for the property (rent roll, operating statement, appraisal) and wants them used in the valuation or loan quote.
Don't use when: The property does not exist yet (call createProperty first), or the user has not given you a file.
Parameters
| Name |
In |
Type |
Required |
Description |
propertyId |
path |
integer |
yes |
Numeric SCC property id (from createProperty). Example: 123456. |
propertyBuildingId |
query |
integer |
no |
Property building identifier (optional). |
Request body
Content type: multipart/form-data
| Field |
Type |
Required |
Description |
file |
binary |
yes |
The document. Allowed types: pdf, jpg, jpeg, png, gif, xls, xlsx, xlsm, xlsb, csv, docx, doc. Maximum 100 MB. |
name |
string |
yes |
Document name. Letters, digits, spaces and . , _ ( ) - [ ] + & # ', up to 255 characters. Example: Rent Roll (Wellington Center). |
type |
string |
no |
Document type; drives the extraction. Use OTHER when unsure. See document types. Example: RENT_ROLL. |
date |
integer |
no |
Document date as Unix time in milliseconds. Example: 1707215736000. |
pages |
string |
no |
Page range to process (PDF). Example: 1-5. |
sheetNumber |
integer |
no |
Sheet number to process (Excel), 1-based. Example: 1. |
parseType |
string |
no |
Parsing engine for the first pass over a rent roll or operating statement: PDFBOX (PDF text layer), OCR or OCR2 (OCR engines), GENERATIVE_AI (LLM extraction). Omit to use the default. |
Notes for agents
- Only upload files the user gave you, and name them clearly.
- The file is stored right away; data extraction continues in the background.
- Keep the returned
data.id and pass it in createOrder documentIds for the same property.
- Set
type when you know it, so the right extraction runs. Use OTHER when unsure.
- Every field except
file may also be sent as a query parameter.
- A
404 means the property does not exist or belongs to another user.
Example request
curl -X POST https://app.smartcapitalcenter.com/api/v2/public/valuation/upload-to-property/123456 \
-H "X-API-KEY: $SCC_API_KEY" \
-F "file=@rent-roll.pdf" \
-F "name=Rent Roll (123 Main St)" \
-F "type=RENT_ROLL"
Response 202
Document stored and attached to the property; data is the document.
Standard envelope with data containing:
| Field |
Type |
Description |
id |
integer |
Document id; pass it in createOrder documentIds. |
name |
string |
Document name. |
type |
string |
Document type. |
fileName |
string |
Uploaded file name. |
statusLabel |
string |
Human-readable document status. |
Errors
| Code |
Meaning |
| 400 |
Invalid input (missing fields, wrong formats, unsupported file type) |
| 401 |
Missing or invalid API key |
| 404 |
Property not found or not owned by the caller |
| 500 |
Internal server error during upload |
Next: createOrder with the returned data.id in documentIds.
# uploadDocument
`POST /api/v2/public/valuation/upload-to-property/{propertyId}`
Uploads a document, such as a rent roll or operating statement, and attaches it to a property. Use the returned document id in `createOrder`.
**Auth:** `X-API-KEY: <your key>` header
**Use when:** The user has documents for the property (rent roll, operating statement, appraisal) and wants them used in the valuation or loan quote.
**Don't use when:** The property does not exist yet (call `createProperty` first), or the user has not given you a file.
## Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| `propertyId` | path | integer | yes | Numeric SCC property id (from `createProperty`). Example: `123456`. |
| `propertyBuildingId` | query | integer | no | Property building identifier (optional). |
## Request body
Content type: `multipart/form-data`
| Field | Type | Required | Description |
|---|---|---|---|
| `file` | binary | yes | The document. Allowed types: pdf, jpg, jpeg, png, gif, xls, xlsx, xlsm, xlsb, csv, docx, doc. Maximum 100 MB. |
| `name` | string | yes | Document name. Letters, digits, spaces and `. , _ ( ) - [ ] + & # '`, up to 255 characters. Example: `Rent Roll (Wellington Center)`. |
| `type` | string | no | Document type; drives the extraction. Use `OTHER` when unsure. See document types. Example: `RENT_ROLL`. |
| `date` | integer | no | Document date as Unix time in milliseconds. Example: `1707215736000`. |
| `pages` | string | no | Page range to process (PDF). Example: `1-5`. |
| `sheetNumber` | integer | no | Sheet number to process (Excel), 1-based. Example: `1`. |
| `parseType` | string | no | Parsing engine for the first pass over a rent roll or operating statement: `PDFBOX` (PDF text layer), `OCR` or `OCR2` (OCR engines), `GENERATIVE_AI` (LLM extraction). Omit to use the default. |
## Notes for agents
- Only upload files the user gave you, and name them clearly.
- The file is stored right away; data extraction continues in the background.
- Keep the returned `data.id` and pass it in `createOrder` `documentIds` for the same property.
- Set `type` when you know it, so the right extraction runs. Use `OTHER` when unsure.
- Every field except `file` may also be sent as a query parameter.
- A `404` means the property does not exist or belongs to another user.
## Example request
```bash
curl -X POST https://app.smartcapitalcenter.com/api/v2/public/valuation/upload-to-property/123456 \
-H "X-API-KEY: $SCC_API_KEY" \
-F "file=@rent-roll.pdf" \
-F "name=Rent Roll (123 Main St)" \
-F "type=RENT_ROLL"
```
## Response `202`
Document stored and attached to the property; `data` is the document.
Standard envelope with `data` containing:
| Field | Type | Description |
|---|---|---|
| `id` | integer | Document id; pass it in `createOrder` `documentIds`. |
| `name` | string | Document name. |
| `type` | string | Document type. |
| `fileName` | string | Uploaded file name. |
| `statusLabel` | string | Human-readable document status. |
## Errors
| Code | Meaning |
|---|---|
| 400 | Invalid input (missing fields, wrong formats, unsupported file type) |
| 401 | Missing or invalid API key |
| 404 | Property not found or not owned by the caller |
| 500 | Internal server error during upload |
**Next:** `createOrder` with the returned `data.id` in `documentIds`.