---
title: "Retrieve a talent by its unique identifier"
method: GET
path: "/api/servicepool/talents/{identifier}"
tags: ["talent"]
---

# Retrieve a talent by its unique identifier

`GET /api/servicepool/talents/{identifier}`

## Request

- Base URL: `https://services.fountain.com`
- URL: `https://services.fountain.com/api/servicepool/talents/{identifier}`
- Auth: HTTP bearer

## Path parameters

- `identifier` string, uuid, required

## Response `200`

Fetch a single `talent` by uuid

- object
  - `data` TalentDto, required
    - `uuid` string, required: The unique identifier of the talent
    - `companyUuid` string, required: The unique identifier of the company
    - `hireApplicants` object[], required
      - `hireExternalId` string, required: The external identifier of the applicant from Hire
      - `createdAt` string, date-time, required: The date and time the applicant was created
      - `positionUuid` string: The unique identifier of the position
      - `stage` object
        - `type` string: The type of the stage
        - `title` string: The title of the stage
        - `external_id` string: The external identifier of the stage from Hire
      - `rejectionReason` string: Unique identifier of the rejection reason
      - `opening` object
        - `uuid` string, required: The unique identifier of the opening
        - `title` string: The title of the opening
        - `address` object
          - `address1` string: Street number and name of an address
          - `address2` string: Identifies a specific location within the context of address 1
          - `city` string: City name of an address
          - `county` string: County name of an address
          - `zip` string: Postal or ZIP code of an address
          - `state` string: State or province code of an address
          - `country` string: Country name of an address
          - `location` object: Longitude and latitude of a location as an object
            - `type` string, required: Type of location used for longitude and latitude
            - `coordinates` number[], required: Longitude and latitude of a location
        - `jobHours` 'full_time' | 'part_time': The job hours of the opening
      - `availability` object
        - `monday` string[], required: Availability periods for Monday
        - `tuesday` string[], required: Availability periods for Tuesday
        - `wednesday` string[], required: Availability periods for Wednesday
        - `thursday` string[], required: Availability periods for Thursday
        - `friday` string[], required: Availability periods for Friday
        - `saturday` string[], required: Availability periods for Saturday
        - `sunday` string[], required: Availability periods for Sunday
      - `onetV2Skills` object[]: List of onet v2 skills
        - `skill` string, required
        - `category` string
        - `Element ID` string
        - `frequency` number
        - `dataValue` number
        - `evidence` string
      - `concepts` object[]
        - `conceptUuid` string, required: The unique identifier of the concept
        - `conceptName` string, required: The name of the concept
        - `dataKey` string, required: The key of the data in Hire
        - `values` object[], required
          - `rawValue` string, required: The raw value of the concept
          - `conceptOptionUuid` string: The unique identifier of the concept option
          - `label` string, required: The label of the concept option
      - `structured_data` object: Structured data from the application
      - `data` object: Additional data from the application
      - `aiRecruiterResults` object[]: AI Recruiter interview results from Alpharun
        - `assessmentScore` number
        - `summary` string
        - `strengths` string[]
        - `weaknesses` string[]
        - `assessmentCriteria` object[]
          - `name` string, required
          - `value` union
            - string
            - boolean
            - number
          - `commentary` string
        - `dataExtractionFields` object[]
          - `key` string
          - `name` string, required
          - `type` string
          - `value` unknown
          - `commentary` string
        - `transcript` object[]
          - `role` string, required
          - `transcript` string, required
          - `started_at` string
          - `ended_at` string
        - `status` string
        - `startedAt` string
        - `completedAt` string
        - `recordingUrl` string
        - `videoUrl` string
        - `interviewId` string
        - `jobOpeningId` string
      - `schemaVersion` integer: Schema version for migration tracking. Incremented when the sub-document schema changes.
    - `prospects` object[], required
      - `uuid` string, required: The unique identifier of the prospect
      - `email` string, email, required: The email of the prospect
      - `firstName` string, required: The first name of the prospect
      - `middleName` string: The middle name of the prospect
      - `lastName` string: The last name of the prospect
      - `phone` string: The mobile phone of the prospect
      - `homeAddress` object
        - `address1` string: Street number and name of an address
        - `address2` string: Identifies a specific location within the context of address 1
        - `city` string: City name of an address
        - `county` string: County name of an address
        - `zip` string: Postal or ZIP code of an address
        - `state` string: State or province code of an address
        - `country` string: Country name of an address
      - `calculatedCustomAttributes` object: The calculated custom attributes of the prospect
      - `csvImportFileUuid` string: The unique identifier of the CSV import file
      - `leadCaptureFormUuid` string: The lead capture form the prospect submitted through. Server-stamped; absent on CSV and pipeline imports.
      - `customAttributes` object[]
        - `customAttributeUuid` string, required: The unique identifier of the custom attribute
        - `value` union, required: The value of the custom attribute
          - string
          - number
          - boolean
      - `dateOfBirth` string: The date of birth of the prospect
      - `filename` string: The filename of the prospect
      - `homePhone` string: The home phone of the prospect
      - `source` 'csv' | 'self-import': The source of the prospect
      - `timezone` string: The timezone of the prospect
      - `uploadedAt` string: The date and time the prospect was uploaded
      - `uploadedBy` string: The unique identifier of the user who uploaded the prospect
      - `onetV2Skills` object[]: List of onet v2 skills
        - `skill` string, required
        - `category` string
        - `Element ID` string
        - `frequency` number
        - `dataValue` number
        - `evidence` string
      - `consentSmsMarketing` boolean, nullable: Whether the prospect has consented to marketing SMS. Absent means never asked; false means an explicit decline; null clears a previously recorded answer back to never-asked. This is the only consent field Pool enforces — a decline excludes the talent from Pool campaign messaging.
      - `consentSmsMarketingAt` string, date-time: When the marketing SMS consent answer was recorded. Server-set; supplied values are ignored.
      - `consentSmsTransactional` boolean, nullable: Whether the prospect has consented to transactional SMS. Null clears a previously recorded answer. Stored for parity with the Hire applicant API; Pool has no marketing/transactional campaign distinction, so this field is not enforced.
      - `consentSmsTransactionalAt` string, date-time: When the transactional SMS consent answer was recorded. Server-set; supplied values are ignored.
      - `consentCallsMarketing` boolean, nullable: Whether the prospect has consented to marketing voice calls. Null clears a previously recorded answer. Stored for parity with the Hire applicant API; Pool has no voice channel, so this field is not enforced.
      - `consentCallsMarketingAt` string, date-time: When the marketing calls consent answer was recorded. Server-set; supplied values are ignored.
      - `consentCallsTransactional` boolean, nullable: Whether the prospect has consented to transactional voice calls. Null clears a previously recorded answer. Stored for parity with the Hire applicant API; Pool has no voice channel, so this field is not enforced.
      - `consentCallsTransactionalAt` string, date-time: When the transactional calls consent answer was recorded. Server-set; supplied values are ignored.
      - `schemaVersion` integer: Schema version for migration tracking. Incremented when the sub-document schema changes.
    - `wxWorkers` object[], required
      - `wxWorkerUuid` string, required: The unique identifier of the worker
      - `startDate` string: The date and time the worker started
      - `hireDate` string: The date and time the worker was hired
      - `terminationDate` string: The date and time the worker was terminated
      - `jobUuid` string: The unique identifier of the job
      - `locationUuids` string[]: The location UUIDs the worker is assigned to
      - `locationGroupUuids` string[]: The location group UUIDs (including tree ancestors) derived from the worker locations
      - `locations` object[]: Denormalized location address resolved from locationUuids, kept live by worker ingest and the workforce.locations CDC handler
        - `locationUuid` string, required: The unique identifier of the location
        - `city` string: The city of the location
        - `stateCode` string: The state code of the location
        - `countryCode` string: The 2-letter ISO country code of the location
      - `brandUuid` string: The unique identifier of the brand the worker belongs to
      - `employmentStatus` object
        - `type` 'created' | 'preHire' | 'active' | 'rehire' | 'inactive' | 'terminated' | 'temporary', required: The type of the employment status
        - `subtype` 'applicant' | 'employee' | 'leaveOfAbsence' | 'suspended' | 'seasonal' | 'furloughed' | 'resigned' | 'fired' | 'involuntarySeparation' | 'archived': The subtype of the employment status
        - `lastStatusUpdateDate` string: The date and time the employment status was updated
      - `rehireEligible` boolean: Whether the worker is rehire eligible
      - `customAttributes` object[]
        - `customAttributeUuid` string, required: The unique identifier of the custom attribute
        - `value` string, nullable: The value of the custom attribute
      - `calculatedCustomAttributes` object: The calculated custom attributes of the worker
      - `onetV2Skills` object[]: List of onet v2 skills
        - `skill` string, required
        - `category` string
        - `Element ID` string
        - `frequency` number
        - `dataValue` number
        - `evidence` string
      - `schemaVersion` integer: Schema version for migration tracking. Incremented when the sub-document schema changes.
    - `createdAt` string, date-time, required: The date and time the talent was created
    - `createdBy` string, required: The unique identifier of the user who created the talent
    - `updatedAt` string, date-time, required: The date and time the talent was updated
    - `updatedBy` string, required: The unique identifier of the user who updated the talent
    - `personalEmail` object, required
      - `email` string, email, required: The email of the talent
      - `verified` boolean: Flag for indicating if the email is verified
    - `primaryContactUuid` string: The unique identifier of the primary contact
    - `exclusions` object
      - `activeApplicants` boolean: Flag for excluding active applicants
      - `approvedApplicants` boolean: Flag for excluding approved applicants (HiredStage)
      - `onHoldApplicants` boolean: Flag for excluding applicants on hold (ArchivedStage)
      - `rejectedApplicants` boolean: Flag for excluding rejected applicants (RejectedStage)
      - `nonApplicants` boolean: Flag for excluding talent with no Hire application (prospects and workers only)
      - `applicantRejectionReasons` object[]
        - `rejectionReason` string: The reason for the rejection
        - `hireRejectionReasonUuid` string: The unique identifier of the rejection reason in Hire
      - `workerSegments` object[]
        - `workerSegmentUuid` string: The unique identifier of the worker segment
        - `workerSegmentName` string: The name of the worker segment
      - `customConditions` object[]
        - `conceptUuid` string: The unique identifier of the concept
        - `operator` 'is' | 'isNot': The operator of the concept
        - `value` string[]: The value of the concept
      - `attributeRules` object[]: The Talent Eligibility attribute rules this talent matches; any one makes it ineligible
        - `attributeKey` string: The custom attribute key the rule reads
        - `dataType` string: The attribute's data type
        - `operator` string: The audience filter operator
        - `value` union: The value the rule compares, when it takes one
          - string
          - number
          - boolean
          - string[]
      - `retentionExpired` boolean: When true, the talent is outside the configured Pool data retention window
      - `smsMarketingOptOut` boolean: When true, the talent's most recent applicant record explicitly opted out of SMS marketing
      - `emailSuppressed` boolean: When true, Hire itself refuses to email this person. Computed mirror of the talent's hireEmailSuppressed verdict, and the key both send gates read. Blocks email campaign sends only — it does not hide the talent.
      - `smsSuppressed` boolean: When true, Hire itself refuses to SMS this person. Computed mirror of the talent's hireSmsSuppressed verdict, and the key both send gates read. Blocks SMS campaign sends only — it does not hide the talent.
    - `hireEmailSuppressed` boolean: Hire's own verdict that it will not email this person (unsubscribe, optout row, GDPR anonymization, disabled account). Derived account-wide per contact point, so it is stored once on the talent rather than per applicant record. Server-owned. Gate on exclusions.emailSuppressed, not on this.
    - `hireSmsSuppressed` boolean: Hire's own verdict that it will not SMS this person (STOP reply, optout row, revoked transactional consent, GDPR anonymization, disabled account). Derived account-wide per contact point, so it is stored once on the talent rather than per applicant record. Server-owned. Gate on exclusions.smsSuppressed, not on this.
    - `hireSuppressionUpdatedAt` string: The date and time either Hire suppression verdict was last written from a Hire payload
    - `contactability` object
      - `email` object
        - `eligible` boolean: The talent's Pool-side email opt-out record. False means they opted out of Pool email messaging; an absent value means no opt-out is recorded. This is one gate among several, so it alone does not mean the talent may be emailed — read contactable.email for that verdict.
        - `source` 'applicant-consent' | 'prospect-consent' | 'pool-unsubscribe' | 'pool-stop' | 'backfill' | 'manual' | 'email-rehome-carry' | 'sms-rehome-carry' | 'inbound-stop' | 'carrier-opt-out' | 'inbound-start' | 'stored-number-stop' | 'legacy-sms-rollup': What caused the email opt-out record. Absent when no opt-out is recorded.
        - `updatedAt` string, date-time: When the email opt-out record was last written. Absent when no opt-out is recorded.
      - `sms` object
        - `eligible` boolean: The talent's Pool-side SMS opt-out record. False means they opted out of Pool SMS messaging; an absent value means no opt-out is recorded. This is one gate among several, so it alone does not mean the talent may be texted — read contactable.sms for that verdict.
        - `source` 'applicant-consent' | 'prospect-consent' | 'pool-unsubscribe' | 'pool-stop' | 'backfill' | 'manual' | 'email-rehome-carry' | 'sms-rehome-carry' | 'inbound-stop' | 'carrier-opt-out' | 'inbound-start' | 'stored-number-stop' | 'legacy-sms-rollup': What caused the SMS opt-out record. Absent when no opt-out is recorded.
        - `updatedAt` string, date-time: When the SMS opt-out record was last written. Absent when no opt-out is recorded.
    - `contactableBlockedBy` object
      - `email` 'excluded' | 'archived' | 'opted-out' | 'hire-suppressed' | 'no-address': Why Pool cannot email this talent. Absent when it can. Mirrors contactable.email, so a client states the cause instead of re-deriving it from other fields.
      - `sms` 'excluded' | 'archived' | 'opted-out' | 'hire-suppressed' | 'no-address': Why Pool cannot text this talent. Absent when it can. Mirrors contactable.sms, so a client states the cause instead of re-deriving it from other fields.
    - `smsMarketingOptOutByCompany` boolean: True when the talent's latest SMS marketing answer is a decline Hire recorded because the company turned off marketing consent collection, not the talent's own answer. Derived at read time. Absent otherwise.
    - `contactable` object, required
      - `email` boolean, required: Whether Pool can email this talent, for display. True when the talent is visible and not archived, carries no Pool email opt-out, is not email-suppressed by Hire, and has an email address. This is a per-channel display verdict, not the send gate: a campaign additionally accepts a talent who has a phone but no email, and applies the Pool opt-out only for tenants with pool-granular-eligibility enabled.
      - `sms` boolean, required: Whether Pool can text this talent, for display. True when the talent is visible and not archived, carries no Pool SMS opt-out, is not SMS-suppressed by Hire, and has a mobile number. This is a per-channel display verdict, not the send gate: a campaign additionally accepts a talent who has an email but no phone, and applies the Pool opt-out only for tenants with pool-granular-eligibility enabled.
    - `isHidden` boolean: Flag for hiding the talent
    - `unsubscribedAt` string: The date and time the talent was unsubscribed
    - `doNotContact` boolean: True when the talent has been manually marked as do not contact — a permanent override that excludes them from campaigns, audiences, and match suggestions regardless of any other eligibility signal. Server-owned: writable only via the doNotContact endpoints.
    - `skills` string[]: The v1 list of skills of the talent
    - `isCurrentlyEmployed` boolean: Flag for indicating if the talent is currently employed
    - `firstName` string: The first name of the talent
    - `middleName` string: The middle name of the talent
    - `lastName` string: The last name of the talent
    - `displayFullName` string: The display full name of the talent
    - `dateOfBirth` string: The date of birth of the talent
    - `mobilePhone` object
      - `number` string: Phone number
      - `countryCode` string: Country code of a phone number
      - `verified` boolean: Indicator for whether the phone number is verified
      - `verifiedAt` string: Date the phone number was verified
    - `homeAddress` object
      - `address1` string: Street number and name of an address
      - `address2` string: Identifies a specific location within the context of address 1
      - `city` string: City name of an address
      - `county` string: County name of an address
      - `zip` string: Postal or ZIP code of an address
      - `state` string: State or province code of an address
      - `country` string: Country name of an address
      - `location` object
        - `type` 'Point', required: The type of location
        - `coordinates` number[], required: The coordinates of the location
    - `audienceUuids` string[]: The unique identifiers of the audiences
    - `archivedAt` string: The date and time the talent was archived
    - `audienceCampaignStats` object
    - `aggregatedCampaignStats` object
      - `total` number, required: The total number of messages
      - `sent` number, required: The number of messages sent
      - `delivered` number, required: The number of messages delivered
      - `opened` number, required: The number of messages opened
      - `clicked` number, required: The number of messages clicked
      - `unsubscribed` number: The number of messages that resulted in an unsubscribe
    - `aggregatedCampaignCalculatedStats` object
      - `deliveryRate` number, required: The delivery rate of the campaign
      - `openRate` number, required: The open rate of the campaign
      - `clickRate` number, required: The click rate of the campaign
      - `bounceRate` number: The bounce rate of the campaign
      - `unsubscribeRate` number: The unsubscribe rate of the campaign (unsubscribed / delivered)
    - `talentType` 'worker' | 'applicant' | 'prospect': The type of talent
    - `statsLastInteraction` string: The date and time the last interaction was made
    - `lastActivityAt` string: The date and time of the most recent Pool-relevant activity for retention
    - `retentionExpiresAt` string, date-time: UTC instant when Pool data retention eligibility ends for this talent, derived from the company match-setting window and last qualifying activity
    - `availability` object
      - `monday` string[], required: Availability periods for Monday
      - `tuesday` string[], required: Availability periods for Tuesday
      - `wednesday` string[], required: Availability periods for Wednesday
      - `thursday` string[], required: Availability periods for Thursday
      - `friday` string[], required: Availability periods for Friday
      - `saturday` string[], required: Availability periods for Saturday
      - `sunday` string[], required: Availability periods for Sunday
    - `availabilityShiftVector` number[]: Vector of availability information
    - `score` number: The match score of the talent, ranging from 0 to 1
    - `audienceCampaignEnrollment` object: Present only on GET /talents scoped by audienceCampaignUuid: the talent's enrollment on that campaign.
      - `excluded` boolean, required: True when the talent will get no more messages from this campaign: a terminal exit (opt-out, unsubscribe, do not contact, an account eligibility rule, retention ended) or a hidden profile. Read the profile fields (doNotContact, unsubscribedAt, contactability, exclusions) for the reason.
      - `exitedAt` string, date-time: When the talent left this campaign. Absent on a row excluded before exits were stamped, or hidden after the campaign stopped sending.
    - `onetV2SkillsVector` number[]: Vector of onet v2 skills information
    - `primaryCustomValues` object
      - `customAttributes` object[]
        - `type` 'concept' | 'customAttribute' | 'prospect', required: The type of the custom attribute or concept
        - `conceptName` string: The name of the concept
        - `dataKey` string: The key of the data in Hire
        - `values` object[]
          - `rawValue` string, required: The raw value of the concept
          - `conceptOptionUuid` string: The unique identifier of the concept option
          - `label` string, required: The label of the concept option
        - `customAttributeUuid` string, required: The unique identifier of the custom attribute
        - `value` string, nullable: The value of the custom attribute
        - `uploadedAt` string: The date and time the custom attribute or concept was uploaded
      - `calculatedCustomAttributes` object: The calculated custom attributes of the worker
    - `schemaVersion` integer: Schema version for migration tracking. Incremented when the talent document schema changes.

## Other responses

- `404`: default error response

---

[API](https://skmtc.dev/fountain/apis/worker-experience-public-api.md) - [All operations](https://skmtc.dev/fountain/apis/worker-experience-public-api/llms.txt) - [OpenAPI document](https://skmtc.dev/fountain/apis/worker-experience-public-api/revisions/6b9a31f79e22?raw)
