---
title: "What this server's score validator accepts"
method: GET
path: "/api/v1/ackdb/scores/capabilities"
tags: ["ackDB"]
---

# What this server's score validator accepts

`GET /api/v1/ackdb/scores/capabilities`

## Request

- Base URL: `http://localhost:3009`
- URL: `http://localhost:3009/api/v1/ackdb/scores/capabilities`
- Auth: HTTP bearer

The scoring contract: aggregate reducers (with the grains and scoring modes each allows), match operators, normalizations, percentile populations, convergence modes and every numeric limit. Builders should render from this rather than probing for support by saving throwaway definitions. Note eventValueMatching: match compares event metadata EXACTLY (case-sensitive), the same way segment filters do — seed value pickers from /fields/{key}/values instead of accepting free text (#438).

## Response `200`

The scoring capability contract.

- AckdbScoreCapabilities: What this server's score validator accepts (#438): the contract a builder renders from instead of probing for support by saving throwaway definitions. Static, since it mirrors the validator's own constants, so it needs no DB round trip.
  - `grains` string[], required: Grains a definition can be created on.
  - `scopes` object, required: Segment scoping (#443) — what scopeSegmentId accepts. Render the segment picker from this rather than assuming grain-for-grain: any segment grain may scope any score grain.
    - `segmentKinds` string[], required
    - `derived` boolean, required: Whether a derived segment is a legal scope.
  - `aggregates` object[], required: Every aggregate reducer, with the grains and scoring modes each one allows. Render the aggregate picker from this: a scoring mode absent from `scoring` is a 400, not a fallback.
    - `value` 'count' | 'sum' | 'distinct_contacts' | 'latest', required
    - `grains` string[], required: Legal grains. distinct_contacts is company-only (the person grain has no contact rail).
    - `scoring` string[], required: Scoring modes this reducer accepts. Only `latest` accepts `match`.
    - `requires` 'sumField' | 'valueField': The extra field knob this reducer requires, if any.
    - `halfLife` boolean, required: False when halfLifeDays does not compose (distinct_contacts, latest), where it 400s.
  - `matchOps` string[], required: Match operators the validator accepts, on every matchable field kind.
  - `normalizations` string[], required
  - `percentilePopulations` string[], required: Percentile ranking populations (#432). Rejected on absolute definitions.
  - `convergenceModes` string[], required: Convergence list shapes, exactly one per criterion (#414 sources, #421 signals).
  - `eventValueMatching` 'exact', required: How `match` values compare against event metadata: exact and case-sensitive, the way segment filters compare them (#380 canonicalizes trait values and deliberately left event fields exact). Seed value pickers from /fields/{key}/values rather than accepting free text, since a value differing only in case scores 0.
  - `limits` object, required: Every numeric bound the validator enforces. Enforce them client-side to avoid round-trip 400s.
    - `criteria` integer, required: Max criteria per definition.
    - `groups` integer, required: Max weighted groups per definition.
    - `matchEntries` integer, required: Max match entries per criterion (and values per entry).
    - `bands` integer, required: Max bands per criterion.
    - `labels` integer, required: Max label bands per definition.
    - `points` integer, required: Absolute bound on match/band points (±).
    - `perUnitPoints` integer, required: Absolute bound on the per-unit slope (±).
    - `cap` integer, required: Max perUnitPoints cap (0 < cap ≤ this).
    - `windowDays` integer, required: Max trailing window on an event aggregate.
    - `convergenceWindowDays` integer, required: Max window on a convergence criterion, tighter than windowDays.
    - `convergenceSignals` integer, required: Max signals in a signals-mode list.

---

[API](https://skmtc.dev/floqer/apis/floqer-public-api.md) - [All operations](https://skmtc.dev/floqer/apis/floqer-public-api/llms.txt) - [OpenAPI document](https://skmtc.dev/floqer/apis/floqer-public-api/revisions/fce50dc07b20?raw)
