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 schema
See the request body 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: 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.
Idempotency
Use Idempotency-Key on retried writes when your client cannot guarantee whether a prior attempt succeeded.
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/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/pipelines
limit
https://api.levcapital.com/api/external/v2/pipelines?limit=10

Overview

Lev supports multiple pipeline types (financing, acquisition, custom). Each pipeline has a set of statuses representing deal stages.
EndpointDescription
GET /pipelinesList all pipelines
GET /pipelines/{pipeline_id}Get a pipeline with its statuses
POST /deals/{deal_id}/pipelineMove a deal to a pipeline stage

List Pipelines

GET/api/external/v2/pipelines
List 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

ParameterTypeRequiredDescription
pipeline_idintegerRequiredThe 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}/pipeline
Move 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

ParameterTypeRequiredDescription
deal_idintegerRequiredThe deal ID

Request body

ParameterTypeRequiredDescription
pipeline_idintegerRequiredTarget pipeline ID
pipeline_status_idintegerOptionalTarget 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

FieldTypeDescription
idintegerPipeline identifier
pipeline_typestring|nullPipeline type (financing, acquisition, etc.)
pipeline_namestring|nullPipeline display name
descriptionstring|nullPipeline description
owner_account_idinteger|nullOwning account ID
orderinteger|nullDisplay order
statusesarrayPipeline statuses (see Pipeline Status Object)

Pipeline Status Object

FieldTypeDescription
idintegerStatus identifier
statusstringStatus key name
custom_status_namestring|nullCustom display name
descriptionstring|nullStatus description
orderinteger|nullDisplay order within the pipeline
iconstring|nullIcon identifier