Build

Contacts

Manage lender and sponsor contacts in the Lev API.

Updated March 2026
GET/api/external/v2/contacts
GET/api/external/v2/contacts/{contact_id}

Overview

EndpointDescription
GET /contactsList contacts with pagination
GET /contacts/{id}Get a single contact
POST /contactsCreate a new contact
PATCH /contacts/{id}Update a contact

Contacts are scoped to your account. Only connected contacts (active relationships) are returned by default.

List Contacts

GET/api/external/v2/contacts

List contacts with pagination

Query parameters
limitinteger
Results per page (1–200, default 50)
cursorstring
Cursor for next page
fieldsstring
Comma-separated fields to include

Response (200):

{
  "request_id": "b8c9d0e1-f2a3-4567-1234-678901234567",
  "timestamp": "2026-03-20T15:30:45Z",
  "data": [
    {
      "id": 78,
      "contact_type": "lender_contact",
      "first_name": "Sarah",
      "last_name": "Chen",
      "email": "schen@meridiancapital.com",
      "title": "Senior Vice President",
      "department": "Originations",
      "address": "1 Battery Park Plaza",
      "city": "New York",
      "state": "NY",
      "zip": "10004",
      "linkedin_url": "https://linkedin.com/in/sarah-chen-cre",
      "phones": [
        {
          "id": null,
          "type": "office",
          "raw": "(212) 555-0184",
          "country": "US",
          "e164": "+12125550184",
          "extension": ""
        }
      ],
      "is_primary": true,
      "is_connected": true,
      "owner_account_id": 56,
      "created_at": "2025-09-01T11:00:00Z",
      "updated_at": "2026-02-20T16:45:00Z"
    }
  ],
  "pagination": {
    "total": 128,
    "limit": 50,
    "has_more": true,
    "next_cursor": "eyJpZCI6IDc4fQ=="
  }
}
401unauthorized
Authentication requiredMissing or invalid Authorization header
400bad_request
cursor and sort cannot be combined; use offset pagination when sortingBoth cursor and sort params provided

Get Contact

GET/api/external/v2/contacts/{contact_id}

Get a single contact by ID

Path parameters
contact_idintegerrequired
The contact ID

Response (200):

{
  "request_id": "c9d0e1f2-a3b4-5678-2345-789012345678",
  "timestamp": "2026-03-20T15:30:45Z",
  "data": {
    "id": 78,
    "contact_type": "lender_contact",
    "first_name": "Sarah",
    "last_name": "Chen",
    "email": "schen@meridiancapital.com",
    "title": "Senior Vice President",
    "department": "Originations",
    "address": "1 Battery Park Plaza",
    "city": "New York",
    "state": "NY",
    "zip": "10004",
    "linkedin_url": "https://linkedin.com/in/sarah-chen-cre",
    "phones": [
      {
        "id": null,
        "type": "office",
        "raw": "(212) 555-0184",
        "country": "US",
        "e164": "+12125550184",
        "extension": ""
      }
    ],
    "is_primary": true,
    "is_connected": true,
    "owner_account_id": 56,
    "created_at": "2025-09-01T11:00:00Z",
    "updated_at": "2026-02-20T16:45:00Z"
  }
}
401unauthorized
Authentication requiredMissing or invalid Authorization header
404not_found
Contact not foundThe ID doesn't exist or isn't accessible to the authenticated user

Create Contact

POST/api/external/v2/contacts

Create a new contact

Request body
contact_typestringrequired
Contact type: lender_contact or sponsor
company_idintegerrequired
Associated company ID
first_namestring
First name
last_namestring
Last name
emailstring
Email address
titlestring
Job title
departmentstring
Department
addressstring
Street address
citystring
City
statestring
State
zipstring
ZIP code
linkedin_urlstring
LinkedIn profile URL
phonesPhoneIn[]
Phone numbers. Each object: { raw, type?, country?, extension? }. raw accepts any common format and is normalized to E.164 server-side (unparseable numbers return 422). type is mobile, office, or fax (default mobile). country is a 2-letter ISO region used to parse numbers without a + prefix (default US).
is_primaryboolean
Whether this is the primary contact at the company

Response (201):

{
  "request_id": "d0e1f2a3-b4c5-6789-3456-890123456789",
  "timestamp": "2026-03-20T15:30:45Z",
  "data": {
    "id": 142,
    "contact_type": "lender_contact",
    "first_name": "James",
    "last_name": "Rodriguez",
    "email": "jrodriguez@eastdilsecured.com",
    "title": "Managing Director",
    "department": "Debt Capital Markets",
    "address": "40 West 57th Street",
    "city": "New York",
    "state": "NY",
    "zip": "10019",
    "linkedin_url": "https://linkedin.com/in/james-rodriguez-cre",
    "phones": [
      {
        "id": null,
        "type": "mobile",
        "raw": "(917) 555-0142",
        "country": "US",
        "e164": "+19175550142",
        "extension": ""
      }
    ],
    "is_primary": false,
    "is_connected": false,
    "owner_account_id": 56,
    "created_at": "2026-03-20T15:30:45Z",
    "updated_at": "2026-03-20T15:30:45Z"
  }
}
401unauthorized
Authentication requiredMissing or invalid Authorization header
403forbidden
User not authorized to create contactThe user's role doesn't have CREATE permission
422validation_error
contact_type is requiredMissing required contact_type field

Update Contact

PATCH/api/external/v2/contacts/{contact_id}

Update a contact

Path parameters
contact_idintegerrequired
The contact ID
Request body
first_namestring
First name
last_namestring
Last name
emailstring
Email address
titlestring
Job title
departmentstring
Department
addressstring
Street address
citystring
City
statestring
State
zipstring
ZIP code
linkedin_urlstring
LinkedIn profile URL
phonesPhoneIn[]
Replaces the contact's entire phone list — send [] to clear all numbers. Same object shape as Create Contact.

All request body fields are optional. Only provided fields are updated. contact_type, company_id, and is_primary are not updatable.

Response (200):

{
  "request_id": "e1f2a3b4-c5d6-7890-4567-901234567890",
  "timestamp": "2026-03-20T15:30:45Z",
  "data": {
    "id": 78,
    "contact_type": "lender_contact",
    "first_name": "Sarah",
    "last_name": "Chen",
    "email": "schen@meridiancapital.com",
    "title": "Executive Vice President",
    "department": "Originations",
    "address": "1 Battery Park Plaza",
    "city": "New York",
    "state": "NY",
    "zip": "10004",
    "linkedin_url": "https://linkedin.com/in/sarah-chen-cre",
    "phones": [
      {
        "id": null,
        "type": "office",
        "raw": "(212) 555-0184",
        "country": "US",
        "e164": "+12125550184",
        "extension": ""
      }
    ],
    "is_primary": true,
    "is_connected": true,
    "owner_account_id": 56,
    "created_at": "2025-09-01T11:00:00Z",
    "updated_at": "2026-03-20T15:30:45Z"
  }
}
401unauthorized
Authentication requiredMissing or invalid Authorization header
404not_found
Contact not foundThe ID doesn't exist or isn't accessible to the authenticated user

Contact Object

FieldTypeDescription
idintegerContact identifier
contact_typestring|nullFirst entry from contact_types, kept as a string for backwards compatibility. lender_contact or sponsor.
contact_typesstring[]All contact types assigned to the contact (a contact can be both a lender and a sponsor contact). Values: lender_contact, sponsor.
first_namestring|nullFirst name
last_namestring|nullLast name
emailstring|nullEmail address
titlestring|nullJob title
departmentstring|nullDepartment
addressstring|nullStreet address
citystring|nullCity
statestring|nullState
zipstring|nullZIP code
linkedin_urlstring|nullLinkedIn profile URL
phonesPhone[]Phone numbers ([] when none). Each: {id, type, raw, country, e164, extension}e164 is the normalized canonical number (always server-computed from raw); type is mobile, office, or fax; fields may be null on records created before phone support.
is_primarybooleanWhether this is the primary contact
owner_account_idinteger|nullOwning account ID
is_connectedbooleanWhether this is a connected contact
created_atstring|nullCreation timestamp
updated_atstring|nullLast update timestamp
More in this section