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

# Show Player Form

> Retrieve how a professional padel player is performing lately against what their
Elo rating predicted: the win rate they were expected to reach, the one they
actually reached, and the gap between both, with its evolution by month.

> 🔒 This endpoint [requires a **Business** subscription](https://padelapi.org/billing).

Scoped to a recent window by default. Rolling windows of 7, 30 and 90 days, the
same window one year earlier, the current streak and the record in third sets and
tiebreaks come alongside. Qualification matches count, since the expectation
already accounts for the level of the opponents.
The [form and synergy guide](https://padelapi.org/docs/guides/padel-form-and-synergy)
explains how to read every field.



## OpenAPI

````yaml https://padelapi.org/docs/api.json get /players/{player}/form
openapi: 3.1.0
info:
  title: Padel API – API Reference
  version: '1.0'
  description: padelapi.org
servers:
  - url: https://padelapi.org/api
security:
  - http: []
paths:
  /players/{player}/form:
    get:
      tags:
        - Player
      summary: Show Player Form
      description: >-
        Retrieve how a professional padel player is performing lately against
        what their

        Elo rating predicted: the win rate they were expected to reach, the one
        they

        actually reached, and the gap between both, with its evolution by month.


        > 🔒 This endpoint [requires a **Business**
        subscription](https://padelapi.org/billing).


        Scoped to a recent window by default. Rolling windows of 7, 30 and 90
        days, the

        same window one year earlier, the current streak and the record in third
        sets and

        tiebreaks come alongside. Qualification matches count, since the
        expectation

        already accounts for the level of the opponents.

        The [form and synergy
        guide](https://padelapi.org/docs/guides/padel-form-and-synergy)

        explains how to read every field.
      operationId: getPlayerForm
      parameters:
        - name: player
          in: path
          required: true
          description: The player ID
          schema:
            type: integer
        - name: after_date
          in: query
          description: >-
            Date after to measure the form in `YYYY-MM-DD` format. Defaults to
            180 days before `before_date`.
          schema:
            type:
              - string
              - 'null'
            format: date
        - name: before_date
          in: query
          description: >-
            Date before to measure the form in `YYYY-MM-DD` format. Defaults to
            today.
          schema:
            type:
              - string
              - 'null'
            format: date
        - name: level
          in: query
          description: >-
            Tournament level(s) to scope the form. Accepts one or multiple
            comma-separated values (e.g. `major,p1,p2` for all Premier Padel
            matches) or repeated parameters (e.g. `level[]=major&level[]=p1`).
          schema:
            type: string
        - name: round
          in: query
          description: >-
            Round of the match to measure the form (1 = Final, 2 = Semifinal, 4
            = Quarterfinal, 8 = Round of 16, 16 = Round of 32, 32 = Round of 64)
          schema:
            type:
              - integer
              - 'null'
            enum:
              - '1'
              - '2'
              - '4'
              - '8'
              - '16'
              - '32'
      responses:
        '200':
          description: '`PlayerFormResource`'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlayerFormResource'
        '401':
          $ref: '#/components/responses/AuthenticationException'
        '404':
          $ref: '#/components/responses/ModelNotFoundException'
        '422':
          $ref: '#/components/responses/ValidationException'
components:
  schemas:
    PlayerFormResource:
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier of the player this form belongs to.
        self:
          type: string
          description: Path to this endpoint, relative to `https://padelapi.org`.
        from:
          type: string
          description: >-
            First day of the window the form is measured over, as `YYYY-MM-DD`.
            Set by `after_date`, or a recent window by default.
        to:
          type: string
          description: >-
            Last day of the window, as `YYYY-MM-DD`. Set by `before_date`, or
            today by default. `windows` end on this day.
        expected_win_rate:
          type:
            - number
            - 'null'
          description: >-
            Win rate the player's pairs were expected to reach over the window,
            as a percentage rounded to two decimals, from the Elo ratings of all
            four players at the time of each match. `null` when no matches are
            counted.
        actual_win_rate:
          type:
            - number
            - 'null'
          description: >-
            Win rate actually achieved over the same matches, as a percentage
            rounded to two decimals. `null` when no matches are counted.
        delta:
          type:
            - number
            - 'null'
          description: >-
            `actual_win_rate` minus `expected_win_rate`, in percentage points.
            Positive means the player is over-performing. `null` when there are
            too few matches for the gap to mean anything.
        matches_played:
          type: integer
          description: Matches behind the numbers above, qualification included.
        by_period:
          type: array
          description: >-
            The same values by calendar month within the window, oldest first.
            Months without matches are left out.
          items:
            type: object
            properties:
              from:
                type: string
              to:
                type: string
              expected_win_rate:
                type:
                  - number
                  - 'null'
              actual_win_rate:
                type:
                  - number
                  - 'null'
              delta:
                type:
                  - number
                  - 'null'
              matches_played:
                type: integer
            required:
              - from
              - to
              - expected_win_rate
              - actual_win_rate
              - delta
              - matches_played
        trend:
          description: >-
            Direction of `delta` across `by_period`. `null` when too few periods
            have a `delta` to tell.
          anyOf:
            - type: 'null'
            - type: string
              enum:
                - rising
                - stable
                - declining
        windows:
          type: object
          description: >-
            Overlapping windows of 7, 30 and 90 days ending on `to`, each with
            the same values. They ignore `after_date`, so they are available
            whatever the window.
          properties:
            last_7_days:
              type: object
              properties:
                expected_win_rate:
                  type:
                    - number
                    - 'null'
                actual_win_rate:
                  type:
                    - number
                    - 'null'
                delta:
                  type:
                    - number
                    - 'null'
                matches_played:
                  type: integer
              required:
                - expected_win_rate
                - actual_win_rate
                - delta
                - matches_played
            last_30_days:
              type: object
              properties:
                expected_win_rate:
                  type:
                    - number
                    - 'null'
                actual_win_rate:
                  type:
                    - number
                    - 'null'
                delta:
                  type:
                    - number
                    - 'null'
                matches_played:
                  type: integer
              required:
                - expected_win_rate
                - actual_win_rate
                - delta
                - matches_played
            last_90_days:
              type: object
              properties:
                expected_win_rate:
                  type:
                    - number
                    - 'null'
                actual_win_rate:
                  type:
                    - number
                    - 'null'
                delta:
                  type:
                    - number
                    - 'null'
                matches_played:
                  type: integer
              required:
                - expected_win_rate
                - actual_win_rate
                - delta
                - matches_played
          required:
            - last_7_days
            - last_30_days
            - last_90_days
        same_period_last_year:
          type: object
          description: >-
            The same values over the window shifted one year back, to compare
            the player against themselves.
          properties:
            expected_win_rate:
              type:
                - number
                - 'null'
            actual_win_rate:
              type:
                - number
                - 'null'
            delta:
              type:
                - number
                - 'null'
            matches_played:
              type: integer
          required:
            - expected_win_rate
            - actual_win_rate
            - delta
            - matches_played
        streak:
          type: object
          description: >-
            Current run of consecutive results up to `to`. `result` is `won` or
            `lost` (`null` when there are no matches) and `matches` its length.
          properties:
            result:
              anyOf:
                - type: 'null'
                - type: string
                  enum:
                    - won
                    - lost
            matches:
              type: integer
          required:
            - result
            - matches
        third_sets:
          type: object
          description: >-
            Deciding sets won and lost within the window. Retirements are left
            out, since the third set was not completed.
          properties:
            won:
              type: integer
            lost:
              type: integer
          required:
            - won
            - lost
        tiebreaks:
          type: object
          description: Sets settled 7-6 won and lost within the window.
          properties:
            won:
              type: integer
            lost:
              type: integer
          required:
            - won
            - lost
        connections:
          type: object
          description: Related endpoints for this form.
          properties:
            player:
              type: string
              description: Profile of the player this form belongs to.
          required:
            - player
      required:
        - id
        - self
        - from
        - to
        - expected_win_rate
        - actual_win_rate
        - delta
        - matches_played
        - by_period
        - trend
        - windows
        - same_period_last_year
        - streak
        - third_sets
        - tiebreaks
        - connections
      title: PlayerFormResource
  responses:
    AuthenticationException:
      description: Unauthenticated
      content:
        application/json:
          schema:
            type: object
            properties:
              message:
                type: string
                description: Error overview.
            required:
              - message
    ModelNotFoundException:
      description: Not found
      content:
        application/json:
          schema:
            type: object
            properties:
              message:
                type: string
                description: Error overview.
            required:
              - message
    ValidationException:
      description: Validation error
      content:
        application/json:
          schema:
            type: object
            properties:
              message:
                type: string
                description: Errors overview.
              errors:
                type: object
                description: A detailed description of each field that failed validation.
                additionalProperties:
                  type: array
                  items:
                    type: string
            required:
              - message
              - errors
  securitySchemes:
    http:
      type: http
      scheme: bearer

````

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