People

The People API allows you to create, read, update people (contacts) and trigger AI-powered profile enrichment. Supports custom fields and nested notes.

List People

GET /api/people

Retrieves a paginated list of people visible to the authenticated user.

Query Parameters

Parameter Type Required Description
limit integer No Number of people to return (1-500, default: 50)
offset integer No Number of people to skip (default: 0)
search string No Search by name or email
companyId string No Filter by company ID (UUID)
isSolutionProvider boolean No Filter to solution providers (true or false)

Response

Success Response (200)

{
  "success": true,
  "data": {
    "people": [
      {
        "id": "550e8400-e29b-41d4-a716-446655440000",
        "email": "john@acme.com",
        "firstName": "John",
        "lastName": "Doe",
        "phoneNumber": "+1 555-123-4567",
        "address": "123 Main St, San Francisco, CA 94102",
        "jobTitle": "Head of Platform",
        "bio": "Twenty years of making databases behave.",
        "skills": ["PostgreSQL", "Kubernetes"],
        "linkedinUrl": "https://linkedin.com/in/johndoe",
        "avatarUrl": "https://cdn.example.com/john.png",
        "isFullUser": false,
        "customFields": {
          "cf_department": "Engineering"
        },
        "company": {
          "id": "company-uuid",
          "name": "Acme Inc",
          "industry": "Technology"
        },
        "createdAt": "2024-01-15T10:00:00.000Z",
        "updatedAt": "2024-01-15T10:30:00.000Z"
      }
    ],
    "total": 150,
    "limit": 50,
    "offset": 0,
    "hasMore": true
  }
}

Profile Fields

Person responses include a profile block intended for public-facing directories and websites: jobTitle, bio, skills, linkedinUrl, and avatarUrl. All are optional and may be null, except skills, which is a string array defaulting to [].

These fields are read-only; they are not accepted by POST or PATCH.

Create Person

POST /api/people

Creates a new person in your organization.

Request Body

{
  "email": "john@acme.com",
  "firstName": "John",
  "lastName": "Doe",
  "phoneNumber": "+1 555-123-4567",
  "address": "123 Main St, San Francisco, CA 94102",
  "companyName": "Acme Inc",
  "isSolutionProvider": false,
  "isConnector": false,
  "customFields": {
    "cf_department": "Engineering"
  }
}

Parameters

Parameter Type Required Description
email string Yes Valid email address
firstName string Yes First name (1-100 characters)
lastName string No Last name (max 100 characters)
phoneNumber string No Phone number (max 50 characters)
address string No Full address (max 500 characters)
companyId string No Link to existing company (UUID)
companyName string No Auto-create company with this name
isSolutionProvider boolean No Mark as a solution provider (defaults to false)
isConnector boolean No Mark as a connector (defaults to false)
customFields object No Custom field key-value pairs

Response

Success Response (201)

{
  "success": true,
  "data": {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "email": "john@acme.com",
    "firstName": "John",
    "lastName": "Doe",
    "phoneNumber": "+1 555-123-4567",
    "address": "123 Main St, San Francisco, CA 94102",
    "isFullUser": false,
    "customFields": {
      "cf_department": "Engineering"
    },
    "company": {
      "id": "company-uuid",
      "name": "Acme Inc"
    },
    "createdAt": "2024-01-15T10:30:00.000Z",
    "updatedAt": "2024-01-15T10:30:00.000Z"
  },
  "message": "Person created successfully"
}

Error Response (409)

{
  "success": false,
  "error": "A person with this email already exists in your organization"
}

Get Person

GET /api/people/{id}

Retrieves details for a specific person including custom fields.

Path Parameters

Parameter Type Required Description
id string Yes Person UUID

Response

Success Response (200)

{
  "success": true,
  "data": {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "email": "john@acme.com",
    "firstName": "John",
    "lastName": "Doe",
    "phoneNumber": "+1 555-123-4567",
    "address": "123 Main St, San Francisco, CA 94102",
    "latitude": 37.7749,
    "longitude": -122.4194,
    "isConnector": false,
    "isSolutionProvider": false,
    "isFullUser": false,
    "customFields": {
      "cf_department": "Engineering",
      "cf_lead_source": "Conference"
    },
    "company": {
      "id": "company-uuid",
      "name": "Acme Inc",
      "industry": "Technology",
      "website": "https://acme.com"
    },
    "createdAt": "2024-01-15T10:00:00.000Z",
    "updatedAt": "2024-01-15T10:30:00.000Z"
  }
}

Update Person

PATCH /api/people/{id}

Updates an existing person. Only provided fields are updated. Custom fields are merged with existing values.

Accepts the same fields as Create Person, except email and firstName are optional and companyName is not supported. Changing isSolutionProvider or isConnector is recorded in the person's activity timeline.

Request Body

{
  "firstName": "Jane",
  "phoneNumber": "+1 555-987-6543",
  "isConnector": true,
  "customFields": {
    "cf_department": "Product"
  }
}

Response

Success Response (200)

{
  "success": true,
  "data": {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "email": "john@acme.com",
    "firstName": "Jane",
    "lastName": "Doe",
    "phoneNumber": "+1 555-987-6543",
    "customFields": {
      "cf_department": "Product",
      "cf_lead_source": "Conference"
    }
  },
  "message": "Person updated successfully"
}

Note: Email cannot be changed for people with active user accounts.

Enrich Person

POST /api/people/{id}/enrich

Triggers AI enrichment for a person. The enrichment job runs asynchronously and updates the person's profile with professional information gathered from public sources.

Path Parameters

Parameter Type Required Description
id string Yes Person UUID

Response

Success Response (200)

{
  "success": true,
  "data": {
    "jobId": "job_abc123",
    "personId": "550e8400-e29b-41d4-a716-446655440000",
    "personName": "John Doe",
    "personEmail": "john@acme.com"
  },
  "message": "Enrichment job created for John Doe"
}

Error Response (400)

{
  "success": false,
  "error": "Person email is required for enrichment"
}

Example Usage

# List people with search
curl -X GET "https://api.introzy.com/api/people?search=john&limit=10" \
  -H "Authorization: Bearer introzy_your_api_key"

# Create a new person with custom fields
curl -X POST "https://api.introzy.com/api/people" \
  -H "Authorization: Bearer introzy_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "jane@acme.com",
    "firstName": "Jane",
    "lastName": "Smith",
    "companyName": "Acme Inc",
    "customFields": {
      "cf_department": "Sales"
    }
  }'

# Update a person
curl -X PATCH "https://api.introzy.com/api/people/550e8400-e29b-41d4-a716-446655440000" \
  -H "Authorization: Bearer introzy_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{"phoneNumber": "+1 555-123-4567"}'

# Trigger enrichment
curl -X POST "https://api.introzy.com/api/people/550e8400-e29b-41d4-a716-446655440000/enrich" \
  -H "Authorization: Bearer introzy_your_api_key"
  • Notes — Manage notes on people via GET/POST /api/people/{personId}/notes
  • Custom Fields — Define custom field schemas via GET/POST /api/people/custom-fields