Developer Documentation

Setup and usage instructions for your Developer Account, API token, and 30-day refresh flow.

iIntroduction

Start with account prerequisites, token generation, and the core onboarding flow for your first authenticated request.

Read Guide

vInstallation

Use your credentials safely, configure your environment variables, and test both token refresh and data access.

Open Setup

{ }APIs

Review endpoint behavior and payload patterns before moving into full production integration.

Open OpenAPI

+Integrations

Connect your application logic with account-level API tokens and automate the 30-day refresh cycle with username or email plus password.

View Details

*Utilities

Use helper examples and conventions to simplify authentication, token rotation, retries, and error handling.

Explore Utilities

~Web

Navigate the web tools quickly with direct links to your developer account and docs hub.

Open Account

API Reference

Route note: /api/case/download/<case_id> is enabled from the Flask web app via the api blueprint, alongside the matching web route /case/download/<case_id>. Other Flask /api/... routes may remain unavailable unless separately enabled.

Public, read-only REST API for viewing life insurance policies listed on Life Policy Market. This API is intended for programmatic access to life settlement inventory, such as powering websites, tools, and analytics dashboards.

  • Base URL: https://api.lifepolicymarket.com
  • Version: 1.0.0
  • Authentication: Per-client API token required via X-API-Key header
  • Methods: GET for data endpoints, POST for token refresh
  • Format: JSON over HTTPS

Authentication (API Tokens)

This API uses per-client API tokens.

  • Required request header: X-API-Key: <raw_token>
  • Server-side validation:
  • Computes SHA-256 hash of the provided raw token
  • Validates the hash against the active token registry
  • Requires token status to be active
  • Requires the token to be refreshed every 30 days

Getting a Token

  1. Sign in to the Developer Account portal at https://www.lifepolicymarket.com/account/login
  2. Generate a new token from your Developer Account page
  3. Copy and store the token immediately (shown once)

Refreshing a Token

Rotation is client-initiated. The client's integration should automatically call the refresh endpoint with the same Developer Account username/email and password used in the portal before the current token expires.

The server does not rotate tokens on its own. Instead, the client's system requests a replacement token, the server generates it, stores the new token hash in Salesforce, and returns the new raw token in the response. After a successful refresh, the client should immediately replace its stored token with the new access_token.

curl -X POST "https://api.lifepolicymarket.com/token/refresh"   -H "Content-Type: application/json"   -d '{
    "login": "your-email-or-username",
    "password": "your-password"
  }'

Example response:

{
  "access_token": "NEW_RAW_TOKEN",
  "token_type": "api_key",
  "header_name": "X-API-Key",
  "issued_at": "2026-06-11T00:00:00Z",
  "refresh_by": "2026-07-11T00:00:00Z",
  "rotation_days": 30,
  "client_name": "Client A"
}

Recommended client behavior:

  • Store access_token and refresh_by
  • Schedule an automatic refresh a few days before refresh_by
  • If an API call returns 401, refresh the token once and retry the request with the new token

Example

curl -H "X-API-Key: YOUR_RAW_TOKEN" "https://api.lifepolicymarket.com/cases?page=1"

Rate Limits

  • Requests are limited to 10 requests per 60 seconds per client IP address.
  • Exceeding the limit returns 429 with {"detail": "Rate limit exceeded"}. Wait for the window to reset before retrying.
  • Repeated invalid API keys from the same IP will result in a temporary block; see the 401 response for invalid or missing keys.

Data Included

  • Only policies that are currently marketable / available in the Life Policy Market inventory are returned.
  • Only ROI scenarios explicitly intended for public display are included.
  • Latest cash surrender value and account value per policy are taken from the most recent tracked values when available; otherwise, base policy values are used.
  • Results are paginated and returned in a consistent, deterministic order, using a portfolio-style ordering key.
  • Responses are designed to be consumed directly by frontends, backend services, and BI tools.

Endpoints

`GET /cases`

Returns a paginated list of cases (policies) that are currently available in the Life Policy Market. Each element in the response represents a single policy “case”, including its core attributes and associated ROI scenarios.

Each case object exposes:

  • Case metadata
  • case_id – stable internal identifier for the case / policy
  • case_name – LPM case label / human-readable name
  • case_availability – textual availability status (e.g. “Available”, “Reserved”)
  • Policy details
  • policy_carrier – carrier name
  • policy_carrier_rating – carrier credit / strength rating (e.g. AM Best-style)
  • policy_type – policy type (e.g. “Universal Life”)
  • policy_issue_date – ISO-8601 issue date (YYYY-MM-DD)
  • policy_face_amount – face amount (rounded integer)
  • policy_cash_surrender_value – latest cash surrender value (rounded integer)
  • policy_account_value – latest account / accumulation value (rounded integer)
  • policy_loan_balance – current loan balance (rounded integer)
  • Insured details
  • insured_birthdate – ISO-8601 birthdate
  • insured_age – age
  • insured_gender – gender
  • insured_lifestyle – lifestyle / smoking status
  • insured_bp – blood pressure summary, where available
  • insured_bmi – body mass index, where available
  • insured_key_medical_conditions – key medical conditions summary, where available
  • Life expectancy / APS-style information
  • aps_provider – primary LE / APS provider label
  • aps_date – LE date
  • aps_months – life expectancy in months
  • aps_years – life expectancy in years
  • LPM pricing summary
  • lpm_equity_multiple – equity multiple for the LPM scenario
  • lpm_estimated_roi – estimated ROI for the LPM scenario
  • lpm_purchase_price – modeled / target purchase price (rounded integer)
  • lpm_premium_funding – projected premium funding (rounded integer)
  • lpm_total_investment – total projected investment (rounded integer)
  • lpm_additional_highlights – free-form text highlights (optional)
  • ROI scenarios (array rois)
  • Each ROI entry represents a scenario curve point and includes:

  • roi_number_of_months – horizon in months (often tied to LE months or scenario months)
  • roi_premium_paid – total premiums paid at that horizon (rounded integer)
  • roi_total_invested – total capital invested at that horizon (rounded integer)
  • roi_holding_years – holding period in years at that horizon
  • roi_estimated – estimated ROI
  • roi_is_lpm – boolean flag:
  • true for the LPM “house” scenario derived from the policy-level pricing.
  • false for public ROI curves contributed by external / scenario models.

#### Query Parameters

  • page
  • Type: integer
  • Default: 1
  • Minimum: 1
  • Description: Page index. Each page contains 10 cases. If the requested page has no data, an empty list is returned.

Policies are ordered by an internal, portfolio-style ordering key so that pagination is stable across calls.

#### Examples

  • GET https://api.lifepolicymarket.com/cases?page=1
  • GET https://api.lifepolicymarket.com/cases?page=2

#### Example Response

[
  {
    "case_id": "a01XXXXXXXXXXXXXXX",
    "case_name": "LPM-000123",
    "case_availability": "Available",

    "policy_carrier": "Example Carrier",
    "policy_carrier_rating": "A++",
    "policy_type": "Universal Life",
    "policy_issue_date": "2010-05-10",
    "policy_face_amount": 1000000,
    "policy_cash_surrender_value": 150000,
    "policy_account_value": 180000,
    "policy_loan_balance": 0,

    "insured_birthdate": "1945-03-01",
    "insured_age": 79,
    "insured_gender": "Female",
    "insured_lifestyle": "Non-smoker",
    "insured_bp": "120/80",
    "insured_bmi": 24.5,
    "insured_key_medical_conditions": "Hypertension, mild COPD",

    "aps_provider": "Techmed",
    "aps_date": "2024-01-15",
    "aps_months": 120,
    "aps_years": 10,

    "lpm_equity_multiple": 2.3,
    "lpm_estimated_roi": 0.12,
    "lpm_purchase_price": 320000,
    "lpm_premium_funding": 250000,
    "lpm_total_investment": 570000,
    "lpm_additional_highlights": "No current loan. Strong carrier rating.",

    "rois": [
      {
        "roi_number_of_months": 96,
        "roi_premium_paid": 200000,
        "roi_total_invested": 520000,
        "roi_holding_years": 8,
        "roi_estimated": 0.10,
        "roi_is_lpm": false
      },
      {
        "roi_number_of_months": 120,
        "roi_premium_paid": 250000,
        "roi_total_invested": 570000,
        "roi_holding_years": 10,
        "roi_estimated": 12,
        "roi_is_lpm": true
      }
    ]
  }
]

`GET /case/{case_id}`

Returns detailed information for a single case. The response schema matches a single element from GET /cases and includes:

  • Case metadata (ID, name, availability)
  • Policy details (carrier, type, face amount, values, issue date)
  • Insured details (age, gender, lifestyle, summary health indicators)
  • Life expectancy–style information (provider, date, months, years)
  • LPM pricing summary (equity multiple, estimated ROI, purchase price, funding, total investment, highlights)
  • All public ROI scenarios plus the LPM “house” scenario, each with:
  • horizon in months and years,
  • premium and capital at that horizon,
  • estimated ROI,
  • a flag indicating whether it is the LPM scenario (roi_is_lpm)

If the case is not available or does not exist, the API returns a standard “not found” response.

  • Path parameter:
  • case_id – use the case_id value obtained from GET /cases.

#### Example

  • GET https://api.lifepolicymarket.com/case/a01XXXXXXXXXXXXXXX

Example response (truncated):

{
  "case_id": "a01XXXXXXXXXXXXXXX",
  "case_name": "LPM-000123",
  "case_availability": "Available",
  "policy_carrier": "Example Carrier",
  "policy_type": "Universal Life",
  "policy_issue_date": "2010-05-10",
  "policy_face_amount": 1000000,
  "policy_cash_surrender_value": 150000,
  "policy_account_value": 180000,
  "insured_age": 79,
  "insured_gender": "Female",
  "aps_months": 120,
  "aps_years": 10,
  "lpm_estimated_roi": 0.12,
  "rois": [
    {
      "roi_number_of_months": 96,
      "roi_premium_paid": 200000,
      "roi_total_invested": 520000,
      "roi_holding_years": 8,
      "roi_estimated": 0.10,
      "roi_is_lpm": false
    },
    {
      "roi_number_of_months": 120,
      "roi_premium_paid": 250000,
      "roi_total_invested": 570000,
      "roi_holding_years": 10,
      "roi_estimated": 12,
      "roi_is_lpm": true
    }
  ]
}

Exports

  • Case Export: Download a file for a specific case from https://www.lifepolicymarket.com/api/case/download/<case_id>
  • Servicing Flyer: Download the servicing flyer PDF from https://www.lifepolicymarket.com/document/flyer.pdf.