Skip to content

Get statistic groups

GET{{API_BASE_URL}}/ticketinghub/odata/v1/StatisticGroups

One row per article-to-statistics-group assignment. A small reference dataset that carries the many-to-many relation the ticket rows cannot express — and the place where audited attendance reporting is structured.

Load it whole — it is seven columns and typically a few hundred rows.

Grain and key

Grainone row per article-to-group assignment
Natural keyMandatorInternalId, ArticleInternalId, StatisticGroupInternalId
Page size1000
Columns7
Watermarknone

The complete dataset

All seven columns:

ColumnTypeNotes
MandatorInternalIdintKey. Constant for your feed.
ArticleInternalIdintKey. Join to Tickets.
StatisticGroupInternalIdintKey.
Namestring?The group name — your chart dimension.
Descriptionstring?Longer description of the group.
IsFkmTotalboolThe group counts towards the audited total.
IsFkmVisitorboolThe group counts as visitors.

Why this is a separate dataset

An article is regularly a member of several statistics groups at once — a single column on the ticket row cannot represent that. Splitting it out is the only correct way to model it. In warehouse terms this is a bridge table, not a dimension.

Traps specific to this dataset

  • The join multiplies rows. An article in three groups produces three rows per ticket. A COUNT(*) after joining counts assignments, not tickets — count distinct TicketInternalId.
  • An article with no group has no row here. An inner join silently drops those tickets. Use a left join and decide explicitly what the unassigned bucket means — often it belongs in an "other" category rather than being dropped.
  • IsFkmTotal and IsFkmVisitor are independent, not a partition. A visitor badge group is normally in both; a plain business category is a row with both false. Never derive one from the other, and never compute non-visitors as total minus visitor.
  • No event context. Group membership is a property of the article, not of an event. The event comes from the ticket.

Joining

Join to Tickets on MandatorInternalId, ArticleInternalId. See How ticketing data works → Counting visitors for how to use the result correctly.


Request

No request body.

  • $select(string): rarely needed here — there are only seven columns.
  • $filter(string): an OData predicate.
  • $orderby(string): sort order.
  • $top(integer): maximum rows, capped at 1000.
  • $count(boolean): include the total count.
  • $skiptoken(string): server-generated paging token.

Response

  • @odata.context (string): the metadata URL describing this payload.
  • value (array): the page of assignment rows.
  • @odata.nextLink (string, optional): the next page; absent on the last one.
  • @odata.count (integer, optional): present only when $count=true.

Three things to get right when you join

Join on MandatorInternalId and ArticleInternalId. Then:

The join multiplies rows. An article in three groups produces three rows per ticket. Count distinct TicketInternalId, never rows, or you will triple your attendance figure.

An article with no group has no row here. An inner join silently drops those tickets. Use a left join and decide deliberately what the unassigned bucket means in your report.

IsFkmTotal and IsFkmVisitor are independent flags, not a partition. Report them separately; never subtract one from the other.

See How ticketing data works → Counting visitors and the Audited attendance by statistics group entry in Recipes.

Authentication#auth

This endpoint does not require authentication.

Headers#headers

AuthorizationBearer {{ACCESS_TOKEN}}

Required. A client-credentials token carrying the scope ticketinghub-api and no subject. See Authentication.

Acceptapplication/json

Optional. JSON is returned by default.

Query parameters#query

$selectArticleInternalId,StatisticGroupInternalId,Name,IsFkmTotal,IsFkmVisitoroptional

Comma-separated list of columns to load. With only seven columns, loading the whole row is usually the right call.

$filterIsFkmVisitor eq trueoptional

OData predicate. Remember the two FKM flags are independent, so filtering on one tells you nothing about the other.

$orderbyArticleInternalIdoptional

Sort order. Note that it also changes the order the keyset walk runs in.

$top1000optional

Maximum number of rows. Capped at 1000; a higher value is rejected with 400.

$counttrueoptional

Include the total row count in @odata.count. Note this counts assignments, not articles. Scans the whole dataset; ask once per load.

$skiptokenoptional

Server-generated keyset paging token. Note that this dataset has a three-part key, so the walk runs in alphabetical key order.

$skipoptional

Offset paging. Supported but discouraged — use @odata.nextLink instead.

Responses#responses

200OKGet statistic groups