Skip to content
Staircase

Lexicon

The canonical mortgage ontology, published as a product: the class dictionary every other product's request and response is a subset of.

A caller queries the model — classes, properties, relationships, enumerations — and validates a payload against it. The classes themselves are documented under Data; this product is the surface that serves and enforces them.

Two validation modes exist. A syntactic shape constrains datatype, enumeration membership, pattern, length and range. A semantic shape carries conditional rules: if a borrower's marital status is married, the spouse's name becomes required. A record is valid only when it satisfies both.

How it works

The model is a graph rather than a relational schema, and it is flat: no class nests another. A relationship between two classes is itself a class, whose properties are the object properties joining them. That keeps every class independently addressable and lets a relationship carry its own attributes, which a foreign key cannot.

Naming is governed by a written style guide rather than by convention. Property suffixes are load-bearing — an indicator is boolean, an identifier is an identifier, a type is an enumeration whose range is a named enumeration set — so a property's type is legible from its name before its definition is read.

Definitions are required to be complete sentences that define the term, not expand the acronym. The stated reason on record is future use by a conversational system: a glossary stub transfers nothing to a model reading it.

Identity is immutable. Every state of an entity is a new database-generated identifier, and a stable global identifier groups every state of the same real-world thing. Reading history is therefore a query rather than an audit table.

The model has a deprecation pipeline: duplicate analysis, impact analysis across every consumer of a class, automatic upcasting of a caller's payload to the current model, and usage monitoring of classes on the way out. Several executed removals are recorded with their own runbooks.

Operations

The shape queries take a product API identifier, a schema type of request or response, a shape type of syntactic or semantic, and the model name — because a product's contract is itself a derived view of the model rather than a separate document.

Document

POST /1003

Loan Application

generateURLADocument

Generate URLA(1003, Loan Application) Document.

This endpoint allows user to generate URLA(1003, Loan Application) Document. The input is Staircase collection described below. The output is a download link to the generated document.

Request
application/json
{
  "data": {
    "people": [
      {
        "@id": "01HHEEBDSDHQK6H2FB884BDY3F",
        "@type": "person",
        "birth_day": "15",
        "birth_month": "7",
        "birth_year": "1980",
        "full_name": "John Doe",
        "has_alias": "01HHEEBDS89MPT7HCP0MBVX9GC",
        "has_dependent": [
          "01HHEEBDSBXFETBGCMY9KPRXXE",
          "01HHEEBDSCTQ2SCQ3WQ517CH87"
        ],
        "marital_status_type": "Married",
        "ssn": "123456789",
        "us_citizenship_status": "USCitizen"
      },
      {
        "@id": "01HHEEBDS89MPT7HCP0MBVX9GC",
        "@type": "person",
        "full_name": "Johnny, JD"
      },
      {
        "@id": "01HHEEBDSCTQ2SCQ3WQ517CH87",
        "@type": "person",
        "age": 8
      },
      {
        "@id": "01HHEEBDSBXFETBGCMY9KPRXXE",
        "@type": "person",
        "age": 10
      }
    ],
    "residences": [
      {
        "@id": "01HHEEBDS9QTEXDP9QVBB1MYFN",
        "@type": "residence",
        "has_address": "01HHEEBDS9D8ZH0NG7J8K20YVE7",
        "has_resident": "01HHEEBDSDHQK6H2FB884BDY3F",
        "residency_basis_type": "Rent",
        "residency_duration_years_count": 2,
        "residency_type": "Current",
        "has_expense": "01HKMHPJ6TSMZQDPNRAHZYV9VN"
      },
      {
        "@id": "01HHEEBDS9D8ZH0NG7J8K20YVE5",
        "@type": "residence",
        "has_address": "01HHEEBDS87XJ4XXSHBRMMWWCY",
        "has_resident": "01HHEEBDSDHQK6H2FB884BDY3F",
        "residency_basis_type": "Own",
        "residency_duration_months_count": 6,
        "residency_duration_years_count": 3,
        "residency_type": "Prior"
      }
    ],
    "expenses": [
      {
        "@id": "01HKMHPJ6TSMZQDPNRAHZYV9VN",
        "@type": "expense",
        "expense_monthly_payment_amount": 1000
      }
    ],
    "addresses": [
      {
        "@id": "01HHEEBDS9D8ZH0NG7J8K20YVE7",
        "@type": "address",
        "address_line_1": "123 Main St",
        "city_name": "Anytown",
        "country_name": "USA",
        "postal_code": "12345",
        "state_code": "AL",
        "unit_identifier": "Unit 101"
      },
      {
        "@id": "01HHEEBDS87XJ4XXSHBRMMWWCY",
        "@type": "address",
        "address_line_1": "456 Old St",
        "city_name": "Oldtown",
        "country_name": "USA",
        "postal_code": "54321",
        "state_code": "AK",
        "unit_identifier": "Unit 202"
      },
      {
        "@id": "01HHEEBDSBV3Q1J8YCKYNTYZ2T",
        "@type": "address",
        "address_line_1": "789 Postal St",
        "city_name": "Mailville",
        "country_name": "USA",
        "postal_code": "67890",
        "state_code": "AZ",
        "unit_identifier": "Box 303"
      },
      {
        "@id": "01HHEEBDSBAYVZ7EKP7N5FPTK21",
        "@type": "address",
        "address_line_1": "100 Solar Way",
        "city_name": "Sunnyville",
        "country_name": "USA",
        "postal_code": "93001",
        "state_code": "CA",
        "unit_identifier": "Suite 500"
      },
      {
        "@id": "01HHEEBDSAYEBGX1PSGNEDFN4Q",
        "@type": "address",
        "address_line_1": "20 Commerce Blvd",
        "city_name": "Businesstown",
        "country_name": "USA",
        "postal_code": "20202",
        "state_code": "AS",
        "unit_identifier": "Suite 2"
      },
      {
        "@id": "01HKKY764AT0AD029K7W34EECB",
        "@type": "address",
        "address_line_1": "123 Main St",
        "city_name": "Anytown",
        "country_name": "US",
        "postal_code": "12345",
        "state_code": "CA",
        "unit_identifier": "Unit 5"
      },
      {
        "@id": "01HKKZ88Y0563MGWSV945J406B",
        "@type": "address",
        "address_line_1": "456 Oak Street",
        "city_name": "Springfield",
        "country_name": "US",
        "postal_code": "65432",
        "state_code": "NY",
        "unit_identifier": "Apt 202"
      }
    ],
    "communications": [
      {
        "@id": "01HHEEBDS8G6X59BPK9G7E9N7P8",
        "@type": "communication",
        "has_mailing_address": "01HHEEBDSBV3Q1J8YCKYNTYZ2T",
        "contact_person": "01HHEEBDSDHQK6H2FB884BDY3F",
        "home_phone_number": "1234567890",
        "phone_number": "2345678901",
        "work_phone_number": "3456789012"
      },
      {
        "@id": "01HHEEBDS82QCSZEDWFSAPGHRF",
        "@type": "communication",
        "phone_number": "555101111"
      },
      {
        "@id": "01HHEEBDSBAYVZ7EKP7N5FPTK24",
        "@type": "communication",
        "phone_number": "555202222"
      }
    ],
    "employments": [
      {
        "@id": "01HHEEBDSBRYRXXGXZ55JJMPVW",
        "@type": "employment",
        "associated_income": "01HHEEBDS9D8ZH0NG7J8K20YVE9",
        "employment_end_date": "2020-12-31",
        "employment_start_date": "2018-03-15",
        "employment_status_type": "Previous",
        "has_employee": "01HHEEBDSDHQK6H2FB884BDY3F",
        "has_employer": "01HHEEBDS98S79HQ6JESFG93JZ",
        "position_title": "Environmental Engineer",
        "self_employment_indicator": false
      },
      {
        "@id": "01HHEEBDSBT17PNE759GJ25PGG",
        "@type": "employment",
        "associated_income": [
          "01HHEEBDS9GK1DHGS07GXP06ZV6",
          "01HHEEBDSARWSDN7DN6RY72Y4X",
          "01HHEEBDS855MCXMMK2HRP5ESH",
          "01HHEEBDS9GK1DHGS07GXP06ZV4",
          "01HHEEBDS9GK1DHGS07GXP06ZV5",
          "01HHEEBDS9GK1DHGS07GXP06ZV7"
        ],
        "employment_start_date": "2010-01-10",
        "employment_status_type": "Current",
        "employment_time_in_line_of_work_years_count": 3,
        "has_employee": "01HHEEBDSDHQK6H2FB884BDY3F",
        "has_employer": "01HHEEBDSB27TBFYPCF2XQ8J11",
        "ownership_interest_type": "GreaterThanOrEqualTo25Percent",
        "position_title": "Manager",
        "self_employment_indicator": true,
        "special_borrower_employer_relationship_indicator": true,
        "time_in_line_of_work_months_count": 2
      },
      {
        "@id": "01HHEEBDSBH00GD7716WZ1AF98",
        "@type": "employment",
        "associated_income": [
          "01HHEEBDSAZ357ZQKYTDE2S6Q5",
          "01HHEEBDSD1438AFBY9K2VCKZY1",
          "01HHEEBDS9GK1DHGS07GXP06ZV8",
          "01HHEEBDSB9EFK3PH3SWWJCGH9",
          "01HHEEBDSDMQ3RSY6K2Y9AHEMG",
          "01HHEEBDS9GK1DHGS07GXP06ZV9"
        ],
        "employment_start_date": "2015-06-15",
        "employment_status_type": "Current",
        "employment_time_in_line_of_work_years_count": 10,
        "has_employee": "01HHEEBDSDHQK6H2FB884BDY3F",
        "has_employer": "01HHEEBDSBVT47DCTAZ1T546WA",
        "position_title": "Senior Analyst",
        "self_employment_indicator": false,
        "special_borrower_employer_relationship_indicator": false,
        "time_in_line_of_work_months_count": 0
      }
    ],
    "incomes": [
      {
        "@id": "01HHEEBDS9D8ZH0NG7J8K20YVE9",
        "@type": "income",
        "income_recipient": "01HHEEBDSDHQK6H2FB884BDY3F",
        "income_amount": 6500,
        "income_type": "Base"
      },
      {
        "@id": "01HHEEBDS9GK1DHGS07GXP06ZV3",
        "@type": "income",
        "income_recipient": "01HHEEBDSDHQK6H2FB884BDY3F",
        "income_amount": 450,
        "income_type": "DividendsInterest"
      },
      {
        "@id": "01HHEEBDS9MDSGMCN8M6KE9G4M",
        "@type": "income",
        "income_recipient": "01HHEEBDSDHQK6H2FB884BDY3F",
        "income_amount": 800,
        "income_type": "CapitalGains"
      },
      {
        "@id": "01HHEEBDS9GK1DHGS07GXP06ZV1",
        "@type": "income",
        "income_recipient": "01HHEEBDSDHQK6H2FB884BDY3F",
        "income_amount": 1200,
        "income_type": "Alimony"
      },
      {
        "@id": "01HHEEBDS9GK1DHGS07GXP06ZV9",
        "@type": "income",
        "income_recipient": "01HHEEBDSDHQK6H2FB884BDY3F",
        "income_amount": 0,
        "income_type": "Other"
      },
      {
        "@id": "01HHEEBDSAZ357ZQKYTDE2S6Q5",
        "@type": "income",
        "income_recipient": "01HHEEBDSDHQK6H2FB884BDY3F",
        "income_amount": 600,
        "income_type": "Overtime"
      },
      {
        "@id": "01HHEEBDSDMQ3RSY6K2Y9AHEMG",
        "@type": "income",
        "income_recipient": "01HHEEBDSDHQK6H2FB884BDY3F",
        "income_amount": 0,
        "income_type": "MilitaryBasePay"
      },
      {
        "@id": "01HHEEBDS9GK1DHGS07GXP06ZV4",
        "@type": "income",
        "income_recipient": "01HHEEBDSDHQK6H2FB884BDY3F",
        "income_amount": 300,
        "income_type": "Bonuses"
      },
      {
        "@id": "01HHEEBDS9GK1DHGS07GXP06ZV8",
        "@type": "income",
        "income_recipient": "01HHEEBDSDHQK6H2FB884BDY3F",
        "income_amount": 300,
        "income_type": "Bonuses"
      },
      {
        "@id": "01HHEEBDS9GK1DHGS07GXP06ZV5",
        "@type": "income",
        "income_recipient": "01HHEEBDSDHQK6H2FB884BDY3F",
        "income_amount": 0,
        "income_type": "Other"
      },
      {
        "@id": "01HHEEBDSD1438AFBY9K2VCKZY1",
        "@type": "income",
        "income_recipient": "01HHEEBDSDHQK6H2FB884BDY3F",
        "income_amount": 100,
        "income_type": "Commissions"
      },
      {
        "@id": "01HHEEBDS855MCXMMK2HRP5ESH",
        "@type": "income",
        "income_recipient": "01HHEEBDSDHQK6H2FB884BDY3F",
        "income_amount": 200,
        "income_type": "Commissions"
      },
      {
        "@id": "01HHEEBDS9GK1DHGS07GXP06ZV7",
        "@type": "income",
        "income_recipient": "01HHEEBDSDHQK6H2FB884BDY3F",
        "income_amount": 4000,
        "income_type": "Base"
      },
      {
        "@id": "01HHEEBDS9GK1DHGS07GXP06ZV6",
        "@type": "income",
        "income_recipient": "01HHEEBDSDHQK6H2FB884BDY3F",
        "income_amount": 500,
        "income_type": "Overtime"
      },
      {
        "@id": "01HHEEBDSB9EFK3PH3SWWJCGH9",
        "@type": "income",
        "income_recipient": "01HHEEBDSDHQK6H2FB884BDY3F",
        "income_amount": 5000,
        "income_type": "Base"
      },
      {
        "@id": "01HHEEBDSARWSDN7DN6RY72Y4X",
        "@type": "income",
        "income_recipient": "01HHEEBDSDHQK6H2FB884BDY3F",
        "income_amount": 0,
        "income_type": "MilitaryBasePay"
      }
    ],
    "companies": [
      {
        "@id": "01HHEEBDS98S79HQ6JESFG93JZ",
        "@type": "company",
        "has_address": "01HHEEBDSBAYVZ7EKP7N5FPTK21",
        "name": "GreenTech Innovations"
      },
      {
        "@id": "01HHEEBDSB27TBFYPCF2XQ8J11",
        "@type": "company",
        "has_address": "01HHEEBDS95T2CKY8KN0GK3EX4",
        "has_communication_method": "01HHEEBDS82QCSZEDWFSAPGHRF",
        "name": "Company One"
      },
      {
        "@id": "01HHEEBDSBVT47DCTAZ1T546WA",
        "@type": "company",
        "has_address": "01HHEEBDSAYEBGX1PSGNEDFN4Q",
        "has_communication_method": "01HHEEBDSBAYVZ7EKP7N5FPTK24",
        "name": "Company Two"
      },
      {
        "@id": "01HHEEBDS9V68J5NE6SQFWZXTA",
        "@type": "company",
        "name": "Credit Union C"
      },
      {
        "@id": "01HHEEBDSBAYVZ7EKP7N5FPTK29",
        "@type": "company",
        "name": "Bank A"
      },
      {
        "@id": "01HKKYNEXGQMZA6384RY4AF2DV",
        "@type": "company",
        "name": "ABC Lending"
      }
    ],
    "assets": [
      {
        "@id": "01HHEEBDS8G6X59BPK9G7E9N7P4",
        "@type": "asset",
        "asset_account_identifier": "998877665",
        "asset_cash_or_market_value_amount": 35000,
        "asset_type": "MutualFund",
        "held_by_financial_institution": "01HHEEBDSBAYVZ7EKP7N5FPTK29",
        "possessed_by": "01HHEEBDSDHQK6H2FB884BDY3F"
      },
      {
        "@id": "01HHEEBDS8G6X59BPK9G7E9N7P3",
        "@type": "asset",
        "asset_account_identifier": "123456789",
        "asset_cash_or_market_value_amount": 5000,
        "asset_type": "CheckingAccount",
        "held_by_financial_institution": "01HHEEBDSBAYVZ7EKP7N5FPTK29",
        "possessed_by": "01HHEEBDSDHQK6H2FB884BDY3F"
      },
      {
        "@id": "01HHEEBDS8G6X59BPK9G7E9N7P5",
        "@type": "asset",
        "asset_account_identifier": "987654321",
        "asset_cash_or_market_value_amount": 15000,
        "asset_type": "SavingsAccount",
        "held_by_financial_institution": "01HHEEBDS9V68J5NE6SQFWZXTA",
        "possessed_by": "01HHEEBDSDHQK6H2FB884BDY3F"
      },
      {
        "@id": "01HHEEBDS8G6X59BPK9G7E9N7P7",
        "@type": "asset",
        "asset_account_identifier": "556677889",
        "asset_cash_or_market_value_amount": 45000,
        "asset_type": "Stock",
        "held_by_financial_institution": "01HHEEBDS9V68J5NE6SQFWZXTA",
        "possessed_by": "01HHEEBDSDHQK6H2FB884BDY3F"
      },
      {
        "@id": "01HHEEBDS8G6X59BPK9G7E9N7P6",
        "@type": "asset",
        "asset_account_identifier": "112233445",
        "asset_cash_or_market_value_amount": 25000,
        "asset_type": "MoneyMarketFund",
        "held_by_financial_institution": "01HHEEBDS9V68J5NE6SQFWZXTA",
        "possessed_by": "01HHEEBDSDHQK6H2FB884BDY3F"
      },
      {
        "@id": "01HHEEBDSCSCMK10J7CK7ZAFM7",
        "@type": "asset",
        "asset_cash_or_market_value_amount": 100000,
        "asset_type": "PendingNetSaleProceedsFromRealEstateAssets",
        "possessed_by": "01HHEEBDSDHQK6H2FB884BDY3F"
      },
      {
        "@id": "01HHEEBDS8G6X59BPK9G7E9N7P1",
        "@type": "asset",
        "asset_cash_or_market_value_amount": 5000,
        "asset_type": "ProceedsFromSaleOfNonRealEstateAsset",
        "possessed_by": "01HHEEBDSDHQK6H2FB884BDY3F"
      },
      {
        "@id": "01HHEEBDSD3APA7QJJRQGJTNDB",
        "@type": "asset",
        "asset_cash_or_market_value_amount": 15000,
        "asset_liquidity_indicator": false,
        "asset_type": "GiftOfPropertyEquity",
        "funds_source_type": "Employer",
        "possessed_by": "01HHEEBDSDHQK6H2FB884BDY3F"
      },
      {
        "@id": "01HHEEBDSCN405T3MK0MPBW2K1",
        "@type": "asset",
        "asset_cash_or_market_value_amount": 10000,
        "asset_liquidity_indicator": true,
        "asset_type": "GiftOfCash",
        "funds_source_type": "Relative",
        "possessed_by": "01HHEEBDSDHQK6H2FB884BDY3F"
      }
    ],
    "liabilities": [
      {
        "@id": "01HHEEBDS82E4FXB7XKB2EFN54",
        "@type": "liability",
        "has_liability_timeline": "01HHEEBDS84EHE26GE3JDCXYWG",
        "has_liability_holder": "01HHEEBDSDHQK6H2FB884BDY3F",
        "liability_account_identifier": "12340002",
        "liability_monthly_payment_amount": 300,
        "liability_payoff_status_indicator": true,
        "liability_type": "Installment",
        "owed_to": "01HHEEBDS9V68J5NE6SQFWZXTA"
      },
      {
        "@id": "01HHEEBDS9RXSCP5F72MAN3AB75",
        "@type": "liability",
        "has_liability_timeline": "01HKKXH29GPH21N38PPCXEZ2HK",
        "has_liability_holder": "01HHEEBDSDHQK6H2FB884BDY3F",
        "liability_account_identifier": "12340001",
        "liability_monthly_payment_amount": 150,
        "liability_payoff_status_indicator": true,
        "liability_type": "Revolving",
        "owed_to": "01HHEEBDS9V68J5NE6SQFWZXTA"
      },
      {
        "@id": "01HHEEBDS9RXSCP5F72MAN3AB79",
        "@type": "liability",
        "has_liability_timeline": "01HKKXH9604TFHK6CP8E8VXE5A",
        "has_liability_holder": "01HHEEBDSDHQK6H2FB884BDY3F",
        "liability_account_identifier": "12340003",
        "liability_monthly_payment_amount": 100,
        "liability_payoff_status_indicator": true,
        "liability_type": "Open30DayChargeAccount",
        "owed_to": "01HHEEBDS9V68J5NE6SQFWZXTA"
      }
    ],
    "liability_timelines": [
      {
        "@id": "01HHEEBDS84EHE26GE3JDCXYWG",
        "@type": "liability_timeline",
        "liability_unpaid_balance_amount": 10000
      },
      {
        "@id": "01HKKXH29GPH21N38PPCXEZ2HK",
        "@type": "liability_timeline",
        "liability_unpaid_balance_amount": 8000
      },
      {
        "@id": "01HKKXH9604TFHK6CP8E8VXE5A",
        "@type": "liability_timeline",
        "liability_unpaid_balance_amount": 6000
      }
    ],
    "settlements": [
      {
        "@id": "01HKKYP4GK210SDCYCZZ8TT8N1",
        "@type": "settlement",
        "has_loan": "01HKKYMREK90A70C6KKSPCH6H1",
        "has_ownership": "01HKKYJYNCN5NFV5E62D538B6W",
        "has_company": "01HKKYNEXGQMZA6384RY4AF2DV"
      }
    ],
    "loans": [
      {
        "@id": "01HKKYMREK90A70C6KKSPCH6H1",
        "@type": "loan",
        "monthly_payment": 1500,
        "has_loan_timeline": "01HKKYMDAYMK31Q67DHCYF1MAW",
        "mortgage_type": "Conventional"
      },
      {
        "@id": "01HKKYVNHW67R39873M8AEN4MC",
        "@type": "loan",
        "base_loan_amount": 300000,
        "loan_purpose_type": "Purchase"
      }
    ],
    "loan_timelines": [
      {
        "@id": "01HKKYMDAYMK31Q67DHCYF1MAW",
        "@type": "loan_timeline",
        "unpaid_balance_amount": 200000
      }
    ],
    "ownerships": [
      {
        "@id": "01HKKYJYNCN5NFV5E62D538B6W",
        "@type": "ownership",
        "owned_property": "01HKKYHSWWTDV943CM8BCE67JH",
        "owned_by": "01HHEEBDSDHQK6H2FB884BDY3F"
      }
    ],
    "properties": [
      {
        "@id": "01HKKYHSWWTDV943CM8BCE67JH",
        "@type": "property",
        "has_address": "01HKKY764AT0AD029K7W34EECB",
        "property_estimated_value_amount": 500000,
        "property_current_usage_type": "PrimaryResidence",
        "owned_property_maintenance_expense_amount": 300,
        "owned_property_disposition_status_type": "Retain",
        "owned_property_rental_income_gross_amount": 0
      },
      {
        "@id": "01HKKYWF88WAB9QTZ6ZJTXX3CM",
        "@type": "property",
        "has_address": "01HKKZ88Y0563MGWSV945J406B",
        "accessory_unit_count": 1,
        "property_estimated_value_amount": 350000,
        "property_current_usage_type": "PrimaryResidence",
        "fha_secondary_residence_indicator": false,
        "property_mixed_usage_indicator": false,
        "manufactured_home_indicator": false,
        "rental_estimated_gross_monthly_rent_amount": 0
      }
    ],
    "relationships": [
      {
        "@type": "finance_relation",
        "has_person": "01HHEEBDSDHQK6H2FB884BDY3F",
        "has_loan": "01HKKYMREK90A70C6KKSPCH6H1",
        "has_property": "01HKKYHSWWTDV943CM8BCE67JH",
        "role": "Borrower"
      },
      {
        "@type": "finance_relation",
        "has_company": "01HKKYNEXGQMZA6384RY4AF2DV",
        "has_loan": "01HKKYMREK90A70C6KKSPCH6H1",
        "role": "Lender"
      },
      {
        "@type": "finance_relation",
        "has_person": "01HHEEBDSDHQK6H2FB884BDY3F",
        "has_loan": "01HKKYVNHW67R39873M8AEN4MC",
        "has_property": "01HKKYWF88WAB9QTZ6ZJTXX3CM",
        "role": "Borrower"
      }
    ],
    "leads": [
      {
        "@id": "01HKKZ77VKJKB0XNA9PZR9CK5T",
        "@type": "lead",
        "has_property": "01HKKYWF88WAB9QTZ6ZJTXX3CM",
        "has_loan": "01HKKYVNHW67R39873M8AEN4MC"
      }
    ],
    "declarations": [
      {
        "@id": "01HHEEBDS8G6X59BPK9G7E9N7P9",
        "@type": "declaration",
        "has_person": "01HHEEBDSDHQK6H2FB884BDY3F",
        "intent_to_occupy_indicator": true,
        "homeowner_past_three_years_indicator": true,
        "prior_property_title_type": "JointWithSpouse",
        "prior_property_usage_type": "PrimaryResidence",
        "special_borrower_seller_relationship_indicator": true,
        "undisclosed_borrowed_funds_indicator": true,
        "undisclosed_borrowed_funds_amount": 50000,
        "undisclosed_mortgage_application_indicator": false,
        "undisclosed_credit_application_indicator": false,
        "property_proposed_clean_energy_lien_indicator": true,
        "undisclosed_comaker_of_note_indicator": false,
        "outstanding_judgments_indicator": false,
        "presently_delinquent_indicator": false,
        "party_to_lawsuit_indicator": true,
        "prior_property_deed_in_lieu_conveyed_indicator": false,
        "prior_property_short_sale_completed_indicator": false,
        "prior_property_foreclosure_completed_indicator": true,
        "bankruptcy_indicator": true
      }
    ],
    "military_services": [
      {
        "@id": "01HHEEBDS9D8ZH0NG7J8K20YVE0",
        "@type": "military_service",
        "associated_with": "01HHEEBDSDHQK6H2FB884BDY3F",
        "military_service_expected_completion_date": "2025-12-31",
        "military_status_type": "ActiveDuty"
      }
    ],
    "government_monitoring": [
      {
        "@id": "01HHEEBDS9RXSCP5F72MAN3AB74",
        "@type": "government_monitoring",
        "represents": "01HHEEBDSDHQK6H2FB884BDY3F",
        "application_taken_method_type": "Internet",
        "ethnicity_collected_based_on_visual_observation_or_surname_indicator": false,
        "ethnicity_origin_type": "Other",
        "ethnicity_origin_type_other_description": "Salvadoran",
        "ethnicity_refusal_indicator": false,
        "ethnicity_type": "HispanicOrLatino",
        "gender_collected_based_on_visual_observation_or_name_indicator": false,
        "gender_refusal_indicator": false,
        "gender_type": "Male",
        "race_collected_based_on_visual_observation_or_surname_indicator": false,
        "race_refusal_indicator": false,
        "race_type": "AmericanIndianOrAlaskaNative",
        "race_type_additional_description": "Navajo"
      }
    ]
  }
}
Response
application/json

Successfully generated the document

{
  "code": 200,
  "message": "https://www.example.com/"
}
Response 200application/json
2 fields

Successfully generated the document

FieldTypeDescription
codenumberStatus code
messagestringLink to download the generated document
Response 400application/json
1 fields

Request data failed validation

FieldTypeDescription
errorobjectBad request error.
coderequiredstringError name.
messagerequiredstringError description.
Response 403application/json
2 fields

Invalid key for service

FieldTypeDescription
messagestring
urlstring
Response 422application/json
1 fields

Unprocessed Entity

FieldTypeDescription
errorobjectUnprocessed entity error.
coderequiredstringError name.
messagerequiredstringError description.
POST /pre-approval

Loan Application

generatePreApprovalLetter

Generate Pre Approval Letter Document

This endpoint allows user to generate pre approval letter document. Document. The input is Staircase collection described below. The output is a download link to the generated document.

Request
application/json
{
  "data": {
    "people": [
      {
        "@id": "_borrower",
        "@type": "person",
        "first_name": "Vladyslav",
        "middle_name": "J",
        "last_name": "Kartavets"
      },
      {
        "@id": "_borrower2",
        "@type": "person",
        "first_name": "Mariia",
        "last_name": "Kartavets"
      },
      {
        "@id": "_borrower3",
        "@type": "person",
        "first_name": "MMM",
        "last_name": "Kartavets"
      }
    ],
    "relationships": [
      {
        "@type": "finance_relation",
        "role": "Borrower",
        "has_loan": "_loan",
        "has_person": "_borrower"
      },
      {
        "@type": "finance_relation",
        "role": "CoBorrower",
        "has_loan": "_loan",
        "has_person": "_borrower2"
      },
      {
        "@type": "finance_relation",
        "role": "CoBorrower",
        "has_loan": "_loan",
        "has_person": "_borrower3"
      }
    ],
    "loans": [
      {
        "@id": "_loan",
        "@type": "loan",
        "has_property": "_property",
        "base_loan_amount": 425000,
        "note_rate_percent": 5.948,
        "loan_amortization_period_count": 30,
        "loan_amortization_period_type": "Year",
        "amortization_type": "Fixed",
        "rebate_percent": 1.1
      }
    ],
    "properties": [
      {
        "@id": "_property",
        "@type": "property",
        "has_address": "_address"
      }
    ],
    "addresses": [
      {
        "@id": "_address",
        "@type": "address",
        "address_line_1": "1452 N. Mustang Rd",
        "city_name": "Mustang",
        "state_code": "OK",
        "postal_code": "73604"
      }
    ]
  }
}
Response
application/json

Successfully generated the document

{
  "code": 200,
  "message": "https://www.example.com/"
}
Response 200application/json
2 fields

Successfully generated the document

FieldTypeDescription
codenumberStatus code
messagestringLink to download the generated document
Response 400application/json
1 fields

Request data failed validation

FieldTypeDescription
errorobjectBad request error.
coderequiredstringError name.
messagerequiredstringError description.
Response 403application/json
2 fields

Invalid key for service

FieldTypeDescription
messagestring
urlstring
Response 422application/json
1 fields

Unprocessed Entity

FieldTypeDescription
errorobjectUnprocessed entity error.
coderequiredstringError name.
messagerequiredstringError description.
POST /xml

Loan Application Mismo

GenerateMismo

Create Mismo

Generate Mismo FIle From Json

Request
application/json
{
  "transaction_id": "1234566880876439263"
}
Response
application/json

Retrieve mismo presigned_url

{
  "mismo_presigned_url": "presigned_url",
  "mismo_blob_id": "blob_id",
  "mismo_blob_name": "blob_name"
}
Request bodyapplication/json
1 fields
FieldTypeDescription
transaction_idstringLoan application transaction_id.
Response 200application/json
2 fields

Retrieve mismo presigned_url

FieldTypeDescription
codestringStatus code for the api call.
messageobjectMismo File
mismo_presigned_urlstringPresigned_url to download the mismo file.
mismo_blob_idstringblob_id to download the mismo file.
mismo_blob_namestringblob_name for mismo file.
Response 400application/json
1 fields

Request data failed validation

FieldTypeDescription
messageone ofMessage
Response 422application/json
2 fields

Unprocessable entity error

FieldTypeDescription
codeintegerStatus Code.
messageobjectError Message.
responsestringResponse for the integrated product.
Response 500application/json
1 fields

Internal server error

FieldTypeDescription
messagestringError message.
Other responses

403

POST /listing-agreement

Generate Listing Agreement Cancellation Document

generateListingAgreementModification

This endpoint allows user to generate listing agreement cancellation document. The input is Staircase transaction identifier and lead identifier. The output is a download link to the generated document.

Request
application/json
{
  "transaction_id": "01J294HJWN2WV8FACHH7V4B4XN",
  "lead_id": "01J294HSCKRWKNGPBD7VAYSC3P"
}
Response
application/json

Successfully generated the document

{
  "code": 200,
  "message": "https://www.example.com/"
}
Request bodyapplication/json
2 fields
FieldTypeDescription
transaction_idrequiredstringTransaction Identifer
lead_idrequiredstringLead Identifier
Response 200application/json
2 fields

Successfully generated the document

FieldTypeDescription
codenumberStatus code
messageobjectLink to download the generated document and blob id
report_linkrequiredstringLink to the generated document
blob_idrequiredstringBlob identifier
Response 400application/json
1 fields

Request data failed validation

FieldTypeDescription
errorobjectBad request error.
coderequiredstringError name.
messagerequiredstringError description.
Response 403application/json
2 fields

Invalid key for service

FieldTypeDescription
messagestring
urlstring
Response 422application/json
1 fields

Unprocessed Entity

FieldTypeDescription
errorobjectUnprocessed entity error.
coderequiredstringError name.
messagerequiredstringError description.

Examples

POST /api-examples

API Example Filtering Service

filter_api_example

This API provides a way to filter existing examples, which are comprehensive instances of a model, according to specific criteria, such as product API language (schema). The examples are then returned as subsets in the product API's registered language.

The generation_id can be used to get the filtered example by the Get Api Example service.

Each schema data point should be added to Product API Languages List View

And, input body for generating example for one of the example collections on this schema should look like this:

{
 "product_api_identifier": "629abdf1-5fe1-4e7b-be30-eabcf9a157ae",
 "schema_type": "request",
 "example_language": "florida",
 "example_transaction_label": "01H5MBM1DTS7E2KTJW2YNEAA58"
}

example_transaction_label is example identifier in Lexicon Example Store

Request
application/json
{
  "example_transaction_label": "01H4JF1F3BPX9TCTAAK9A3VA2A",
  "product_api_identifier": "01H4JF1F3BPX9TCTAAK9A3VA2B",
  "schema_type": "request",
  "output_language": "staircase-graph"
}
Response
application/json

Generation is succeeded.

{
  "generated_examples": [
    {
      "example_transaction_label": "01H4JF1F3BPX9TCTAAK9A3VA2A",
      "example_data": {
        "foo": "bar",
        "biz": [
          "baz",
          "booz"
        ]
      }
    }
  ]
}
Request bodyapplication/json
5 fields
FieldTypeDescription
example_transaction_labelstringThe label of the transaction that should be used to get the latest example collection.
product_api_identifierrequiredstringThe product API identifier.
schema_typerequiredstringThe type of the schema used for example to generate.requestresponse
example_languagestringThe language of the schema that should be applied to the example. Possible values are `lexicon` & `florida`.
output_languagestringThe output language of the generated example. The translation rules from example language to specified one must be defined in the `Language`.
Response 201application/json
1 fields

Generation is succeeded.

FieldTypeDescription
generated_examplesrequiredobject[]Generated examples.
example_transaction_labelrequiredstringThe identifier of the example.
example_datarequiredone ofThe generated example data.
Response 202application/json
1 fields

Generation process is started successfully.

FieldTypeDescription
generation_idrequiredstringThe identifier of the generation process.
Response 400application/json
1 fields

Request data is invalid.

FieldTypeDescription
messagestringMessage
Response 403application/json
1 fields

Missing or wrong API key.

FieldTypeDescription
messagestringMessage
Response 404application/json
1 fields

Resource is not found.

FieldTypeDescription
messagestringMessage
GET /api-examples/{generation_id}

Get Api Filtered Example

get_filtered_api_example

The service provides filtered example request by the call to the API Example Filtering Service service.

Response
application/json

Example is generated successfully

{
  "generation_id": "5f7b1b3a-0b0a-4b0a-9b0a-0b0a0b0a0b0c",
  "status": "RUNNING"
}
Parameters
1
ParameterTypeExampleDescription
generation_id required string path 01H4JF1F3BPX9TCTAAK9A3VA2C The identifier of the generation process.
Response 200application/json
4 fields

Example is generated successfully

FieldTypeDescription
generation_idrequiredstringThe identifier of the generation process.
statusrequiredstringThe status of the generation process.COMPLETEDFAILEDRUNNING
failure_reasonstringThe reason of the generation failure.
generated_examplesobject[]Generated examples.
example_transaction_labelrequiredstringThe identifier of the example.
example_datarequiredone ofThe generated example data.
Response 400application/json
1 fields

Request data is invalid.

FieldTypeDescription
messagestringMessage
Response 403application/json
1 fields

Missing or wrong API key.

FieldTypeDescription
messagestringMessage
Response 404application/json
1 fields

Resource is not found.

FieldTypeDescription
messagestringMessage

Lexicon

GET /lexicon/documents

List Documents

listDocuments

Returns the list of the available documents for labeling.

Response 200application/json
2 fields

OK.

FieldTypeDescription
documents_countrequiredintegerCount of documents
documentsrequiredobject[]Available documents.
document_typerequiredstringDocument type
fields_countintegerCount of fields
_linksobjectLinks
fieldsstringLink to get document fields
Response 403application/json
1 fields

Missing API key

FieldTypeDescription
messagestringMessage
GET /lexicon/documents/{document_type}

Get Document

getDocument

Returns the document information.

Parameters
1
ParameterTypeExampleDescription
document_type required string path closing_disclosure Document type
Response 200application/json
1 fields

OK.

FieldTypeDescription
documentrequiredobjectDocument
document_typerequiredstringDocument type
fields_countintegerCount of fields
fieldsrequiredobject[]The array of all document root-level fields
base_classrequiredstringThe base class (parent type) of the document
container_namerequiredstringThe name of the container
propertiesrequiredobject[]Fields of the document
namestringField name
typestringField type
enumarrayPossible values for the field
relationsrequiredobject[]Relations of the document
propertystringName of the relation property
typestringThe type of the related object
container_namestringContainer name where the related object is located
typesrequiredstring[]Possible values of @type for this container.
Response 403application/json
1 fields

Missing API key

FieldTypeDescription
messagestringMessage
Response 404application/json
1 fields

Resource is not found

FieldTypeDescription
messagestringMessage
POST /lexicon/refresh

Refresh GTL Lexicon

refreshGtlLexicon

Forcibly refreshes the GTL lexicon according to the current Lexicon.

Response 202application/json
1 fields

Accepted.

FieldTypeDescription
messagerequiredstringMessage
Response 403application/json
1 fields

Missing API key

FieldTypeDescription
messagestringMessage

Shapes

POST /validation

Validation

shapeValidation

Validate your data with SHACL shapes

This endpoint receives your data payload and a set of SHACL shapes, both supplied in JSON-LD format. The SHACL shapes define the constraints that the data should meet. On submission, the API validates the provided data against the supplied SHACL shapes and returns a report, providing detailed feedback on the data validation. The report includes a list of validation messages (invocations) and a boolean flag (conforms) indicating whether the data meets all the constraints defined in the SHACL shapes. The API is not domain-specific and can be used for validating any kind of data structure against any set of SHACL shapes. This makes it a powerful tool for ensuring data quality and compliance across various domains and use cases. If you're new to SHACL, you can learn more about it from the official SHACL specification.

Request
application/json

Format Example

{
  "request_payload": {
    "people": [
      {
        "@id": "sc:Bob",
        "@type": "person",
        "age": 20
      }
    ]
  },
  "shapes": {
    "@context": {
      "sh": "http://www.w3.org/ns/shacl#",
      "sc": "https://www.staircase.co/ontology/"
    },
    "@type": "sh:NodeShape",
    "sh:targetClass": {
      "@id": "sc:person"
    },
    "sh:property": [
      {
        "sh:path": {
          "@id": "sc:age"
        },
        "sh:datatype": {
          "@id": "http://www.w3.org/2001/XMLSchema#integer"
        }
      }
    ]
  }
}
Request bodyapplication/json
2 fields
FieldTypeDescription
request_payloadobjectThe data that you want to validate, provided in JSON-LD format
shapesobjectSHACL shapes defining the constraints
@contextobjectThe JSON-LD context, defining prefixes and base URLs
@idstringThe identifier for the SHACL shape
@typestringThe type of the SHACL shape, generally "sh:NodeShape"
sh:targetClassobjectThe target class that this shape applies to
sh:propertyobject[]SHACL shapes defining property
Response 200application/json
1 fields

The validation operation was successful. The response will contain a report of the validation results.

FieldTypeDescription
invocationsobject[]Invocation response
Other responses

400500

POST /generate/syntactic/{language_name}

Syntactic Shapes Generation

generateSyntacticShape

Generate Syntactic Shapes

This endpoint receives graph entities as a request body, language name as a path parameter and generates shacl shapes persisting them into graph. Language name parameter only accepts florida or lexicon values. Generated shapes can then be queried and utilized for further validation.

Example of persisted shape (Lexicon):

@prefix owl: .
@prefix rdf: .
@prefix sc: .
@prefix sh: .
@prefix shape: .
@prefix xsd: .

shape:loan_shape a sh:NodeShape ;
 sh:targetClass sc:class2 ;
 shape:type "syntactic" .

shape:person_shape a sh:NodeShape ;
 sh:property [ sh:datatype xsd:string ;
 sh:in [ a rdf:List ;
 rdf:first "val1" ;
 rdf:rest [ a rdf:List ;
 rdf:first "val2" ;
 rdf:rest [ a rdf:List ;
 rdf:first "val3" ;
 rdf:rest ] ] ] ;
 sh:maxInclusive 1e+02 ;
 sh:maxLength 35 ;
 sh:minInclusive 1e+00 ;
 sh:minLength 2 ;
 sh:path sc:prop1 ;
 sh:pattern "[A_Z]" ],
 [ sh:class sc:class2 ;
 sh:path sc:prop2 ] ;
 sh:targetClass sc:class1 ;
 shape:type "syntactic" .

shape:type a owl:AnnotationProperty .

Example of persisted shape (Florida):

Show the rest
@prefix owl: .
@prefix rdf: .
@prefix sc: .
@prefix sh: .
@prefix shape: .
@prefix xsd: .

shape:loan_shape a sh:NodeShape ;
 sh:targetClass sc:class2 ;
 shape:type "syntactic" .

shape:person_shape a sh:NodeShape ;
 sh:property [ sh:class sc:class2 ;
 sh:path sc:prop2 ],
 [ sh:node [ sh:property [ sh:datatype xsd:string ;
 sh:in [ a rdf:List ;
 rdf:first "val1" ;
 rdf:rest [ a rdf:List ;
 rdf:first "val2" ;
 rdf:rest ] ] ;
 sh:maxInclusive 1e+02 ;
 sh:maxLength 35 ;
 sh:minCount 1 ;
 sh:minInclusive 1e+00 ;
 sh:minLength 2 ;
 sh:path sc:has_value ;
 sh:pattern "[A_Z]" ] ] ;
 sh:path sc:prop1 ] ;
 sh:targetClass sc:class1 ;
 shape:type "syntactic" .

shape:type a owl:AnnotationProperty .
Request
application/json

Example

{
  "graph_entities": [
    {
      "@id": "1",
      "@type": "graph_entity",
      "label": "person",
      "container_name": "people",
      "subClassOf": "class"
    },
    {
      "@id": "2",
      "@type": "graph_entity",
      "label": "loan",
      "container_name": "loans",
      "subClassOf": "class"
    },
    {
      "@id": "3",
      "@type": "graph_entity",
      "label": "has_first_name",
      "subClassOf": "data_property",
      "domain": "person",
      "range": "string",
      "minimum_length": 2,
      "maximum_length": 35,
      "minimum_value": 1,
      "maximum_value": 100,
      "pattern": "[A_Z]",
      "enumeration": [
        "val1",
        "val2",
        "val3"
      ]
    },
    {
      "@id": "4",
      "@type": "graph_entity",
      "label": "with_loan",
      "subClassOf": "object_property",
      "domain": "person",
      "range": "loan"
    }
  ]
}
Parameters
1
ParameterTypeExampleDescription
language_name required string path lexicon Language Name, can either be lexicon or florida
Request bodyapplication/json
1 fields
FieldTypeDescription
graph_entitiesobject[]List of graph entities with required constrains.
labelstringLabel of a class or a property in Lexicon.
lexicon_identifierstringLexicon Identifier of a class or a property in Lexicon.
subClassOfstringType of a graph entity.classdata_propertyobject_property
container_namestringContainer name of a class.
domainstringDomain of a property, should match lexicon identifier of one of the provided class graph entities.
rangestringRange of a property, should either be lexicon identifier of a class (in case of object property) or one of the [`string`, `double`, `integer`, `date`, `dateTime`, `dateTimeStamp`, `boolean`] in case of data property.
minimum_lengthintegerCan be utilize to set minimum length constrain on a property.
maximum_lengthintegerCan be utilize to set maximum length constrain on a property.
minimum_valuenumberCan be utilize to set minimum value constrain on a property.
maximum_valuenumberCan be utilize to set maximum value constrain on a property.
patternstringCan be utilize to set regex pattern constrain on a property.
enumerationstring[]Can be utilize to set enumeration constrain on a property.
Response 200application/json
4 fields

The syntactic shape generation was successful.

FieldTypeDescription
codeintegerStatus Code.
messagestringMessage.
transaction_idstringTransaction ID.
collection_idstringCollection ID.
Other responses

400500

POST /query/{language_name}

Shapes Query

queryShapes

Query Shapes

The Shapes Query endpoint is for retrieving SHACL shapes in json-ld format which can further be inputted into validation endpoint. You can learn more about SHACL shapes from the official SHACL specification.

Shapes Classification

Lexicon Level Shapes

  • Syntactic shapes: Responsible for defining constraints such as datatype, enumeration, pattern, max/min length, and max/min value.
  • Semantic shapes: Responsible for implementing if-else kind of rules, such as conditional requirements for properties (e.g., if property1 exists, then property2 is required).

API Level Shapes

Show the rest
  • Semantic shapes: Currently, only semantic shapes are implemented for API level. They present the required/optional field information for properties and containers. To configure API schema information Product API Languages List View should be utilized.

Retrieving Shapes

Lexicon level shapes require a list of class graph_entities in the request body, indicating list of classes (e.g. person, loan, asset) you are willing to validate, see schema below.

For obtaining API level shapes, the query parameters product_api_identifier and schema_type (request or response) should be defined. No need to provide any request body.

The optional shape_type query parameter can take values 'syntactic' or 'semantic'. It defaults to 'syntactic' when not specified.

Request
application/json

Lexicon level shapes retrieval

{
  "graph_entities": [
    {
      "@id": "1",
      "@type": "graph_entity",
      "label": "person",
      "container_name": "people",
      "subClassOf": "class"
    },
    {
      "@id": "2",
      "@type": "graph_entity",
      "label": "loan",
      "container_name": "loans",
      "subClassOf": "class"
    }
  ]
}
Response
application/json

The shape querying was successful.

{
  "@context": {
    "sh": "http://www.w3.org/ns/shacl#",
    "sc": "https://www.staircase.co/ontology/",
    "shape": "https://www.staircase.co/florida/shapes/",
    "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
    "xsd": "http://www.w3.org/2001/XMLSchema#"
  },
  "@id": "shape:borrower_shape",
  "@type": "sh:NodeShape",
  "sh:property": [
    {
      "sh:node": {
        "sh:property": {
          "sh:datatype": {
            "@id": "http://www.w3.org/2001/XMLSchema#string"
          },
          "sh:in": {
            "@list": [
              {
                "@type": "xsd:string",
                "@value": "individual_taxpayer_identification_number"
              },
              {
                "@type": "xsd:string",
                "@value": "social_security_number"
              },
              {
                "@type": "xsd:string",
                "@value": "employer_identification_number"
              }
            ]
          },
          "sh:path": {
            "@id": "sc:has_value"
          }
        }
      },
      "sh:path": {
        "@id": "sc:has_taxpayer_identifier_type"
      }
    },
    {
      "sh:node": {
        "sh:property": {
          "sh:datatype": {
            "@id": "http://www.w3.org/2001/XMLSchema#string"
          },
          "sh:in": {
            "@list": [
              {
                "@type": "xsd:string",
                "@value": "married"
              },
              {
                "@type": "xsd:string",
                "@value": "separated"
              },
              {
                "@type": "xsd:string",
                "@value": "unmarried"
              }
            ]
          },
          "sh:path": {
            "@id": "sc:has_value"
          }
        }
      },
      "sh:path": {
        "@id": "sc:has_marital_status_type"
      }
    },
    {
      "sh:node": {
        "sh:property": {
          "sh:datatype": {
            "@id": "http://www.w3.org/2001/XMLSchema#string"
          },
          "sh:in": {
            "@list": [
              {
                "@type": "xsd:string",
                "@value": "jointly"
              },
              {
                "@type": "xsd:string",
                "@value": "not_jointly"
              }
            ]
          },
          "sh:path": {
            "@id": "sc:has_value"
          }
        }
      },
      "sh:path": {
        "@id": "sc:has_joint_asset_liability_reporting_type"
      }
    },
    {
      "sh:node": {
        "sh:property": {
          "sh:datatype": {
            "@id": "http://www.w3.org/2001/XMLSchema#string"
          },
          "sh:in": {
            "@list": [
              {
                "@type": "xsd:string",
                "@value": "civil_union"
              },
              {
                "@type": "xsd:string",
                "@value": "domestic_partnership"
              },
              {
                "@type": "xsd:string",
                "@value": "other"
              },
              {
                "@type": "xsd:string",
                "@value": "registered_reciprocal_beneficiary_relationship"
              }
            ]
          },
          "sh:path": {
            "@id": "sc:has_value"
          }
        }
      },
      "sh:path": {
        "@id": "sc:has_domestic_relationship_type"
      }
    },
    {
      "sh:node": {
        "sh:property": {
          "sh:datatype": {
            "@id": "http://www.w3.org/2001/XMLSchema#string"
          },
          "sh:path": {
            "@id": "sc:has_value"
          }
        }
      },
      "sh:path": {
        "@id": "sc:has_domestic_relationship_type_other_description"
      }
    },
    {
      "sh:node": {
        "sh:property": {
          "sh:datatype": {
            "@id": "http://www.w3.org/2001/XMLSchema#string"
          },
          "sh:path": {
            "@id": "sc:has_value"
          }
        }
      },
      "sh:path": {
        "@id": "sc:has_first_name"
      }
    },
    {
      "sh:node": {
        "sh:property": {
          "sh:datatype": {
            "@id": "http://www.w3.org/2001/XMLSchema#string"
          },
          "sh:path": {
            "@id": "sc:has_value"
          },
          "sh:pattern": "^[0-9]{2}$"
        }
      },
      "sh:path": {
        "@id": "sc:has_dependent_count"
      }
    },
    {
      "sh:node": {
        "sh:property": {
          "sh:datatype": {
            "@id": "http://www.w3.org/2001/XMLSchema#string"
          },
          "sh:path": {
            "@id": "sc:has_value"
          }
        }
      },
      "sh:path": {
        "@id": "sc:has_credit_report_identifier"
      }
    },
    {
      "sh:node": {
        "sh:property": {
          "sh:datatype": {
            "@id": "http://www.w3.org/2001/XMLSchema#string"
          },
          "sh:path": {
            "@id": "sc:has_value"
          }
        }
      },
      "sh:path": {
        "@id": "sc:has_full_name"
      }
    },
    {
      "sh:node": {
        "sh:property": {
          "sh:datatype": {
            "@id": "http://www.w3.org/2001/XMLSchema#string"
          },
          "sh:path": {
            "@id": "sc:has_value"
          }
        }
      },
      "sh:path": {
        "@id": "sc:has_policy_feature_description"
      }
    },
    {
      "sh:node": {
        "sh:property": {
          "sh:datatype": {
            "@id": "http://www.w3.org/2001/XMLSchema#string"
          },
          "sh:path": {
            "@id": "sc:has_value"
          }
        }
      },
      "sh:path": {
        "@id": "sc:has_domestic_relationship_state_code"
      }
    },
    {
      "sh:node": {
        "sh:property": {
          "sh:datatype": {
            "@id": "http://www.w3.org/2001/XMLSchema#string"
          },
          "sh:path": {
            "@id": "sc:has_value"
          }
        }
      },
      "sh:path": {
        "@id": "sc:has_community_property_state_resident_indicator"
      }
    },
    {
      "sh:node": {
        "sh:property": {
          "sh:datatype": {
            "@id": "http://www.w3.org/2001/XMLSchema#string"
          },
          "sh:path": {
            "@id": "sc:has_value"
          }
        }
      },
      "sh:path": {
        "@id": "sc:has_middle_name"
      }
    },
    {
      "sh:node": {
        "sh:property": {
          "sh:datatype": {
            "@id": "http://www.w3.org/2001/XMLSchema#string"
          },
          "sh:path": {
            "@id": "sc:has_value"
          }
        }
      },
      "sh:path": {
        "@id": "sc:has_domestic_relationship_indicator"
      }
    },
    {
      "sh:node": {
        "sh:property": {
          "sh:datatype": {
            "@id": "http://www.w3.org/2001/XMLSchema#string"
          },
          "sh:path": {
            "@id": "sc:has_value"
          }
        }
      },
      "sh:path": {
        "@id": "sc:has_self_declared_military_service_indicator"
      }
    },
    {
      "sh:node": {
        "sh:property": {
          "sh:datatype": {
            "@id": "http://www.w3.org/2001/XMLSchema#string"
          },
          "sh:path": {
            "@id": "sc:has_value"
          },
          "sh:pattern": "^[0-9]{3}$"
        }
      },
      "sh:path": {
        "@id": "sc:has_borrower_total_mortgaged_properties_count"
      }
    },
    {
      "sh:node": {
        "sh:property": {
          "sh:datatype": {
            "@id": "http://www.w3.org/2001/XMLSchema#string"
          },
          "sh:path": {
            "@id": "sc:has_value"
          }
        }
      },
      "sh:path": {
        "@id": "sc:has_spousal_va_benefits_eligibility_indicator"
      }
    },
    {
      "sh:node": {
        "sh:property": {
          "sh:datatype": {
            "@id": "http://www.w3.org/2001/XMLSchema#string"
          },
          "sh:path": {
            "@id": "sc:has_value"
          },
          "sh:pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$"
        }
      },
      "sh:path": {
        "@id": "sc:has_borrower_birth_date"
      }
    },
    {
      "sh:node": {
        "sh:property": {
          "sh:datatype": {
            "@id": "http://www.w3.org/2001/XMLSchema#string"
          },
          "sh:path": {
            "@id": "sc:has_value"
          }
        }
      },
      "sh:path": {
        "@id": "sc:has_suffix_name"
      }
    },
    {
      "sh:node": {
        "sh:property": {
          "sh:datatype": {
            "@id": "http://www.w3.org/2001/XMLSchema#string"
          },
          "sh:path": {
            "@id": "sc:has_value"
          },
          "sh:pattern": "^[0-9]{9}$"
        }
      },
      "sh:path": {
        "@id": "sc:has_taxpayer_identifier_value"
      }
    },
    {
      "sh:node": {
        "sh:property": {
          "sh:datatype": {
            "@id": "http://www.w3.org/2001/XMLSchema#string"
          },
          "sh:path": {
            "@id": "sc:has_value"
          }
        }
      },
      "sh:path": {
        "@id": "sc:has_last_name"
      }
    }
  ],
  "sh:targetClass": {
    "@id": "sc:borrower"
  }
}
Parameters
4
ParameterTypeExampleDescription
language_name required string path lexicon Language Name, can either be lexicon or florida
shape_type string query semantic Shape type, either semantic or syntactic.
product_api_identifier string query f4d96037-ef32-4c21-a90e-5261425d16d Staircase product api identifier.
schema_type string query request Shape type, either request or response.
Request bodyapplication/json
1 fields
FieldTypeDescription
graph_entitiesobject[]List of graph entities with required constrains.
labelstringLabel of a class or a property in Lexicon.
lexicon_identifierstringLexicon Identifier of a class or a property in Lexicon.
subClassOfstringType of a graph entity.class
container_namestringContainer name of a class.
Other responses

200400500

Language Utils

POST /language-equivalent-generator/execute

Entity Equator

entityEquator

Entity Equator API can be utilized to generate equivalence class information from the mappings. This API requires the input of a ruleset_name and rules. You can also specify callback_url. The rules need to be defined from/to the staircase-graph/lexicon in order to generate equivalence information. This operation is asynchronous, meaning that once you execute this API, the process of generating equivalences will commence and the results will be visible in the list-view after a certain amount of time.

Show the rest

Important note: ruleset_name should one of the following this template:

"staircase-graph_CUSTOMER_LANGUAGE_NAME_TRANSLATE"
"CUSTOMER_LANGUAGE_NAME_staircase-graph_TRANSLATE"
"lexicon_CUSTOMER_LANGUAGE_NAME_TRANSLATE"
"CUSTOMER_LANGUAGE_NAME_lexicon_TRANSLATE"

Example input:

 {
 "rules": [
 {
 "id": "2",
 "definition": {
 "from": {
 "path": "foreign_objects"
 },
 "to": {
 "path": "blobs"
 },
 "attribute_mappings": [
 {
 "from": {
 "path": "has_mime_type_identifier"
 },
 "to": {
 "path": ""
 },
 "attribute_mappings": [
 {
 "from": {
 "path": "has_value"
 },
 "to": {
 "path": "mimeTypeIdentifier"
 }
 }
 ]
 },
 {
 "from": {
 "path": "has_object_name"
 },
 "to": {
 "path": ""
 },
 "attribute_mappings": [
 {
 "from": {
 "path": "has_value"
 },
 "to": {
 "path": "name"
 }
 }
 ]
 }
 ]
 }
 },
 {
 "id": "3",
 "definition": {
 "from": {
 "path": "messages",
 "evaluate_separate": True
 },
 "to": {
 "path": "messages"
 },
 "attribute_mappings": [
 {
 "from": {
 "path": "with_document_sets",
 "evaluate_separate": True
 },
 "to": {
 "path": "messages"
 },
 "attribute_mappings": [
 {
 "from": {
 "path": "with_document_set"
 },
 "to": {
 "path": ""
 },
 "attribute_mappings": [
 {
 "from": {
 "path": "with_document"
 },
 "to": {
 "path": ""
 },
 "attribute_mappings": [
 {
 "from": {
 "path": "has_document_identifier"
 },
 "to": {
 "path": ""
 },
 "attribute_mappings": [
 {
 "from": {
 "path": "has_value"
 },
 "to": {
 "path": "id"
 }
 }
 ]
 }
 ]
 }
 ]
 }
 ]
 }
 ]
 }
 }
 ],
 "ruleset_name": "staircase-graph_CUSTOMER_LANGUAGE_NAME_TRANSLATE"
 }

Important note: In order to execute this API automatically with creating/updating rules: please subscribe lexicon-workflow-data bundle in marketplace.

You can review generated equivalences from list-view:

Request
application/json
{
  "ruleset_name": "CUSTOMER_LANGUAGE_NAME_staircase-graph_TRANSLATE",
  "rules": [
    {
      "id": "1",
      "definition": {
        "from": {
          "path": "foreign_objects"
        },
        "to": {
          "path": "blobs"
        },
        "attribute_mappings": [
          {
            "from": {
              "path": "has_mime_type_identifier"
            },
            "to": {
              "path": ""
            },
            "attribute_mappings": [
              {
                "from": {
                  "path": "has_value"
                },
                "to": {
                  "path": "mimeTypeIdentifier"
                }
              }
            ]
          },
          {
            "from": {
              "path": "has_object_name"
            },
            "to": {
              "path": ""
            },
            "attribute_mappings": [
              {
                "from": {
                  "path": "has_value"
                },
                "to": {
                  "path": "name"
                }
              }
            ]
          }
        ]
      }
    },
    {
      "id": "2",
      "definition": {
        "from": {
          "path": "messages",
          "evaluate_separate": true
        },
        "to": {
          "path": "messages"
        },
        "attribute_mappings": [
          {
            "from": {
              "path": "with_document_sets",
              "evaluate_separate": true
            },
            "to": {
              "path": "messages"
            },
            "attribute_mappings": [
              {
                "from": {
                  "path": "with_document_set"
                },
                "to": {
                  "path": ""
                },
                "attribute_mappings": [
                  {
                    "from": {
                      "path": "with_document"
                    },
                    "to": {
                      "path": ""
                    },
                    "attribute_mappings": [
                      {
                        "from": {
                          "path": "has_document_identifier"
                        },
                        "to": {
                          "path": ""
                        },
                        "attribute_mappings": [
                          {
                            "from": {
                              "path": "has_value"
                            },
                            "to": {
                              "path": "id"
                            }
                          }
                        ]
                      }
                    ]
                  }
                ]
              }
            ]
          }
        ]
      }
    }
  ]
}
Response
application/json

Request data failed validation

{
  "code": 400,
  "message": "Bad Request"
}
Parameters
1
ParameterTypeExampleDescription
x-api-key required string header xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Environment API Key.
Request bodyapplication/json
2 fields
FieldTypeDescription
ruleset_namestringRuleset name for the rules
rulesobject[]Rule array
Response 200application/json
2 fields

Successfully switched input source

FieldTypeDescription
codenumberStatus code
messageobjectMessage
Response 400application/json
1 fields

Request data failed validation

FieldTypeDescription
errorobjectUnprocessed entity error.
coderequiredstringError name.
messagerequiredstringError description.
Response 422application/json
1 fields

Unprocessed Entity

FieldTypeDescription
errorobjectUnprocessed entity error.
coderequiredstringError name.
messagerequiredstringError description.
POST /entity-translation/execute

Entity Translation

entityTranslation

This API can translate graph entities by providing equivalent information between the input language and output language.

Entity Translation API requires the input_language and output_language parameters to be provided as query parameters, and the translated data object should be included in the request body.

Example input:

{
 "graph_entities": [
 {
 "@id": "g_e_1",
 "@type": "graph_entity",
 "has_comment": {
 "has_value": "string"
 },
 "has_container_name": {
 "has_value": "string"
 },
 "has_data_path": {
 "has_value": "string"
 },
 "has_deprecation_indicator": {
 "has_value": "boolean"
 },
 "has_domain": {
 "has_value": "string"
 },
 "has_graph_entity_type": {
 "has_value": "enum - class, data_property, object_property"
 },
 "has_label": {
 "has_value": "string"
 },
 "has_language": {
 "has_value": "string"
 },
 "has_lexicon_identifier": {
 "has_value": "string"
 },
 "has_range": {
 "has_value": "string"
 }
 }
 ]
}

The API performs entity translation based on the equivalent information for properties in the languages.

Show the rest
Request
application/json
{
  "graph_entities": [
    {
      "@id": "g_e_1",
      "@type": "graph_entity",
      "has_comment": {
        "has_value": "string"
      },
      "has_container_name": {
        "has_value": "string"
      },
      "has_data_path": {
        "has_value": "string"
      },
      "has_deprecation_indicator": {
        "has_value": true
      },
      "has_domain": {
        "has_value": "string"
      },
      "has_graph_entity_type": {
        "has_value": "class"
      },
      "has_label": {
        "has_value": "string"
      },
      "has_language": {
        "has_value": "string"
      },
      "has_lexicon_identifier": {
        "has_value": "string"
      },
      "has_range": {
        "has_value": "string"
      }
    }
  ]
}
Response
application/json

Request data failed validation

{
  "code": 400,
  "message": "Bad Request"
}
Parameters
3
ParameterTypeExampleDescription
x-api-key required string header xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Environment API Key.
input_language required string query input_language The input language for the translation. It can be 'staircase-graph' or a customer-specific language.
output_language required string query output_language The output language for the translation. It can be 'staircase-graph' or a customer-specific language.
Request bodyapplication/json
1 fields
FieldTypeDescription
graph_entitiesobject[]Graph entities that is going to be translated
@idstringThe unique identifier for the graph entity
@typestringThe type of the graph entity
has_commentobjectProperty for "has_comment"
has_valuestringThe value of the comment for the entity
has_container_nameobjectProperty for "has_container_name"
has_valuestringThe value of the container name for the entity
has_data_pathobjectProperty for "has_data_path"
has_valuestringThe value of the data path for the entity
has_deprecation_indicatorobjectProperty for "has_deprecation_indicator"
has_valuebooleanThe value of the deprecation indicator for the entity
has_domainobjectProperty for "has_domain"
has_valuestringThe value of the domain for the entity
has_graph_entity_typeobjectProperty for "has_graph_entity_type"
has_valuestringThe value of the graph entity type for the entity
has_labelobjectProperty for "has_label"
has_valuestringThe value of the label for the entity
has_languageobjectProperty for "has_language"
has_valuestringThe value of the language for the entity
has_lexicon_identifierobjectProperty for "has_lexicon_identifier"
has_valuestringThe value of the lexicon identifier for the entity
has_rangeobjectProperty for "has_range"
has_valuestringThe value of the range for the entity
Response 200application/json
2 fields

Successfully translated entity

FieldTypeDescription
codenumberStatus code
messageobjectMessage
Response 400application/json
1 fields

Request data failed validation

FieldTypeDescription
errorobjectUnprocessed entity error.
coderequiredstringError name.
messagerequiredstringError description.
Response 422application/json
1 fields

Unprocessed Entity

FieldTypeDescription
errorobjectUnprocessed entity error.
coderequiredstringError name.
messagerequiredstringError description.
POST /graph-registration/{language_name}

Register Language

registerLanguage

Language Registration

The Register Language API allows you to register a customer's language in Persistence Graph. To register a language, you need to provide a JSON-Schema and the name of the language as input. Please note that this operation is asynchronous.

After registering the language, you can view the resulting schema in the entity viewer of your environment by appending the language name as the first path parameter. For example, to view the schema for a language named "test_language," you would use the URL:

Show the rest

The Entity Viewer incorporates a caching mechanism with a refresh rate of 30 minutes. This means that once you have viewed the language schema, any changes made to the JSON-Schema will be reflected in the viewer after a 30-minute interval.

In order to get status of your language registration you can either check returned transaction and collection ids or add callback_url parameter to request body.

In order to use this API please subscribe to "Language Graph Registration" component in your environment.

Important note: In order to execute this API automatically with creating languages: please subscribe lexicon-workflow-data bundle in marketplace.

Request
application/json
{
  "json_schema": {
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "title": "Person",
    "type": "object",
    "properties": {
      "firstName": {
        "type": "string",
        "description": "The person's first name."
      },
      "lastName": {
        "type": "string",
        "description": "The person's last name."
      },
      "age": {
        "description": "Age in years which must be equal to or greater than zero.",
        "type": "integer"
      }
    }
  }
}
Response
application/json

Successfully switched input source

{
  "message": "Registration process started!",
  "transaction_id": "01FJCADX5QEXEDVRWNXAK206MA",
  "collection_id": "01EZQ32PJQGKRA6HR8D72Q9FFF"
}
Parameters
2
ParameterTypeExampleDescription
x-api-key required string header xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Environment API Key.
language_name required string path test_language Language Name
Request bodyapplication/json
2 fields
FieldTypeDescription
callback_urlstringCallback url.
json_schemarequiredobjectJSON-Schema of a language.
Response 200application/json
3 fields

Successfully switched input source

FieldTypeDescription
messageobjectMessage.
transaction_idobjectTransaction ID.
collection_idobjectCollection ID.
Response 400application/json
1 fields

Request data failed validation

FieldTypeDescription
errorobjectUnprocessed entity error.
messagerequiredobjectMessage.
transaction_idobjectTransaction ID.
collection_idobjectCollection ID.
POST /invocation-extension

Extend Invocation

extendInvocation

This endpoint receives list of invocations with invocation codes and extends each with invocation category and invocation message. One can also provide message parameters that will be replacing placeholders in the invocation message if any are present. Invocation codes, categories and messages are configured through the list view. In order to use this feature please subscribe to Lexicon Invocation Extension component in the Marketplace.

Request
application/json

Florida Example

{
  "invocations": [
    {
      "has_invocation_code_type": {
        "has_value": "40002"
      },
      "has_message_parameters": {
        "has_value": [
          "has_first_name",
          "person"
        ]
      }
    },
    {
      "has_invocation_code_type": {
        "has_value": "2000"
      }
    }
  ]
}
Response
application/json

Florida Example

{
  "invocations": [
    {
      "has_invocation_code_type": {
        "has_value": "40002"
      },
      "has_message_parameters": {
        "has_value": [
          "has_first_name",
          "person"
        ]
      },
      "has_invocation_category_type": {
        "has_value": "CARDINALITY_ERROR"
      },
      "has_invocation_message": {
        "has_value": "Cardinality Error: Less than the required number of values found fo",
        "the property has_first_name on the specified class at person. Ensure the correct cardinality according to the constraints'": null
      }
    },
    {
      "has_invocation_code_type": {
        "has_value": "2000"
      },
      "has_invocation_category_type": {
        "has_value": "OK"
      },
      "has_invocation_message": {
        "has_value": "Invocation is successful"
      }
    }
  ]
}
Request bodyapplication/json
1 fields
FieldTypeDescription
invocationsarrayList of Invocations
Response 200application/json
1 fields

The operation was successful.

FieldTypeDescription
invocationsarrayExtended invocation response
Other responses

400500

Canonical model

Errors

400403404422500

Type to search.