> ## Documentation Index
> Fetch the complete documentation index at: https://docs.syrto.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Market pro

> Price: 750 credits, +250 with a breakdown (macro area or size class; once per call, however many groups). 404, never billed, when no company in the set has filed for the year. The answer is whole or nothing: when a part cannot be computed the call fails (504 or 502), never billed. After a 504, retry after its Retry-After: queries that had reached the data service finish there and are cached. Read-only and idempotent: POST is used only because the request carries a body. The HTTP QUERY method is the preferred verb for this operation and will be accepted on the same path once client support is widespread.



## OpenAPI

````yaml api-reference/openapi.standard.json POST /market/pro
openapi: 3.1.0
info:
  title: Syrto API - standard endpoints
  version: 1.7.0
  description: >-
    Financial, corporate and market data on Italian companies.


    Every call answers `200 { data, meta }`; `meta.usage.quantity` is what the
    call consumed, in

    credits, and `meta.warnings` lists any non-fatal caveats (empty when there
    are none). Every field

    is always present and unknown values are null. Percentages are fractions
    (0.15 = 15%).


    **Authentication.** Every call needs an API key, sent as `Authorization:
    Bearer sk_...` over

    HTTPS - never in a URL. Keys are scoped to your organization: admins create
    and revoke them in the

    Syrto dashboard (https://dashboard.syrto.ai/api-keys). A missing or
    unrecognised key is a 401

    (`missing_api_key`, `invalid_api_key`); a 503 `auth_unavailable` means the
    key could not be

    checked right now, so retry with backoff rather than rotating it.


    **Billing basis.** negativities, rna and structure bill once per legal
    entity: the individual and

    consolidated records of the same company count once. Every other endpoint
    bills per record (or per

    call), so individual and consolidated count separately. A tax id always
    resolves to a single record

    (`statementBasis`, individual by default): a company is billed twice only
    when both of its

    companyIds are passed. A market call is priced per call, whatever the size
    of its set: omitting

    `filters` and `seedId`, or sending `filters: {}`, is the whole of Italy, at
    the same price.

    notFound entries are never billed, and neither is any error.
servers:
  - url: https://api.syrto.ai
security: []
tags:
  - name: Company data
    description: Identity, risk flags, state aid and branches of known companies.
  - name: Governance
    description: Ownership, officers, beneficial owners and group.
  - name: Financials
    description: Statement items, reclassified statements, indices and spider graph.
  - name: Composite
    description: Comparable companies.
  - name: Search
    description: The companies of a filtered set, row by row.
  - name: Market
    description: Aggregates over a filtered set.
  - name: Catalog
    description: Free reference data.
paths:
  /market/pro:
    post:
      tags:
        - Market
      summary: >-
        Twenty metrics, seven segments, three-year dynamics and the top five
        companies.
      description: >-
        Price: 750 credits, +250 with a breakdown (macro area or size class;
        once per call, however many groups). 404, never billed, when no company
        in the set has filed for the year. The answer is whole or nothing: when
        a part cannot be computed the call fails (504 or 502), never billed.
        After a 504, retry after its Retry-After: queries that had reached the
        data service finish there and are cached. Read-only and idempotent: POST
        is used only because the request carries a body. The HTTP QUERY method
        is the preferred verb for this operation and will be accepted on the
        same path once client support is widespread.
      operationId: market-pro
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MarketRequest'
      responses:
        '200':
          description: >-
            Twenty metrics, seven segments, three-year dynamics and the top five
            companies.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/MarketPro'
                  meta:
                    $ref: '#/components/schemas/ResponseMeta'
                required:
                  - data
                  - meta
        '401':
          description: missing_api_key | invalid_api_key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '402':
          description: credits_exhausted | limit_reached
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: client_not_configured | not_entitled
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: unknown_endpoint | not_found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '413':
          description: payload_too_large
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '415':
          description: unsupported_media_type
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '422':
          description: invalid_params
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: rate_limited
          headers:
            Retry-After:
              description: >-
                Seconds to wait before retrying. Neither a 429 nor a 504 is
                billed. A 504 whose query had reached the data service leaves it
                running, and its answer is cached, so the same call after this
                delay is usually fast.
              schema:
                type: integer
                minimum: 0
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: internal_error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '502':
          description: upstream_error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '503':
          description: auth_unavailable | entitlement_unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '504':
          description: upstream_timeout
          headers:
            Retry-After:
              description: >-
                Seconds to wait before retrying. Neither a 429 nor a 504 is
                billed. A 504 whose query had reached the data service leaves it
                running, and its answer is cached, so the same call after this
                delay is usually fast.
              schema:
                type: integer
                minimum: 0
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
        - bearerAuth: []
components:
  schemas:
    MarketRequest:
      type: object
      properties:
        year:
          type: integer
          minimum: 2015
          maximum: 2100
          description: Always required.
        filters:
          $ref: '#/components/schemas/Filters'
        seedId:
          type: string
          minLength: 1
          maxLength: 100
          description: >-
            A companyId or tax id to derive the set from: its NACE class, its
            macro area (Italy for size L) and its size class. `filters` override
            any part.
        breakdown:
          type: string
          enum:
            - none
            - macro
            - size
          description: >-
            One axis per call (default none): macro area (5 NUTS 1 groups) or
            size class (4 groups: XS, S, M, L) - never both. `macro` fails with
            422 when the set already has a geography: a `nuts` or `lau` filter,
            or a seed below size L. `size` fails with 422 when the set already
            has a size: a `financial.size` filter, or any seed. There is no
            regional breakdown: for one region or macro area, filter on it, one
            call per area.
        language:
          type: string
          enum:
            - it
            - en
          description: >-
            Language of metric names, labels and descriptions (never of field
            names or slugs). Omitted: the account's default.
      required:
        - year
      additionalProperties: false
      description: >-
        Omitting both `filters` and `seedId`, or sending `filters: {}`,
        aggregates every company with a statement for `year` (the whole of
        Italy), at the same price. Several geographic codes in
        `filters.anagraphic.nuts` are summed into one set, never split.
    MarketPro:
      type: object
      properties:
        perimeter:
          $ref: '#/components/schemas/MarketPerimeter'
        market:
          $ref: '#/components/schemas/MarketProAggregate'
        groups:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/MarketProGroup'
          description: >-
            Null without a breakdown. Otherwise every group - 5 macro areas or 4
            size classes - in that fixed order, empty ones included
            (companyCount 0).
        segments:
          type: array
          items:
            $ref: '#/components/schemas/MarketSegment'
          minItems: 7
          maxItems: 7
          description: >-
            The seven segments, in the order of `key`: four health, three
            channel.
        dynamics:
          $ref: '#/components/schemas/MarketDynamics'
        concentration:
          $ref: '#/components/schemas/MarketConcentration'
      required:
        - perimeter
        - market
        - groups
        - segments
        - dynamics
        - concentration
      description: >-
        Twenty metrics, seven segments, three-year dynamics and top-5
        concentration with the five companies named. With a breakdown, metrics
        and segments repeat per group; dynamics and concentration stay on the
        whole set.
    ResponseMeta:
      type: object
      properties:
        requestId:
          type: string
        endpoint:
          type: string
        usage:
          $ref: '#/components/schemas/Usage'
        warnings:
          type: array
          items:
            $ref: '#/components/schemas/Warning'
          description: Empty when there are none.
      required:
        - requestId
        - endpoint
        - usage
        - warnings
    Error:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              enum:
                - missing_api_key
                - invalid_api_key
                - credits_exhausted
                - limit_reached
                - client_not_configured
                - not_entitled
                - unknown_endpoint
                - not_found
                - payload_too_large
                - unsupported_media_type
                - invalid_params
                - rate_limited
                - internal_error
                - upstream_error
                - auth_unavailable
                - entitlement_unavailable
                - upstream_timeout
            message:
              type: string
            requestId:
              type: string
            details:
              type: array
              items:
                type: object
                properties:
                  path:
                    type: string
                  message:
                    type: string
                required:
                  - path
                  - message
          required:
            - code
            - message
            - requestId
      required:
        - error
    Filters:
      type: object
      properties:
        companyIds:
          type: array
          items:
            type: string
            maxLength: 100
          minItems: 1
          maxItems: 200
          description: 'Restrict to these companyIds (e.g. a portfolio). Tier: base.'
        statementBasis:
          type: string
          enum:
            - individual
            - consolidated
          description: >-
            Which statements to include: individual (default) or consolidated.
            With companyIds, the ids decide.
        anagraphic:
          $ref: '#/components/schemas/AnagraphicFilter'
        financial:
          $ref: '#/components/schemas/FinancialFilter'
        stateAids:
          $ref: '#/components/schemas/StateAidsFilter'
        people:
          $ref: '#/components/schemas/PeopleFilter'
        radar:
          $ref: '#/components/schemas/RadarFilter'
      additionalProperties: false
      description: >-
        Defines a set of companies: /companies/search returns it row by row,
        /market aggregates it. Every section is optional; everything is ANDed.
    MarketPerimeter:
      type: object
      properties:
        method:
          type: string
          enum:
            - filters
            - seed
        nace:
          type: array
          items:
            type: string
        geography:
          type: array
          items:
            type: string
        size:
          type: array
          items:
            $ref: '#/components/schemas/SizeBand'
        year:
          type: integer
        companyCount:
          type: integer
          description: >-
            Companies in the set for `year`: those with figures for it, filed or
            still estimated - only the filed ones when the set filters on
            figures (financial or radar filters).
        companiesWithFiling:
          type: integer
          description: >-
            Of those, how many have filed for `year`. Every figure is computed
            on these.
        seedCompanyId:
          type:
            - string
            - 'null'
        matchCutoffApplied:
          type:
            - number
            - 'null'
          description: >-
            Set when the set uses semantic search; without it the numbers are
            not reproducible.
        breakdown:
          type: string
          enum:
            - none
            - macro
            - size
          description: The breakdown applied.
      required:
        - method
        - nace
        - geography
        - size
        - year
        - companyCount
        - companiesWithFiling
        - seedCompanyId
        - matchCutoffApplied
        - breakdown
    MarketProAggregate:
      type: object
      properties:
        employees:
          $ref: '#/components/schemas/MarketStats'
        radar:
          $ref: '#/components/schemas/MarketRadar'
        metrics:
          type: array
          items:
            $ref: '#/components/schemas/MarketProMetric'
          minItems: 20
          maxItems: 20
          description: The 20 metrics of `MarketProMetricSlug`, in that order.
      required:
        - employees
        - radar
        - metrics
    MarketProGroup:
      type: object
      properties:
        groupKey:
          type: string
          description: >-
            NUTS 1 code (ITC, ITH, ITI, ITF, ITG) with `macro`; XS, S, M or L
            with `size`.
        groupLabel:
          type: string
          description: Localized.
        companyCount:
          type: integer
          minimum: 0
        market:
          $ref: '#/components/schemas/MarketProAggregate'
      required:
        - groupKey
        - groupLabel
        - companyCount
        - market
    MarketSegment:
      type: object
      properties:
        key:
          type: string
          enum:
            - in_loss
            - growing
            - weak_capitalisation
            - de_minimis_full
            - b2b
            - b2c
            - b2g
          description: >-
            in_loss: net profit below zero. growing: 3-year revenue CAGR above
            zero. weak_capitalisation: equity ratio below 10%. de_minimis_full:
            no de minimis aid in the trailing 36 months (full allowance). b2b,
            b2c, b2g: serves that channel, exact value (B2B2C is not B2B).
        group:
          type: string
          enum:
            - health
            - channel
          description: health for the first four keys, channel for b2b, b2c, b2g.
        label:
          type: string
          description: Localized.
        definition:
          type: string
          description: The criterion in words.
        reading:
          type:
            - string
            - 'null'
          description: A ready-made localized sentence, on the total only.
          example: Il 19,2% delle aziende chiude in perdita
        total:
          $ref: '#/components/schemas/SegmentStats'
        byGroup:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/GroupSegmentStats'
          description: Null without a breakdown.
      required:
        - key
        - group
        - label
        - definition
        - reading
        - total
        - byGroup
      description: >-
        A SUB-POPULATION of the set (read 'share of companies that ...'), not an
        attribute of a company. Shares are on the companies aggregated
        (companiesWithFiling, or the group's companyCount). Channel shares
        overlap - a company can serve several channels - so they can add up to
        more than 100% and have no residual.
    MarketDynamics:
      type: object
      properties:
        baseYear:
          type: integer
        compareYear:
          type: integer
          description: baseYear - 3.
        companies:
          $ref: '#/components/schemas/MarketDelta'
        revenue:
          $ref: '#/components/schemas/MarketDelta'
        reading:
          type:
            - string
            - 'null'
          enum:
            - consolidation
            - expansion
            - contraction
            - fragmentation
            - null
          description: >-
            From the signs of the two changes: companies down + revenue up =
            consolidation, both up = expansion, both down = contraction,
            companies up + revenue down = fragmentation. Null when either change
            is unknown (no revenue on record for one of the years).
        filingCoverage:
          type:
            - number
            - 'null'
          description: >-
            Filers in baseYear / filers the year before, same filters. At or
            below 0.9 the year is still incomplete and meta.warnings says so.
      required:
        - baseYear
        - compareYear
        - companies
        - revenue
        - reading
        - filingCoverage
      description: >-
        The same filters applied to baseYear and to baseYear - 3, each year on
        its own. On the whole set, never per group.
    MarketConcentration:
      type: object
      properties:
        top5:
          $ref: '#/components/schemas/ConcentrationTier'
        companies:
          type: array
          items:
            $ref: '#/components/schemas/ConcentrationCompany'
          maxItems: 5
          description: >-
            The five largest by revenues, largest first; fewer when the set has
            fewer.
      required:
        - top5
        - companies
      description: On the whole set, never per group.
    Usage:
      type: object
      properties:
        quantity:
          type: number
        unit:
          type: string
      required:
        - quantity
        - unit
    Warning:
      type: object
      properties:
        code:
          type: string
        message:
          type: string
      required:
        - code
        - message
    AnagraphicFilter:
      type: object
      properties:
        name:
          type: object
          properties:
            contains:
              type: string
              maxLength: 200
            startsWith:
              type: string
              maxLength: 200
          additionalProperties: false
          minProperties: 1
          maxProperties: 1
          description: >-
            Legal-name screen, case-insensitive: `contains` matches whole words,
            `startsWith` a prefix. Filters, never ranks. Tier: base.
        nace:
          type: array
          items:
            type: string
            maxLength: 11
          minItems: 1
          maxItems: 20
          description: >-
            NACE codes, all at one level: section `C`, division `27`, group
            `27.9`, class `27.90`, subclass `27.90.01`. Tier: base.
        nuts:
          type: array
          items:
            type: string
            minLength: 3
            maxLength: 5
          minItems: 1
          maxItems: 20
          description: >-
            NUTS codes, all at one level (3 chars = macro area, 4 = region, 5 =
            province). Matches the registered office, not operating sites. Tier:
            base.
        lau:
          type: array
          items:
            type: string
            maxLength: 12
          minItems: 1
          maxItems: 50
          description: 'ISTAT municipality codes of the registered office. Tier: base.'
        countryCode:
          type: string
          pattern: ^[A-Z]{2}$
          description: 'ISO 3166-1 alpha-2. Tier: base.'
        age:
          type: object
          properties:
            min:
              type: integer
            max:
              type: integer
          additionalProperties: false
          description: >-
            Company age, in years. Tier: base. Inclusive bounds: min, max or
            both, with min <= max.
          minProperties: 1
        semanticSearch:
          type: string
          minLength: 1
          maxLength: 500
          description: >-
            Search on the ACTIVITY description (products, services, markets
            served) - not name, legal form or financials. Tier: plus.
        matchCutoff:
          type: number
          minimum: 0.5
          maximum: 1
          description: >-
            Minimum semantic similarity, default 0.8. Higher is fewer, closer
            matches. Tier: plus.
        shareholderAge:
          type: object
          properties:
            min:
              type: integer
            max:
              type: integer
          additionalProperties: false
          description: >-
            AVERAGE age of the shareholders, in years. Tier: pro. Inclusive
            bounds: min, max or both, with min <= max.
          minProperties: 1
        beneficialOwnerAge:
          type: object
          properties:
            min:
              type: integer
            max:
              type: integer
          additionalProperties: false
          description: >-
            AVERAGE age of the beneficial owners, in years - not the majority
            holder's. Tier: pro. Inclusive bounds: min, max or both, with min <=
            max.
          minProperties: 1
        executiveOfficerAge:
          type: object
          properties:
            min:
              type: integer
            max:
              type: integer
          additionalProperties: false
          description: >-
            Average age of the executive officers, in years. Tier: pro.
            Inclusive bounds: min, max or both, with min <= max.
          minProperties: 1
        representationAndAuthorityOfficerAge:
          type: object
          properties:
            min:
              type: integer
            max:
              type: integer
          additionalProperties: false
          description: >-
            Average age of those with powers of representation, in years. Tier:
            pro. Inclusive bounds: min, max or both, with min <= max.
          minProperties: 1
        targetMarket:
          type: array
          items:
            $ref: '#/components/schemas/TargetMarket'
          minItems: 1
          maxItems: 9
          description: >-
            Serves ANY of these channels (exact values: B2B is not B2B2C). Tier:
            pro.
        controllingEntityCategory:
          type: array
          items:
            $ref: '#/components/schemas/ControllingEntityCategory'
          minItems: 1
          maxItems: 6
          description: 'Controlled by ANY of these entity categories. Tier: pro.'
      additionalProperties: false
      description: Company profile. Needs no `year`.
    FinancialFilter:
      type: object
      properties:
        size:
          type: array
          items:
            $ref: '#/components/schemas/SizeBand'
          minItems: 1
          maxItems: 4
          description: 'EU size class. Tier: base.'
        employees:
          type: object
          properties:
            min:
              type: integer
            max:
              type: integer
          additionalProperties: false
          description: >-
            Employee count. Tier: base. Inclusive bounds: min, max or both, with
            min <= max.
          minProperties: 1
        revenue:
          type: object
          properties:
            min:
              type: number
            max:
              type: number
          additionalProperties: false
          description: >-
            Revenues from sales and services, EUR. Tier: base. Inclusive bounds:
            min, max or both, with min <= max.
          minProperties: 1
        metricFilters:
          type: array
          items:
            $ref: '#/components/schemas/MetricFilter'
          minItems: 1
          maxItems: 10
          description: 'Up to ten metric conditions, ANDed. Tier: plus.'
      additionalProperties: false
      description: Needs `year` on the request.
    StateAidsFilter:
      type: object
      properties:
        totalAmount:
          type: object
          properties:
            min:
              type: number
            max:
              type: number
          additionalProperties: false
          description: >-
            State aid received, all time, every regime, EUR. Inclusive bounds:
            min, max or both, with min <= max.
          minProperties: 1
        amountLast36Months:
          type: object
          properties:
            min:
              type: number
            max:
              type: number
          additionalProperties: false
          description: >-
            State aid received in the trailing 36 months, EUR. Inclusive bounds:
            min, max or both, with min <= max.
          minProperties: 1
        countLast36Months:
          type: object
          properties:
            min:
              type: integer
            max:
              type: integer
          additionalProperties: false
          description: >-
            State aid grants in the trailing 36 months. Inclusive bounds: min,
            max or both, with min <= max.
          minProperties: 1
        aboveSectorMedianLast36Months:
          type: boolean
        deMinimisRemaining:
          type: object
          properties:
            min:
              type: number
            max:
              type: number
          additionalProperties: false
          description: >-
            Allowance left before the de minimis ceiling, EUR. `{min: 1}` = can
            still receive. Inclusive bounds: min, max or both, with min <= max.
          minProperties: 1
        lastGrantDate:
          type: object
          properties:
            after:
              type: string
              format: date
            before:
              type: string
              format: date
          additionalProperties: false
          description: >-
            Date of the latest grant. Inclusive ISO dates: after, before or
            both.
          minProperties: 1
      additionalProperties: false
      description: >-
        Tier: plus. Needs no `year` (the aid summary is cumulative, not per
        year).
      minProperties: 1
    PeopleFilter:
      type: object
      properties:
        officers:
          type: array
          items:
            type: object
            properties:
              personId:
                type: string
                maxLength: 100
              roleCategory:
                $ref: '#/components/schemas/RoleCategory'
            required:
              - personId
            additionalProperties: false
          minItems: 1
          maxItems: 20
        shareholderIds:
          type: array
          items:
            type: string
            maxLength: 100
          minItems: 1
          maxItems: 20
        beneficialOwnerIds:
          type: array
          items:
            type: string
            maxLength: 100
          minItems: 1
          maxItems: 20
      additionalProperties: false
      description: >-
        Tier: pro. Within a list ANY matches; across lists ALL must. Person ids
        come from /companies/structure.
      minProperties: 1
    RadarFilter:
      type: object
      properties:
        size:
          type: object
          properties:
            min:
              type: number
            max:
              type: number
          additionalProperties: false
          description: >-
            Radar size axis, 0-100. Inclusive bounds: min, max or both, with min
            <= max.
          minProperties: 1
        efficiency:
          type: object
          properties:
            min:
              type: number
            max:
              type: number
          additionalProperties: false
          description: >-
            Radar efficiency axis, 0-100. Inclusive bounds: min, max or both,
            with min <= max.
          minProperties: 1
        polygon:
          type: object
          properties:
            vertices:
              type: array
              items:
                type: object
                properties:
                  size:
                    type: number
                    minimum: 0
                    maximum: 100
                  efficiency:
                    type: number
                    minimum: 0
                    maximum: 100
                required:
                  - size
                  - efficiency
                additionalProperties: false
              minItems: 3
              maxItems: 64
          required:
            - vertices
          additionalProperties: false
          description: Any region of the plane; vertex order does not matter.
      additionalProperties: false
      description: >-
        Tier: plus. Needs `year`. Comparable across sectors. At least one of the
        three.
      minProperties: 1
    SizeBand:
      type: string
      enum:
        - XS
        - S
        - M
        - L
      description: >-
        EU size class of the statement record (not of the group, unless
        consolidated).
    MarketStats:
      type: object
      properties:
        count:
          type: integer
          description: >-
            Companies with THIS metric set - not companyCount. Shares use the
            population, medians this count.
        average:
          type:
            - number
            - 'null'
        median:
          type:
            - number
            - 'null'
        p10:
          type:
            - number
            - 'null'
        p90:
          type:
            - number
            - 'null'
        min:
          type:
            - number
            - 'null'
        max:
          type:
            - number
            - 'null'
        stdDev:
          type:
            - number
            - 'null'
        sum:
          type:
            - number
            - 'null'
          description: >-
            Null where a total is not a real quantity (percentages, ratios,
            days, radar).
      required:
        - count
        - average
        - median
        - p10
        - p90
        - min
        - max
        - stdDev
        - sum
    MarketRadar:
      type: object
      properties:
        efficiencyAvg:
          type:
            - number
            - 'null'
        efficiencyMedian:
          type:
            - number
            - 'null'
        sizeAvg:
          type:
            - number
            - 'null'
        sizeMedian:
          type:
            - number
            - 'null'
      required:
        - efficiencyAvg
        - efficiencyMedian
        - sizeAvg
        - sizeMedian
    MarketProMetric:
      allOf:
        - $ref: '#/components/schemas/MarketMetric'
        - type: object
          properties:
            slug:
              $ref: '#/components/schemas/MarketProMetricSlug'
    SegmentStats:
      type: object
      properties:
        companies:
          type: integer
          minimum: 0
        shareCompanies:
          type:
            - number
            - 'null'
          description: Share of companies, fraction.
        revenueSum:
          type:
            - number
            - 'null'
        shareRevenue:
          type:
            - number
            - 'null'
          description: Share of revenue, fraction. Read it WITH shareCompanies.
        revenueMedian:
          type:
            - number
            - 'null'
        ebitdaMarginMedian:
          type:
            - number
            - 'null'
        revenueCagrMedian:
          type:
            - number
            - 'null'
      required:
        - companies
        - shareCompanies
        - revenueSum
        - shareRevenue
        - revenueMedian
        - ebitdaMarginMedian
        - revenueCagrMedian
    GroupSegmentStats:
      allOf:
        - $ref: '#/components/schemas/SegmentStats'
        - type: object
          properties:
            groupKey:
              type: string
          required:
            - groupKey
    MarketDelta:
      type: object
      properties:
        now:
          type:
            - number
            - 'null'
        then:
          type:
            - number
            - 'null'
        delta:
          type:
            - number
            - 'null'
        deltaPct:
          type:
            - number
            - 'null'
          description: Fraction.
      required:
        - now
        - then
        - delta
        - deltaPct
    ConcentrationTier:
      type: object
      properties:
        revenue:
          type:
            - number
            - 'null'
        share:
          type:
            - number
            - 'null'
      required:
        - revenue
        - share
      description: Revenue of the top N and its share (fraction).
    ConcentrationCompany:
      type: object
      properties:
        companyId:
          type: string
        legalName:
          type:
            - string
            - 'null'
        taxId:
          type:
            - string
            - 'null'
        nuts3:
          type:
            - string
            - 'null'
          description: Province (NUTS 3) of the registered office.
        revenuesFromSalesAndServices:
          type:
            - number
            - 'null'
        share:
          type:
            - number
            - 'null'
          description: Share of the set's revenue, fraction.
      required:
        - companyId
        - legalName
        - taxId
        - nuts3
        - revenuesFromSalesAndServices
        - share
    TargetMarket:
      type: string
      enum:
        - B2B
        - B2C
        - B2G
        - B2B2C
        - B2B2G
        - C2C
        - C2B
        - G2C
        - G2B
    ControllingEntityCategory:
      type: string
      enum:
        - FAMILY
        - FAMILY_OWNED_GROUP
        - FINANCIALLY_OWNED_GROUP
        - INDUSTRIAL_GROUP
        - FINANCIAL
        - OTHER
    MetricFilter:
      type: object
      properties:
        slug:
          $ref: '#/components/schemas/MetricSlug'
        min:
          type: number
          description: On the raw value, native scale.
        max:
          type: number
        scoreMin:
          type: integer
          minimum: 1
          maximum: 5
          description: >-
            1-5 score against the company's market (5 is always best). A
            selection criterion only - scores are never returned. Companies
            without a score are excluded by any score bound.
        scoreMax:
          type: integer
          minimum: 1
          maximum: 5
      required:
        - slug
      additionalProperties: false
      description: >-
        The slug plus at least one bound; value and score bounds on one entry
        are ANDed.
      minProperties: 2
    RoleCategory:
      type: string
      enum:
        - GOVERNING_BODIES
        - ADMINISTRATION_AND_EXECUTIVES
        - AUDITING
        - REPRESENTATION_AND_AUTHORITY
        - EXTRAORDINARY_PROCEDURES
        - FUNCTIONAL_ROLES
        - PARTICIPATION_OWNERSHIP
        - CHIEF_EXECUTIVE_OFFICER
        - OTHER
    MarketMetric:
      type: object
      properties:
        slug:
          $ref: '#/components/schemas/MetricSlug'
        name:
          type: string
        unit:
          $ref: '#/components/schemas/MetricUnit'
        stats:
          $ref: '#/components/schemas/MarketStats'
      required:
        - slug
        - name
        - unit
        - stats
    MarketProMetricSlug:
      type: string
      enum:
        - revenues_from_sales_and_services
        - ebitda
        - added_value
        - ebitda_margin
        - ebit_margin
        - roe
        - roa
        - revenue_cagr_3_years
        - ebitda_cagr_3_years
        - added_value_employee
        - equity_ratio
        - net_financial_position_ebitda
        - capex_sales_ratio
        - personnel_cost_to_revenue
        - raw_materials_contribution
        - services_and_leases_contribution
        - cash_conversion_cycle
        - days_sales_outstanding
        - days_payable_outstanding
        - days_sales_inventory
      description: >-
        The twenty Pro metrics, always all returned, in this order: the ten of
        the Base, keeping their relative order, plus ROE and ROA, 3-year EBITDA
        CAGR, cost structure (personnel on revenues, raw materials, services and
        leases) and working capital (cash conversion cycle, days sales
        outstanding, days payable outstanding, days sales inventory).
    MetricSlug:
      type: string
      enum:
        - revenues_from_sales_and_services
        - value_of_production
        - profit
        - added_value
        - ebitda
        - ebit
        - added_value_employee
        - ebitda_margin
        - ebit_margin
        - roe
        - roa
        - sales_assets
        - revenue_cagr_3_years
        - ebitda_cagr_3_years
        - personnel_cost_to_revenue
        - raw_materials_contribution
        - services_and_leases_contribution
        - net_working_capital
        - ufcf
        - cash_ratio
        - quick_ratio
        - secondary_liquidity
        - days_sales_outstanding
        - days_sales_outstanding_commercial_receivables
        - days_payable_outstanding
        - dpo_commercial_debt
        - days_sales_inventory
        - cash_conversion_cycle
        - cash_conversion_cycle_commercial
        - net_financial_position
        - current_net_financial_position
        - net_financial_position_ebitda
        - debt_ebitda_ratio
        - indeb_ratio
        - financial_leverage
        - over_indebtedness_ratio
        - interest_coverage_ratio_ebitda_based
        - debt_service_cover_ratio_ebitda_version
        - debt_service_cover_ratio_cash_flow_based
        - cost_borrowed_money
        - financial_sustainability
        - financial_charges_on_nfp
        - capex
        - invested_capital
        - equity_ratio
        - self_coverage
        - financial_debt_net_worth
        - non_curr_liabilities_fixed_asset_ratio
        - capex_sales_ratio
        - debt_on_revenue
        - short_term_debt_on_revenue
        - current_debt_to_total_debt_ratio
        - curr_asset_total_asset_ratio
        - cash_curr_asset_ratio
        - tfr_contribution
      description: >-
        One of the 55 indices; GET /metrics (free) lists them with their names,
        units and formulas. Slugs are part of the contract; names are localized.
    MetricUnit:
      type: string
      enum:
        - eur
        - pct
        - ratio
        - days
        - eur_per_head
        - count
      description: >-
        `pct` is a fraction, never multiplied: 0.15 is 15%, and it may exceed 1
        or be negative. `eur_per_head` is euro per employee.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        Org-scoped WorkOS API key (sk_...), sent as `Authorization: Bearer
        <key>`. Admins create and revoke keys in the Syrto dashboard:
        https://dashboard.syrto.ai/api-keys

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.