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 graph traversal, and decision-ready signals across $1.4T+ in tracked debt.

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

Six endpoints across four data surfaces: loans, entities, capital graph, and signals. All responses return JSON with consistent envelope structure.

GET/v1/loans

Search loan records

Query the normalized loan coverage layer. Filter by geography, insurer, 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)
insurerstringNoInsurer name or normalized key (e.g. northbridge, summit)
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: critical, elevated, moderate, low
limitintegerNoResults per page (default 25, max 100)
cursorstringNoPagination cursor from previous response
Example request
curl -s "https://api.{your-domain}/v1/loans?state=TX&insurer=northbridge&min_balance=10000000&limit=25" \
  -H "Authorization: Bearer your-api-key"
Response
{
  "object": "list",
  "count": 47,
  "has_more": true,
  "next_cursor": "eyJpZCI6MTg0Mn0",
  "items": [
    {
      "id": "ln_01J8XKFV2N",
      "loan_number": "loan_demo_01842",
      "book_value": 18400000,
      "interest_rate": 3.85,
      "property_type": "industrial",
      "property_city": "Metro A",
      "property_state": "TX",
      "insurer_normalized": "Northbridge Life",
      "maturity_date": "2027-03-15",
      "rate_pressure": "elevated",
      "confidence_tier": "confirmed",
    },
    {
      "id": "ln_01J8XKFV3P",
      "loan_number": "loan_demo_02917",
      "book_value": 32100000,
      "interest_rate": 4.12,
      "property_type": "office",
      "property_city": "Metro B",
      "property_state": "TX",
      "insurer_normalized": "Northbridge Life",
      "maturity_date": "2026-11-01",
      "rate_pressure": "critical",
      "confidence_tier": "confirmed",
    }
  ]
}
GET/v1/loans/{id}

Get loan detail

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

Parameters
ParameterTypeRequiredDescription
idstringYesLoan identifier (e.g. ln_01J8XKFV2N)
Example request
curl -s "https://api.{your-domain}/v1/loans/ln_01J8XKFV2N" \
  -H "Authorization: Bearer your-api-key"
Response
{
  "object": "loan",
  "id": "ln_01J8XKFV2N",
  "loan_number": "loan_demo_01842",
  "book_value": 18400000,
  "interest_rate": 3.85,
  "property_type": "industrial",
  "property_city": "Metro A",
  "property_state": "TX",
  "insurer_normalized": "Northbridge Life",
  "origination_date": "2019-03-15",
  "maturity_date": "2027-03-15",
  "rate_pressure": "elevated",
  "rate_pressure_score": 72.4,
  "confidence_tier": "confirmed",
  "created_at": "2024-09-12T14:22:00Z",
  "updated_at": "2026-03-28T08:15:00Z"
}
GET/v1/entities

Search entities

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

Parameters
ParameterTypeRequiredDescription
namestringNoFuzzy name search across entity names
typestringNoEntity type: borrower, owner, sponsor, ubo, servicer
confidence_minnumberNoMinimum confidence score (0.0 to 1.0)
limitintegerNoResults per page (default 25, max 100)
cursorstringNoPagination cursor from previous response
Example request
curl -s "https://api.{your-domain}/v1/entities?name=redacted+holdings&type=sponsor&limit=10" \
  -H "Authorization: Bearer your-api-key"
Response
{
  "object": "list",
  "count": 3,
  "has_more": false,
  "next_cursor": null,
  "items": [
    {
      "id": "ent_01K2MNP8V4",
      "name": "Redacted Holdings LLC",
      "type": "sponsor",
      "confidence": 0.94,
      "confidence_tier": "high",
      "related_loan_count": 12,
      "related_entity_count": 7,
    },
    {
      "id": "ent_01K2MNP9X6",
      "name": "Redacted Holdings Partners LP",
      "type": "sponsor",
      "confidence": 0.87,
      "confidence_tier": "high",
      "related_loan_count": 5,
      "related_entity_count": 3,
    }
  ]
}
GET/v1/entities/{id}/ownership

Ownership chain

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

Parameters
ParameterTypeRequiredDescription
idstringYesEntity identifier (e.g. ent_01K2MNP8V4)
Example request
curl -s "https://api.{your-domain}/v1/entities/ent_01K2MNP8V4/ownership" \
  -H "Authorization: Bearer your-api-key"
Response
{
  "object": "ownership_chain",
  "entity_id": "ent_01K2MNP8V4",
  "chain": [
    {
      "level": 0,
      "entity_name": "Redacted Borrower SPE LLC",
      "role": "borrower",
      "confidence": 0.98
    },
    {
      "level": 1,
      "entity_name": "Redacted Holdings LLC",
      "role": "sponsor",
      "confidence": 0.94
    },
    {
      "level": 2,
      "entity_name": "Redacted Capital Partners",
      "role": "owner",
      "confidence": 0.88
    },
    {
      "level": 3,
      "entity_name": "J. Redacted",
      "role": "ubo",
      "confidence": 0.79
    }
  ],
  "resolution_method": "multi_stage",
}
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_idstringNoEntity ID to start traversal (e.g. ent_01K2MNP8V4)
depthintegerNoMax traversal depth (default 3, max 6)
limitintegerNoMax paths returned (default 25, max 100)
Example request
curl -s "https://api.{your-domain}/v1/graph/paths?loan_number=loan_demo_01842&depth=3&limit=25" \
  -H "Authorization: Bearer your-api-key"
Response
{
  "object": "graph_result",
  "root": "loan_demo_01842",
  "root_type": "loan",
  "path_count": 4,
  "depth_reached": 3,
  "paths": [
    {
      "path_id": "gp_01",
      "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 }
      ]
    },
    {
      "path_id": "gp_02",
      "edges": [
        { "from": "loan_demo_01842", "to": "Redacted Borrower SPE LLC", "relation": "borrower", "confidence": 0.98 },
        { "from": "Redacted Borrower SPE LLC", "to": "loan_demo_03291", "relation": "common_borrower", "confidence": 0.86 }
      ]
    }
  ],
  "connected_entity_count": 8,
  "connected_loan_count": 3,
}
GET/v1/signals

Decision-ready signals

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

Parameters
ParameterTypeRequiredDescription
statestringNoTwo-letter US state code
signal_typestringNoType: rate_pressure, maturity_timing, concentration_risk, stress_indicator, distress
severitystringNoSeverity level: critical, elevated, moderate, low
limitintegerNoResults per page (default 25, max 100)
cursorstringNoPagination cursor from previous response
Example request
curl -s "https://api.{your-domain}/v1/signals?state=FL&signal_type=rate_pressure&severity=critical&limit=10" \
  -H "Authorization: Bearer your-api-key"
Response
{
  "object": "list",
  "count": 18,
  "has_more": true,
  "next_cursor": "eyJpZCI6ODkxN30",
  "items": [
    {
      "id": "sig_01L4QRS7V2",
      "signal_type": "rate_pressure",
      "severity": "critical",
      "loan_number": "loan_demo_08917",
      "loan_id": "ln_01J7WKDV1M",
      "property_state": "FL",
      "property_city": "Metro C",
      "property_type": "office",
      "book_value": 44200000,
      "interest_rate": 3.25,
      "current_market_rate": 6.80,
      "rate_gap_bps": 355,
      "rate_pressure_score": 91.2,
      "maturity_date": "2026-09-01",
      "insurer_normalized": "Summit Capital Insurance",
      "description": "Fixed coupon 355bps below current market. Maturity inside 6 months. Refinance wall exposure.",
    },
    {
      "id": "sig_01L4QRS8X4",
      "signal_type": "rate_pressure",
      "severity": "critical",
      "loan_number": "loan_demo_11204",
      "loan_id": "ln_01J7WKDV3P",
      "property_state": "FL",
      "property_city": "Metro D",
      "property_type": "multifamily",
      "book_value": 27800000,
      "interest_rate": 3.60,
      "current_market_rate": 6.80,
      "rate_gap_bps": 320,
      "rate_pressure_score": 86.7,
      "maturity_date": "2026-12-15",
      "insurer_normalized": "Ridgeline Mutual",
      "description": "Fixed coupon 320bps below market. Maturity inside 9 months. Elevated refinance pressure.",
    }
  ]
}

Pagination

Cursor-Based Pagination

All list endpoints use cursor-based pagination. This provides stable results even when the underlying data is updated between requests. Each response includes has_more and next_cursor fields.

  1. Make your initial request with the desired filters and limit (default 25, max 100).
  2. Check the has_more field in the response. If true, more results exist.
  3. Pass the next_cursor value as the cursor query parameter in your next request.
  4. Repeat until has_more is false or next_cursor is null.
Paginated request
# First page
curl -s "https://api.{your-domain}/v1/loans?state=TX&limit=25" \
  -H "Authorization: Bearer your-api-key"

# Next page (using cursor from previous response)
curl -s "https://api.{your-domain}/v1/loans?state=TX&limit=25&cursor=eyJpZCI6MTg0Mn0" \
  -H "Authorization: Bearer your-api-key"

Rate Limits

Rate Limiting

Rate limits are enforced per API key and vary by endpoint group and license tier. Exceeding limits returns HTTP 429 with a Retry-After header indicating seconds until the next available window.

TierEndpointsRequests / MinDaily Quota
Base/v1/loans, /v1/signalsTiered by subscription levelTiered by subscription level
Resolution/v1/entities, /v1/entities/*/ownershipTiered by subscription levelTiered by subscription level
Capital Graph/v1/graph/pathsTiered by subscription levelTiered by subscription level
CompleteAll endpoints (bundled license)Tiered by subscription levelTiered by subscription level

Errors

Error Codes

The API uses standard HTTP status codes. Error responses include a JSON body with error, message, and status fields.

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": "rate_limited",
  "message": "Daily quota exceeded for /v1/loans. Resets at 00:00 UTC.",
  "status": 429,
  "retry_after": 3420
}

Get Started

Request API Access

API keys are issued as part of the annual license. Submit your use case and team details to begin the access process.

Request Access