---
title: "Average match score across talent"
method: GET
path: "/api/servicepool/talents/averageScore"
tags: ["talent"]
---

# Average match score across talent

`GET /api/servicepool/talents/averageScore`

## Request

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

Mean match score across the same talent GET /talents/count would count, with the same filter/vectors/proximity/audience parameters and the same visibility rules. Split off the count (POOL-2184) because averaging needs a per-document value and so can never be answered from the index, which made every talent-table tile render read the whole tenant. Only the vector-scoring stages write `score`, so a query without `vectors` returns null — including a proximity-only query, since proximity compiles to a bare `$geoWithin` `$match` that filters but writes no score. It also returns null when the V3 engine is primary for the target opening: the number this route produces is a V2 average over the matched population, while the rows of GET /talents come back V3-scored, so the two would describe different engines. Average the `score` on those rows instead. On such a tenant this route therefore serves no number at all, and the same null comes back from the deprecated averageScore field on GET /talents/count — the two agree by construction, including on refusing a filter no index can serve.

## Query parameters

- `filter` ParametersFilter
  - `where` ParametersFilterWhere
  - `fields` ParametersFilterFields
  - `limit` number
  - `skip` number
  - `order` string[]
  - `collate` ParametersFilterCollation
    - `locale` string
    - `strength` number
    - `caseLevel` boolean
    - `numericOrdering` boolean
- `vectors` JobMatchVectorDto, nullable
  - `matchThreshold` number, required: The match threshold of the job match vector, as a percent from 0 to 100
  - `matchType` 'Job' | 'Opening', required: The match type of the job match vector
  - `matchUuid` string, required: The unique identifier of the job match vector
- `proximity` ProximityMatchDto, nullable
  - `distance` number, required: The numeric distance from location
  - `unit` 'mile' | 'kilometer', required: The unit of measurement
  - `locationUuid` string, required: The unique identifier of the location to check distance against
- `audienceCampaignUuid` string, uuid
- `onlyReturnHiddenTalent` boolean
- `includeHidden` boolean
- `audienceUuid` string, uuid
- `search` string

## Response `200`

Average match score across the matched `talent`

- object
  - `data` object, required
    - `averageScore` number, nullable, required: Mean match score as a 0-1 fraction. `null` means no average exists — nothing matched, or the query carried no vectors so no talent has a score (proximity alone does not produce one). `null` is NOT a 0% match.
  - `meta` ResponsesPartMeta, required
    - `timestamp` string, date-time, required
    - `verb` 'OPTION' | 'GET' | 'PUT' | 'POST' | 'PATCH' | 'DELETE'
    - `path` string
    - `jti` string
    - `rid` string
    - `count` number
    - `capped` boolean: The server lowered filter[limit] to its ceiling. Page with filter[skip] to read past it.
    - `status` string
    - `duration` number
    - `size` number

## Other responses

- `400`: 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)
