Request Access
Data SamplesAPI DocsMCPMethodologyAboutRequest Access

API Reference

API Documentation

RESTful JSON API for CRE private credit intelligence. Programmatic access to loan coverage, entity resolution, capital-stack triangulation, capital graph traversal, and decision-ready signals across $2T+ in tracked debt spanning private and public layers.

Base URLhttps://api.{your-domain}/v1

Authentication

API Key Authentication

All requests require a valid API key passed via the request header. Keys are issued per license tier and scoped to your permitted endpoints. Separate keys are provided for production and sandbox environments.

Do not expose API keys in client-side code, public repositories, or browser requests. Keys that appear in public sources will be revoked automatically.

Example request
curl -s "https://api.{your-domain}/v1/loans?state=TX&limit=5" \
  -H "Authorization: Bearer your-api-key"

Endpoints

Endpoint Reference

Representative endpoints across the four primary data surfaces: loans, entities, capital graph, and signals. The full endpoint reference and OpenAPI 3.1 specification are provided on license activation. All responses return JSON with a consistent envelope.

GET/v1/loans

Search loan records

Query the normalized loan coverage layer. Filter by geography, lender, balance range, maturity window, distress tier, and more. Returns paginated loan-level records with debt sizing, collateral, lender, and confidence context.

Parameters
ParameterTypeRequiredDescription
statestringNoTwo-letter US state code (e.g. TX, FL, CA)
lenderstringNoLender name or normalized key across any debt layer (insurance, bank, private credit, CMBS servicer)
min_balanceintegerNoMinimum book value in dollars (e.g. 10000000)
max_balanceintegerNoMaximum book value in dollars
maturity_beforedateNoISO 8601 date. Return loans maturing before this date
maturity_afterdateNoISO 8601 date. Return loans maturing after this date
rate_pressurestringNoRate pressure classification (tier names provided with license)
pageintegerNoPage number (default 1)
per_pageintegerNoResults per page (default 25, max 100)
Example request
curl -s "https://api.{your-domain}/v1/loans?state=TX&lender=northbridge&min_balance=10000000&per_page=25" \
  -H "Authorization: Bearer your-api-key"
Response
{
  "data": [
    {
      "loan_number": "loan_demo_01842",
      "book_value": 18400000,
      "interest_rate": 3.85,
      "property_type": "industrial",
      "property_city": "Metro A",
      "property_state": "TX",
      "lender_normalized": "Northbridge Life",
      "maturity_date": "2027-03-15",
      "rate_pressure": "elevated",
      "confidence_tier": "confirmed"
    },
    {
      "loan_number": "loan_demo_02917",
      "book_value": 32100000,
      "interest_rate": 4.12,
      "property_type": "office",
      "property_city": "Metro B",
      "property_state": "TX",
      "lender_normalized": "Northbridge Life",
      "maturity_date": "2026-11-01",
      "rate_pressure": "critical",
      "confidence_tier": "confirmed"
    }
  ],
  "pagination": {
    "page": 1,
    "per_page": 25,
    "total": 47
  },
  "meta": {
    "request_id": "req_01J8XKFV2N"
  }
}
GET/v1/loans/{loan_number}

Get loan detail

Retrieve a single loan record by loan number. Returns the full record including extended fields not present in list responses.

Parameters
ParameterTypeRequiredDescription
loan_numberstringYesLoan number (e.g. loan_demo_01842)
Example request
curl -s "https://api.{your-domain}/v1/loans/loan_demo_01842" \
  -H "Authorization: Bearer your-api-key"
Response
{
  "data": {
    "loan_number": "loan_demo_01842",
    "book_value": 18400000,
    "interest_rate": 3.85,
    "property_type": "industrial",
    "property_city": "Metro A",
    "property_state": "TX",
    "lender_normalized": "Northbridge Life",
    "origination_date": "2019-03-15",
    "maturity_date": "2027-03-15",
    "rate_pressure": "elevated",
    "confidence_tier": "confirmed"
  },
  "meta": {
    "request_id": "req_01J8XKFV3Q"
  }
}
GET/v1/entities

Search entities

Query the resolved entity layer. Search by name or minimum confidence threshold. Returns entities with resolution metadata and relationship counts.

Parameters
ParameterTypeRequiredDescription
namestringNoFuzzy name search across entity names
confidence_minnumberNoMinimum confidence score (0.0 to 1.0)
pageintegerNoPage number (default 1)
per_pageintegerNoResults per page (default 25, max 100)
Example request
curl -s "https://api.{your-domain}/v1/entities?name=redacted+holdings&per_page=10" \
  -H "Authorization: Bearer your-api-key"
Response
{
  "data": [
    {
      "entity_name": "Redacted Holdings LLC",
      "confidence": 0.94,
      "confidence_tier": "confirmed",
      "related_loan_count": 12
    },
    {
      "entity_name": "Redacted Holdings Partners LP",
      "confidence": 0.87,
      "confidence_tier": "confirmed",
      "related_loan_count": 5
    }
  ],
  "pagination": {
    "page": 1,
    "per_page": 10,
    "total": 3
  },
  "meta": {
    "request_id": "req_01K2MNP8V4"
  }
}
GET/v1/entities/{loan_number}/ownership

Ownership chain

Retrieve the resolved ownership chain for a loan. Returns the hierarchical path from borrower through operating entities to ultimate beneficial owner, with confidence at each level.

Parameters
ParameterTypeRequiredDescription
loan_numberstringYesLoan number (e.g. loan_demo_01842)
Example request
curl -s "https://api.{your-domain}/v1/entities/loan_demo_01842/ownership" \
  -H "Authorization: Bearer your-api-key"
Response
{
  "data": {
    "loan_number": "loan_demo_01842",
    "chain": [
      {
        "entity_name": "Redacted Borrower SPE LLC",
        "role": "borrower",
        "confidence": 0.98
      },
      {
        "entity_name": "Redacted Holdings LLC",
        "role": "sponsor",
        "confidence": 0.94
      },
      {
        "entity_name": "Redacted Capital Partners",
        "role": "owner",
        "confidence": 0.88
      }
    ],
    "confidence_tier": "confirmed"
  },
  "meta": {
    "request_id": "req_01K2MNPAW6"
  }
}
GET/v1/graph/paths

Capital graph paths

Traverse the capital relationship graph. Returns connected paths between loans, entities, capital sources, and related exposure. Use this to map concentration risk and relationship networks.

Parameters
ParameterTypeRequiredDescription
loan_numberstringNoLoan number to start traversal (e.g. loan_demo_01842)
entity_namestringNoEntity name to start traversal
depthintegerNoMax traversal depth (default 3, max 6)
pageintegerNoPage number (default 1)
per_pageintegerNoMax paths per page (default 25, max 25)
Example request
curl -s "https://api.{your-domain}/v1/graph/paths?loan_number=loan_demo_01842&depth=3" \
  -H "Authorization: Bearer your-api-key"
Response
{
  "data": {
    "root": "loan_demo_01842",
    "depth_reached": 3,
    "paths": [
      {
        "edges": [
          { "from": "loan_demo_01842", "to": "Redacted Borrower SPE LLC", "relation": "borrower", "confidence": 0.98 },
          { "from": "Redacted Borrower SPE LLC", "to": "Redacted Holdings LLC", "relation": "owned_by", "confidence": 0.94 },
          { "from": "Redacted Holdings LLC", "to": "Northbridge Life General Account", "relation": "capital_source", "confidence": 0.91 }
        ]
      }
    ]
  },
  "pagination": {
    "page": 1,
    "per_page": 25,
    "total": 4
  },
  "meta": {
    "request_id": "req_01L4QRS7V2"
  }
}
GET/v1/signals

Decision-ready signals

Retrieve scored signals across the coverage layer. Signals include rate pressure, maturity timing, concentration risk, and stress indicators.

Parameters
ParameterTypeRequiredDescription
statestringNoTwo-letter US state code
signal_typestringNoSignal category (types available on license)
severitystringNoSeverity level (tier values provided with license)
pageintegerNoPage number (default 1)
per_pageintegerNoResults per page (default 25, max 100)
Example request
curl -s "https://api.{your-domain}/v1/signals?state=FL&severity=critical&per_page=10" \
  -H "Authorization: Bearer your-api-key"
Response
{
  "data": [
    {
      "signal_type": "rate_pressure",
      "severity": "critical",
      "loan_number": "loan_demo_08917",
      "property_state": "FL",
      "property_city": "Metro C",
      "property_type": "office",
      "book_value": 44200000,
      "maturity_date": "2026-09-01",
      "lender_normalized": "Summit Capital Insurance",
      "description": "Fixed coupon below current market. Maturity inside 6 months. Refinance wall exposure."
    }
  ],
  "pagination": {
    "page": 1,
    "per_page": 10,
    "total": 18
  },
  "meta": {
    "request_id": "req_01L4QRS8X4"
  }
}

Pagination

Paginated Responses

List endpoints return a pagination object with page, per_page, and total. Request subsequent pages by incrementing the page query parameter. Per-endpoint caps apply; defaults are noted in each endpoint’s parameter table.

  1. Make your initial request with the desired filters and per_page (default 25).
  2. Read the pagination.total value in the response to determine how many pages exist.
  3. Increment the page query parameter to request the next page.
  4. Stop when page × per_page ≥ total.
Paginated request
# First page
curl -s "https://api.{your-domain}/v1/loans?state=TX&per_page=25" \
  -H "Authorization: Bearer your-api-key"

# Second page
curl -s "https://api.{your-domain}/v1/loans?state=TX&per_page=25&page=2" \
  -H "Authorization: Bearer your-api-key"

Rate Limits

Rate Limiting

Rate limits are enforced per API key and scale by license tier. Every response includes X-RateLimit-Remaining, X-RateLimit-Reset, and X-RateLimit-Daily-Remaining headers. Exceeding a limit returns HTTP 429 with a Retry-After header indicating seconds until the next available window. Specific per-tier limits are provided on license activation.

TierEndpointsRequests / MinDaily Quota
Base/v1/loans, /v1/signalsBy integration mandateBy integration mandate
Resolution/v1/entities, /v1/entities/*/ownershipBy integration mandateBy integration mandate
Capital Graph/v1/graph/pathsBy integration mandateBy integration mandate
CompleteAll endpoints (bundled engagement)By integration mandateBy integration mandate

Errors

Error Codes

The API uses standard HTTP status codes. Error responses return a JSON body with an error object containing code, message, and request_id for support correlation.

StatusTitleDescription
400Bad RequestThe request was malformed or contains invalid parameters. Check query parameter types and values.
401UnauthorizedNo API key provided or the key is invalid. Include a valid API key header with your request.
403ForbiddenThe API key does not have permission for this endpoint or resource. Check your license tier.
404Not FoundThe requested resource does not exist. Verify the ID or loan number.
429Rate LimitedRequest rate or daily quota exceeded. Back off and retry after the window indicated in Retry-After header.
500Internal ErrorAn unexpected server error occurred. Retry with exponential backoff. Contact support if persistent.
Error response example
{
  "error": {
    "code": "rate_limited",
    "message": "Daily quota exceeded. Retry after the window indicated in Retry-After.",
    "request_id": "req_01L4QRS9Z7"
  }
}

Get Started

Request API Access

API keys are issued on engagement activation. Submit your use case and team details to begin the access process.

Request Access