One request that reaches both government-sponsored underwriting engines, with one canonical response and one error vocabulary.
A caller sends a loan file once. The product fans it out to Fannie Mae's Desktop Underwriter and Freddie Mac's Loan Product Advisor, and returns a canonical underwriting response — recommendation, eligibility, and the findings behind it.
The catalogue records twelve separate product APIs behind it, one per combination of purpose, agency programme and amortisation type: purchase and refinance, across conventional, FHA and VA, each fixed and adjustable.
How it works
The two agencies model the same loan differently, and the gap is measured rather than estimated: 378 elements on one side, 437 on the other, 258 in common. Everything outside that intersection is why a single canonical request needs a real translation layer rather than a field-rename table.
Validation rules are generated from the two agencies' own schemas rather than written by hand, and enumerations are taken as the intersection of both — so a value the canonical request accepts is a value both engines accept. Generating the rules is what keeps them correct when either agency revises its schema.
Errors are unified twice. Two agency error codes meaning the same thing are mapped to one code, and that code is then rendered against the caller's own field paths. A caller working in its own dialect receives a validation error naming its own fields, with no work on its side.
Findings come back as numbered messages. A separate service turns them into plain language and answers questions against them, which is the difference between handing an underwriter a list of codes and handing them a readable account of what the engine decided.
Operations
Verify
POST/products/eligibility-verify/invocations
Invoke Verification Flow
InvokeVerifyProductFlow
Invoke Product Flow
Starts a background job that validates the IDs retrieved from Third Party Service verification services, through GSEs.
Usage
Sending the Request
You can send a request in two different ways:
Using request_data: If you provide this parameter, flow invocation would use the data here as input. If you also provide a transaction_id in the request body, Response Collection would be created in the related Transaction object. If you don't provide a transaction_id we will automatically create a Transaction for you and Response Collection would be created in this new Transaction as well.
Using transaction_id and request_collection_id: If you already have a request collection, you can provide its details using these two parameters. Note that in this case Response Collection would be created in the provided Transaction.
Retrieving the Invocation Result
After invocation, endpoint returns an invocation_id which you can poll for its status using /products/eligibility-verify/invocations/{invocation_id} endpoint. Once the invocation is completed, the Response Collection is populated with these search results.
Show the rest
If you would rather receive a callback once the invocation is completed instead of polling it, you can set callback_url parameter in the request body.
{
"message": "{'data': ['Missing data for required field.']}"
}
application/json
403 invalid error
{
"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"
}
text/html
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
application/json
Internal server error
{
"message": "The product has encountered an internal server error. If you\nhave used a transaction_id to call our services, please submit it to\nStaircase support"
}
{
"message": "{'data': ['Missing data for required field.']}"
}
application/json
403 invalid error
{
"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"
}
text/html
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
application/json
Internal server error
{
"message": "The product has encountered an internal server error. If you\nhave used a transaction_id to call our services, please submit it to\nStaircase support"
}
Parameters
2
Parameter
Type
Example
Description
x-api-keyrequired
stringheader
—
Environment API Key.
invocation_idrequired
string (ulid)path
01F0KHKADN0HRFXMCQQXPA6AFZ
Product flow invocation identifier
Response 200application/json
9 fields
Successfully returned status of the flow Invocation.
{
"message": "Please provide one of valid return examples values:\ntrue, false"
}
text/html
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
application/json
403 invalid error
{
"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"
}
<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
application/json
Internal server error
{
"message": "The product has encountered an internal server error. If you\nhave used a transaction_id to call our services, please submit it to\nStaircase support"
}
Parameters
2
Parameter
Type
Description
x-api-keyrequired
stringheader
Environment API Key.
return_examples
booleanquery
If included and set to `true`, returns one or more pre-filled
examples that conform to the schema. Default to `false`
Response 200application/json
2 fields
Request schema (possibly with examples) is successfully returned.
Field
Type
Description
schemarequired
object
Schema for the Request Collection
examples
object
Each item in the dictionary corresponds to the name of the example and dictionary content is the
sample response.
Response 400application/json
1 fields
Error
Field
Type
Description
message
string
Message
Response 403application/json
2 fields
403 invalid error
Field
Type
Description
message
string
Error message.
url
string
Error additional URL.
Response 404application/json
1 fields
Resource not found
Field
Type
Description
message
string
Error Message.
Response 500application/json
1 fields
Internal server error
Field
Type
Description
message
string
Error message.
GET/products/eligibility-verify/response-schema
Retrieve Response Schema
retrieveResponseSchema
Retrieve Response Schema returns the JSON schema for the response collection, created by an invocation.
If you would like to retrieve examples along with the schema, you can provide return_examples=True query parameter.
Response
application/json
Response schema (possibly with examples) is successfully returned.
{
"schema": {
"type": "object"
}
}
application/json
Response schema (possibly with examples) is successfully returned.
{
"message": "Please provide one of valid return examples values:\ntrue, false"
}
text/html
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
application/json
403 invalid error
{
"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"
}
<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
application/json
Internal server error
{
"message": "The product has encountered an internal server error. If you\nhave used a transaction_id to call our services, please submit it to\nStaircase support"
}
Parameters
2
Parameter
Type
Description
x-api-keyrequired
stringheader
Environment API Key.
return_examples
booleanquery
If included and set to `true`, returns one or more pre-filled
examples that conform to the schema. Default to `false`
Response 200application/json
2 fields
Response schema (possibly with examples) is successfully returned.
Field
Type
Description
schemarequired
object
JSON-Schema as a single object
examples
object
A key-value pair for the examples. Keys are the example names, while values correspond to the
example values for the response collections you can retrieve.
Response 400application/json
1 fields
Error
Field
Type
Description
message
string
Message
Response 403application/json
2 fields
403 invalid error
Field
Type
Description
message
string
Error message.
url
string
Error additional URL.
Response 404application/json
1 fields
Resource not found
Field
Type
Description
message
string
Error Message.
Response 500application/json
1 fields
Internal server error
Field
Type
Description
message
string
Error message.
Eligibility
POST/products/loan-eligibility/invocations
Invoke Eligibility Flow
InvokeSpecificProductFlow
This endpoint retrieves a person's eligibility for a mortgage
{
"message": "{'data': ['Missing data for required field.']}"
}
application/json
403 invalid error
{
"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"
}
text/html
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
application/json
Internal server error
{
"message": "The product has encountered an internal server error. If you\nhave used a transaction_id to call our services, please submit it to\nStaircase support"
}
{
"message": "{'data': ['Missing data for required field.']}"
}
application/json
403 invalid error
{
"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"
}
text/html
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
application/json
Internal server error
{
"message": "The product has encountered an internal server error. If you\nhave used a transaction_id to call our services, please submit it to\nStaircase support"
}
Parameters
2
Parameter
Type
Example
Description
x-api-keyrequired
stringheader
—
Environment API Key.
invocation_idrequired
string (ulid)path
01F0KHKADN0HRFXMCQQXPA6AFZ
Eligibility flow invocation identifier
Response 200application/json
9 fields
Successfully returned status of the Eligibility flow Invocation.
{
"message": "Please provide one of valid return examples values:\ntrue, false"
}
text/html
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
application/json
403 invalid error
{
"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"
}
<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
application/json
Internal server error
{
"message": "The product has encountered an internal server error. If you\nhave used a transaction_id to call our services, please submit it to\nStaircase support"
}
Parameters
2
Parameter
Type
Description
x-api-keyrequired
stringheader
Environment API Key.
return_examples
booleanquery
If included and set to `true`, returns one or more pre-filled
examples that conform to the schema. Default to `false`
Response 200application/json
2 fields
Request schema (possibly with examples) is successfully returned.
Field
Type
Description
schemarequired
object
Schema for the Request Collection
examples
object
Each item in the dictionary corresponds to the name of the example and dictionary content is the
sample response.
Response 400application/json
1 fields
Error
Field
Type
Description
message
string
Message
Response 403application/json
2 fields
403 invalid error
Field
Type
Description
message
string
Error message.
url
string
Error additional URL.
Response 404application/json
1 fields
Resource not found
Field
Type
Description
message
string
Error Message.
Response 500application/json
1 fields
Internal server error
Field
Type
Description
message
string
Error message.
GET/products/loan-eligibility/response-schema
Retrieve Response Schema
retrieveResponseSchema
Retrieve Response Schema returns the JSON schema for the response collection, created by an invocation.
If you would like to retrieve examples along with the schema, you can provide return_examples=True query parameter.
Response
application/json
Response schema (possibly with examples) is successfully returned.
{
"message": "Please provide one of valid return examples values:\ntrue, false"
}
text/html
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
application/json
403 invalid error
{
"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"
}
<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
application/json
Internal server error
{
"message": "The product has encountered an internal server error. If you\nhave used a transaction_id to call our services, please submit it to\nStaircase support"
}
Parameters
2
Parameter
Type
Description
x-api-keyrequired
stringheader
Environment API Key.
return_examples
booleanquery
If included and set to `true`, returns one or more pre-filled
examples that conform to the schema. Default to `false`
Response 200application/json
2 fields
Response schema (possibly with examples) is successfully returned.
Field
Type
Description
schemarequired
object
JSON-Schema as a single object
examples
object
A key-value pair for the examples. Keys are the example names, while values correspond to the
example values for the response collections you can retrieve.
Response 400application/json
1 fields
Error
Field
Type
Description
message
string
Message
Response 403application/json
2 fields
403 invalid error
Field
Type
Description
message
string
Error message.
url
string
Error additional URL.
Response 404application/json
1 fields
Resource not found
Field
Type
Description
message
string
Error Message.
Response 500application/json
1 fields
Internal server error
Field
Type
Description
message
string
Error message.
Workflow
POST/transactions
Create Transaction
post-decision-transaction
Create Transaction creates a transaction in Staircase. A transaction is supposed to hold all data containers (collections) related to a given mortgage loan. You will be billed on the basis of transaction_ids, so it is important to associate each loan on your end with a transaction_id on our end.
Transactions are identified by a unique key called transaction_id. As you use different Staircase products to gather the data needed for a specific instance of your transaction type, and receive different sets of output from each product, use the same transaction_id to correlate all the outputs to the same transaction.
A transaction_id, when used properly, gives you a holistic view of the data related to the transaction you’ve assembled.
{
"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"
}
application/json
The product has encountered an internal server error. If possible, please contact Staircase support with the transaction_id you used.
{
"CreateTransactionError": {
"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."
}
}
Parameters
1
Parameter
Type
Example
Description
x-api-keyrequired
stringheader
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Environment API Key.
Response 201application/json
1 fields
Transaction created successfully
Field
Type
Description
transaction_id
string
New transaction identifier
Response 400application/json
1 fields
Transaction creation unsuccessful
Field
Type
Description
message
string
—
Response 403application/json
2 fields
Invalid key for service
Field
Type
Description
message
string
—
url
string
—
Response 429application/json
1 fields
The user has sent too many requests in a given amount of time ("rate limiting")
Field
Type
Description
message
string
Message
Response 500application/json
1 fields
The product has encountered an internal server error. If possible, please contact Staircase support with the transaction_id you used.
Field
Type
Description
message
string
—
Platform
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 /products/loan-eligibility/invocations
{
"message": "Unable to create collection. Please check the collectionchr\ndata"
}
text/html
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
application/json
403 invalid error
{
"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"
}
application/json
Resource not found
{
"message": "Unable to create collection. Please check the transaction\nID."
}
text/html
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
application/json
Internal server error
{
"message": "The product has encountered an internal server error. If you\nhave used a transaction_id to call our services, please submit it to\nStaircase support"
}
Parameters
2
Parameter
Type
Example
Description
x-api-keyrequired
stringheader
—
Environment API Key.
transaction_idrequired
string (ulid)path
01F0KHK7DN3H5JZ4QJKMYAM6GB
Staircase Transaction Identifier
Request bodyapplication/json
1 fields
Field
Type
Description
data
object
The data that is needed for invocation. It should follow the request schema
Retrieve Collection returns the content of a given collection_id
associated with a transaction_id.
Response
application/json
403 invalid error
{
"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"
}
application/json
Resource not found
{
"message": "Unable to get collection. Please check the given ids"
}
application/json
Resource not found
{
"message": "Unable to get collections of given transaction. Please\ncheck the transaction id"
}
application/json
Internal server error
{
"message": "The product has encountered an internal server error. If you\nhave used a transaction_id to call our services, please submit it to\nStaircase support"
}
Parameters
3
Parameter
Type
Example
Description
x-api-keyrequired
stringheader
—
Environment API Key.
transaction_idrequired
string (ulid)path
01F0KHK7DN3H5JZ4QJKMYAM6GB
Staircase Transaction Identifier
collection_idrequired
string (ulid)path
01F0KHKADN0HRFXMCQQXPA6AFZ
Staircase collection_id
Response 200application/json
4 fields
Successfully Retrieved Collection
Field
Type
Description
transaction_idrequired
string
—
collection_idrequired
string
—
metadatarequired
object
—
created_atrequired
string
—
validationrequired
boolean
—
datarequired
object
—
Response 403application/json
2 fields
403 invalid error
Field
Type
Description
message
string
Error message.
url
string
Error additional URL.
Response 404application/json
1 fields
Resource not found
Field
Type
Description
message
string
Message
Response 500application/json
1 fields
Internal server error
Field
Type
Description
message
string
Error message.
Other responses
400
GET/transactions/{transaction_id}/collections
Retrieve Transaction Collections
RetrieveTransactionCollections
Retrieve Transaction Collections returns the content of a
given collection_id associated with a specific transaction_id.
<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
application/json
403 invalid error
{
"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"
}
application/json
Resource not found
{
"message": "Unable to get collections of given transaction. Please\ncheck the transaction id"
}
application/json
Internal server error
{
"message": "The product has encountered an internal server error. If you\nhave used a transaction_id to call our services, please submit it to\nStaircase support"
}
Parameters
2
Parameter
Type
Example
Description
x-api-keyrequired
stringheader
—
Environment API Key.
transaction_idrequired
string (ulid)path
01F0KHK7DN3H5JZ4QJKMYAM6GB
Staircase Transaction Identifier
Response 200application/json
4 fields
Transaction collection retrieved successfully
Field
Type
Description
transaction_id
string (ulid)
Transaction ID.Example 01EZQ32PJQGKRA6HR8D72Q9FFF
collection_id
string (ulid)
Collection ID.Example 01EZQ32PJQGKRA6HR8D72Q9FFF
data
object
Data in Staircase language schema.
metadata
object
Metadata about collection, f.e version of used Staircase schema.
{
"description": "Error details.",
"message": "Unable to update collection. Please check the collection\ndata"
}
text/html
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
application/json
403 invalid error
{
"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"
}
application/json
Resource not found
{
"message": "Unable to update collection. Please check the given ids"
}
text/html
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
application/json
Internal server error
{
"message": "The product has encountered an internal server error. If you\nhave used a transaction_id to call our services, please submit it to\nStaircase support"
}
Parameters
3
Parameter
Type
Example
Description
x-api-keyrequired
stringheader
—
Environment API Key.
transaction_idrequired
string (ulid)path
01F0KHK7DN3H5JZ4QJKMYAM6GB
Staircase Transaction Identifier
collection_idrequired
string (ulid)path
01F0KHKADN0HRFXMCQQXPA6AFZ
Staircase collection_id
Request bodyapplication/json
1 fields
Field
Type
Description
data
object
The data that is needed for invocation. It should follow the request schema