Skip to main content
List personnel records for a specific event. Use this endpoint when you want a paginated people directory for one event, with optional exhibitor, department, level, and search filters.

When to use this endpoint

Use GET /external/personnel/list after selecting an event and, optionally, an exhibitor. It is the main endpoint for building attendee or exhibitor-personnel exploration workflows. Common use cases:
  • browse people associated with an event
  • filter by department or seniority
  • find contacts for a selected exhibitor
  • collect personnel IDs before calling Unlock contact emails

Endpoint

GET /external/personnel/list

Authentication

See Authentication

Success status code

200 OK

Query parameters

NameRequiredTypeNotes
event_idYesstringEvent identifier.
exhibitor_idNostringFilter by a specific exhibitor.
departmentNostringDepartment filter.
levelNostringSeniority-level filter.
search_queryNostringName or job-title search.
pageNointegerDefaults to 1.
pageSizeNointegerDefaults to 50; maximum 50.

Request example

curl "https://platform.lensmor.com/external/personnel/list?event_id=139574&page=1&pageSize=50" \
  -H "Authorization: Bearer $LENSMOR_API_KEY"

Filter by role context

curl "https://platform.lensmor.com/external/personnel/list?event_id=139574&department=marketing&level=vp&search_query=partnership&page=1&pageSize=50" \
  -H "Authorization: Bearer $LENSMOR_API_KEY"

Response example

{
  "items": [
    {
      "id": "789",
      "fullName": "Jane Smith",
      "title": "VP of Retail Technology",
      "department": "Technology",
      "seniorityLevel": "vp",
      "linkedinUrl": "https://linkedin.com/in/jane-smith",
      "companyName": "Acme Retail Systems",
      "sourceType": "exhibitor",
      "email": null,
      "contactUnlockStatus": "locked",
      "linkedinActivity": {
        "activityLevel": "ACTIVE",
        "isActive": true,
        "latestPostAt": "1747123200000"
      },
      "linkedinActivityStatus": "ready"
    }
  ],
  "total": 3,
  "page": 1,
  "pageSize": 50,
  "totalPages": 1,
  "hasMore": false,
  "semantics": {
    "accessMode": "preview",
    "previewLimit": 50,
    "counts": {
      "actualTotal": 3,
      "visibleTotal": 3,
      "remainingLockedCount": 0
    },
    "pageState": {
      "requestedPage": 1,
      "accessible": true,
      "maxAccessiblePage": 1
    },
    "unlock": {
      "requiredForMoreResults": false,
      "actionType": null,
      "credits": null
    },
    "guidance": {
      "code": "preview_complete_for_query",
      "message": "This event is locked, but all matching personnel for the current query are already accessible."
    }
  }
}

Response fields

FieldDescription
itemsPersonnel records for the requested event and filters.
idPersonnel identifier. Use this for profile fetches and email unlocks.
fullName, titlePerson display name and job title.
department, seniorityLevelNormalized role metadata when available.
linkedinUrlLinkedIn profile URL when available.
companyNameAssociated company or exhibitor name.
sourceTypeSource context for the person record.
emailEmail address if already unlocked for the caller; otherwise null.
contactUnlockStatusContact access state, such as locked or unlocked states.
linkedinActivityLinkedIn activity object (activityLevel ACTIVE/WARM/DORMANT/"", isActive, latestPostAt unix ms or null) when the caller has unlocked it and analysis is complete; otherwise null. Independent of contactUnlockStatus.
linkedinActivityStatusready (data available), processing (unlock/analysis running), or null (not unlocked / no record).
semanticsAccess metadata for preview/full event coverage.

Access semantics

Locked events can still return preview personnel results. Read semantics before deciding whether to unlock the event:
  • accessMode tells you whether the response is preview or full access.
  • counts.remainingLockedCount tells you whether more records are hidden.
  • unlock.requiredForMoreResults tells you whether event unlock is useful for this query.
  • guidance.message provides a user-facing explanation.

Error responses

  • 400 Bad Request
  • 401 Unauthorized
  • 404 Not Found
  • 429 Too Many Requests

Notes

  • Personnel list responses intentionally use the lightweight contact-style response shape.
  • Emails are returned only when the contact is already unlocked for the caller.
  • Locked events can return preview results. Use semantics.unlock to decide whether to call Unlock event.
  • Pagination behavior follows the shared Pagination conventions.