Integration Summary
When to use- Browse pipelines and move deals between stages.
- Use the read and write examples together so you can validate state before you mutate it.
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 on write operations
Request schemaSee the request body 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: Pipeline Object, Pipeline Status 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.
IdempotencyUse Idempotency-Key on retried writes when your client cannot guarantee whether a prior attempt succeeded.
Rate limitsSee /rate-limits. Page intentionally through list endpoints and apply backoff on 429 responses.
Examplescurl, TypeScript, Python
Starter example: GET /api/external/v2/pipelines
bash
curl -X GET "https://api.levcapital.com/api/external/v2/pipelines" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "X-Origin-App: my-integration"Pipelines
Last updated: March 2026
Pipelines organize deals into stages (e.g., financing, acquisition). Use this endpoint to move a deal into a specific pipeline and status.
Connect your API key to explore
Stored in your browser session only. Never sent to our docs server.
GET
/api/external/v2/pipelineslimithttps://api.levcapital.com/api/external/v2/pipelines?limit=10Overview
Lev supports multiple pipeline types (financing, acquisition, custom). Each pipeline has a set of statuses representing deal stages.
| Endpoint | Description |
|---|---|
GET /pipelines | List all pipelines |
GET /pipelines/{pipeline_id} | Get a pipeline with its statuses |
POST /deals/{deal_id}/pipeline | Move a deal to a pipeline stage |
List Pipelines
GET
/api/external/v2/pipelinesList all pipelines available to your account
Response (200):
json
{
"request_id": "...",
"timestamp": "2026-03-20T15:30:45Z",
"data": [
{
"id": 1,
"pipeline_type": "financing",
"pipeline_name": "Financing Pipeline",
"description": "Default financing pipeline",
"owner_account_id": 56,
"order": 1,
"statuses": [
{
"id": 10,
"status": "new",
"custom_status_name": null,
"description": "New deals",
"order": 1,
"icon": null
}
]
}
],
"pagination": {
"total": 3,
"limit": 50,
"offset": 0,
"has_more": false
}
}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 Pipeline
GET
/api/external/v2/pipelines/{pipeline_id}Get a single pipeline with its statuses
Path parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
pipeline_id | integer | Required | The pipeline ID |
Response (200):
json
{
"request_id": "a9b0c1d2-e3f4-5678-2345-789012345678",
"timestamp": "2026-03-20T15:30:45Z",
"data": {
"id": 1,
"pipeline_type": "financing",
"pipeline_name": "Financing Pipeline",
"description": "Default financing pipeline",
"owner_account_id": 56,
"order": 1,
"statuses": [
{
"id": 10,
"status": "new",
"custom_status_name": null,
"description": "New deals",
"order": 1,
"icon": null
},
{
"id": 11,
"status": "quoting",
"custom_status_name": null,
"description": "Deals in quoting stage",
"order": 2,
"icon": null
},
{
"id": 12,
"status": "term_sheet",
"custom_status_name": null,
"description": "Term sheet received",
"order": 3,
"icon": null
},
{
"id": 13,
"status": "closing",
"custom_status_name": null,
"description": "Deal in closing",
"order": 4,
"icon": null
},
{
"id": 14,
"status": "closed",
"custom_status_name": null,
"description": "Deal closed",
"order": 5,
"icon": 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": {}
}
}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": "Pipeline not found",
"details": {}
}
}Move Deal to Pipeline
POST
/api/external/v2/deals/{deal_id}/pipelineMove a deal to a pipeline stage
This endpoint is idempotent — if the deal is already in the specified pipeline and status, no change is made.
Path parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
deal_id | integer | Required | The deal ID |
Request body
| Parameter | Type | Required | Description |
|---|---|---|---|
pipeline_id | integer | Required | Target pipeline ID |
pipeline_status_id | integer | Optional | Target status within the pipeline. Defaults to the first status in the pipeline. |
Response (200):
json
{
"request_id": "b0c1d2e3-f4a5-6789-3456-890123456789",
"timestamp": "2026-03-20T15:30:45Z",
"data": {
"id": 87,
"deal_id": 101,
"pipeline_id": 1,
"pipeline_name": "Financing Pipeline",
"pipeline_status_id": 11,
"status": "quoting"
}
}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 deal_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": "Deal not found",
"details": {}
}
}400bad_request
When: The pipeline_id doesn't exist
{
"request_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"error": {
"status": 400,
"type": "bad_request",
"message": "Pipeline not found",
"details": {}
}
}Pipeline Object
| Field | Type | Description |
|---|---|---|
id | integer | Pipeline identifier |
pipeline_type | string|null | Pipeline type (financing, acquisition, etc.) |
pipeline_name | string|null | Pipeline display name |
description | string|null | Pipeline description |
owner_account_id | integer|null | Owning account ID |
order | integer|null | Display order |
statuses | array | Pipeline statuses (see Pipeline Status Object) |
Pipeline Status Object
| Field | Type | Description |
|---|---|---|
id | integer | Status identifier |
status | string | Status key name |
custom_status_name | string|null | Custom display name |
description | string|null | Status description |
order | integer|null | Display order within the pipeline |
icon | string|null | Icon identifier |