Integration Summary

When to use
  • View lender placements on deals.
  • Use this page as the source of truth for reads, filters, pagination, and object shape.
Required scopes
  • Access is inherited from the connected user or JWT session.
  • Inspect GET /me or the validate-api-key response to confirm the scopes available to the current token.
Headers
  • Authorization: Bearer <token>
  • X-Origin-App: <client-name>
  • Content-Type: application/json when the endpoint accepts a body
Request schema
Use the path and query parameter tables below or /platform/openapi.json for the machine-readable schema surface.
Response schema
Responses use the standard request_id/timestamp/data envelope. This page documents these object schemas: Placement Object.
Enums & values
  • Enum-like values and filter operators are documented inline on the page where available.
  • When a value set is account- or tier-dependent, validate against live responses before hard-coding assumptions.
Rate limits
See /rate-limits. Page intentionally through list endpoints and apply backoff on 429 responses.
Examples
curl, TypeScript, Python

Starter example: GET /api/external/v2/placements

bash
curl -X GET "https://api.levcapital.com/api/external/v2/placements" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "X-Origin-App: my-integration"

Placements

Last updated: March 2026

A placement represents a deal being sent to a specific lender for consideration. Placements track the lender's response status, contact information, and scoring.
Connect your API key to explore

Stored in your browser session only. Never sent to our docs server.

GET/api/external/v2/placements
limit
fields
https://api.levcapital.com/api/external/v2/placements?limit=10

Overview

Placements connect deals to lenders. Each placement has a status that tracks the lender's progression (e.g., sent, reviewing, terms received, closed).
EndpointDescription
GET /placementsList placements with filtering and pagination
GET /placements/{id}Get a single placement

List Placements

GET/api/external/v2/placements
List placements with pagination

Query parameters

ParameterTypeRequiredDescription
limitintegerOptionalResults per page (1–200, default 50)
cursorstringOptionalCursor for next page
Response (200):
json
{
  "request_id": "c5d6e7f8-a9b0-1234-8901-345678901234",
  "timestamp": "2026-03-20T15:30:45Z",
  "data": [
    {
      "id": 310,
      "deal_id": 101,
      "private_company_id": 12,
      "contact_id": 78,
      "status": "reviewing",
      "lender_status": "under_review",
      "lev_score": 87.5,
      "score": 4.0,
      "description": "Strong fit — lender actively lending on multifamily in this submarket",
      "outreach_date": "2026-02-01",
      "outreach_source": "direct",
      "last_communication_date": "2026-03-15T10:00:00Z",
      "lender_first_response_date": "2026-02-03T09:30:00Z",
      "visibility": "visible",
      "created_at": "2026-02-01T08:00:00Z",
      "updated_at": "2026-03-15T10:00:00Z"
    }
  ],
  "pagination": {
    "total": 8,
    "limit": 50,
    "has_more": false,
    "next_cursor": null
  }
}

Error responses

401unauthorized

When: Missing or invalid Authorization header

{
  "request_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "error": {
    "status": 401,
    "type": "unauthorized",
    "message": "Authentication required",
    "details": {}
  }
}
400bad_request

When: Both cursor and sort params provided

{
  "request_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "error": {
    "status": 400,
    "type": "bad_request",
    "message": "cursor and sort cannot be combined; use offset pagination when sorting",
    "details": {}
  }
}

Get Placement

GET/api/external/v2/placements/{placement_id}
Get a single placement by ID

Path parameters

ParameterTypeRequiredDescription
placement_idintegerRequiredThe placement ID
Response (200):
json
{
  "request_id": "d6e7f8a9-b0c1-2345-9012-456789012345",
  "timestamp": "2026-03-20T15:30:45Z",
  "data": {
    "id": 310,
    "deal_id": 101,
    "private_company_id": 12,
    "contact_id": 78,
    "status": "reviewing",
    "lender_status": "under_review",
    "lev_score": 87.5,
    "score": 4.0,
    "description": "Strong fit — lender actively lending on multifamily in this submarket",
    "outreach_date": "2026-02-01",
    "outreach_source": "direct",
    "last_communication_date": "2026-03-15T10:00:00Z",
    "lender_first_response_date": "2026-02-03T09:30:00Z",
    "visibility": "visible",
    "created_at": "2026-02-01T08:00:00Z",
    "updated_at": "2026-03-15T10:00:00Z"
  }
}

Error responses

401unauthorized

When: Missing or invalid Authorization header

{
  "request_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "error": {
    "status": 401,
    "type": "unauthorized",
    "message": "Authentication required",
    "details": {}
  }
}
404not_found

When: The ID doesn't exist or isn't accessible to the authenticated user

{
  "request_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "error": {
    "status": 404,
    "type": "not_found",
    "message": "Placement not found",
    "details": {}
  }
}

Placement Object

FieldTypeDescription
idintegerPlacement identifier
deal_idintegerAssociated deal ID
private_company_idinteger|nullLender private company ID
contact_idinteger|nullLender contact ID
statusstring|nullCurrent placement status
lender_statusstring|nullLender-side status
descriptionstring|nullPlacement description
lev_scorenumber|nullAI-generated match score
scorenumber|nullManual score
outreach_datestring|nullDate of initial outreach
outreach_sourcestring|nullSource of outreach
last_communication_datestring|nullDate of last communication
lender_first_response_datestring|nullDate of lender's first response
visibilitystring|nullPlacement visibility
created_atstring|nullCreation timestamp
updated_atstring|nullLast update timestamp