openapi: '3.0.3'
info:
  version: '1.0.0'
  title: 'Qomon KPIs API'
  description: |-
    ## Provides Key Performance Indicators
    This specification uses markers to specify the accuracy of the data returned.
    
    ### `realtime`

    Most of them are aggregated on the fly at request time, taking into account data received in near real time.
    
    ### `pre-calculated`
    
    Some of them must be calculated at scheduled intervals for performance reasons.
    This can lead to discrepancies between kpis and reality in the field.
    When indicators are pre-calculated, the response contains an **updated_at** field which gives the date-time of the last computation.

servers:
  - url: https://integration.quorumapps.com/v2
    description: Integration Backend API (uses test data)
  - url: https://test.quorumapps.com/api/v2
    description: Integration through Webapp Proxy (uses test data)
  - url: https://production.qomon.app/api/v2
    description: Production server (uses live data)

paths:
  /kpi/actions/{actionId}:
    parameters:
      - name: actionId
        description: The unique identifier of the action
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/ActionID'
      - name: keys
        in: query
        schema:
          $ref: '#/components/schemas/Keys'
        description: KPIs to be returned as a list containing any KPI available on this route
    get:
      description: |-
        `realtime` Retrieve performance indicators linked to an action,
        this resource aggregates the kpis of all participating users
      tags:
        - actions
      responses:
        200:
          description: KPIs corresponding to the provided `actionId`
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/ResponseSuccess'
                  - type: object
                    required:
                      - data
                    properties:
                      data:
                        $ref: '#/components/schemas/Actions'
              examples:
                getActions:
                  $ref: '#/components/examples/ActionsExample'
                getActionsUsersWithKeys:
                  $ref: '#/components/examples/ActionsWithKeysExample'
        400:
          $ref: '#/components/responses/BadRequest'
        401:
          $ref: '#/components/responses/Unauthorized'
        403:
          $ref: '#/components/responses/Forbidden'
        404:
          $ref: '#/components/responses/NotFound'
        500:
          $ref: '#/components/responses/UnexpectedError'
  /kpi/actions/{actionId}/users/{userId}:
    parameters:
      - name: actionId
        description: The unique identifier of the action
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/ActionID'
      - name: userId
        description: The unique identifier of the user
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/UserID'
      - name: keys
        in: query
        schema:
          $ref: '#/components/schemas/Keys'
        description: KPIs to be returned as a list containing any KPI available on this route
    get:
      description: |-
        `realtime` Retrieve a user's kpis participating in a specific action
      tags:
        - actions
      responses:
        200:
          description: KPIs corresponding to the provided `actionId` and `userId`
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/ResponseSuccess'
                  - type: object
                    required:
                      - data
                    properties:
                      data:
                        $ref: '#/components/schemas/ActionsUsers'
              examples:
                getActionsUsers:
                  $ref: '#/components/examples/ActionsUsersExample'
                getActionsUsersWithKeys:
                  $ref: '#/components/examples/ActionsUsersWithKeysExample'
        400:
          $ref: '#/components/responses/BadRequest'
        401:
          $ref: '#/components/responses/Unauthorized'
        403:
          $ref: '#/components/responses/Forbidden'
        404:
          $ref: '#/components/responses/NotFound'
        500:
          $ref: '#/components/responses/UnexpectedError'
  /kpi/users/{userId}:
    parameters:
      - name: userId
        description: The unique identifier of the user
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/UserID'
      - name: keys
        in: query
        schema:
          $ref: '#/components/schemas/Keys'
        description: KPIs to be returned as a list containing any KPI available on this route
    get:
      description: |-
        `realtime` Retreive KPIs related to a user,
        this resource aggregates the kpis of all actions in which the user participates
      tags:
        - users
      responses:
        200:
          description: KPIs corresponding to the provided `userId`
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/ResponseSuccess'
                  - type: object
                    required:
                      - data
                    properties:
                      data:
                        $ref: '#/components/schemas/Users'
              examples:
                getUsers:
                  $ref: '#/components/examples/UsersExample'
                getUsersKpisWithKeys:
                  $ref: '#/components/examples/UsersExampleWithKeys'
        400:
          $ref: '#/components/responses/BadRequest'
        401:
          $ref: '#/components/responses/Unauthorized'
        403:
          $ref: '#/components/responses/Forbidden'
        404:
          $ref: '#/components/responses/NotFound'
        500:
          $ref: '#/components/responses/UnexpectedError'
  /kpi/spaces/{spaceId}/leaderboard:
    parameters:
      - name: spaceId
        description: The unique identifier of the space, also known as group_id
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/SpaceID'
      - name: from
        description: Date to be used for the start of ranking, default is the first day of current month
        in: query
        required: false
        schema:
          $ref: '#/components/schemas/Date'
          example: 2024-06-01
      - name: to
        description: Date to be used for the end of ranking, default is today
        in: query
        required: false
        schema:
          $ref: '#/components/schemas/Date'
          example: 2024-06-30
      - name: level
        description: Used to define the aggregation level of the leaderboard
        in: query
        required: false
        schema:
          $ref: '#/components/schemas/LeaderboardLevel'
      - name: type
        description: Defines the type of action to be taken into account for ranking
        in: query
        required: false
        schema:
          $ref: '#/components/schemas/LeaderboardType'
    get:
      description: |-
        `pre-calculated` Retreive User and team rankings of a given space,
        this resource use all available facts collected by active users this month
      tags:
        - spaces
      responses:
        200:
          description: Leaderboard corresponding to the provided `spaceId` and optional query parameters
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/ResponseSuccess'
                  - type: object
                    required:
                      - data
                    properties:
                      data:
                        $ref: '#/components/schemas/Leaderboard'
              examples:
                getLeaderboardUserAll:
                  $ref: '#/components/examples/LeaderboardUserAllExample'
                getLeaderboardUserActions:
                  $ref: '#/components/examples/LeaderboardUserActionsExample'
                getLeaderboardAllFacts:
                  $ref: '#/components/examples/LeaderboardAllFactsExample'
        400:
          $ref: '#/components/responses/BadRequest'
        401:
          $ref: '#/components/responses/Unauthorized'
        403:
          $ref: '#/components/responses/Forbidden'
        404:
          $ref: '#/components/responses/NotFound'
        500:
          $ref: '#/components/responses/UnexpectedError'
  /kpi/spaces/{spaceId}/summary:
    parameters:
      - name: spaceId
        description: The unique identifier of the space, also known as group_id
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/SpaceID'
    get:
      description: |-
        `realtime` Retreive summary KPIs related to contacts of a given space
      tags:
        - spaces
      responses:
        200:
          description: Summary corresponding to the provided `spaceId`
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/ResponseSuccess'
                  - type: object
                    required:
                      - data
                    properties:
                      data:
                        $ref: '#/components/schemas/SpaceSummary'
              examples:
                getSpaceSummary:
                  $ref: '#/components/examples/SpaceSummaryExample'
        400:
          $ref: '#/components/responses/BadRequest'
        401:
          $ref: '#/components/responses/Unauthorized'
        403:
          $ref: '#/components/responses/Forbidden'
        404:
          $ref: '#/components/responses/NotFound'
        500:
          $ref: '#/components/responses/UnexpectedError'
  /kpi/spaces/{spaceId}/summary/{summaryType}:
    parameters:
      - name: spaceId
        description: The unique identifier of the space, also known as group_id
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/SpaceID'
      - name: summaryType
        description: special filter applyied
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/SpaceSummaryType'
    post:
      description: |-
        `realtime` Retreive summary KPIs related to contacts of a given space,
        this resource lets you include contacts matching advanced filters.
        
        * **spatial** to include contacts living in a geographic zone, the geographic coordinates of the zone are defined in an polygon which is an array of coordinates in decimal degrees (latitude, longitude).
        * **polling-stations** to include contacts registered at specific polling stations

        Request Bodies varies regarding `summaryType`
      tags:
        - spaces
      requestBody:
        required: true
        content:
          application/json:
            schema:
              oneOf:
                - $ref: '#/components/schemas/SpaceSummarySpatial'
                - $ref: '#/components/schemas/SpaceSummaryPollingStations'
            examples:
              postSpaceSummarySpatial:
                $ref: '#/components/examples/SpaceSummarySpatialRequestBodyExample'
              postSpaceSummaryPollingStations:
                $ref: '#/components/examples/SpaceSummaryPollingStationsRequestBodyExample'
      responses:
        200:
          description: Summary corresponding to the provided `spaceId` and `summaryType``
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/ResponseSuccess'
                  - type: object
                    required:
                      - data
                    properties:
                      data:
                        $ref: '#/components/schemas/SpaceSummary'
              examples:
                postSpaceSummarySpatial:
                  $ref: '#/components/examples/SpaceSummarySpatialExample'
        400:
          $ref: '#/components/responses/BadRequest'
        401:
          $ref: '#/components/responses/Unauthorized'
        403:
          $ref: '#/components/responses/Forbidden'
        404:
          $ref: '#/components/responses/NotFound'
        500:
          $ref: '#/components/responses/UnexpectedError'
  /kpi/survey_kpis_preferences:
    get:
      description: |-
        Retrieve configuration of user defined KPIs related to survey questions
      tags:
        - customs KPIs
      responses:
        200:
          description: Custom KPIs defined for the `SelectedGroupID`
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/ResponseSuccess'
                  - type: object
                    required:
                      - data
                    properties:
                      data:
                        $ref: '#/components/schemas/SurveyKpisPreferencesList'
              examples:
                getSurveyKpisPreferences:
                  $ref: '#/components/examples/SurveyKpisPreferencesListExample'
        400:
          $ref: '#/components/responses/BadRequest'
        401:
          $ref: '#/components/responses/Unauthorized'
        403:
          $ref: '#/components/responses/Forbidden'
        404:
          $ref: '#/components/responses/NotFound'
        500:
          $ref: '#/components/responses/UnexpectedError'

components:
  responses:
    BadRequest:
      description: Invalid request, such as lacking required request body or parameter
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Forbidden:
      description: User authenticated but does not have permission to access the requested resource
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: The specified resource was not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Unauthorized:
      description: User must authenticate before using this api
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    UnexpectedError:
      description: An internal error occured
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  schemas:
    ActionID:
      description: The unique identifier of the action
      type: integer
    ActionKPIs:
      allOf:
        - $ref: '#/components/schemas/NormalizedKPIS'
        - type: object
          required:
            - customs
          properties:
            customs:
              type: array
              items:
                $ref: "#/components/schemas/CustomsKPIS"
    ActionType:
      type: string
      enum:
        - canvassing
        - handout_mail
        - event
        - challenge
    Actions:
      type: object
      required:
        - action_id
        - action_type
        - kpis
        - support_levels
        - visit_data
      properties:
        action_id:
          $ref: '#/components/schemas/ActionID'
        action_type:
          $ref: '#/components/schemas/ActionType'
        kpis:
          $ref: '#/components/schemas/ActionKPIs'
        support_levels:
          type: array
          items:
            $ref: '#/components/schemas/SupportLevel'
        visit_data:
          $ref: '#/components/schemas/VisitData'
    ActionsUsers:
      type: object
      required:
        - action_id
        - action_type
        - user_id
        - kpis
      properties:
        action_id:
          type: integer
        action_type:
          $ref: '#/components/schemas/ActionType'
        user_id:
          type: integer
        kpis:
          type: object
          required:
            - overall
            - user
          properties:
            overall:
              $ref: '#/components/schemas/ActionKPIs'
            user:
              $ref: '#/components/schemas/ActionKPIs'
    CustomsKPIS:
      type: object
      required:
        - name
        - label
        - type
        - value
      properties:
        name:
          description: |
            internal name of the kpi not intended to be print front-side
          type: string
        label:
          description: |
            printable label of the custom KPI,
            related to forms/refvalues tagged as 'kpis' and configured at space level
          type: string
        type:
          description: type of data in 'value' attribute
          type: string
        value:
          oneOf:
            - type: string
            - type: number
    Date:
      description: full-date notation as defined by RFC 3339, section 5.6, for example, 2024-07-11 
      type: string
      format: date
    GeoCoordinate:
      type: object
      required:
        - lat
        - lng
      properties:  
        lat:
          description: latitude in decimal degrees
          type: number
          format: float
        lng:
          description: longitude in decimal degrees
          type: number
          format: float
    Keys:
      type: array
      items:
        type: string
      description: query parameter that can be provided to designate which KPIs are to be returned
    Leaderboard:
      type: object
      required:
        - from
        - to
        - updated_at
        - level
        - type
        - ranking
      properties:
        from:
          $ref: '#/components/schemas/Date'
        to:
          $ref: '#/components/schemas/Date'
        updated_at:
          description: the date and time at which the ranking was calculated
          type: string
          format: date-time
        level:
          $ref: '#/components/schemas/LeaderboardLevel'
        type:
          $ref: '#/components/schemas/LeaderboardType'
        ranking:
          type: array
          items:
            $ref: '#/components/schemas/LeaderboardRanking'
    LeaderboardLevel:
      type: string
      default: all
      enum:
        - all
        - user
    LeaderboardRanking:
      type: object
      required:
        - rank
        - name
      properties:
        rank:
          type: integer
        name:
          description: |-
            depends on `level` query parameter
              * user name when value is 'user'
              * team name when value is 'all'
          type: string
        actions:
          type: integer
        facts:
          type: integer
        members:
          description: ony available when `level` is 'all', this is the number of users in the team
          type: integer
    LeaderboardType:
      type: string
      default: all
      enum:
        - all
        - actions
        - facts
    NormalizedKPIS:
      description: KPIs at the core of Qomon, available for all spaces
      type: object
      required:
        - facts_done
        - conversations
        - emails_collected
        - phones_collected
        - petitions_signed
      properties:
        facts_done:
          type: integer
        facts_to_do:
          type: integer
        conversations:
          type: integer
        emails_collected:
          type: integer
        phones_collected:
          type: integer
        petitions_signed:
          type: integer
    UserActionsDoneStats:
      type: object
      required:
        - overall
        - by_types
      properties:
        overall:
          type: integer
        by_types:
          type: array
          items:
            $ref: "#/components/schemas/UserActionsDoneStatsTypes"
    UserActionsDoneStatsTypes:
      type: object
      required:
        - label
        - value
      properties:
        label:
          type: string
          enum:
            - leaflet
            - gotvcanvassing
            - reporting
            - event
            - mail
            - global
            - canvassing
            - poster
            - sharing
        value:
          type: integer
    UserConstactsMetStats:
      type: object
      required:
        - overall
        - by_support_levels
      properties:
        overall:
          type: integer
        by_support_levels:
          type: array
          items:
            $ref: "#/components/schemas/SupportLevel"
    UserID:
      description: The unique identifier of the user
      type: integer
    UserKPIs:
      allOf:
        - $ref: '#/components/schemas/NormalizedKPIS'
        - type: object
          required:
            - customs
            - actions_done
            - contacts_met
          properties:
            customs:
              type: array
              items:
                $ref: "#/components/schemas/CustomsKPIS"
            actions_done:
              $ref: '#/components/schemas/UserActionsDoneStats'
            contacts_met:
              $ref: '#/components/schemas/UserConstactsMetStats'
    UserRanking:
      type: object
      required:
        - compared_to_team
        - compared_to_space
      properties:
        compared_to_team:
          $ref: '#/components/schemas/Ranking'
        compared_to_space:
          $ref: '#/components/schemas/Ranking'
    Users:
      type: object
      required:
        - user_id
        - kpis
        - ranking
      properties:
        user_id:
          $ref: '#/components/schemas/UserID'
        kpis:
          $ref: '#/components/schemas/UserKPIs'
        ranking:
          $ref: '#/components/schemas/UserRanking'
    PopularTimes:
      type: object
      required:
        - week_day
        - facts_done_total
        - slots
      properties:
        week_day:
          description: literal form of the day of the week
          type: string
          enum:
            - monday
            - tuesday
            - wednesday
            - thursday
            - friday
            - saturday
            - sunday
        facts_done_total:
          description: total count of facts done for the day
          type: integer
        slots:
          type: array
          items:
            $ref: '#/components/schemas/PopularTimeSlots'
    PopularTimeSlots:
      description: precision level is per hour
      type: object
      required:
        - time
        - facts_done
      properties:
        time:
          type: string
          pattern: '^\d{2}:\d{2}$'
          example: 00:00
        facts_done:
          type: integer
    Ranking:
      type: object
      required:
        - members
        - rank
      properties:
        members:
          description: total number of users
          type: integer
        rank:
          description: rank of the user compare to others
          type: integer
    ResponseError:
      type: object
      required:
        - status
      properties:
        status:
          type: string
          enum:
            - error
            - fail
    ResponseSuccess:
      type: object
      required:
        - status
      properties:
        status:
          type: string
          enum:
            - success
    SpaceID:
      description: The unique identifier of the space, also known as group_id 
      type: integer
    SpaceSummary:
      type: object
      required:
        - contacts
        - genders
        - polling_stations
        - ages_categories
        - last_changes
      properties:
        contacts:
          $ref: '#/components/schemas/SpaceSummaryContactsKPIs'
        genders:
          type: array
          items:
            $ref: '#/components/schemas/SpaceSummaryGendersKPIs'
        polling_stations:
          type: array
          items:
            $ref: '#/components/schemas/SpaceSummaryPollingStationsKPIs'
        age_categories:
          type: array
          items:
            $ref: '#/components/schemas/SpaceSummaryAgeCategoriesKPIs'
        last_changes:
          type: array
          items:
            $ref: '#/components/schemas/SpaceSummaryLastChangesKPIs'
    SpaceSummaryAgeCategoriesKPIs:
      type: object
      required:
        - category
        - label
        - contacts
      properties:
        category:
          type: string
          default: missing
          enum:
            - missing
            - 0
            - 1
            - 2
            - 3
            - 4
            - 5
            - 6
        label:
          description: human readable transcription of category property
          type: string
          enum:
            - birth date unknown
            - new born
            - under 18 years old
            - between 18-24 years old
            - between 25-34 years old
            - between 35-49 years old
            - between 50-64 years old
            - 65 years old and more
        contacts:
          description: number of contacts for given age category
          type: integer
    SpaceSummaryContactsKPIs:
      type: object
      required:
        - total
        - missing_email
        - missing_phone
      properties:
        total:
          type: integer
        missing_email:
          type: integer
        missing_phone:
          type: integer
    SpaceSummaryGendersKPIs:
      type: object
      required:
        - identity
        - contatcs
      properties:
        identity:
          type: string
          default: missing
        contacts:
          description: number of contacts for given identity
          type: integer
    SpaceSummaryLastChangesKPIs:
      type: object
      required:
        - week_start_date
        - contacts
      properties:
        week_start_date:
          description: mondays, time precision set to 00:00:00Z
          type: string
          format: date-time
        contacts:
          description: number of contacts created or updated during the given week
          type: integer
    SpaceSummaryPollingStationsKPIs:
      type: object
      required:
        - name
        - contacts
      properties:
        name:
          description: name of the polling station
          type: string
          default: missing
        contacts:
          description: number of contacts for given polling station
          type: integer
    SpaceSummaryPollingStations:
      type: object
      required:
        - polling_station_included
        - polling_station_included_missing
      properties:
        polling_station_included:
          description: the contacts registered in the polling stations on this list will be used to calculate the KPIs
          type: array
          items:
            type: string
        polling_station_included_missing:
          description: in addition to polling_station_included, set this flag to true to include contacts not registered in a polling station
          type: boolean
        polling_station_excluded:
          description: the contacts registered in the polling stations on this list will NOT be used to calculate the KPIs
          type: array
          items:
            type: string
        polling_station_excluded_missing:
          description: in addition to polling_station_excluded, set this flag to true to include contacts not registered in a polling station
          type: boolean
    SpaceSummarySpatial:
      type: object
      required:
        - geohash_precision
        - polygon
      properties:
        geohash_precision:
          description: |-
            Precision used to group geographic points in the polygon,
            from 1 lower-precision to 12 higher-precision, this properties impact response time.
            
            An acceptable value is 8.
          type: integer
          minimum: 1
          maximum: 12
        polygon:
          description: ordered array of geographic coordinates that can be link together to define a closed zone
          type: array
          items:
            $ref: '#/components/schemas/GeoCoordinate'
    SpaceSummaryType:
      type: string
      enum:
        - spatial
        - polling-stations
    SupportLevel:
      type: object
      required:
        - label
        - value
      properties:
        label:
          description: support level are defined by spaces
          type: string
        value:
          type: integer
        color:
          description: optional HEX color code of the support level
          type: string
    SurveyKpisPreferences:
      type: object
      required:
        - id
        - group_id
        - kpi_name
        - kpi_label
        - form_id
        - form_label
        - form_ref_id
        - formdata_value
      properties:
        id:
          type: integer
        group_id:
          type: integer
        kpi_name:
          type: string
        kpi_label:
          type: string
        form_id:
          type: integer
        form_label:
          type: string
        form_ref_id:
          type: integer
        formdata_value:
          type: string
        from_date:
          type: string
          format: date-time
        to_date:
          type: string
          format: date-time
    SurveyKpisPreferencesList:
      type: object
      required:
        - preferences
      properties:
        preferences:
          type: array
          items:
            $ref: '#/components/schemas/SurveyKpisPreferences'
    VisitData:
      type: object
      required:
        - popular_times
      properties:
        timezone:
          description: |
            TZ identifier as defined by https://www.iana.org/time-zones,
            This is an optional data configured at 'action' level.
            It is returned as information when the backend finds it.
          type: string
          example: Europe/Paris
        popular_times:
          type: array
          items:
            $ref: '#/components/schemas/PopularTimes'
    Error:
      allOf:
        - $ref: '#/components/schemas/ResponseError'
        - type: object
          required:
            - message
          properties:
            message:
              description: A human readable error message usually considered presentable on user interfaces
              type: string
  securitySchemes:
    bearerAuth:
      description: User must send this token in the `Authorization` header
      type: http
      scheme: bearer
      bearerFormat: JWT
  examples:
    ActionsExample:
      summary: GET /actions/99123405
      value:
        status: success
        data:
          action_id: 99123405
          action_type: canvassing
          kpis:
            facts_done: 235
            facts_to_do: 4716
            conversations: 230
            emails_collected: 63
            phones_collected: 12
            petitions_signed: 15
            customs:
              - name: no_of_sign_up
                label: Climate Voters
                type: integer
                value: 63
              - name: posters_handed_out
                label: Window Poster
                type: integer
                value: 127
          support_levels:
            - label: Climate Voters
              value: 3
            - label: Undecided
              value: 10
            - label: Not Interested
              value: 5
            - label: Prefer not to say
              value: 1
          visit_data:
            timezone: Europe/Paris
            popular_times:
              - week_day: thrusday
                facts_done_total: 51
                slots:
                  - time: 00:00
                    facts_done: 0
                  - time: 01:00
                    facts_done: 0
                  - time: 02:00
                    facts_done: 0
                  - time: 03:00
                    facts_done: 0
                  - time: 04:00
                    facts_done: 0
                  - time: 05:00
                    facts_done: 0
                  - time: 06:00
                    facts_done: 0
                  - time: 07:00
                    facts_done: 0
                  - time: 08:00
                    facts_done: 0
                  - time: 09:00
                    facts_done: 0
                  - time: 10:00
                    facts_done: 0
                  - time: 11:00
                    facts_done: 0
                  - time: 12:00
                    facts_done: 0
                  - time: 13:00
                    facts_done: 0
                  - time: 14:00
                    facts_done: 0
                  - time: 15:00
                    facts_done: 0
                  - time: 16:00
                    facts_done: 1
                  - time: 17:00
                    facts_done: 4
                  - time: 18:00
                    facts_done: 6
                  - time: 19:00
                    facts_done: 10
                  - time: 20:00
                    facts_done: 9
                  - time: 21:00
                    facts_done: 9
                  - time: 22:00
                    facts_done: 8
                  - time: 23:00
                    facts_done: 4
              - week_day: friday
                facts_done_total: 112
                slots:
                  - time: 00:00
                    facts_done: 0
                  - time: 01:00
                    facts_done: 0
                  - time: 02:00
                    facts_done: 0
                  - time: 03:00
                    facts_done: 0
                  - time: 04:00
                    facts_done: 0
                  - time: 05:00
                    facts_done: 0
                  - time: 06:00
                    facts_done: 0
                  - time: 07:00
                    facts_done: 0
                  - time: 08:00
                    facts_done: 0
                  - time: 09:00
                    facts_done: 0
                  - time: 10:00
                    facts_done: 0
                  - time: 11:00
                    facts_done: 0
                  - time: 12:00
                    facts_done: 0
                  - time: 13:00
                    facts_done: 0
                  - time: 14:00
                    facts_done: 0
                  - time: 15:00
                    facts_done: 2
                  - time: 16:00
                    facts_done: 5
                  - time: 17:00
                    facts_done: 6
                  - time: 18:00
                    facts_done: 13
                  - time: 19:00
                    facts_done: 21
                  - time: 20:00
                    facts_done: 30
                  - time: 21:00
                    facts_done: 27
                  - time: 22:00
                    facts_done: 7
                  - time: 23:00
                    facts_done: 1
    ActionsWithKeysExample:
      summary: GET /actions/99123405?keys=support_levels&keys=visit_data
      value:
        status: success
        data:
          action_id: 99123405
          action_type: canvassing
          support_levels:
            - label: Climate Voters
              value: 3
            - label: Undecided
              value: 10
            - label: Not Interested
              value: 5
            - label: Prefer not to say
              value: 1
          visit_data:
            timezone: Europe/Paris
            popular_times:
              - week_day: thrusday
                facts_done_total: 51
                slots:
                  - time: 00:00
                    facts_done: 0
                  - time: 01:00
                    facts_done: 0
                  - time: 02:00
                    facts_done: 0
                  - time: 03:00
                    facts_done: 0
                  - time: 04:00
                    facts_done: 0
                  - time: 05:00
                    facts_done: 0
                  - time: 06:00
                    facts_done: 0
                  - time: 07:00
                    facts_done: 0
                  - time: 08:00
                    facts_done: 0
                  - time: 09:00
                    facts_done: 0
                  - time: 10:00
                    facts_done: 0
                  - time: 11:00
                    facts_done: 0
                  - time: 12:00
                    facts_done: 0
                  - time: 13:00
                    facts_done: 0
                  - time: 14:00
                    facts_done: 0
                  - time: 15:00
                    facts_done: 0
                  - time: 16:00
                    facts_done: 1
                  - time: 17:00
                    facts_done: 4
                  - time: 18:00
                    facts_done: 6
                  - time: 19:00
                    facts_done: 10
                  - time: 20:00
                    facts_done: 9
                  - time: 21:00
                    facts_done: 9
                  - time: 22:00
                    facts_done: 8
                  - time: 23:00
                    facts_done: 4
              - week_day: friday
                facts_done_total: 112
                slots:
                  - time: 00:00
                    facts_done: 0
                  - time: 01:00
                    facts_done: 0
                  - time: 02:00
                    facts_done: 0
                  - time: 03:00
                    facts_done: 0
                  - time: 04:00
                    facts_done: 0
                  - time: 05:00
                    facts_done: 0
                  - time: 06:00
                    facts_done: 0
                  - time: 07:00
                    facts_done: 0
                  - time: 08:00
                    facts_done: 0
                  - time: 09:00
                    facts_done: 0
                  - time: 10:00
                    facts_done: 0
                  - time: 11:00
                    facts_done: 0
                  - time: 12:00
                    facts_done: 0
                  - time: 13:00
                    facts_done: 0
                  - time: 14:00
                    facts_done: 0
                  - time: 15:00
                    facts_done: 2
                  - time: 16:00
                    facts_done: 5
                  - time: 17:00
                    facts_done: 6
                  - time: 18:00
                    facts_done: 13
                  - time: 19:00
                    facts_done: 21
                  - time: 20:00
                    facts_done: 30
                  - time: 21:00
                    facts_done: 27
                  - time: 22:00
                    facts_done: 7
                  - time: 23:00
                    facts_done: 1
    ActionsUsersExample:
      summary: GET /actions/923405/users/1237567
      value:
        status: success
        data:
          action_id: 923405
          action_type: canvassing
          user_id: 1237567
          kpis:
            overall:
              facts_done: 242
              facts_to_do: 4716
              conversations: 159
              emails_collected: 137
              phones_collected: 141
              petitions_signed: 73
              customs:
                - name: no_of_sign_up
                  label: Climate Voters
                  type: integer
                  value: 143
                - name: posters_handed_out
                  label: Window Poster
                  type: integer
                  value: 126
            user:
              facts_done: 57
              conversations: 45
              emails_collected: 23
              phones_collected: 36
              petitions_signed: 0
              customs:
                - name: no_of_sign_up
                  label: Climate Voters
                  type: integer
                  value: 40
                - name: posters_handed_out
                  label: Window Poster
                  type: integer
                  value: 12
    ActionsUsersWithKeysExample:
      summary: GET /actions/923405/users/1237567?keys=petitions_signed&keys=facts_done
      value:
        status: success
        data:
          action_id: 923405
          action_type: canvassing
          user_id: 1237567
          kpis:
            overall:
              facts_done: 242
              petitions_signed: 73
            user:
              facts_done: 57
              petitions_signed: 0
    UsersExample:
      summary: GET /users/1237567
      value:
        status: success
        data:
          user_id: 1237567
          kpis:
            facts_done: 57
            conversations: 64
            emails_collected: 23
            phones_collected: 36
            petitions_signed: 2
            customs:
              - name: no_of_sign_up
                label: Climate Voters
                type: integer
                value: 40
              - name: posters_handed_out
                label: Window Poster
                type: integer
                value: 2
            actions_done:
              overall: 45
              by_types:
                - label: canvassing
                  value: 1
                - label: gotvcanvassing
                  value: 2
                - label: leaflet
                  value: 3
                - label: reporting
                  value: 4
                - label: event
                  value: 5
                - label: mail
                  value: 6
                - label: global
                  value: 7
                - label: poster
                  value: 8
                - label: sharing
                  value: 9
            contacts_met:
              overall: 19
              by_support_levels:
                - label: Climate Voters
                  value: 3
                - label: Undecided
                  value: 10
                - label: Not Interested
                  value: 5
                - label: Prefer not to say
                  value: 1
          ranking:
            compared_to_team:
              members: 23
              rank: 2
            compared_to_space:
              members: 237
              rank: 8
    UsersExampleWithKeys:
      summary: GET /users/1237567?keys=facts_done&keys=conversations
      value:
        status: success
        data:
          user_id: 1237567
          kpis:
            facts_done: 57
            conversations: 64
    LeaderboardUserAllExample:
      summary: Individual ranking for All kind
      value:
        status: success
        data:
          from: "2024-06-01"
          to: "2024-06-30"
          updated_at: "2024-07-01T00:03:13Z"
          level: user
          type: all
          ranking:
            - rank: 1
              name: Darrel Robertson
              actions: 43
              facts: 456
            - rank: 2
              name: Nia Effertz
              actions: 39
              facts: 434
            - rank: 3
              name: Rosie Mante
              actions: 44
              facts: 29
            - rank: 4
              name: Grant Bosco
              actions: 12
              facts: 399
            - rank: 5
              name: Maritza Stark
              actions: 34
              facts: 309
            - rank: 6
              name: Zachariah Lynch
              actions: 35
              facts: 208
            - rank: 7
              name: Roscoe Boyle
              actions: 28
              facts: 218
    LeaderboardUserActionsExample:
      summary: Individual ranking for Actions
      value:
        status: success
        data:
          from: "2024-06-01"
          to: "2024-06-30"
          updated_at: "2024-07-01T00:03:13Z"
          level: user
          type: actions
          ranking:
            - rank: 1
              name: Rosie Mante
              actions: 44
            - rank: 2
              name: Darrel Robertson
              actions: 43
            - rank: 3
              name: Nia Effertz
              actions: 39
            - rank: 4
              name: Maritza Stark
              actions: 34
            - rank: 5
              name: Zachariah Lynch
              actions: 35
            - rank: 6
              name: Roscoe Boyle
              actions: 28
            - rank: 7
              name: Grant Bosco
              actions: 12
    LeaderboardAllFactsExample:
      summary: Team ranking for Facts
      value:
        status: success
        data:
          from: "2024-06-01"
          to: "2024-06-30"
          updated_at: "2024-07-01T00:03:13Z"
          level: all
          type: facts
          ranking:
            - rank: 1
              name: London Team
              members: 23
              facts: 144
            - rank: 2
              name: Super Team Deluxe
              members: 4
              facts: 138
            - rank: 3
              name: Girls Powers Rainbow
              members: 14
              facts: 136
            - rank: 4
              name: The South
              members: 9
              facts: 129
            - rank: 5
              name: Paris-West
              members: 7
              facts: 123
            - rank: 6
              name: Coffee & Tea
              members: 5
              facts: 110
            - rank: 7
              name: We act!
              members: 10
              facts: 78
    SpaceSummaryExample:
      summary: Spaces Summary KPIs
      value:
        status: success
        data:
          contacts:
            total: 41605
            missing_email: 1
            missing_phone: 11913
          genders:
            - identity: "M"
              contacts: 23695
            - identity: "F"
              contacts: 7963
            - identity: "missing"
              contacts: 9947
          pollings_stations:
            - name: "missing"
              contacts: 41605
          ages_categories:
            - category: "missing"
              label: "birth date unknown"
              contacts: 14313
            - category: "O"
              label: "new born"
              contacts: 0
            - category: "1"
              label: "under 18 years old"
              contacts: 140
            - category: "2"
              label: "between 18-24 years old"
              contacts: 2336
            - category: "3"
              label: "between 25-34 years old"
              contacts: 3830
            - category: "4"
              label: "between 35-49 years old"
              contacts: 6645
            - category: "5"
              label: "between 50-64 years old"
              contacts: 8888
            - category: "6"
              label: "65 years old and more"
              contacts: 5414
          last_changes:
            - week_start_date: "2024-06-17T00:00:00.000Z"
              contacts: 153
            - week_start_date: "2024-06-24T00:00:00.000Z"
              contacts: 118
    SpaceSummaryPollingStationsRequestBodyExample:
      summary: Polling Stations - included
      value:
        polling_station_included:
          - todo 1
          - todo 2
          - todo 3
        polling_station_included_missing: false
    SpaceSummarySpatialExample:
      summary: Spaces Summary KPIs
      value:
        status: success
        data:
          contacts:
            total: 365
            missing_email: 0
            missing_phone: 95
          genders:
            - identity: "M"
              contacts: 205
            - identity: "F"
              contacts: 63
            - identity: "missing"
              contacts: 97
          pollings_stations:
            - name: "missing"
              contacts: 365
          ages_categories:
            - category: "missing"
              label: "birth date unknown"
              contacts: 117
            - category: "O"
              label: "new born"
              contacts: 0
            - category: "1"
              label: "under 18 years old"
              contacts: 1
            - category: "2"
              label: "between 18-24 years old"
              contacts: 28
            - category: "3"
              label: "between 25-34 years old"
              contacts: 52
            - category: "4"
              label: "between 35-49 years old"
              contacts: 53
            - category: "5"
              label: "between 50-64 years old"
              contacts: 72
            - category: "6"
              label: "65 years old and more"
              contacts: 42
          last_changes: []
    SpaceSummarySpatialRequestBodyExample:
      summary: Spatial - polygon including the city of Bordeaux, France
      value:
        geohash_precision: 8
        polygon:
          - lat: 44.85668192
            lng: -0.637678806
          - lat: 44.856888858
            lng: -0.638290857
          - lat: 44.856888858
            lng: -0.638494874
          - lat: 44.859165186
            lng: -0.638698891
          - lat: 44.859992942
            lng: -0.638698891
          - lat: 44.860820697
            lng: -0.638290857
          - lat: 44.860613759
            lng: -0.637678806
          - lat: 44.862062331
            lng: -0.633190433
          - lat: 44.863924781
            lng: -0.631354281
          - lat: 44.86413172
            lng: -0.631354281
          - lat: 44.864752536
            lng: -0.631966331
          - lat: 44.864752536
            lng: -0.632170348
          - lat: 44.864959475
            lng: -0.632374365
          - lat: 44.864959475
            lng: -0.632578382
          - lat: 44.865166414
            lng: -0.632782399
          - lat: 44.865166414
            lng: -0.633190433
          - lat: 44.866408048
            lng: -0.633190433
          - lat: 44.868684376
            lng: -0.632170348
          - lat: 44.870753764
            lng: -0.631354281
          - lat: 44.871374581
            lng: -0.631150264
          - lat: 44.87158152
            lng: -0.630946247
          - lat: 44.87158152
            lng: -0.63074223
          - lat: 44.869512131
            lng: -0.627681975
          - lat: 44.868684376
            lng: -0.626661891
          - lat: 44.868063559
            lng: -0.625641806
          - lat: 44.867235803
            lng: -0.624213687
          - lat: 44.866201109
            lng: -0.622785568
          - lat: 44.864959475
            lng: -0.621561467
          - lat: 44.864752536
            lng: -0.621153433
          - lat: 44.864338659
            lng: -0.620745399
          - lat: 44.864338659
            lng: -0.620541382
          - lat: 44.863924781
            lng: -0.620133348
          - lat: 44.863924781
            lng: -0.619725314
          - lat: 44.863717842
            lng: -0.61931728
          - lat: 44.863303964
            lng: -0.618705229
          - lat: 44.863303964
            lng: -0.618297195
          - lat: 44.863097025
            lng: -0.618297195
          - lat: 44.862890086
            lng: -0.617481127
          - lat: 44.862890086
            lng: -0.61727711
          - lat: 44.862683148
            lng: -0.616869077
          - lat: 44.862476209
            lng: -0.61666506
          - lat: 44.862476209
            lng: -0.616461043
          - lat: 44.86226927
            lng: -0.616257026
          - lat: 44.861855392
            lng: -0.615440958
          - lat: 44.861441514
            lng: -0.614828907
          - lat: 44.861441514
            lng: -0.61462489
          - lat: 44.861027636
            lng: -0.614216856
          - lat: 44.861027636
            lng: -0.614012839
          - lat: 44.860820697
            lng: -0.613808822
          - lat: 44.860820697
            lng: -0.613196771
          - lat: 44.860613759
            lng: -0.612788737
          - lat: 44.860613759
            lng: -0.611768653
          - lat: 44.86040682
            lng: -0.611564636
          - lat: 44.860199881
            lng: -0.609524466
          - lat: 44.859992942
            lng: -0.609320449
          - lat: 44.859992942
            lng: -0.608708398
          - lat: 44.859579064
            lng: -0.608096347
          - lat: 44.859579064
            lng: -0.60789233
          - lat: 44.859372125
            lng: -0.607280279
          - lat: 44.858337431
            lng: -0.605444127
          - lat: 44.858130492
            lng: -0.60524011
          - lat: 44.857923553
            lng: -0.604832076
          - lat: 44.857716614
            lng: -0.604220025
          - lat: 44.857509675
            lng: -0.604016008
          - lat: 44.857302736
            lng: -0.603607974
          - lat: 44.855854164
            lng: -0.601363788
          - lat: 44.855647225
            lng: -0.601363788
          - lat: 44.855647225
            lng: -0.601159771
          - lat: 44.854405592
            lng: -0.598915584
          - lat: 44.854198653
            lng: -0.598099516
          - lat: 44.853991714
            lng: -0.597487465
          - lat: 44.853370897
            lng: -0.595243279
          - lat: 44.853370897
            lng: -0.594835245
          - lat: 44.853163958
            lng: -0.594019177
          - lat: 44.853163958
            lng: -0.59381516
          - lat: 44.853577836
            lng: -0.593611143
          - lat: 44.853784775
            lng: -0.593407126
          - lat: 44.854405592
            lng: -0.592999092
          - lat: 44.854612531
            lng: -0.592795075
          - lat: 44.855647225
            lng: -0.591979008
          - lat: 44.856474981
            lng: -0.591366957
          - lat: 44.857509675
            lng: -0.590754906
          - lat: 44.859165186
            lng: -0.589530804
          - lat: 44.859165186
            lng: -0.589326787
          - lat: 44.859992942
            lng: -0.588918753
          - lat: 44.861027636
            lng: -0.587898668
          - lat: 44.861027636
            lng: -0.587694651
          - lat: 44.861234575
            lng: -0.587490635
          - lat: 44.861234575
            lng: -0.587286618
          - lat: 44.861441514
            lng: -0.587286618
          - lat: 44.861441514
            lng: -0.587082601
          - lat: 44.862476209
            lng: -0.584838414
          - lat: 44.862476209
            lng: -0.58443038
          - lat: 44.862890086
            lng: -0.583614312
          - lat: 44.863510903
            lng: -0.581982177
          - lat: 44.863717842
            lng: -0.581166109
          - lat: 44.864752536
            lng: -0.578717905
          - lat: 44.865580292
            lng: -0.576473719
          - lat: 44.86599417
            lng: -0.575657651
          - lat: 44.866408048
            lng: -0.575861668
          - lat: 44.867649681
            lng: -0.575861668
          - lat: 44.868684376
            lng: -0.576065685
          - lat: 44.86971907
            lng: -0.576065685
          - lat: 44.872409276
            lng: -0.576269702
          - lat: 44.875099481
            lng: -0.576677736
          - lat: 44.876341115
            lng: -0.576881753
          - lat: 44.877375809
            lng: -0.576881753
          - lat: 44.887308876
            lng: -0.578105854
          - lat: 44.892896226
            lng: -0.578513888
          - lat: 44.893103165
            lng: -0.578513888
          - lat: 44.893723982
            lng: -0.578717905
          - lat: 44.894551738
            lng: -0.578921922
          - lat: 44.89600031
            lng: -0.578921922
          - lat: 44.897035004
            lng: -0.579125939
          - lat: 44.898690516
            lng: -0.579125939
          - lat: 44.89972521
            lng: -0.579329956
          - lat: 44.900966843
            lng: -0.579533973
          - lat: 44.904070927
            lng: -0.57973799
          - lat: 44.905519499
            lng: -0.579942007
          - lat: 44.907588888
            lng: -0.580146024
          - lat: 44.90903746
            lng: -0.580350041
          - lat: 44.90903746
            lng: -0.579942007
          - lat: 44.908830521
            lng: -0.57973799
          - lat: 44.908209705
            lng: -0.578717905
          - lat: 44.908002766
            lng: -0.57708577
          - lat: 44.90903746
            lng: -0.573821498
          - lat: 44.909451338
            lng: -0.571373295
          - lat: 44.909451338
            lng: -0.571169278
          - lat: 44.909658277
            lng: -0.570761244
          - lat: 44.910072155
            lng: -0.569741159
          - lat: 44.910072155
            lng: -0.569537142
          - lat: 44.911313788
            lng: -0.569537142
          - lat: 44.911727666
            lng: -0.569945176
          - lat: 44.911727666
            lng: -0.570149193
          - lat: 44.912555422
            lng: -0.570965261
          - lat: 44.91276236
            lng: -0.570965261
          - lat: 44.912969299
            lng: -0.570149193
          - lat: 44.912969299
            lng: -0.566884922
          - lat: 44.91276236
            lng: -0.565456803
          - lat: 44.913383177
            lng: -0.561172447
          - lat: 44.913797055
            lng: -0.55892826
          - lat: 44.914417872
            lng: -0.55423587
          - lat: 44.915038688
            lng: -0.550563565
          - lat: 44.915866444
            lng: -0.550563565
          - lat: 44.9166942
            lng: -0.548115362
          - lat: 44.9166942
            lng: -0.547911345
          - lat: 44.914003994
            lng: -0.546483226
          - lat: 44.913797055
            lng: -0.546483226
          - lat: 44.912969299
            lng: -0.545871175
          - lat: 44.911934605
            lng: -0.545259124
          - lat: 44.911727666
            lng: -0.545259124
          - lat: 44.910486033
            lng: -0.544647073
          - lat: 44.910279094
            lng: -0.544443056
          - lat: 44.90903746
            lng: -0.543831005
          - lat: 44.908830521
            lng: -0.543626988
          - lat: 44.907795827
            lng: -0.543218955
          - lat: 44.907795827
            lng: -0.543014938
          - lat: 44.906761132
            lng: -0.54219887
          - lat: 44.905105621
            lng: -0.540974768
          - lat: 44.903243171
            lng: -0.539954683
          - lat: 44.90158766
            lng: -0.538934598
          - lat: 44.899932149
            lng: -0.538322548
          - lat: 44.89972521
            lng: -0.538322548
          - lat: 44.898069699
            lng: -0.537710497
          - lat: 44.897241943
            lng: -0.53750648
          - lat: 44.89413786
            lng: -0.536486395
          - lat: 44.893723982
            lng: -0.536486395
          - lat: 44.892068471
            lng: -0.535670327
          - lat: 44.890619899
            lng: -0.535262293
          - lat: 44.886481121
            lng: -0.535262293
          - lat: 44.883997854
            lng: -0.53546631
          - lat: 44.882342343
            lng: -0.535670327
          - lat: 44.880686832
            lng: -0.536282378
          - lat: 44.87903132
            lng: -0.537098446
          - lat: 44.878824381
            lng: -0.537302463
          - lat: 44.87716887
            lng: -0.538322548
          - lat: 44.875513359
            lng: -0.539546649
          - lat: 44.874478665
            lng: -0.539954683
          - lat: 44.873857848
            lng: -0.539954683
          - lat: 44.873857848
            lng: -0.5401587
          - lat: 44.872202337
            lng: -0.540362717
          - lat: 44.870132948
            lng: -0.540770751
          - lat: 44.868684376
            lng: -0.541178785
          - lat: 44.868270498
            lng: -0.538934598
          - lat: 44.867442742
            lng: -0.536690412
          - lat: 44.866614987
            lng: -0.536894429
          - lat: 44.866201109
            lng: -0.536894429
          - lat: 44.863924781
            lng: -0.537710497
          - lat: 44.863717842
            lng: -0.537710497
          - lat: 44.861234575
            lng: -0.538322548
          - lat: 44.860820697
            lng: -0.538526565
          - lat: 44.85854437
            lng: -0.538730581
          - lat: 44.858337431
            lng: -0.538934598
          - lat: 44.857923553
            lng: -0.538934598
          - lat: 44.857509675
            lng: -0.539138615
          - lat: 44.854198653
            lng: -0.539138615
          - lat: 44.853784775
            lng: -0.538934598
          - lat: 44.851922325
            lng: -0.538118531
          - lat: 44.850266814
            lng: -0.537710497
          - lat: 44.849645997
            lng: -0.537710497
          - lat: 44.849439058
            lng: -0.53750648
          - lat: 44.848404364
            lng: -0.53750648
          - lat: 44.848197425
            lng: -0.537710497
          - lat: 44.847576608
            lng: -0.537710497
          - lat: 44.847369669
            lng: -0.537914514
          - lat: 44.846955791
            lng: -0.537914514
          - lat: 44.846748852
            lng: -0.538118531
          - lat: 44.846541914
            lng: -0.538118531
          - lat: 44.845921097
            lng: -0.538730581
          - lat: 44.84530028
            lng: -0.539138615
          - lat: 44.844265586
            lng: -0.540362717
          - lat: 44.841782319
            lng: -0.542810921
          - lat: 44.841782319
            lng: -0.543014938
          - lat: 44.84157538
            lng: -0.543014938
          - lat: 44.84157538
            lng: -0.543218955
          - lat: 44.841161502
            lng: -0.543218955
          - lat: 44.836815785
            lng: -0.547503311
          - lat: 44.835160274
            lng: -0.546483226
          - lat: 44.833711702
            lng: -0.544035022
          - lat: 44.832470069
            lng: -0.541586819
          - lat: 44.831435374
            lng: -0.539954683
          - lat: 44.830193741
            lng: -0.53750648
          - lat: 44.829159046
            lng: -0.535874344
          - lat: 44.828331291
            lng: -0.534242208
          - lat: 44.827296596
            lng: -0.534446225
          - lat: 44.824606391
            lng: -0.535058276
          - lat: 44.824192513
            lng: -0.534650242
          - lat: 44.82274394
            lng: -0.53750648
          - lat: 44.821502307
            lng: -0.5401587
          - lat: 44.819432918
            lng: -0.544239039
          - lat: 44.817777407
            lng: -0.547095277
          - lat: 44.81715659
            lng: -0.548319379
          - lat: 44.81715659
            lng: -0.548523395
          - lat: 44.816535774
            lng: -0.54954348
          - lat: 44.815708018
            lng: -0.551379633
          - lat: 44.814466385
            lng: -0.553419802
          - lat: 44.81343169
            lng: -0.555459972
          - lat: 44.81343169
            lng: -0.555663989
          - lat: 44.813017812
            lng: -0.556072023
          - lat: 44.813017812
            lng: -0.55627604
          - lat: 44.812603935
            lng: -0.557092108
          - lat: 44.812603935
            lng: -0.557500142
          - lat: 44.812396996
            lng: -0.557704159
          - lat: 44.812396996
            lng: -0.558724243
          - lat: 44.812603935
            lng: -0.559132277
          - lat: 44.812603935
            lng: -0.559540311
          - lat: 44.812810873
            lng: -0.559948345
          - lat: 44.812810873
            lng: -0.560764413
          - lat: 44.813017812
            lng: -0.561376464
          - lat: 44.813224751
            lng: -0.564436718
          - lat: 44.813017812
            lng: -0.564232701
          - lat: 44.813017812
            lng: -0.564640735
          - lat: 44.812603935
            lng: -0.567292956
          - lat: 44.812396996
            lng: -0.567905007
          - lat: 44.812396996
            lng: -0.568109023
          - lat: 44.811776179
            lng: -0.569741159
          - lat: 44.811155362
            lng: -0.572597397
          - lat: 44.811155362
            lng: -0.57300543
          - lat: 44.810948423
            lng: -0.573413464
          - lat: 44.810948423
            lng: -0.573617481
          - lat: 44.810741484
            lng: -0.573821498
          - lat: 44.811983118
            lng: -0.573821498
          - lat: 44.812190057
            lng: -0.573617481
          - lat: 44.812810873
            lng: -0.573617481
          - lat: 44.812603935
            lng: -0.573821498
          - lat: 44.813845568
            lng: -0.574433549
          - lat: 44.814466385
            lng: -0.574433549
          - lat: 44.814673323
            lng: -0.574637566
          - lat: 44.815087201
            lng: -0.574637566
          - lat: 44.81529414
            lng: -0.574841583
          - lat: 44.816535774
            lng: -0.575657651
          - lat: 44.81715659
            lng: -0.576269702
          - lat: 44.818398224
            lng: -0.578309871
          - lat: 44.818605163
            lng: -0.578513888
          - lat: 44.818605163
            lng: -0.578717905
          - lat: 44.819432918
            lng: -0.57973799
          - lat: 44.820260674
            lng: -0.581166109
          - lat: 44.821295368
            lng: -0.582798244
          - lat: 44.821502307
            lng: -0.583206278
          - lat: 44.823364757
            lng: -0.586062516
          - lat: 44.823571696
            lng: -0.58647055
          - lat: 44.823778635
            lng: -0.586674567
          - lat: 44.825434146
            lng: -0.58912277
          - lat: 44.825227207
            lng: -0.589326787
          - lat: 44.825020268
            lng: -0.590142855
          - lat: 44.823778635
            lng: -0.591979008
          - lat: 44.822537002
            lng: -0.593407126
          - lat: 44.821709246
            lng: -0.594223194
          - lat: 44.821295368
            lng: -0.594835245
          - lat: 44.821088429
            lng: -0.595039262
          - lat: 44.821088429
            lng: -0.595243279
          - lat: 44.820674551
            lng: -0.595651313
          - lat: 44.820467613
            lng: -0.596059347
          - lat: 44.820467613
            lng: -0.596263364
          - lat: 44.820260674
            lng: -0.596467381
          - lat: 44.81901904
            lng: -0.60054772
          - lat: 44.818812101
            lng: -0.600955754
          - lat: 44.818812101
            lng: -0.601975839
          - lat: 44.818605163
            lng: -0.602179856
          - lat: 44.818605163
            lng: -0.602383872
          - lat: 44.818398224
            lng: -0.602791906
          - lat: 44.818398224
            lng: -0.602995923
          - lat: 44.819846796
            lng: -0.603811991
          - lat: 44.820053735
            lng: -0.603811991
          - lat: 44.821709246
            lng: -0.606464212
          - lat: 44.821916185
            lng: -0.606668229
          - lat: 44.821916185
            lng: -0.606872246
          - lat: 44.821502307
            lng: -0.608504381
          - lat: 44.822330063
            lng: -0.610136517
          - lat: 44.822330063
            lng: -0.610340534
          - lat: 44.82274394
            lng: -0.610544551
          - lat: 44.82274394
            lng: -0.611360619
          - lat: 44.822950879
            lng: -0.612788737
          - lat: 44.823778635
            lng: -0.613808822
          - lat: 44.825227207
            lng: -0.614012839
          - lat: 44.826468841
            lng: -0.613604805
          - lat: 44.826675779
            lng: -0.61258472
          - lat: 44.826882718
            lng: -0.61258472
          - lat: 44.827296596
            lng: -0.612788737
          - lat: 44.827917413
            lng: -0.612788737
          - lat: 44.828124352
            lng: -0.613196771
          - lat: 44.829159046
            lng: -0.613604805
          - lat: 44.829365985
            lng: -0.613808822
          - lat: 44.830607619
            lng: -0.613808822
          - lat: 44.831435374
            lng: -0.613604805
          - lat: 44.831642313
            lng: -0.613604805
          - lat: 44.83226313
            lng: -0.612992754
          - lat: 44.832470069
            lng: -0.612992754
          - lat: 44.832470069
            lng: -0.61258472
          - lat: 44.832677008
            lng: -0.612380703
          - lat: 44.83412558
            lng: -0.610748568
          - lat: 44.834332519
            lng: -0.610544551
          - lat: 44.83412558
            lng: -0.610340534
          - lat: 44.834953335
            lng: -0.6099325
          - lat: 44.837022724
            lng: -0.606872246
          - lat: 44.837436602
            lng: -0.60789233
          - lat: 44.837436602
            lng: -0.608096347
          - lat: 44.83785048
            lng: -0.608708398
          - lat: 44.83785048
            lng: -0.608912415
          - lat: 44.838057419
            lng: -0.609728483
          - lat: 44.838264358
            lng: -0.6099325
          - lat: 44.838264358
            lng: -0.611360619
          - lat: 44.838471297
            lng: -0.615032924
          - lat: 44.838471297
            lng: -0.616869077
          - lat: 44.838678236
            lng: -0.618297195
          - lat: 44.838678236
            lng: -0.620949416
          - lat: 44.838471297
            lng: -0.622173517
          - lat: 44.838678236
            lng: -0.62400967
          - lat: 44.838678236
            lng: -0.625029755
          - lat: 44.838885174
            lng: -0.625845823
          - lat: 44.838885174
            lng: -0.626865907
          - lat: 44.839092113
            lng: -0.626865907
          - lat: 44.841368441
            lng: -0.62870206
          - lat: 44.842817013
            lng: -0.629110094
          - lat: 44.843230891
            lng: -0.629110094
          - lat: 44.843644769
            lng: -0.629314111
          - lat: 44.843644769
            lng: -0.629926162
          - lat: 44.843851708
            lng: -0.630334196
          - lat: 44.843851708
            lng: -0.630538213
          - lat: 44.84716273
            lng: -0.632986416
          - lat: 44.848197425
            lng: -0.633190433
          - lat: 44.849232119
            lng: -0.633190433
          - lat: 44.850059875
            lng: -0.632782399
          - lat: 44.851094569
            lng: -0.632170348
          - lat: 44.851301508
            lng: -0.632170348
          - lat: 44.851508447
            lng: -0.633190433
          - lat: 44.851508447
            lng: -0.635230603
          - lat: 44.851715386
            lng: -0.636046671
          - lat: 44.851922325
            lng: -0.637066755
          - lat: 44.855026408
            lng: -0.636046671
          - lat: 44.856474981
            lng: -0.63808684
          - lat: 44.85668192
            lng: -0.637678806
    SurveyKpisPreferencesListExample:
      value:
        status: success
        data:
          preferences:
            - id: 13
              group_id: 4
              kpi_name: "no_of_voters"
              kpi_label: "Plans to vote"
              form_id: 68904
              form_label: "Avez-vous prévu d’aller voter ?"
              form_ref_id: 146077
              formdata_value: "oui"

security:
  - bearerAuth: []
