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 schemaUse the path and query parameter tables below or /platform/openapi.json for the machine-readable schema surface.
Response schemaResponses 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 limitsSee /rate-limits. Page intentionally through list endpoints and apply backoff on 429 responses.
Examplescurl, 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/placementslimitfieldshttps://api.levcapital.com/api/external/v2/placements?limit=10Overview
Placements connect deals to lenders. Each placement has a status that tracks the lender's progression (e.g., sent, reviewing, terms received, closed).
| Endpoint | Description |
|---|---|
GET /placements | List placements with filtering and pagination |
GET /placements/{id} | Get a single placement |
List Placements
GET
/api/external/v2/placementsList placements with pagination
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
limit | integer | Optional | Results per page (1–200, default 50) |
cursor | string | Optional | Cursor 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
| Parameter | Type | Required | Description |
|---|---|---|---|
placement_id | integer | Required | The 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
| Field | Type | Description |
|---|---|---|
id | integer | Placement identifier |
deal_id | integer | Associated deal ID |
private_company_id | integer|null | Lender private company ID |
contact_id | integer|null | Lender contact ID |
status | string|null | Current placement status |
lender_status | string|null | Lender-side status |
description | string|null | Placement description |
lev_score | number|null | AI-generated match score |
score | number|null | Manual score |
outreach_date | string|null | Date of initial outreach |
outreach_source | string|null | Source of outreach |
last_communication_date | string|null | Date of last communication |
lender_first_response_date | string|null | Date of lender's first response |
visibility | string|null | Placement visibility |
created_at | string|null | Creation timestamp |
updated_at | string|null | Last update timestamp |