Overview
| Endpoint | Description |
|---|---|
GET /build/contacts | List contacts with pagination |
GET /contacts/{id} | Get a single contact |
POST /build/contacts | Create 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
/api/external/v2/build/contactsList contacts with pagination
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",
"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=="
}
}unauthorizedAuthentication required— Missing or invalid Authorization header
bad_requestcursor and sort cannot be combined; use offset pagination when sorting— Both cursor and sort params provided
Get Contact
/api/external/v2/contacts/{contact_id}Get a single contact by 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",
"is_primary": true,
"is_connected": true,
"owner_account_id": 56,
"created_at": "2025-09-01T11:00:00Z",
"updated_at": "2026-02-20T16:45:00Z"
}
}unauthorizedAuthentication required— Missing or invalid Authorization header
not_foundContact not found— The ID doesn't exist or isn't accessible to the authenticated user
Create Contact
/api/external/v2/build/contactsCreate a new contact
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",
"is_primary": false,
"is_connected": false,
"owner_account_id": 56,
"created_at": "2026-03-20T15:30:45Z",
"updated_at": "2026-03-20T15:30:45Z"
}
}unauthorizedAuthentication required— Missing or invalid Authorization header
forbiddenUser not authorized to create contact— The user's role doesn't have CREATE permission
validation_errorcontact_type is required— Missing required contact_type field
Update Contact
/api/external/v2/contacts/{contact_id}Update a contact
All request body fields are optional. Only provided fields are updated.
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",
"is_primary": true,
"is_connected": true,
"owner_account_id": 56,
"created_at": "2025-09-01T11:00:00Z",
"updated_at": "2026-03-20T15:30:45Z"
}
}unauthorizedAuthentication required— Missing or invalid Authorization header
not_foundContact not found— The ID doesn't exist or isn't accessible to the authenticated user
Contact Object
| Field | Type | Description |
|---|---|---|
id | integer | Contact identifier |
contact_type | string|null | lender_contact or sponsor |
first_name | string|null | First name |
last_name | string|null | Last name |
email | string|null | Email address |
title | string|null | Job title |
department | string|null | Department |
address | string|null | Street address |
city | string|null | City |
state | string|null | State |
zip | string|null | ZIP code |
linkedin_url | string|null | LinkedIn profile URL |
is_primary | boolean | Whether this is the primary contact |
owner_account_id | integer|null | Owning account ID |
is_connected | boolean | Whether this is a connected contact |
created_at | string|null | Creation timestamp |
updated_at | string|null | Last update timestamp |