Skip to main content
GET
/
api
/
public
/
coworkers
/
published
{
  "Records": [
    {}
  ],
  "CurrentPage": 123,
  "TotalItems": 123,
  "TotalPages": 123,
  "HasNextPage": true,
  "HasPreviousPage": true,
  "Records[].Id": 123,
  "Records[].UniqueId": "<string>",
  "Records[].FullName": "<string>",
  "Records[].GuessedFirstName": "<string>",
  "Records[].AvatarUrl": "<string>",
  "Records[].Position": {},
  "Records[].CompanyName": "<string>",
  "Records[].BusinessArea": {},
  "Records[].ProfileSummary": {},
  "Records[].ProfileWebsite": {},
  "Records[].ProfileTagsList": [
    {}
  ],
  "Records[].InvoicingSpaceName": "<string>",
  "401 Unauthorized": {}
}

List Published Customer Profiles

Returns customer profiles that have opted in to the member directory (ProfileIsPublic: true). Supports free-text search, tag filtering, and sort ordering. The portal uses this to render the member directory listing and to power the customer tag input autocomplete.

Authentication

Requires a valid customer bearer token.

Query Parameters

query
string
Free-text search string matched against the customer’s name, company, position, bio, and tags. Pass an empty string to return all published profiles.
tag
string
Filter results to customers whose ProfileTagsList contains this exact tag value. Pass an empty string to skip tag filtering.
order
number
Sort order for results. Default: 1 (alphabetical by name). Check the directory meta endpoint for available order options.
_shape
string
Comma-separated list of field paths to include in the response. When provided, only the specified fields are returned — useful for reducing payload size. Supports nested paths using dot notation. Example: _shape=Records.FullName,Records.CompanyName,Records.AvatarUrl,TotalItems.

Response

Returns an ApiListResult<Coworker> — a paginated wrapper containing an array of published customer profiles.

Pagination

Records
Coworker[]
Array of published customer profiles for the current page.
CurrentPage
number
Current page number (1-based).
TotalItems
number
Total number of matching published profiles.
TotalPages
number
Total number of pages.
HasNextPage
boolean
Whether there are more pages after the current one.
HasPreviousPage
boolean
Whether there are pages before the current one.

Coworker Fields (within Records[])

Records[].Id
number
Unique numeric identifier for the customer profile. Use as coworkerId in GET /api/public/coworkers/published/{coworkerId}.
Records[].UniqueId
string
Globally unique identifier for the profile.
Records[].FullName
string
Customer’s display name.
Records[].GuessedFirstName
string
First name extracted from FullName for use in personalised UI text.
Records[].AvatarUrl
string
URL to the customer’s avatar image.
Records[].Position
string | null
Job title.
Records[].CompanyName
string
Company name.
Records[].BusinessArea
string | null
Industry or area of work.
Records[].ProfileSummary
string | null
Professional bio. May contain Markdown.
Records[].ProfileWebsite
string | null
Personal or company website URL.
Records[].ProfileTagsList
array
Array of tag strings from the customer’s profile.
Records[].InvoicingSpaceName
string
Display name of the location this customer is invoiced at.

Social Media (within Records[])

FieldTypeDescription
Twitterstring | nullTwitter profile URL or handle
Linkedinstring | nullLinkedIn profile URL
Githubstring | nullGitHub profile URL or username
Instagramstring | nullInstagram handle or URL
Facebookstring | nullFacebook profile URL
Skypestring | nullSkype username
Telegramstring | nullTelegram username

Example Response

{
  "Records": [
    {
      "Id": 101,
      "UniqueId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "FullName": "Jane Doe",
      "GuessedFirstName": "Jane",
      "AvatarUrl": "https://nexudushq.spaces.nexudus.com/media/coworker/101/avatar",
      "Position": "Product Designer",
      "CompanyName": "Acme Design Co.",
      "BusinessArea": "Design",
      "ProfileSummary": "Jane specialises in design systems and user research.",
      "ProfileWebsite": "https://janedoe.design",
      "ProfileTagsList": ["UX", "Design Systems", "Research"],
      "InvoicingSpaceName": "Nexudus HQ",
      "Linkedin": "https://linkedin.com/in/janedoe",
      "Twitter": null
    }
  ],
  "CurrentPage": 1,
  "TotalItems": 42,
  "TotalPages": 5,
  "HasNextPage": true,
  "HasPreviousPage": false
}

TypeScript Integration

import endpoints from '@/api/endpoints'
import { Coworker } from '@/types/spaces/Coworker'
import { ApiListResult } from '@/types/ApiListResult'
import { useData } from '@/api/fetchData'

const url = endpoints.coworkers.directory.published_list(searchQuery, selectedTag, sortOrder)
// => '/api/public/coworkers/published?query=design&tag=UX&order=1'

const { resource: members } = useData<ApiListResult<Coworker>>(httpClient, url)

Usage in Portal

ContextSource file
Member directory listing pagesrc/views/community/directory/components/useDirectoryData.ts
Customer tag autocomplete inputsrc/components/CoworkerTagInput.tsx

Error Responses

401 Unauthorized
error
The bearer token is missing, expired, or invalid.
MethodEndpointDescription
GET/api/public/coworkers/published/{coworkerId}Get a single published customer profile
GET/api/public/coworkers/published/{coworkerId}/relatedGet related profiles for a customer
GET/api/public/coworkers/directory/metaGet directory configuration and tag cloud