Auth: X-API-KEY: <your key> header
Use when: The property exists and the user has asked for a valuation or a loan quote.
Don't use when: Placing a FULL order without explicit, specific approval from the user.
Request body
Content type: application/json
| Field |
Type |
Required |
Description |
propertyId |
integer |
yes |
Numeric id of the property (from the create-property step). Example: 123456. |
orderType |
string |
yes |
Order type: FULL (detailed valuation) or LOAN (loan quote). Example: FULL. |
documentIds |
array of integer |
no |
Optional ids of documents uploaded to this property with uploadDocument (its data.id). |
cardToken |
string |
no |
Stripe card token (tok_.../pm_...) created client-side. Required for a FULL valuation ($350 charge); ignored for LOAN quotes. Example: tok_visa. |
Notes for agents
FULL costs $350 and charges a card. Before calling, tell the user the property, the order type and the $350 charge, and wait for a clear yes.
LOAN quotes are free. cardToken is ignored for them.
cardToken must be a Stripe token (tok_... or pm_...) created in the user's browser or app. Never invent one, and never ask the user to paste raw card numbers to you.
documentIds come from uploadDocument on this same property.
- The response
data.id is the request id. Check progress with getOrder, at most once a minute, until status is COMPLETED or REJECTED.
- A
402 means the card charge failed. Tell the user; do not retry with the same card token unless they ask.
Example request
curl -X POST https://app.smartcapitalcenter.com/api/v2/public/valuation/order \
-H "X-API-KEY: $SCC_API_KEY" \
-H "Content-Type: application/json" \
-d '{"propertyId": 123456, "orderType": "LOAN", "documentIds": [9876]}'
Response 200
OK.
Standard envelope with data containing:
| Field |
Type |
Description |
id |
integer |
Request id; use it with getOrder. |
propertyId |
integer |
Numeric property id the request belongs to. |
loanDetailsId |
integer |
— |
propertyType |
string |
— |
propertyName |
string |
— |
address |
string |
— |
countyId |
string |
— |
parcelId |
string |
— |
documents |
array |
— |
documents[].id |
integer |
— |
documents[].type |
string |
Enum, see document types. |
documents[].name |
string |
— |
documents[].fileName |
string |
— |
documents[].documentStatus |
string |
— |
documents[].documentStatusLabel |
string |
— |
documents[].rrId |
integer |
— |
documents[].osId |
integer |
— |
documents[].documentDate |
string |
— |
requesterId |
integer |
— |
requesterEmail |
string |
— |
servicerId |
integer |
— |
servicerEmail |
string |
— |
type |
string |
Request type: VALUATION (detailed valuation, orderType FULL) or LOAN (loan quote). |
typeLabel |
string |
Human-readable request type. |
status |
string |
Processing status: REQUEST_STARTED, REQUEST_SUBMITTED, REQUEST_APPROVED, WAITING_STANDARDIZATION, STANDARDIZED_NOT_REVIEWED, IN_PROGRESS_BY_SC, IN_PROGRESS_BY_USER, REQUEST_INFO, COMPLETED or REJECTED. COMPLETED and REJECTED are final. |
statusLabel |
string |
Human-readable status. |
createdAtTimestamp |
string |
— |
updatedAtTimestamp |
string |
— |
completedAtTimestamp |
string |
Set once the request is COMPLETED. |
message |
string |
Message from the analyst, if any. |
emailNotificationSentAt |
integer |
— |
Errors
| Code |
Meaning |
| 400 |
Validation error, or cardToken missing for a FULL valuation |
| 402 |
Card charge failed |
| 404 |
Property not found or not owned by the caller |
Next: getOrder with the returned data.id.
# createOrder
`POST /api/v2/public/valuation/order`
Requests a full valuation (`FULL`) or a loan quote (`LOAN`) for a property the user owns.
**Auth:** `X-API-KEY: <your key>` header
**Use when:** The property exists and the user has asked for a valuation or a loan quote.
**Don't use when:** Placing a `FULL` order without explicit, specific approval from the user.
## Request body
Content type: `application/json`
| Field | Type | Required | Description |
|---|---|---|---|
| `propertyId` | integer | yes | Numeric id of the property (from the create-property step). Example: `123456`. |
| `orderType` | string | yes | Order type: FULL (detailed valuation) or LOAN (loan quote). Example: `FULL`. |
| `documentIds` | array of integer | no | Optional ids of documents uploaded to this property with `uploadDocument` (its `data.id`). |
| `cardToken` | string | no | Stripe card token (tok_.../pm_...) created client-side. Required for a FULL valuation ($350 charge); ignored for LOAN quotes. Example: `tok_visa`. |
## Notes for agents
- **`FULL` costs $350 and charges a card.** Before calling, tell the user the property, the order type and the $350 charge, and wait for a clear yes.
- `LOAN` quotes are free. `cardToken` is ignored for them.
- `cardToken` must be a Stripe token (`tok_...` or `pm_...`) created in the user's browser or app. Never invent one, and never ask the user to paste raw card numbers to you.
- `documentIds` come from `uploadDocument` on this same property.
- The response `data.id` is the request id. Check progress with `getOrder`, at most once a minute, until `status` is `COMPLETED` or `REJECTED`.
- A `402` means the card charge failed. Tell the user; do not retry with the same card token unless they ask.
## Example request
```bash
curl -X POST https://app.smartcapitalcenter.com/api/v2/public/valuation/order \
-H "X-API-KEY: $SCC_API_KEY" \
-H "Content-Type: application/json" \
-d '{"propertyId": 123456, "orderType": "LOAN", "documentIds": [9876]}'
```
## Response `200`
OK.
Standard envelope with `data` containing:
| Field | Type | Description |
|---|---|---|
| `id` | integer | Request id; use it with `getOrder`. |
| `propertyId` | integer | Numeric property id the request belongs to. |
| `loanDetailsId` | integer | — |
| `propertyType` | string | — |
| `propertyName` | string | — |
| `address` | string | — |
| `countyId` | string | — |
| `parcelId` | string | — |
| `documents` | array | — |
| `documents[].id` | integer | — |
| `documents[].type` | string | Enum, see document types. |
| `documents[].name` | string | — |
| `documents[].fileName` | string | — |
| `documents[].documentStatus` | string | — |
| `documents[].documentStatusLabel` | string | — |
| `documents[].rrId` | integer | — |
| `documents[].osId` | integer | — |
| `documents[].documentDate` | string | — |
| `requesterId` | integer | — |
| `requesterEmail` | string | — |
| `servicerId` | integer | — |
| `servicerEmail` | string | — |
| `type` | string | Request type: `VALUATION` (detailed valuation, orderType FULL) or `LOAN` (loan quote). |
| `typeLabel` | string | Human-readable request type. |
| `status` | string | Processing status: `REQUEST_STARTED`, `REQUEST_SUBMITTED`, `REQUEST_APPROVED`, `WAITING_STANDARDIZATION`, `STANDARDIZED_NOT_REVIEWED`, `IN_PROGRESS_BY_SC`, `IN_PROGRESS_BY_USER`, `REQUEST_INFO`, `COMPLETED` or `REJECTED`. `COMPLETED` and `REJECTED` are final. |
| `statusLabel` | string | Human-readable status. |
| `createdAtTimestamp` | string | — |
| `updatedAtTimestamp` | string | — |
| `completedAtTimestamp` | string | Set once the request is `COMPLETED`. |
| `message` | string | Message from the analyst, if any. |
| `emailNotificationSentAt` | integer | — |
## Errors
| Code | Meaning |
|---|---|
| 400 | Validation error, or `cardToken` missing for a `FULL` valuation |
| 402 | Card charge failed |
| 404 | Property not found or not owned by the caller |
**Next:** `getOrder` with the returned `data.id`.