<!-- https://staircase.co/products/assessment/property -->
# Property

# Property

The canonical property record at parcel level: address, structure, lot and land use, read by every other collateral product.

One parcel, one record. Address, the structure on it, the lot beneath it, and the recorded land use — assembled from the assessor's own record rather than from a listing.

Every other collateral product reads from it. Valuation, appraisal intake and tax all address the same parcel identity, so a correction made once is a correction everywhere.

## How it works

Assessor records are the source because listing fields are entered by agents, are inconsistent between markets, and do not exist at all for a property that has never been listed. A model trained on self-reported characteristics inherits every one of those errors.

The property model documented under Data is the later and larger expression of the same idea, built for jurisdiction-scale extraction rather than for a single loan file.

## Operations

<!--source:api-specifications-->

### Workflow
<!--/source-->

`POST` `/transactions`

<!--source:api-specifications-->

#### Create Transaction
<!--/source-->

`createTransaction`

<!--source:api-specifications-->
Create empty transaction You can subscribe to every changes inside transaction by providing `callback_url` in body, and you will receive `POST` request to this url, with your `x-api-key` in headers. If you respond with a non `2XX` status code or not within 6 sec, requests will be retried during 5 minutes every 2 seconds, you can indicate if you already processed that event, but for some reasons respond with non `2XX` code by `id` parameter. `type` parameter indicates type of the event.

Show the rest

| Event type | Description |
| --- | --- |
| co.staircase.persistence.collection_created | New collection was created |
| co.staircase.persistence.collection_data_inserted | Data was added to collection |
| co.staircase.persistence.collection_metadata_updated | Metadata of collection was updated |
| co.staircase.persistence.collection_updated | Both metadata and data of collection was updated |
| Event structure is cloudevents, so you can use any tools that supports it or SDK ```json json_schema |  |
| { |  |
| "type": "object", |  |
| "$schema": "", |  |
| "properties": { |  |
| "specversion": { |  |
| "type": "string", |  |
| "description": "Version of cloudevents event structure" |  |
| }, |  |
| "id": { |  |
| "type": "string", |  |
| "description": "Unique identifier of the event, for retired requests will always be the same" |  |
| }, |  |
| "source": { |  |
| "type": "string", |  |
| "description": "Source of the event, for Persistence it will always be co.staircase.persistence", |  |
| "const": "persistence" |  |
| }, |  |
| "type": { |  |
| "type": "string", |  |
| "description": "Name of the event, that indicates, what happened", |  |
| "enum": [ |  |
| "co.staircase.persistence.collection_created", |  |
| "co.staircase.persistence.collection_data_inserted", |  |
| "co.staircase.persistence.collection_metadata_updated", |  |
| "co.staircase.persistence.collection_updated" |  |
| ] |  |
| }, |  |
| "time": { |  |
| "type": "string", |  |
| "format": "date-time", |  |
| "description": "Timestamp of when the occurrence happened." |  |
| }, |  |
| "data": { |  |
| "type": "object", |  |
| "properties": { |  |
| "transaction_id": { |  |
| "type": "string", |  |
| "format": "ulid", |  |
| "description": "Transaction id" |  |
| }, |  |
| "collection_id": { |  |
| "type": "string", |  |
| "format": "ulid", |  |
| "description": "Collection id" |  |
| }, |  |
| "collection": { |  |
| "type": "object", |  |
| "description": "Collection itself" |  |
| } |  |
| } |  |
| } |  |
| } |  |
| } |  |
| ``` You can assign label to transaction by providing `label` field. To search for transaction using label you should use Retrieve List of Transactions endpoint |  |

<!--/source-->

##### Request

<!--source:api-specifications-->
application/json Copy
```
{
 "label": "first_transaction",
 "callback_url": "https://webhook.site/0c1c4e00-79d9-490b-a0f3-bab8b12a61d5"
}
```

<!--/source-->

##### Response

<!--source:api-specifications-->
201403500
<!--/source-->

<!--source:api-specifications-->
application/json Copy Transaction created successfully

```
{
 "transaction_id": "01F0KHK7DN3H5JZ4QJKMYAM6GB",
 "created_at": "03/04/2021, 1:04:05 PM EST"
}
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy 403 invalid error

```
{
 "message": "Please check the key you used to call this service",
 "url": "https://api.staircase.co/docs/api-reference/customer-account-manager-service.yml/paths/~1products~1refresh/post"
}
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy Internal server error

```
{
 "message": "The product has encountered an internal server error. If you have used a transaction_id to call our services, please submit it to Staircase support"
}
```

<!--/source-->

##### Parameters

<!--source:api-specifications-->
1
<!--/source-->

| Parameter | Type | Example | Description |
| --- | --- | --- | --- |
| `x-api-key` required | `string` header | `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx` | <!--source:api-specifications-->Environment API Key.<!--/source--> |

##### Request body`application/json`

<!--source:api-specifications-->
2 fields
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `callback_url` | `string (url)` | <!--source:api-specifications-->URL for receiving events about changes inside transaction<!--/source--> |
| `label` | `string` | <!--source:api-specifications-->Transaction label<!--/source--> |

##### Response `201``application/json`

<!--source:api-specifications-->
2 fields
<!--/source-->
<!--source:api-specifications-->
Transaction created successfully
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `transaction_id` | `string (ulid)` | <!--source:api-specifications-->Staircase Transaction Identifier<!--/source-->Example `01F0KHK7DN3H5JZ4QJKMYAM6GB` |
| `created_at` | `string` | <!--source:api-specifications-->Staircase time string.<!--/source-->Example `03/03/2021, 8:24:04 AM EST` |

##### Response `403``application/json`

<!--source:api-specifications-->
2 fields
<!--/source-->
<!--source:api-specifications-->
403 invalid error
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `message` | `string` | <!--source:api-specifications-->Error message.<!--/source--> |
| `url` | `string` | <!--source:api-specifications-->Error additional URL.<!--/source--> |

##### Response `500``application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->
<!--source:api-specifications-->
Internal server error
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `message` | `string` | <!--source:api-specifications-->Error message.<!--/source--> |

##### Other responses

`400`

`POST` `/transactions/{transaction_id}/collections`

<!--source:api-specifications-->

#### Create Collection
<!--/source-->

`createCollection`

<!--source:api-specifications-->
Create Collection creates a collection of data points required for product invocation. A collection contains a digital representation of the input or output data for the product and is identified by `collection_id`.

The Example below contains a sample collection that you can use to make the product invocation in /get-collection

<!--/source-->

##### Request

<!--source:api-specifications-->
application/json Copy
```
{
 "addresses": [
 {
 "@id": "",
 "@type": "residential_address",
 "has_address_line_1_text": {
 "has_value": "123 Main St"
 },
 "has_city_name": {
 "has_value": "New York"
 },
 "has_postal_code": {
 "has_value": "94132"
 },
 "has_state_code": {
 "has_value": "CA"
 }
 }
 ]
}
```

<!--/source-->

##### Response

<!--source:api-specifications-->
201400 CreateCollectionError400 text/html403404 CreateCollectionError404 text/html500
<!--/source-->

<!--source:api-specifications-->
application/json Copy Collection created successfully

```
{
 "avms": [
 {
 "@type": "avm",
 "@id": "01GC7ZR8FFANRJS8AJACQK1SP3",
 "has_avm_high_value_range_amount": {
 "has_value": 265035
 },
 "has_avm_low_value_range_amount": {
 "has_value": 213887
 },
 "has_avm_value_amount": {
 "has_value": 239461
 },
 "has_forecast_standard_deviation_score_value": {
 "has_value": "0.1067982"
 }
 }
 ]
}
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy Error

```
{
 "message": "Unable to create collection. Please check the collection data"
}
```

<!--/source-->

<!--source:api-specifications-->
text/html Copy Error

```
<html>\r\n<head><title>400 Bad Request</title></head>\r\n<body>\r\n<center><h1>400 Bad Request</h1></center>\r\n</body>\r\n</html>\r\n
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy 403 invalid error

```
{
 "message": "Please check the key you used to call this service",
 "url": "https://api.staircase.co/docs/api-reference/customer-account-manager-service.yml/paths/~1products~1refresh/post"
}
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy Resource not found

```
{
 "message": "Unable to create collection. Please check the transaction ID."
}
```

<!--/source-->

<!--source:api-specifications-->
text/html Copy Resource not found

```
<html>\r\n<head><title>400 Bad Request</title></head>\r\n<body>\r\n<center><h1>400 Bad Request</h1></center>\r\n</body>\r\n</html>\r\n
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy Internal server error

```
{
 "message": "The product has encountered an internal server error. If you have used a transaction_id to call our services, please submit it to Staircase support"
}
```

<!--/source-->

##### Parameters

<!--source:api-specifications-->
2
<!--/source-->

| Parameter | Type | Example | Description |
| --- | --- | --- | --- |
| `x-api-key` required | `string` header | `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx` | <!--source:api-specifications-->Environment API Key.<!--/source--> |
| `transaction_id` required | `string (ulid)` path | `01F0KHK7DN3H5JZ4QJKMYAM6GB` | <!--source:api-specifications-->Staircase Transaction Identifier<!--/source--> |

##### Response `400``application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->
<!--source:api-specifications-->
Error
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `message` | `one of` | <!--source:api-specifications-->Either message object with more properties.<!--/source--> |

##### Response `403``application/json`

<!--source:api-specifications-->
2 fields
<!--/source-->
<!--source:api-specifications-->
403 invalid error
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `message` | `string` | <!--source:api-specifications-->Error message.<!--/source--> |
| `url` | `string` | <!--source:api-specifications-->Error additional URL.<!--/source--> |

##### Response `404``application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->
<!--source:api-specifications-->
Resource not found
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `message` | `string` | <!--source:api-specifications-->Message<!--/source--> |

##### Response `500``application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->
<!--source:api-specifications-->
Internal server error
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `message` | `string` | <!--source:api-specifications-->Error message.<!--/source--> |

##### Other responses

`201``405`

`GET` `/transactions/{transaction_id}/collections/{collection_id}`

<!--source:api-specifications-->

#### Retrieve Collection
<!--/source-->

`retrieveCollection`

<!--source:api-specifications-->
Retrieve Collection returns the content of a given `collection_id` associated with a `transaction_id`.

<!--/source-->

##### Response

<!--source:api-specifications-->
200 StaircaseGraphRequestExample0200 StaircaseGraphResponseExample0403404 GetCollectionError404 GetCollectionsError500
<!--/source-->

<!--source:api-specifications-->
application/json Copy Successfully Retrieved Collection

```
{
 "addresses": [
 {
 "@id": "",
 "@type": "residential_address",
 "has_address_line_1_text": {
 "has_value": "123 Main St"
 },
 "has_city_name": {
 "has_value": "New York"
 },
 "has_postal_code": {
 "has_value": "94132"
 },
 "has_state_code": {
 "has_value": "CA"
 }
 }
 ]
}
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy Successfully Retrieved Collection

```
{
 "avms": [
 {
 "@type": "avm",
 "@id": "01GC7ZR8FFANRJS8AJACQK1SP3",
 "has_avm_high_value_range_amount": {
 "has_value": 265035
 },
 "has_avm_low_value_range_amount": {
 "has_value": 213887
 },
 "has_avm_value_amount": {
 "has_value": 239461
 },
 "has_forecast_standard_deviation_score_value": {
 "has_value": "0.1067982"
 }
 }
 ]
}
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy 403 invalid error

```
{
 "message": "Please check the key you used to call this service",
 "url": "https://api.staircase.co/docs/api-reference/customer-account-manager-service.yml/paths/~1products~1refresh/post"
}
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy Resource not found

```
{
 "message": "Unable to get collection. Please check the given ids"
}
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy Resource not found

```
{
 "message": "Unable to get collections of given transaction. Please check the transaction id"
}
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy Internal server error

```
{
 "message": "The product has encountered an internal server error. If you have used a transaction_id to call our services, please submit it to Staircase support"
}
```

<!--/source-->

##### Parameters

<!--source:api-specifications-->
3
<!--/source-->

| Parameter | Type | Example | Description |
| --- | --- | --- | --- |
| `x-api-key` required | `string` header | `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx` | <!--source:api-specifications-->Environment API Key.<!--/source--> |
| `transaction_id` required | `string (ulid)` path | `01F0KHK7DN3H5JZ4QJKMYAM6GB` | <!--source:api-specifications-->Staircase Transaction Identifier<!--/source--> |
| `collection_id` required | `string (ulid)` path | `01F0KHKADN0HRFXMCQQXPA6AFZ` | <!--source:api-specifications-->Staircase collection_id<!--/source--> |

##### Response `403``application/json`

<!--source:api-specifications-->
2 fields
<!--/source-->
<!--source:api-specifications-->
403 invalid error
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `message` | `string` | <!--source:api-specifications-->Error message.<!--/source--> |
| `url` | `string` | <!--source:api-specifications-->Error additional URL.<!--/source--> |

##### Response `404``application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->
<!--source:api-specifications-->
Resource not found
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `message` | `string` | <!--source:api-specifications-->Message<!--/source--> |

##### Response `500``application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->
<!--source:api-specifications-->
Internal server error
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `message` | `string` | <!--source:api-specifications-->Error message.<!--/source--> |

##### Other responses

`200``400`

`POST` `/value`

<!--source:api-specifications-->

#### Valuate Collateral
<!--/source-->

`invokeProductFlow`

<!--source:api-specifications-->
Invoke Product
<!--/source-->

<!--source:api-specifications-->
Valuate Collateral invokes a partner to provide automated valuation modeling for a property. To invoke Valuate Collateral, you will need:

- a transaction_id/createTransaction), and
- a collection_id/createCollection). Once you have a transaction_id and collection_id, you can send them, along with your Authorization Key (api_key), to as many partners as you want. Simply invoke Valuate Collateral with the same transaction_id and collection_id, but with different partner names. The partner_name parameter is optional. You can retrieve partner_name information by querying the /partners endpoint. Doing so enables you to get automated valuation modeling results from multiple partners, and to see which one provides the optimal response. Valuate Collateral returns, as a synchronous acknowledgement, a new collection_id. The new collection_id represents an empty container which will hold the partner's response once processing has completed.

<!--/source-->

##### Request

<!--source:api-specifications-->
InvokeByFlowNameInvokeByTagsInvokeWithRequestDataInvokeWithFlowOptionsCollectionsInvokeWithFlowOptionsRequestDataInvokeByFlowNameOptionsInvokeByVendorNameOptionsInvokeWaterfall
<!--/source-->

<!--source:api-specifications-->
application/json Copy
```
{
 "product_flow_name": "housecanary",
 "transaction_id": "01F6NAMXWN2XVBD1YJ92A6S6R4",
 "response_collection_id": "01F6NAQ4894HPMCBGB4P0G95XK",
 "request_collection_id": "01F6QF1QJF20DMSXH4SYXKB1SN",
 "callback_url": "https://webhook.site/3706b519-9426-4533-9868-14a7dec4fd97",
 "request_data": {}
}
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy
```
{
 "transaction_id": "01F6NAMXWN2XVBD1YJ92A6S6R4",
 "response_collection_id": "01F6NAQ4894HPMCBGB4P0G95XK",
 "request_collection_id": "01F6QF1QJF20DMSXH4SYXKB1SN",
 "callback_url": "https://webhook.site/3706b519-9426-4533-9868-14a7dec4fd97",
 "tags": [
 "manual_verification"
 ]
}
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy
```
{
 "product_flow_name": "get-document-from-byte",
 "transaction_id": "01F6NAMXWN2XVBD1YJ92A6S6R4",
 "response_collection_id": "01F6NAQ4894HPMCBGB4P0G95XK",
 "callback_url": "https://webhook.site/3706b519-9426-4533-9868-14a7dec4fd97",
 "request_data": {
 "deal_sets": {
 "deal_set": [
 {
 "deals": {
 "deal": [
 {
 "parties": {
 "party": [
 {
 "individual": {
 "name": {
 "first": "Thomas",
 "last": "Alex"
 }
 },
 "taxpayer_identifiers": {
 "taxpayer_identifier": [
 {
 "value": "12345"
 }
 ]
 },
 "roles": {
 "role": [
 {
 "borrower": {
 "residences": {
 "residence": [
 {
 "address": {
 "line_text": "street 101",
 "city": "example city",
 "state": "state",
 "postal_code": "1234",
 "street_name": "street 23"
 }
 }
 ]
 }
 }
 }
 ]
 }
 }
 ]
 }
 }
 ]
 }
 }
 ]
 }
 }
}
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy
```
{
 "transaction_id": "01F6NAMXWN2XVBD1YJ92A6S6R4",
 "response_collection_id": "01F6NAQ4894HPMCBGB4P0G95XK",
 "request_collection_id": "01F6QF1QJF20DMSXH4SYXKB1SN",
 "callback_url": "https://webhook.site/3706b519-9426-4533-9868-14a7dec4fd97",
 "tags": [
 "manual_verification"
 ],
 "options": {
 "option1": "test_option"
 }
}
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy
```
{
 "transaction_id": "01F6NAMXWN2XVBD1YJ92A6S6R4",
 "response_collection_id": "01F6NAQ4894HPMCBGB4P0G95XK",
 "callback_url": "https://webhook.site/3706b519-9426-4533-9868-14a7dec4fd97",
 "request_data": {
 "deal_sets": {
 "deal_set": [
 {
 "deals": {
 "deal": [
 {
 "parties": {
 "party": [
 {
 "individual": {
 "name": {
 "first": "Thomas",
 "last": "Alex"
 }
 },
 "taxpayer_identifiers": {
 "taxpayer_identifier": [
 {
 "value": "12345"
 }
 ]
 },
 "roles": {
 "role": [
 {
 "borrower": {
 "residences": {
 "residence": [
 {
 "address": {
 "line_text": "street 101",
 "city": "example city",
 "state": "state",
 "postal_code": "1234",
 "street_name": "street 23"
 }
 }
 ]
 }
 }
 }
 ]
 }
 }
 ]
 }
 }
 ]
 }
 }
 ]
 }
 },
 "tags": [
 "manual_verification"
 ],
 "options": {
 "option1": "test_option"
 }
}
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy
```
{
 "product_flow_name": "get-document-from-byte",
 "transaction_id": "01F6NAMXWN2XVBD1YJ92A6S6R4",
 "request_collection_id": "01F6QF1QJF20DMSXH4SYXKB1SN",
 "response_collection_id": "01F6NAQ4894HPMCBGB4P0G95XK",
 "callback_url": "https://webhook.site/3706b519-9426-4533-9868-14a7dec4fd97",
 "options": {
 "option1": "test_option"
 }
}
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy
```
{
 "vendor_name": "Vendor_name_example",
 "transaction_id": "01F6NAMXWN2XVBD1YJ92A6S6R4",
 "request_collection_id": "01F6QF1QJF20DMSXH4SYXKB1SN",
 "response_collection_id": "01F6NAQ4894HPMCBGB4P0G95XK",
 "callback_url": "https://webhook.site/3706b519-9426-4533-9868-14a7dec4fd97",
 "options": {
 "option1": "test_option"
 }
}
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy
```
{
 "transaction_id": "01F6NAMXWN2XVBD1YJ92A6S6R4",
 "request_collection_id": "01F6QF1QJF20DMSXH4SYXKB1SN",
 "response_collection_id": "01F6NAQ4894HPMCBGB4P0G95XK",
 "callback_url": "https://webhook.site/3706b519-9426-4533-9868-14a7dec4fd97",
 "invocation_mode": "waterfall"
}
```

<!--/source-->

##### Response

<!--source:api-specifications-->
201400403404422500
<!--/source-->

<!--source:api-specifications-->
application/json Copy Successfully started flow invocation.

```
{
 "invocation_id": "9aefb465-90fb-4d50-8ae6-2df2b58373f4",
 "invocation_status": "STARTED",
 "product_flow_name": "product_flow_name_example",
 "transaction_id": "01F6NAMXWN2XVBD1YJ92A6S6R4",
 "request_collection_id": "01F6NAQ4894HPMCBGB4P0G95XK",
 "response_collection_id": "01F6NAQ4894HPMCBGB4P0G78HG",
 "options": {
 "dry_run": false
 },
 "tags": [
 "manual verification"
 ]
}
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy Request data failed validation

```
{
 "message": "{\"data\": [\"Missing data for required field.\"]}"
}
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy 403 invalid error

```
{
 "message": "Please check the key you used to call this service",
 "url": "https://api.staircase.co/docs/api-reference/customer-account-manager-service.yml/paths/~1products~1refresh/post"
}
```

<!--/source-->

<!--source:api-specifications-->
text/html Copy Resource not found

```
<html>\r\n<head><title>400 Bad Request</title></head>\r\n<body>\r\n<center><h1>400 Bad Request</h1></center>\r\n</body>\r\n</html>\r\n
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy Unprocessable entity error

```
{
 "message": "The product has encountered an internal server error. If you have used a transaction_id to call our services, please submit it to Staircase support"
}
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy Internal server error

```
{
 "message": "The product has encountered an internal server error. If you have used a transaction_id to call our services, please submit it to Staircase support"
}
```

<!--/source-->

##### Parameters

<!--source:api-specifications-->
1
<!--/source-->

| Parameter | Type | Example | Description |
| --- | --- | --- | --- |
| `x-api-key` required | `string` header | `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx` | <!--source:api-specifications-->Environment API Key.<!--/source--> |

##### Request body`application/json`

<!--source:api-specifications-->
10 fields
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `product_flow_name` | `string` | <!--source:api-specifications-->Product flow name. If it is not specified, the default product flow will be invoked. If the product has no default product flow, the first created flow will be invoked. Cannot be specified together with vendor_name.<!--/source--> |
| `vendor_name` | `string` | <!--source:api-specifications-->Vendor name. Cannot be specified together with product_flow_name.<!--/source--> |
| `transaction_id` | `string` | <!--source:api-specifications-->Transaction ID used for invocation.<!--/source--> |
| `request_collection_id` | `string` | <!--source:api-specifications-->Request Collection ID.<!--/source--> |
| `response_collection_id` | `string` | <!--source:api-specifications-->Response Collection ID.<!--/source--> |
| `callback_url` | `string (uri)` | <!--source:api-specifications-->Callback URL.<!--/source--> |
| `request_data` | `object` | <!--source:api-specifications-->Request JSON body.<!--/source--> |
| `tags` | `string[]` | <!--source:api-specifications-->List of tags.<!--/source--> |
| `options` | `object` | <!--source:api-specifications-->Additional information that should be passed to the connector but not be added to the request collection.<!--/source--> |
| `invocation_mode` | `string` | <!--source:api-specifications-->The invocation mode of a product flow single_flow or waterfall, default value single_flow<!--/source--> |

##### Response `201``application/json`

<!--source:api-specifications-->
12 fields
<!--/source-->
<!--source:api-specifications-->
Successfully started flow invocation.
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `invocation_id`required | `string` | <!--source:api-specifications-->Invocation ID.<!--/source--> |
| `invocation_status`required | `string` | <!--source:api-specifications-->The status of the invocation.<!--/source-->`STARTED` |
| `transaction_id`required | `string` | <!--source:api-specifications-->Transaction ID.<!--/source--> |
| `request_collection_id`required | `string` | <!--source:api-specifications-->Request collection ID.<!--/source--> |
| `response_collection_id`required | `string` | <!--source:api-specifications-->Response collection ID.<!--/source--> |
| `product_flow_name` | `string` | <!--source:api-specifications-->Product flow name.<!--/source--> |
| `metadata` | `object` | <!--source:api-specifications-->The metadata of the invoked product flow.<!--/source--> |
| `callback_url` | `string` | <!--source:api-specifications-->Callback URL.<!--/source--> |
| `request_data` | `object` | <!--source:api-specifications-->The data for the request collection.<!--/source--> |
| `tags` | `string[]` | <!--source:api-specifications-->List of tags.<!--/source--> |
| `options` | `object` | <!--source:api-specifications-->Additional information that should be passed to the connector but not be added to the request collection.<!--/source--> |
| `widget_url` | `object` | <!--source:api-specifications-->Product widget_url listening on the connector widget_url<!--/source--> |

##### Response `400``application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->
<!--source:api-specifications-->
Request data failed validation
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `message` | `one of` | <!--source:api-specifications-->Message<!--/source--> |

##### Response `403``application/json`

<!--source:api-specifications-->
2 fields
<!--/source-->
<!--source:api-specifications-->
403 invalid error
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `message` | `string` | <!--source:api-specifications-->Error message.<!--/source--> |
| `url` | `string` | <!--source:api-specifications-->Error additional URL.<!--/source--> |

##### Response `404``application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->
<!--source:api-specifications-->
Resource not found
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `message` | `string` | <!--source:api-specifications-->Message<!--/source--> |

##### Response `422``application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->
<!--source:api-specifications-->
Unprocessable entity error
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `message` | `string` | <!--source:api-specifications-->Error Message.<!--/source--> |

##### Response `500``application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->
<!--source:api-specifications-->
Internal server error
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `message` | `string` | <!--source:api-specifications-->Error message.<!--/source--> |

<!--source:api-specifications-->

### Platform
<!--/source-->

`GET` `/transactions/{transaction_id}/collections`

<!--source:api-specifications-->

#### Retrieve Transaction Collections
<!--/source-->

`RetrieveTransactionCollections`

<!--source:api-specifications-->
Retrieve Transaction Collections. Collections can be filtered by collection_id or created_at fields. Supported operations per fields:

- collection_id:
- in:
- description: Get only collections with specified ids
- example: collection_id+in+01EZQ32PJQGKRA6HR8D72Q9FFF,01EZQ32NZ34WACWSAF54WGEM51
- created_at:
- gt:
- description: Get collections that were created after specified datetime in ISO format
- example: created_at+gt+2021-03-30T04:27:15.372006-04:00
- lt:
- description: Get collections that were created before specified datetime in ISO format
- example: created_at+lt+2021-03-30T04:27:15.372006-04:00

<!--/source-->

##### Response

<!--source:api-specifications-->
200 StaircaseGraphResponseExample0200 StaircaseGraphRequestExample0400403404500
<!--/source-->

<!--source:api-specifications-->
application/json Copy Transaction collection retrieved successfully

```
{
 "avms": [
 {
 "@type": "avm",
 "@id": "01GC7ZR8FFANRJS8AJACQK1SP3",
 "has_avm_high_value_range_amount": {
 "has_value": 265035
 },
 "has_avm_low_value_range_amount": {
 "has_value": 213887
 },
 "has_avm_value_amount": {
 "has_value": 239461
 },
 "has_forecast_standard_deviation_score_value": {
 "has_value": "0.1067982"
 }
 }
 ]
}
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy Transaction collection retrieved successfully

```
{
 "addresses": [
 {
 "@id": "",
 "@type": "residential_address",
 "has_address_line_1_text": {
 "has_value": "123 Main St"
 },
 "has_city_name": {
 "has_value": "New York"
 },
 "has_postal_code": {
 "has_value": "94132"
 },
 "has_state_code": {
 "has_value": "CA"
 }
 }
 ]
}
```

<!--/source-->

<!--source:api-specifications-->
text/html Copy Error

```
<html>\r\n<head><title>400 Bad Request</title></head>\r\n<body>\r\n<center><h1>400 Bad Request</h1></center>\r\n</body>\r\n</html>\r\n
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy 403 invalid error

```
{
 "message": "Please check the key you used to call this service",
 "url": "https://api.staircase.co/docs/api-reference/customer-account-manager-service.yml/paths/~1products~1refresh/post"
}
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy Resource not found

```
{
 "message": "Unable to get collections of given transaction. Please check the transaction id"
}
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy Internal server error

```
{
 "message": "The product has encountered an internal server error. If you have used a transaction_id to call our services, please submit it to Staircase support"
}
```

<!--/source-->

##### Parameters

<!--source:api-specifications-->
2
<!--/source-->

| Parameter | Type | Example | Description |
| --- | --- | --- | --- |
| `x-api-key` required | `string` header | `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx` | <!--source:api-specifications-->Environment API Key.<!--/source--> |
| `transaction_id` required | `string (ulid)` path | `01F0KHK7DN3H5JZ4QJKMYAM6GB` | <!--source:api-specifications-->Staircase Transaction Identifier<!--/source--> |

##### Response `400``application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->
<!--source:api-specifications-->
Error
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `message` | `one of` | <!--source:api-specifications-->Either message object with more properties.<!--/source--> |

##### Response `403``application/json`

<!--source:api-specifications-->
2 fields
<!--/source-->
<!--source:api-specifications-->
403 invalid error
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `message` | `string` | <!--source:api-specifications-->Error message.<!--/source--> |
| `url` | `string` | <!--source:api-specifications-->Error additional URL.<!--/source--> |

##### Response `404``application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->
<!--source:api-specifications-->
Resource not found
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `message` | `string` | <!--source:api-specifications-->Message<!--/source--> |

##### Response `500``application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->
<!--source:api-specifications-->
Internal server error
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `message` | `string` | <!--source:api-specifications-->Error message.<!--/source--> |

##### Other responses

`200`

`GET` `/partners`

<!--source:api-specifications-->

#### Retrieve Partners
<!--/source-->

`getVendors`

<!--source:api-specifications-->
Retrieve Product Partners
<!--/source-->

<!--source:api-specifications-->
Retrieve Partners retrieves: -All the Partners (vendors) configured in the Product Flows configurations. -The Order of the partner in the Product Waterfall Settings or default order in Product Flows if Product Waterfall was not configured. -The status of the partners as active/upcoming according to the configurations of the product flows of these partners (partner will be active if at least one flow is active).

<!--/source-->

##### Response

<!--source:api-specifications-->
200 Example1200 Example2400403404 GetProduct404 text/html500
<!--/source-->

<!--source:api-specifications-->
application/json Copy Successfully retrieved product partners.

```
[
 {
 "Partner": "partner_name",
 "order": 1,
 "active": true,
 "status": "active",
 "verification_type": "borrower",
 "byoc": true
 }
]
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy Successfully retrieved product partners.

```
[
 {
 "Partner": "partner_name",
 "order": 1,
 "active": false,
 "status": "upcoming",
 "verification_type": "borrower",
 "byoc": true
 }
]
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy Validation Error

```
{
 "message": "3 is not of type ```string```. Failed validating ```type``` in schema[\"properties\"][\"deal_sets\"][\"items\"][0][\"properties\"][\"parties\"][\"items\"][0][\"properties\"][\"customer_transaction_ID\"]:"
}
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy 403 invalid error

```
{
 "message": "Please check the key you used to call this service",
 "url": "https://api.staircase.co/docs/api-reference/customer-account-manager-service.yml/paths/~1products~1refresh/post"
}
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy Resource not found

```
{
 "type": "string",
 "description": "Error Message."
}
```

<!--/source-->

<!--source:api-specifications-->
text/html Copy Resource not found

```
<html>\r\n<head><title>400 Bad Request</title></head>\r\n<body>\r\n<center><h1>400 Bad Request</h1></center>\r\n</body>\r\n</html>\r\n
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy Internal server error

```
{
 "message": "The product has encountered an internal server error. If you have used a transaction_id to call our services, please submit it to Staircase support"
}
```

<!--/source-->

##### Parameters

<!--source:api-specifications-->
2
<!--/source-->

| Parameter | Type | Example | Description |
| --- | --- | --- | --- |
| `x-api-key` required | `string` header | `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx` | <!--source:api-specifications-->Environment API Key.<!--/source--> |
| `active` | `boolean` query | `false` | <!--source:api-specifications-->Include vendors with active product flows<!--/source--> |

##### Response `200``application/json`

<!--source:api-specifications-->
6 fields
<!--/source-->
<!--source:api-specifications-->
Successfully retrieved product partners.
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `partner` | `string` | <!--source:api-specifications-->Partner name<!--/source--> |
| `order` | `number` | <!--source:api-specifications-->Order of the product flows associated with this partner<!--/source--> |
| `active` | `boolean` | <!--source:api-specifications-->Partner has active flows<!--/source--> |
| `status` | `string` | <!--source:api-specifications-->Status of the partner<!--/source--> |
| `verification_type` | `string` | <!--source:api-specifications-->Type of verification<!--/source--> |
| `byoc` | `boolean` | <!--source:api-specifications-->Specify whether customer should add its own partner credentials or not<!--/source--> |

##### Response `400``application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->
<!--source:api-specifications-->
Validation Error
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `message` | `one of` | <!--source:api-specifications-->Message<!--/source--> |

##### Response `403``application/json`

<!--source:api-specifications-->
2 fields
<!--/source-->
<!--source:api-specifications-->
403 invalid error
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `message` | `string` | <!--source:api-specifications-->Error message.<!--/source--> |
| `url` | `string` | <!--source:api-specifications-->Error additional URL.<!--/source--> |

##### Response `404``application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->
<!--source:api-specifications-->
Resource not found
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `message` | `string` | <!--source:api-specifications-->Error Message.<!--/source--> |

##### Response `500``application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->
<!--source:api-specifications-->
Internal server error
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `message` | `string` | <!--source:api-specifications-->Error message.<!--/source--> |

`GET` `/schema/{data_object}`

<!--source:api-specifications-->

#### Retrieve Example Schema
<!--/source-->

`retrieveProductSchema`

<!--source:api-specifications-->
Retrieve Product Schema
<!--/source-->

<!--source:api-specifications-->
Retrieve Product Schema retrieves a JSON that provides schema and examples of the configured product. With Product Schema it is possible to have multiple examples and request, response and merged.

<!--/source-->

##### Response

<!--source:api-specifications-->
200 StaircaseGraphResponseExample0200 StaircaseGraphRequestExample0400 DataObjectNotProvided400 text/html403404 GetProduct404 text/html500
<!--/source-->

<!--source:api-specifications-->
application/json Copy Successfully returned the object requested

```
{
 "avms": [
 {
 "@type": "avm",
 "@id": "01GC7ZR8FFANRJS8AJACQK1SP3",
 "has_avm_high_value_range_amount": {
 "has_value": 265035
 },
 "has_avm_low_value_range_amount": {
 "has_value": 213887
 },
 "has_avm_value_amount": {
 "has_value": 239461
 },
 "has_forecast_standard_deviation_score_value": {
 "has_value": "0.1067982"
 }
 }
 ]
}
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy Successfully returned the object requested

```
{
 "addresses": [
 {
 "@id": "",
 "@type": "residential_address",
 "has_address_line_1_text": {
 "has_value": "123 Main St"
 },
 "has_city_name": {
 "has_value": "New York"
 },
 "has_postal_code": {
 "has_value": "94132"
 },
 "has_state_code": {
 "has_value": "CA"
 }
 }
 ]
}
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy Error

```
{
 "message": "data_object should be any of the following strings: request, response or merged."
}
```

<!--/source-->

<!--source:api-specifications-->
text/html Copy Error

```
<html>\r\n<head><title>400 Bad Request</title></head>\r\n<body>\r\n<center><h1>400 Bad Request</h1></center>\r\n</body>\r\n</html>\r\n
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy 403 invalid error

```
{
 "message": "Please check the key you used to call this service",
 "url": "https://api.staircase.co/docs/api-reference/customer-account-manager-service.yml/paths/~1products~1refresh/post"
}
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy Resource not found

```
{
 "type": "string",
 "description": "Error Message."
}
```

<!--/source-->

<!--source:api-specifications-->
text/html Copy Resource not found

```
<html>\r\n<head><title>400 Bad Request</title></head>\r\n<body>\r\n<center><h1>400 Bad Request</h1></center>\r\n</body>\r\n</html>\r\n
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy Internal server error

```
{
 "message": "The product has encountered an internal server error. If you have used a transaction_id to call our services, please submit it to Staircase support"
}
```

<!--/source-->

##### Parameters

<!--source:api-specifications-->
4
<!--/source-->

| Parameter | Type | Example | Description |
| --- | --- | --- | --- |
| `x-api-key` required | `string` header | `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx` | <!--source:api-specifications-->Environment API Key.<!--/source--> |
| `data_object` required | `string` path | `request` | <!--source:api-specifications-->Data Object<!--/source--> |
| `version` | `string` query | `v2` | <!--source:api-specifications-->If included restrict retrieval to the version specified<!--/source--> |
| `return_examples` | `boolean` query | `false` | <!--source:api-specifications-->If included and set to `true`, returns one or more examples. Default to `false`<!--/source--> |

##### Response `400``application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->
<!--source:api-specifications-->
Error
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `message` | `string` | <!--source:api-specifications-->Message<!--/source--> |

##### Response `403``application/json`

<!--source:api-specifications-->
2 fields
<!--/source-->
<!--source:api-specifications-->
403 invalid error
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `message` | `string` | <!--source:api-specifications-->Error message.<!--/source--> |
| `url` | `string` | <!--source:api-specifications-->Error additional URL.<!--/source--> |

##### Response `404``application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->
<!--source:api-specifications-->
Resource not found
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `message` | `string` | <!--source:api-specifications-->Error Message.<!--/source--> |

##### Response `500``application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->
<!--source:api-specifications-->
Internal server error
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `message` | `string` | <!--source:api-specifications-->Error message.<!--/source--> |

##### Other responses

`200`

<!--source:api-specifications-->

### Setup
<!--/source-->

`POST` `/housecanary/credentials`

<!--source:api-specifications-->

#### Set Housecanary Credentials
<!--/source-->

`setHousecanaryCredentials`

<!--source:api-specifications-->
This endpoint is used to set Housecanary Credentials. The payload passed is the username/password keys and values.

It is also possible to use Housecanary API Key as the username and API Secret as the password. See the request body examples.

<!--/source-->

##### Request

<!--source:api-specifications-->
SetUsernamePasswordExampleSetApiKeyAndSecretExample
<!--/source-->

<!--source:api-specifications-->
application/json Copy
```
{
 "username": "username",
 "password": "<redacted>"
}
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy
```
{
 "username": "api_key_value",
 "password": "<redacted>"
}
```

<!--/source-->

##### Response

<!--source:api-specifications-->
200400403422500
<!--/source-->

<!--source:api-specifications-->
application/json Copy Setup API Triggered Successfully

```
{
 "message": "Credentials are saved and verified"
}
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy Request data failed validation

```
{
 "message": "{'data': ['Missing data for required field.']}"
}
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy Invalid key for service

```
{
 "message": "Please check the key you used to call this service",
 "url": "https://staircase.stoplight.io/docs/api-reference/customer-account-manager-service.yml/paths/~1products~1refresh/post"
}
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy Request data failed validation

```
{
 "message": "Invalid request body",
 "error": "object has missing required properties"
}
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy The product has encountered an internal server error

```
{
 "message": "The product has encountered an internal server error"
}
```

<!--/source-->

##### Parameters

<!--source:api-specifications-->
1
<!--/source-->

| Parameter | Type | Example | Description |
| --- | --- | --- | --- |
| `x-api-key` required | `string` header | `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx` | <!--source:api-specifications-->Staircase Environment API Key<!--/source--> |

##### Request body`application/json`

<!--source:api-specifications-->
2 fields
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `username`required | `string` | <!--source:api-specifications-->Housecanary username<!--/source--> |
| `password`required | `string` | <!--source:api-specifications-->Housecanary password<!--/source--> |

##### Response `200``application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->
<!--source:api-specifications-->
Setup API Triggered Successfully
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `message` | `string` | <!--source:api-specifications-->Message<!--/source--> |

##### Response `400``application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->
<!--source:api-specifications-->
Request data failed validation
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `message` | `string` | <!--source:api-specifications-->Message<!--/source--> |

##### Response `403``application/json`

<!--source:api-specifications-->
2 fields
<!--/source-->
<!--source:api-specifications-->
Invalid key for service
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `message` | `string` | — |
| `url` | `string` | — |

##### Response `422``application/json`

<!--source:api-specifications-->
2 fields
<!--/source-->
<!--source:api-specifications-->
Request data failed validation
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `message` | `string` | <!--source:api-specifications-->Message<!--/source--> |
| `error` | `string` | <!--source:api-specifications-->Message<!--/source--> |

##### Response `500``application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->
<!--source:api-specifications-->
The product has encountered an internal server error
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `message` | `string` | <!--source:api-specifications-->Error Message<!--/source--> |

##### Other responses

`404`

## Errors

`400``403``404``405``422``500`

## More in Assessment

- Previous product: Listing
- Next product: Tax
