Skip to content
Staircase

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

Workflow

POST /transactions

Create Transaction

createTransaction

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
Request
application/json
{
  "label": "first_transaction",
  "callback_url": "https://webhook.site/0c1c4e00-79d9-490b-a0f3-bab8b12a61d5"
}
Response
application/json

Transaction created successfully

{
  "transaction_id": "01F0KHK7DN3H5JZ4QJKMYAM6GB",
  "created_at": "03/04/2021, 1:04:05 PM EST"
}
Parameters
1
ParameterTypeExampleDescription
x-api-key required string header xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Environment API Key.
Request bodyapplication/json
2 fields
FieldTypeDescription
callback_urlstring (url)URL for receiving events about changes inside transaction
labelstringTransaction label
Response 201application/json
2 fields

Transaction created successfully

FieldTypeDescription
transaction_idstring (ulid)Staircase Transaction IdentifierExample 01F0KHK7DN3H5JZ4QJKMYAM6GB
created_atstringStaircase time string.Example 03/03/2021, 8:24:04 AM EST
Response 403application/json
2 fields

403 invalid error

FieldTypeDescription
messagestringError message.
urlstringError additional URL.
Response 500application/json
1 fields

Internal server error

FieldTypeDescription
messagestringError message.
Other responses

400

POST /transactions/{transaction_id}/collections

Create Collection

createCollection

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

Request
application/json
{
  "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"
      }
    }
  ]
}
Response
application/json

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"
      }
    }
  ]
}
Parameters
2
ParameterTypeExampleDescription
x-api-key required string header xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Environment API Key.
transaction_id required string (ulid) path 01F0KHK7DN3H5JZ4QJKMYAM6GB Staircase Transaction Identifier
Response 400application/json
1 fields

Error

FieldTypeDescription
messageone ofEither message object with more properties.
Response 403application/json
2 fields

403 invalid error

FieldTypeDescription
messagestringError message.
urlstringError additional URL.
Response 404application/json
1 fields

Resource not found

FieldTypeDescription
messagestringMessage
Response 500application/json
1 fields

Internal server error

FieldTypeDescription
messagestringError message.
Other responses

201405

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

Retrieve Collection

retrieveCollection

Retrieve Collection returns the content of a given collection_id associated with a transaction_id.

Response
application/json

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"
      }
    }
  ]
}
Parameters
3
ParameterTypeExampleDescription
x-api-key required string header xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Environment API Key.
transaction_id required string (ulid) path 01F0KHK7DN3H5JZ4QJKMYAM6GB Staircase Transaction Identifier
collection_id required string (ulid) path 01F0KHKADN0HRFXMCQQXPA6AFZ Staircase collection_id
Response 403application/json
2 fields

403 invalid error

FieldTypeDescription
messagestringError message.
urlstringError additional URL.
Response 404application/json
1 fields

Resource not found

FieldTypeDescription
messagestringMessage
Response 500application/json
1 fields

Internal server error

FieldTypeDescription
messagestringError message.
Other responses

200400

POST /value

Valuate Collateral

invokeProductFlow

Invoke Product

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.
Request
application/json
{
  "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": {}
}
Response
application/json

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"
  ]
}
Parameters
1
ParameterTypeExampleDescription
x-api-key required string header xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Environment API Key.
Request bodyapplication/json
10 fields
FieldTypeDescription
product_flow_namestringProduct 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.
vendor_namestringVendor name. Cannot be specified together with product_flow_name.
transaction_idstringTransaction ID used for invocation.
request_collection_idstringRequest Collection ID.
response_collection_idstringResponse Collection ID.
callback_urlstring (uri)Callback URL.
request_dataobjectRequest JSON body.
tagsstring[]List of tags.
optionsobjectAdditional information that should be passed to the connector but not be added to the request collection.
invocation_modestringThe invocation mode of a product flow single_flow or waterfall, default value single_flow
Response 201application/json
12 fields

Successfully started flow invocation.

FieldTypeDescription
invocation_idrequiredstringInvocation ID.
invocation_statusrequiredstringThe status of the invocation.STARTED
transaction_idrequiredstringTransaction ID.
request_collection_idrequiredstringRequest collection ID.
response_collection_idrequiredstringResponse collection ID.
product_flow_namestringProduct flow name.
metadataobjectThe metadata of the invoked product flow.
callback_urlstringCallback URL.
request_dataobjectThe data for the request collection.
tagsstring[]List of tags.
optionsobjectAdditional information that should be passed to the connector but not be added to the request collection.
widget_urlobjectProduct widget_url listening on the connector widget_url
Response 400application/json
1 fields

Request data failed validation

FieldTypeDescription
messageone ofMessage
Response 403application/json
2 fields

403 invalid error

FieldTypeDescription
messagestringError message.
urlstringError additional URL.
Response 404application/json
1 fields

Resource not found

FieldTypeDescription
messagestringMessage
Response 422application/json
1 fields

Unprocessable entity error

FieldTypeDescription
messagestringError Message.
Response 500application/json
1 fields

Internal server error

FieldTypeDescription
messagestringError message.

Platform

GET /transactions/{transaction_id}/collections

Retrieve Transaction Collections

RetrieveTransactionCollections

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
Response
application/json

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"
      }
    }
  ]
}
Parameters
2
ParameterTypeExampleDescription
x-api-key required string header xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Environment API Key.
transaction_id required string (ulid) path 01F0KHK7DN3H5JZ4QJKMYAM6GB Staircase Transaction Identifier
Response 400application/json
1 fields

Error

FieldTypeDescription
messageone ofEither message object with more properties.
Response 403application/json
2 fields

403 invalid error

FieldTypeDescription
messagestringError message.
urlstringError additional URL.
Response 404application/json
1 fields

Resource not found

FieldTypeDescription
messagestringMessage
Response 500application/json
1 fields

Internal server error

FieldTypeDescription
messagestringError message.
Other responses

200

GET /partners

Retrieve Partners

getVendors

Retrieve Product Partners

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).

Response
application/json

Successfully retrieved product partners.

[
  {
    "Partner": "partner_name",
    "order": 1,
    "active": true,
    "status": "active",
    "verification_type": "borrower",
    "byoc": true
  }
]
Parameters
2
ParameterTypeExampleDescription
x-api-key required string header xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Environment API Key.
active boolean query false Include vendors with active product flows
Response 200application/json
6 fields

Successfully retrieved product partners.

FieldTypeDescription
partnerstringPartner name
ordernumberOrder of the product flows associated with this partner
activebooleanPartner has active flows
statusstringStatus of the partner
verification_typestringType of verification
byocbooleanSpecify whether customer should add its own partner credentials or not
Response 400application/json
1 fields

Validation Error

FieldTypeDescription
messageone ofMessage
Response 403application/json
2 fields

403 invalid error

FieldTypeDescription
messagestringError message.
urlstringError additional URL.
Response 404application/json
1 fields

Resource not found

FieldTypeDescription
messagestringError Message.
Response 500application/json
1 fields

Internal server error

FieldTypeDescription
messagestringError message.
GET /schema/{data_object}

Retrieve Example Schema

retrieveProductSchema

Retrieve Product Schema

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.

Response
application/json

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"
      }
    }
  ]
}
Parameters
4
ParameterTypeExampleDescription
x-api-key required string header xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Environment API Key.
data_object required string path request Data Object
version string query v2 If included restrict retrieval to the version specified
return_examples boolean query false If included and set to `true`, returns one or more examples. Default to `false`
Response 400application/json
1 fields

Error

FieldTypeDescription
messagestringMessage
Response 403application/json
2 fields

403 invalid error

FieldTypeDescription
messagestringError message.
urlstringError additional URL.
Response 404application/json
1 fields

Resource not found

FieldTypeDescription
messagestringError Message.
Response 500application/json
1 fields

Internal server error

FieldTypeDescription
messagestringError message.
Other responses

200

Setup

POST /housecanary/credentials

Set Housecanary Credentials

setHousecanaryCredentials

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.

Request
application/json
{
  "username": "username",
  "password": "<redacted>"
}
Response
application/json

Setup API Triggered Successfully

{
  "message": "Credentials are saved and verified"
}
Parameters
1
ParameterTypeExampleDescription
x-api-key required string header xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Staircase Environment API Key
Request bodyapplication/json
2 fields
FieldTypeDescription
usernamerequiredstringHousecanary username
passwordrequiredstringHousecanary password
Response 200application/json
1 fields

Setup API Triggered Successfully

FieldTypeDescription
messagestringMessage
Response 400application/json
1 fields

Request data failed validation

FieldTypeDescription
messagestringMessage
Response 403application/json
2 fields

Invalid key for service

FieldTypeDescription
messagestring
urlstring
Response 422application/json
2 fields

Request data failed validation

FieldTypeDescription
messagestringMessage
errorstringMessage
Response 500application/json
1 fields

The product has encountered an internal server error

FieldTypeDescription
messagestringError Message
Other responses

404

Errors

400403404405422500

Type to search.