openapi: 3.0.3
info:
  title: 'VanMoof API Documentation'
  description: ''
  version: 1.0.0
servers:
  -
    url: 'https://api.vanmoof-api.com'
tags:
  -
    name: Authentication
    description: 'Endpoints for user authentication'
  -
    name: Bike
    description: 'Endpoints for bike operations'
  -
    name: Cloud
    description: 'Endpoints for the Cloud.'
  -
    name: Customer
    description: 'Endpoints for customer data'
  -
    name: Firmwares
    description: 'Endpoints for SA5+ firmwares'
  -
    name: Rides
    description: 'Endpoints for tracking and retrieving rider rides'
  -
    name: Website
    description: 'Endpoints you interact with via the VanMoof website'
components:
  securitySchemes:
    default:
      type: http
      scheme: bearer
      description: 'You can retrieve your token by visiting your dashboard and clicking <b>Generate API token</b>.'
security:
  -
    default: []
paths:
  /v8/authenticate:
    post:
      summary: '1. Obtain Initial Token'
      operationId: 1ObtainInitialToken
      description: "Authenticate with email and password to get an initial token. This token is then exchanged for an Application JWT which expires within two hours. This token however is valid for one year to continusly optain new Application JWTs without re-authenticating.\n\nJWT Payload:\n```\n{\n  \"iss\": \"http://api.vanmoof-api.com\",\n  \"iat\": {issued_at_timestamp},\n  \"nbf\": {not_before_timestamp},\n  \"exp\": {expiration_timestamp},\n  \"user\": {userID},\n  \"api_key\": 3,\n  \"device\": null,\n  \"refresh_token\": \"{UUIDv4}\"\n}\n```\n"
      parameters:
        -
          in: header
          name: Api-Key
          description: ''
          example: fcb38d47-f14b-30cf-843b-26283f6a5819
          schema:
            type: string
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                type: object
                example:
                  token: '{TOKEN}'
                  refreshToken: UUIDv4
                properties:
                  token:
                    type: string
                    example: '{TOKEN}'
                  refreshToken:
                    type: string
                    example: UUIDv4
        401:
          description: Unauthorized
          content:
            application/json:
              schema:
                type: object
                example:
                  error: AuthenticationException
                  message: 'Invalid Credentials'
                properties:
                  error:
                    type: string
                    example: AuthenticationException
                  message:
                    type: string
                    example: 'Invalid Credentials'
        422:
          description: 'Unprocessable Entity'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message: 'Please provide an API key'
                properties:
                  error:
                    type: string
                    example: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message:
                    type: string
                    example: 'Please provide an API key'
      tags:
        - Authentication
      security: []
  /v8/getApplicationToken:
    get:
      summary: '2. Obtain Application Token'
      operationId: 2ObtainApplicationToken
      description: "Exchange the initial token for an Application JWT used for subsequent requests.\n\nJWT payload:\n```json\n{\n  \"iss\": \"http://api.vanmoof-api.com\",\n  \"iat\": {issued_at_timestamp},\n  \"nbf\": {not_before_timestamp},\n  \"exp\": {expiration_timestamp},\n  \"user\": \"{email}\",\n  \"uuid\": \"{UUIDv3}\",\n  \"bikes\": [\n    {bikeID},\n  ],\n  \"owner\": [\n    \"{FrameNumber}\"\n  ]\n}\n```\n"
      parameters:
        -
          in: header
          name: Api-Key
          description: ''
          example: fcb38d47-f14b-30cf-843b-26283f6a5819
          schema:
            type: string
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                type: object
                example:
                  token: '{JWT_TOKEN}'
                properties:
                  token:
                    type: string
                    example: '{JWT_TOKEN}'
        401:
          description: ''
          content:
            application/json:
              schema:
                oneOf:
                  -
                    description: Unauthorized
                    type: object
                    example:
                      error: UnexpectedError
                      message: 'An unexpected error occurred. Please contact support if this problem persists.'
                    properties:
                      error:
                        type: string
                        example: UnexpectedError
                      message:
                        type: string
                        example: 'An unexpected error occurred. Please contact support if this problem persists.'
                  -
                    description: Unauthorized
                    type: object
                    example:
                      error: AuthenticationException
                      message: 'Invalid Credentials'
                    properties:
                      error:
                        type: string
                        example: AuthenticationException
                      message:
                        type: string
                        example: 'Invalid Credentials'
        422:
          description: 'Unprocessable Entity'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message: 'Please provide an API key'
                properties:
                  error:
                    type: string
                    example: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message:
                    type: string
                    example: 'Please provide an API key'
      tags:
        - Authentication
  /v8/token:
    post:
      summary: 'Refresh Token'
      operationId: refreshToken
      description: 'Refresh the authentication token using a refresh token.'
      parameters:
        -
          in: header
          name: Api-Key
          description: ''
          example: fcb38d47-f14b-30cf-843b-26283f6a5819
          schema:
            type: string
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                type: object
                example:
                  token: eyXXX.eyXXX
                properties:
                  token:
                    type: string
                    example: eyXXX.eyXXX
        401:
          description: ''
          content:
            application/json:
              schema:
                oneOf:
                  -
                    description: 'Invalid Refresh Token'
                    type: object
                    example:
                      error: AuthenticationException
                      message: 'Invalid Credentials'
                    properties:
                      error:
                        type: string
                        example: AuthenticationException
                      message:
                        type: string
                        example: 'Invalid Credentials'
                  -
                    description: 'Missing API Key'
                    type: object
                    example:
                      error: UnexpectedError
                      message: 'An unexpected error occurred. Please contact support if this problem persists.'
                    properties:
                      error:
                        type: string
                        example: UnexpectedError
                      message:
                        type: string
                        example: 'An unexpected error occurred. Please contact support if this problem persists.'
      tags:
        - Authentication
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                refreshToken:
                  type: string
                  description: 'The refresh token to generate a new authentication token.'
                  example: null
              required:
                - refreshToken
      security: []
  '/v8/changeBikeName/{bikeId}':
    post:
      summary: 'Change Bike Name'
      operationId: changeBikeName
      description: 'Change the name of a specific bike. Limited to 255 Characters.'
      parameters:
        -
          in: header
          name: Api-Key
          description: ''
          example: fcb38d47-f14b-30cf-843b-26283f6a5819
          schema:
            type: string
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                type: object
                example:
                  result: true
                properties:
                  result:
                    type: boolean
                    example: true
        401:
          description: Unauthorized
          content:
            application/json:
              schema:
                type: object
                example:
                  error: AuthenticationException
                  message: 'Invalid Credentials'
                properties:
                  error:
                    type: string
                    example: AuthenticationException
                  message:
                    type: string
                    example: 'Invalid Credentials'
        422:
          description: 'Unprocessable Entity'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message: 'Please provide an API key'
                properties:
                  error:
                    type: string
                    example: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message:
                    type: string
                    example: 'Please provide an API key'
      tags:
        - Bike
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: 'New name for the bike'
                  example: null
              required:
                - name
    parameters:
      -
        in: path
        name: bikeId
        description: 'The bike ID'
        example: null
        required: true
        schema:
          type: integer
  /v8/changedBackupCode:
    post:
      summary: 'Changed Backup Code'
      operationId: changedBackupCode
      description: 'Notify Backend that the bikes backup code was changed. Requires `macAddress` in body. Since the SA5 do not have the macAddress in the API.. This is kinda pointless. Even with the SA3 the API responds with macAddress field is required.'
      parameters:
        -
          in: header
          name: Api-Key
          description: ''
          example: fcb38d47-f14b-30cf-843b-26283f6a5819
          schema:
            type: string
      responses:
        401:
          description: 'Invalid Credentials'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: AuthenticationException
                  message: 'Invalid Credentials'
                properties:
                  error:
                    type: string
                    example: AuthenticationException
                  message:
                    type: string
                    example: 'Invalid Credentials'
        422:
          description: 'Validation Failed'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: ValidationException
                  message: 'Validation failed'
                  violations:
                    macAddress:
                      - 'The macAddress field is required.'
                properties:
                  error:
                    type: string
                    example: ValidationException
                  message:
                    type: string
                    example: 'Validation failed'
                  violations:
                    type: object
                    properties:
                      macAddress:
                        type: array
                        example:
                          - 'The macAddress field is required.'
                        items:
                          type: string
      tags:
        - Bike
      requestBody:
        required: true
        content:
          'application/json; charset=utf-8':
            schema:
              type: object
              properties:
                macAddress:
                  type: string
                  description: 'MAC address of the device'
                  example: null
              required:
                - macAddress
  /v8/getBikeSharingInvitations:
    get:
      summary: 'Get Bike Sharing Invitations'
      operationId: getBikeSharingInvitations
      description: 'Retrieve bike sharing invitations for the authenticated user. Hash is likely MD5.'
      parameters:
        -
          in: header
          name: Api-Key
          description: ''
          example: fcb38d47-f14b-30cf-843b-26283f6a5819
          schema:
            type: string
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                type: object
                example:
                  invitations: []
                  hash: '{MD5_HASH}'
                properties:
                  invitations:
                    type: array
                    example: []
                  hash:
                    type: string
                    example: '{MD5_HASH}'
        401:
          description: Unauthorized
          content:
            application/json:
              schema:
                type: object
                example:
                  error: AuthenticationException
                  message: 'Invalid Credentials'
                properties:
                  error:
                    type: string
                    example: AuthenticationException
                  message:
                    type: string
                    example: 'Invalid Credentials'
        422:
          description: 'Unprocessable Entity'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message: 'Please provide an API key'
                properties:
                  error:
                    type: string
                    example: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message:
                    type: string
                    example: 'Please provide an API key'
      tags:
        - Bike
  '/v8/getBikeSharingInvitationsForBike/{bikeId}':
    get:
      summary: 'Get Bike Sharing Invitations For Bike'
      operationId: getBikeSharingInvitationsForBike
      description: 'Retrieve bike sharing invitations for a specific bike.'
      parameters:
        -
          in: header
          name: Api-Key
          description: ''
          example: fcb38d47-f14b-30cf-843b-26283f6a5819
          schema:
            type: string
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                type: object
                example:
                  invitations: []
                properties:
                  invitations:
                    type: array
                    example: []
        401:
          description: Unauthorized
          content:
            application/json:
              schema:
                type: object
                example:
                  error: AuthenticationException
                  message: 'Invalid Credentials'
                properties:
                  error:
                    type: string
                    example: AuthenticationException
                  message:
                    type: string
                    example: 'Invalid Credentials'
        422:
          description: 'Unprocessable Entity'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message: 'Please provide an API key'
                properties:
                  error:
                    type: string
                    example: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message:
                    type: string
                    example: 'Please provide an API key'
      tags:
        - Bike
    parameters:
      -
        in: path
        name: bikeId
        description: 'The bike ID'
        example: null
        required: true
        schema:
          type: integer
  '/v8/getBikeData/{bikeId}':
    get:
      summary: 'Get Bike Data'
      operationId: getBikeData
      description: 'Retrieve detailed data for a specific bike. Returns same structure as bikeDetails in getCustomerData. Hash is likely MD5.'
      parameters:
        -
          in: header
          name: Api-Key
          description: ''
          example: fcb38d47-f14b-30cf-843b-26283f6a5819
          schema:
            type: string
      responses:
        200:
          description: 'Success (example from S5)'
          content:
            application/json:
              schema:
                type: object
                example:
                  data:
                    id: '{BikeID}'
                    name: '{Bike Name}'
                    frameNumber: '{Frame Number}'
                    bikeId: '{Bike ID}'
                    frameSerial: '{Frame Serial}'
                    ownerName: '{Owner Name}'
                    tripDistance: 0
                    pendingSmartmoduleMacAddress: null
                    macAddress: null
                    mainEcuSerial: '{ECU Serial}'
                    smartmoduleCurrentVersion: null
                    smartmoduleDesiredVersion: null
                    smartmoduleLatestStable: false
                    changeBackupCode: true
                    isTracking: false
                    highestAvailableSpeedLimit: null
                    messageAvailable: false
                    modelName: '{Model Name}'
                    modelDetails: null
                    modelColor:
                      name: '{Color Name}'
                      primary: '{Hex Color}'
                      secondary: '{Hex Color}'
                    frameShape: '{Shape}'
                    manufacturer: '{Manufacturer}'
                    controller: '{Controller}'
                    updateMethod: 'OAD (encrypted)'
                    eLock: true
                    gsmModule: '{GSM Module}'
                    speaker: true
                    bleProfile: '{BLE Profile}'
                    bleVersion: null
                    messagesViaBLE: BLEv2
                    customerRoleFamily: Responsible
                    customerRole: owner
                    startsAt: '{ISO8601 Date}'
                    endsAt: null
                    permissions:
                      - ADD_USER
                      - FIRMWARE_UPDATES
                      - REMOVE_USER
                      - REPORT_FOUND
                      - REPORT_STOLEN
                      - SEND_STATISTICS
                      - BACKUP_CODE
                      - BIKE_NAME
                      - VIEW_THEFT_CASES
                      - ALARM_SETTINGS
                      - COUNTRY_SETTINGS
                      - LIGHTS
                      - MOTOR_SUPPORT_LEVEL
                      - UNLOCK
                      - READ_VALUES
                      - STOLEN_MODE
                      - SWAP_SMARTMODULE
                    key: null
                    isFactoryKey: true
                    customerCount: 1
                    invitationCount: 0
                    stolen:
                      isStolen: false
                      dateStolen: null
                      status: not_stolen
                      latestLocation: null
                    hasPeaceOfMind: false
                    peaceOfMind: null
                    links:
                      hash: 'http://api.vanmoof-api.com/v8/getBikeDataHash/{BikeID}'
                      thumbnail: 'https://my.vanmoof.com/image/model/{ModelID}'
                    serviceModeEnabled: false
                    workshopInfo: []
                  hash: '{MD5_HASH}'
                properties:
                  data:
                    type: object
                    properties:
                      id:
                        type: string
                        example: '{BikeID}'
                      name:
                        type: string
                        example: '{Bike Name}'
                      frameNumber:
                        type: string
                        example: '{Frame Number}'
                      bikeId:
                        type: string
                        example: '{Bike ID}'
                      frameSerial:
                        type: string
                        example: '{Frame Serial}'
                      ownerName:
                        type: string
                        example: '{Owner Name}'
                      tripDistance:
                        type: integer
                        example: 0
                      pendingSmartmoduleMacAddress:
                        type: string
                        example: null
                        nullable: true
                      macAddress:
                        type: string
                        example: null
                        nullable: true
                      mainEcuSerial:
                        type: string
                        example: '{ECU Serial}'
                      smartmoduleCurrentVersion:
                        type: string
                        example: null
                        nullable: true
                      smartmoduleDesiredVersion:
                        type: string
                        example: null
                        nullable: true
                      smartmoduleLatestStable:
                        type: boolean
                        example: false
                      changeBackupCode:
                        type: boolean
                        example: true
                      isTracking:
                        type: boolean
                        example: false
                      highestAvailableSpeedLimit:
                        type: string
                        example: null
                        nullable: true
                      messageAvailable:
                        type: boolean
                        example: false
                      modelName:
                        type: string
                        example: '{Model Name}'
                      modelDetails:
                        type: string
                        example: null
                        nullable: true
                      modelColor:
                        type: object
                        properties:
                          name:
                            type: string
                            example: '{Color Name}'
                          primary:
                            type: string
                            example: '{Hex Color}'
                          secondary:
                            type: string
                            example: '{Hex Color}'
                      frameShape:
                        type: string
                        example: '{Shape}'
                      manufacturer:
                        type: string
                        example: '{Manufacturer}'
                      controller:
                        type: string
                        example: '{Controller}'
                      updateMethod:
                        type: string
                        example: 'OAD (encrypted)'
                      eLock:
                        type: boolean
                        example: true
                      gsmModule:
                        type: string
                        example: '{GSM Module}'
                      speaker:
                        type: boolean
                        example: true
                      bleProfile:
                        type: string
                        example: '{BLE Profile}'
                      bleVersion:
                        type: string
                        example: null
                        nullable: true
                      messagesViaBLE:
                        type: string
                        example: BLEv2
                      customerRoleFamily:
                        type: string
                        example: Responsible
                      customerRole:
                        type: string
                        example: owner
                      startsAt:
                        type: string
                        example: '{ISO8601 Date}'
                      endsAt:
                        type: string
                        example: null
                        nullable: true
                      permissions:
                        type: array
                        example:
                          - ADD_USER
                          - FIRMWARE_UPDATES
                          - REMOVE_USER
                          - REPORT_FOUND
                          - REPORT_STOLEN
                          - SEND_STATISTICS
                          - BACKUP_CODE
                          - BIKE_NAME
                          - VIEW_THEFT_CASES
                          - ALARM_SETTINGS
                          - COUNTRY_SETTINGS
                          - LIGHTS
                          - MOTOR_SUPPORT_LEVEL
                          - UNLOCK
                          - READ_VALUES
                          - STOLEN_MODE
                          - SWAP_SMARTMODULE
                        items:
                          type: string
                      key:
                        type: string
                        example: null
                        nullable: true
                      isFactoryKey:
                        type: boolean
                        example: true
                      customerCount:
                        type: integer
                        example: 1
                      invitationCount:
                        type: integer
                        example: 0
                      stolen:
                        type: object
                        properties:
                          isStolen:
                            type: boolean
                            example: false
                          dateStolen:
                            type: string
                            example: null
                            nullable: true
                          status:
                            type: string
                            example: not_stolen
                          latestLocation:
                            type: string
                            example: null
                            nullable: true
                      hasPeaceOfMind:
                        type: boolean
                        example: false
                      peaceOfMind:
                        type: string
                        example: null
                        nullable: true
                      links:
                        type: object
                        properties:
                          hash:
                            type: string
                            example: 'http://api.vanmoof-api.com/v8/getBikeDataHash/{BikeID}'
                          thumbnail:
                            type: string
                            example: 'https://my.vanmoof.com/image/model/{ModelID}'
                      serviceModeEnabled:
                        type: boolean
                        example: false
                      workshopInfo:
                        type: array
                        example: []
                  hash:
                    type: string
                    example: '{MD5_HASH}'
        400:
          description: 'Bike Not Found'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: BikeNotFoundException
                  message: 'Bike not found'
                properties:
                  error:
                    type: string
                    example: BikeNotFoundException
                  message:
                    type: string
                    example: 'Bike not found'
        401:
          description: ''
          content:
            application/json:
              schema:
                oneOf:
                  -
                    description: 'Invalid Credentials'
                    type: object
                    example:
                      error: AuthenticationException
                      message: 'Invalid Credentials'
                    properties:
                      error:
                        type: string
                        example: AuthenticationException
                      message:
                        type: string
                        example: 'Invalid Credentials'
                  -
                    description: 'Customer Not Authorized'
                    type: object
                    example:
                      error: CustomerNotAuthorizedException
                      message: 'Customer not authorized for this action'
                    properties:
                      error:
                        type: string
                        example: CustomerNotAuthorizedException
                      message:
                        type: string
                        example: 'Customer not authorized for this action'
        422:
          description: 'Unprocessable Entity'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message: 'Please provide an API key'
                properties:
                  error:
                    type: string
                    example: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message:
                    type: string
                    example: 'Please provide an API key'
      tags:
        - Bike
    parameters:
      -
        in: path
        name: bikeId
        description: 'The bike ID'
        example: null
        required: true
        schema:
          type: integer
  '/v8/getBikeMessages/{bikeId}':
    get:
      summary: 'Get Bike Messages'
      operationId: getBikeMessages
      description: 'Retrieve messages for a specific bike.'
      parameters:
        -
          in: header
          name: Api-Key
          description: ''
          example: fcb38d47-f14b-30cf-843b-26283f6a5819
          schema:
            type: string
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                oneOf:
                  -
                    description: Success
                    type: array
                    items:
                      type: object
                    example: []
                  -
                    description: 'Success with content'
                    type: array
                    items:
                      type: object
                      properties:
                        content:
                          type: string
                          example: ''
                    example:
                      -
                        content: ''
        400:
          description: 'Validation Failed'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: ValidationException
                  message: 'Validation failed'
                  violations:
                    bikeId:
                      - 'You are not registered as customer of this bike.'
                properties:
                  error:
                    type: string
                    example: ValidationException
                  message:
                    type: string
                    example: 'Validation failed'
                  violations:
                    type: object
                    properties:
                      bikeId:
                        type: array
                        example:
                          - 'You are not registered as customer of this bike.'
                        items:
                          type: string
        401:
          description: Unauthorized
          content:
            application/json:
              schema:
                type: object
                example:
                  error: AuthenticationException
                  message: 'Invalid Credentials'
                properties:
                  error:
                    type: string
                    example: AuthenticationException
                  message:
                    type: string
                    example: 'Invalid Credentials'
        422:
          description: 'Unprocessable Entity'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message: 'Please provide an API key'
                properties:
                  error:
                    type: string
                    example: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message:
                    type: string
                    example: 'Please provide an API key'
      tags:
        - Bike
    parameters:
      -
        in: path
        name: bikeId
        description: 'The bike ID'
        example: null
        required: true
        schema:
          type: integer
  '/v8/getTheftCase/{frameNumber}':
    get:
      summary: 'Get Theft Case'
      operationId: getTheftCase
      description: 'Retrieve theft case information for a specific bike by frame number.'
      parameters:
        -
          in: header
          name: Api-Key
          description: ''
          example: fcb38d47-f14b-30cf-843b-26283f6a5819
          schema:
            type: string
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                type: object
                example: {  }
                properties: {  }
        400:
          description: 'Bike Not Stolen'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: BikeNotStolenException
                  message: 'Bike not stolen'
                properties:
                  error:
                    type: string
                    example: BikeNotStolenException
                  message:
                    type: string
                    example: 'Bike not stolen'
        401:
          description: ''
          content:
            application/json:
              schema:
                oneOf:
                  -
                    description: Unauthorized
                    type: object
                    example:
                      error: AuthenticationException
                      message: 'Invalid Credentials'
                    properties:
                      error:
                        type: string
                        example: AuthenticationException
                      message:
                        type: string
                        example: 'Invalid Credentials'
                  -
                    description: 'Customer Not Authorized'
                    type: object
                    example:
                      error: CustomerNotAuthorizedException
                      message: 'Customer not authorized for this action'
                    properties:
                      error:
                        type: string
                        example: CustomerNotAuthorizedException
                      message:
                        type: string
                        example: 'Customer not authorized for this action'
        422:
          description: 'Unprocessable Entity'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message: 'Please provide an API key'
                properties:
                  error:
                    type: string
                    example: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message:
                    type: string
                    example: 'Please provide an API key'
      tags:
        - Bike
    parameters:
      -
        in: path
        name: frameNumber
        description: 'The bike frame number'
        example: null
        required: true
        schema:
          type: string
  '/v8/getBikeDataHash/{bikeId}':
    get:
      summary: 'Get Bike Data Hash'
      operationId: getBikeDataHash
      description: 'Retrieve the hash for a specific bike using its bike ID.'
      parameters:
        -
          in: header
          name: Api-Key
          description: ''
          example: fcb38d47-f14b-30cf-843b-26283f6a5819
          schema:
            type: string
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                type: object
                example:
                  hash: '{MD5_HASH}'
                properties:
                  hash:
                    type: string
                    example: '{MD5_HASH}'
        401:
          description: ''
          content:
            application/json:
              schema:
                oneOf:
                  -
                    description: 'Invalid Credentials'
                    type: object
                    example:
                      error: AuthenticationException
                      message: 'Invalid Credentials'
                    properties:
                      error:
                        type: string
                        example: AuthenticationException
                      message:
                        type: string
                        example: 'Invalid Credentials'
                  -
                    description: 'Customer Not Authorized'
                    type: object
                    example:
                      error: CustomerNotAuthorizedException
                      message: 'Customer not authorized for this action'
                    properties:
                      error:
                        type: string
                        example: CustomerNotAuthorizedException
                      message:
                        type: string
                        example: 'Customer not authorized for this action'
        422:
          description: 'Unprocessable Entity'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message: 'Please provide an API key'
                properties:
                  error:
                    type: string
                    example: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message:
                    type: string
                    example: 'Please provide an API key'
      tags:
        - Bike
    parameters:
      -
        in: path
        name: bikeId
        description: 'The bike ID'
        example: null
        required: true
        schema:
          type: integer
  /v8/createBikeSharingInvitation:
    post:
      summary: 'Create Bike Sharing Invitation'
      operationId: createBikeSharingInvitation
      description: 'Create an invitation to share a bike with another user via email.'
      parameters:
        -
          in: header
          name: Api-Key
          description: ''
          example: fcb38d47-f14b-30cf-843b-26283f6a5819
          schema:
            type: string
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                type: object
                example:
                  result:
                    guid: '{UUIDv3}'
                    expiresAt: '{ISO8601 Date}'
                    startsAt: null
                    endsAt: null
                    duration: '{time in seconds}'
                    role: user
                    email: '{email}'
                properties:
                  result:
                    type: object
                    properties:
                      guid:
                        type: string
                        example: '{UUIDv3}'
                      expiresAt:
                        type: string
                        example: '{ISO8601 Date}'
                      startsAt:
                        type: string
                        example: null
                        nullable: true
                      endsAt:
                        type: string
                        example: null
                        nullable: true
                      duration:
                        type: string
                        example: '{time in seconds}'
                      role:
                        type: string
                        example: user
                      email:
                        type: string
                        example: '{email}'
        400:
          description: 'Validation Failed'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: ValidationException
                  message: 'Validation failed'
                  violations:
                    email:
                      - 'The email must be a valid email address.'
                    duration:
                      - 'The duration must be an integer.'
                properties:
                  error:
                    type: string
                    example: ValidationException
                  message:
                    type: string
                    example: 'Validation failed'
                  violations:
                    type: object
                    properties:
                      email:
                        type: array
                        example:
                          - 'The email must be a valid email address.'
                        items:
                          type: string
                      duration:
                        type: array
                        example:
                          - 'The duration must be an integer.'
                        items:
                          type: string
        401:
          description: ''
          content:
            application/json:
              schema:
                oneOf:
                  -
                    description: 'Invalid Credentials'
                    type: object
                    example:
                      error: AuthenticationException
                      message: 'Invalid Credentials'
                    properties:
                      error:
                        type: string
                        example: AuthenticationException
                      message:
                        type: string
                        example: 'Invalid Credentials'
                  -
                    description: 'Customer Not Authorized'
                    type: object
                    example:
                      error: CustomerNotAuthorizedException
                      message: 'Customer not authorized for this action'
                    properties:
                      error:
                        type: string
                        example: CustomerNotAuthorizedException
                      message:
                        type: string
                        example: 'Customer not authorized for this action'
        422:
          description: 'Unprocessable Entity'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message: 'Please provide an API key'
                properties:
                  error:
                    type: string
                    example: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message:
                    type: string
                    example: 'Please provide an API key'
      tags:
        - Bike
      requestBody:
        required: true
        content:
          'application/json; charset=utf-8':
            schema:
              type: object
              properties:
                email:
                  type: string
                  description: 'Recipient email address'
                  example: null
                duration:
                  type: integer
                  description: 'Duration in seconds'
                  example: null
                bikeId:
                  type: integer
                  description: 'The bike ID to share'
                  example: null
              required:
                - email
                - duration
                - bikeId
  /v8/revokeWorkshopSharingInvitation:
    post:
      summary: 'Revoke Workshop Sharing Invitation'
      operationId: revokeWorkshopSharingInvitation
      description: 'Revoke workshop sharing invitations for a specific bike. It updates the invitation and sets endsAt to now.'
      parameters:
        -
          in: header
          name: Api-Key
          description: ''
          example: fcb38d47-f14b-30cf-843b-26283f6a5819
          schema:
            type: string
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                oneOf:
                  -
                    description: Success
                    type: object
                    example:
                      result:
                        -
                          email: '{Workshop Email}'
                          name: '{Workshop Name}'
                          startsAt: '{ISO8601 Date}'
                          endsAt: '{ISO8601 Date}'
                    properties:
                      result:
                        type: array
                        example:
                          -
                            email: '{Workshop Email}'
                            name: '{Workshop Name}'
                            startsAt: '{ISO8601 Date}'
                            endsAt: '{ISO8601 Date}'
                        items:
                          type: object
                          properties:
                            email:
                              type: string
                              example: '{Workshop Email}'
                            name:
                              type: string
                              example: '{Workshop Name}'
                            startsAt:
                              type: string
                              example: '{ISO8601 Date}'
                            endsAt:
                              type: string
                              example: '{ISO8601 Date}'
                  -
                    description: 'Success (no workshops)'
                    type: object
                    example:
                      result: []
                    properties:
                      result:
                        type: array
                        example: []
        401:
          description: ''
          content:
            application/json:
              schema:
                oneOf:
                  -
                    description: 'Invalid Credentials'
                    type: object
                    example:
                      error: AuthenticationException
                      message: 'Invalid Credentials'
                    properties:
                      error:
                        type: string
                        example: AuthenticationException
                      message:
                        type: string
                        example: 'Invalid Credentials'
                  -
                    description: 'Customer Not Authorized'
                    type: object
                    example:
                      error: CustomerNotAuthorizedException
                      message: 'Customer not authorized for this action'
                    properties:
                      error:
                        type: string
                        example: CustomerNotAuthorizedException
                      message:
                        type: string
                        example: 'Customer not authorized for this action'
        422:
          description: 'Unprocessable Entity'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message: 'Please provide an API key'
                properties:
                  error:
                    type: string
                    example: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message:
                    type: string
                    example: 'Please provide an API key'
      tags:
        - Bike
      requestBody:
        required: true
        content:
          'application/json; charset=utf-8':
            schema:
              type: object
              properties:
                bikeId:
                  type: integer
                  description: 'The bike ID to revoke workshop invitations for'
                  example: null
              required:
                - bikeId
  '/v8/revokeBikeSharingInvitation/{guid}':
    post:
      summary: 'Revoke Bike Sharing Invitation'
      operationId: revokeBikeSharingInvitation
      description: 'Revoke a previously created bike sharing invitation by GUID.'
      parameters:
        -
          in: header
          name: Api-Key
          description: ''
          example: fcb38d47-f14b-30cf-843b-26283f6a5819
          schema:
            type: string
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                type: object
                example:
                  result: true
                properties:
                  result:
                    type: boolean
                    example: true
        401:
          description: ''
          content:
            application/json:
              schema:
                oneOf:
                  -
                    description: 'Invalid Credentials'
                    type: object
                    example:
                      error: AuthenticationException
                      message: 'Invalid Credentials'
                    properties:
                      error:
                        type: string
                        example: AuthenticationException
                      message:
                        type: string
                        example: 'Invalid Credentials'
                  -
                    description: 'Customer Not Authorized'
                    type: object
                    example:
                      error: CustomerNotAuthorizedException
                      message: 'Customer not authorized for this action'
                    properties:
                      error:
                        type: string
                        example: CustomerNotAuthorizedException
                      message:
                        type: string
                        example: 'Customer not authorized for this action'
        404:
          description: 'Invitation Not Found'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: BikeSharingInvitationNotFoundException
                  message: 'This bike sharing invitation does not exist.'
                properties:
                  error:
                    type: string
                    example: BikeSharingInvitationNotFoundException
                  message:
                    type: string
                    example: 'This bike sharing invitation does not exist.'
        422:
          description: 'Unprocessable Entity'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message: 'Please provide an API key'
                properties:
                  error:
                    type: string
                    example: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message:
                    type: string
                    example: 'Please provide an API key'
      tags:
        - Bike
    parameters:
      -
        in: path
        name: guid
        description: 'Invitation GUID'
        example: null
        required: true
        schema:
          type: string
  /v8/createWorkshopSharingInvitation:
    post:
      summary: 'Create Workshop Sharing Invitation'
      operationId: createWorkshopSharingInvitation
      description: 'Create an invitation for a workshop to access a bike. Valid for 6 months. QR Code content "https://www.vanmoof.com/invite-shop?email={Workshop Email}&name={workshop Name}"'
      parameters:
        -
          in: header
          name: Api-Key
          description: ''
          example: fcb38d47-f14b-30cf-843b-26283f6a5819
          schema:
            type: string
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                type: object
                example:
                  result:
                    email: '{Workshop Email}'
                    name: '{Workshop Name}'
                    startsAt: '{ISO8601 Date}'
                    endsAt: '{ISO8601 Date}'
                properties:
                  result:
                    type: object
                    properties:
                      email:
                        type: string
                        example: '{Workshop Email}'
                      name:
                        type: string
                        example: '{Workshop Name}'
                      startsAt:
                        type: string
                        example: '{ISO8601 Date}'
                      endsAt:
                        type: string
                        example: '{ISO8601 Date}'
        400:
          description: 'Validation Failed'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: BikeSharingNotAWorkshopException
                  message: 'The provided e-mail address does not belong to a valid bike workshop.'
                properties:
                  error:
                    type: string
                    example: BikeSharingNotAWorkshopException
                  message:
                    type: string
                    example: 'The provided e-mail address does not belong to a valid bike workshop.'
        401:
          description: ''
          content:
            application/json:
              schema:
                oneOf:
                  -
                    description: 'Invalid Credentials'
                    type: object
                    example:
                      error: AuthenticationException
                      message: 'Invalid Credentials'
                    properties:
                      error:
                        type: string
                        example: AuthenticationException
                      message:
                        type: string
                        example: 'Invalid Credentials'
                  -
                    description: 'Customer Not Authorized'
                    type: object
                    example:
                      error: CustomerNotAuthorizedException
                      message: 'Customer not authorized for this action'
                    properties:
                      error:
                        type: string
                        example: CustomerNotAuthorizedException
                      message:
                        type: string
                        example: 'Customer not authorized for this action'
        422:
          description: 'Unprocessable Entity'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message: 'Please provide an API key'
                properties:
                  error:
                    type: string
                    example: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message:
                    type: string
                    example: 'Please provide an API key'
      tags:
        - Bike
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                email:
                  type: string
                  description: 'Workshop email address'
                  example: null
                bikeId:
                  type: integer
                  description: 'The bike ID to share with the workshop'
                  example: null
              required:
                - email
                - bikeId
  '/v8/declineBikeSharingInvitation/{guid}':
    post:
      summary: 'Decline Bike Sharing Invitation'
      operationId: declineBikeSharingInvitation
      description: 'Decline a bike sharing invitation using the invitation GUID.'
      parameters:
        -
          in: header
          name: Api-Key
          description: ''
          example: fcb38d47-f14b-30cf-843b-26283f6a5819
          schema:
            type: string
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                type: object
                example:
                  result: true
                properties:
                  result:
                    type: boolean
                    example: true
        401:
          description: ''
          content:
            application/json:
              schema:
                oneOf:
                  -
                    description: Unauthorized
                    type: object
                    example:
                      error: AuthenticationException
                      message: 'Invalid Credentials'
                    properties:
                      error:
                        type: string
                        example: AuthenticationException
                      message:
                        type: string
                        example: 'Invalid Credentials'
                  -
                    description: 'Customer Not Authorized'
                    type: object
                    example:
                      error: CustomerNotAuthorizedException
                      message: 'Customer not authorized for this action'
                    properties:
                      error:
                        type: string
                        example: CustomerNotAuthorizedException
                      message:
                        type: string
                        example: 'Customer not authorized for this action'
        404:
          description: 'Invitation Not Found'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: BikeSharingInvitationNotFoundException
                  message: 'This bike sharing invitation does not exist.'
                properties:
                  error:
                    type: string
                    example: BikeSharingInvitationNotFoundException
                  message:
                    type: string
                    example: 'This bike sharing invitation does not exist.'
        422:
          description: 'Unprocessable Entity'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message: 'Please provide an API key'
                properties:
                  error:
                    type: string
                    example: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message:
                    type: string
                    example: 'Please provide an API key'
      tags:
        - Bike
    parameters:
      -
        in: path
        name: guid
        description: 'The GUID of the bike sharing invitation to decline.'
        example: null
        required: true
        schema:
          type: string
  '/v8/acceptBikeSharingInvitation/{guid}':
    post:
      summary: 'Accept Bike Sharing Invitation'
      operationId: acceptBikeSharingInvitation
      description: 'Accept a bike sharing invitation using the invitation GUID. It responds with the same schema as getBikeData. "user" is missing ADD_USER, FIRMWARE_UPDATES, REMOVE_USER, BACKUP_CODE, BIKE_NAME, STOLEN_MODE, SWAP_SMARTMODULE permissions.'
      parameters:
        -
          in: header
          name: Api-Key
          description: ''
          example: fcb38d47-f14b-30cf-843b-26283f6a5819
          schema:
            type: string
      responses:
        200:
          description: 'Success (example from S5)'
          content:
            text/plain:
              schema:
                type: string
                example: "{\n  \"data\": {\n    \"id\": {BikeID},\n    \"name\": \"{Bike Name}\",\n    \"frameNumber\": \"{Frame Number}\",\n    \"bikeId\": \"{Bike ID}\",\n    \"frameSerial\": \"{Frame Serial}\",\n    \"ownerName\": \"{Owner Name}\",\n    \"tripDistance\": 0,\n    \"pendingSmartmoduleMacAddress\": null,\n    \"macAddress\": null,\n    \"mainEcuSerial\": \"{ECU Serial}\",\n    \"smartmoduleCurrentVersion\": null,\n    \"smartmoduleDesiredVersion\": null,\n    \"smartmoduleLatestStable\": false,\n    \"changeBackupCode\": true,\n    \"isTracking\": false,\n    \"highestAvailableSpeedLimit\": null,\n    \"messageAvailable\": false,\n    \"modelName\": \"{Model Name}\",\n    \"modelDetails\": null,\n    \"modelColor\": {\n      \"name\": \"{Color Name}\",\n      \"primary\": \"{Primary Color}\",\n      \"secondary\": \"{Secondary Color}\"\n    },\n    \"frameShape\": \"S\",\n    \"manufacturer\": \"pegatron\",\n    \"controller\": \"2022\",\n    \"updateMethod\": \"OAD (encrypted)\",\n    \"eLock\": true,\n    \"gsmModule\": \"4G\",\n    \"speaker\": true,\n    \"bleProfile\": \"ELECTRIFIED_2022\",\n    \"bleVersion\": null,\n    \"messagesViaBLE\": \"BLEv2\",\n    \"customerRoleFamily\": \"User\",\n    \"customerRole\": \"user\",\n    \"startsAt\": \"{ISO8601 Date}\",\n    \"endsAt\": \"{ISO8601 Date}\",\n    \"permissions\": [\n      \"REPORT_FOUND\",\n      \"SEND_STATISTICS\",\n      \"REPORT_STOLEN\",\n      \"VIEW_THEFT_CASES\",\n      \"ALARM_SETTINGS\",\n      \"COUNTRY_SETTINGS\",\n      \"LIGHTS\",\n      \"MOTOR_SUPPORT_LEVEL\",\n      \"UNLOCK\",\n      \"READ_VALUES\"\n    ],\n    \"key\": null,\n    \"isFactoryKey\": true,\n    \"customerCount\": 2,\n    \"invitationCount\": 2,\n    \"stolen\": {\n      \"isStolen\": false,\n      \"dateStolen\": null,\n      \"status\": \"not_stolen\",\n      \"latestLocation\": null\n    },\n    \"hasPeaceOfMind\": false,\n    \"peaceOfMind\": null,\n    \"links\": {\n      \"hash\": \"http://api.vanmoof-api.com/v8/getBikeDataHash/176393\",\n      \"thumbnail\": \"https://my.vanmoof.com/image/model/99\"\n    },\n    \"serviceModeEnabled\": false,\n    \"workshopInfo\": []\n  }\n}\n"
        401:
          description: Unauthorized
          content:
            application/json:
              schema:
                type: object
                example:
                  error: AuthenticationException
                  message: 'Invalid Credentials'
                properties:
                  error:
                    type: string
                    example: AuthenticationException
                  message:
                    type: string
                    example: 'Invalid Credentials'
        422:
          description: ''
          content:
            application/json:
              schema:
                oneOf:
                  -
                    description: 'Validation Failed'
                    type: object
                    example:
                      error: ValidationException
                      message: 'Validation failed'
                      violations:
                        guid:
                          - 'The guid field is required.'
                    properties:
                      error:
                        type: string
                        example: ValidationException
                      message:
                        type: string
                        example: 'Validation failed'
                      violations:
                        type: object
                        properties:
                          guid:
                            type: array
                            example:
                              - 'The guid field is required.'
                            items:
                              type: string
                  -
                    description: 'Unprocessable Entity'
                    type: object
                    example:
                      error: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                      message: 'Please provide an API key'
                    properties:
                      error:
                        type: string
                        example: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                      message:
                        type: string
                        example: 'Please provide an API key'
      tags:
        - Bike
    parameters:
      -
        in: path
        name: guid
        description: 'The GUID of the bike sharing invitation to accept.'
        example: null
        required: true
        schema:
          type: string
  /v8/removeCustomerBikeSharingForBike:
    post:
      summary: 'Remove Customer Bike Sharing For Bike'
      operationId: removeCustomerBikeSharingForBike
      description: 'Remove all bike sharing invitations for a specific bike.'
      parameters:
        -
          in: header
          name: Api-Key
          description: ''
          example: fcb38d47-f14b-30cf-843b-26283f6a5819
          schema:
            type: string
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                type: object
                example:
                  result: true
                properties:
                  result:
                    type: boolean
                    example: true
        400:
          description: 'Validation Failed'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: BikeNotFoundException
                  message: 'Bike not found'
                properties:
                  error:
                    type: string
                    example: BikeNotFoundException
                  message:
                    type: string
                    example: 'Bike not found'
        401:
          description: Unauthorized
          content:
            application/json:
              schema:
                type: object
                example:
                  error: AuthenticationException
                  message: 'Invalid Credentials'
                properties:
                  error:
                    type: string
                    example: AuthenticationException
                  message:
                    type: string
                    example: 'Invalid Credentials'
        422:
          description: ''
          content:
            application/json:
              schema:
                oneOf:
                  -
                    description: 'Validation Failed'
                    type: object
                    example:
                      error: ValidationException
                      message: 'Validation failed'
                      violations:
                        bikeId:
                          - 'The bikeId field is required.'
                    properties:
                      error:
                        type: string
                        example: ValidationException
                      message:
                        type: string
                        example: 'Validation failed'
                      violations:
                        type: object
                        properties:
                          bikeId:
                            type: array
                            example:
                              - 'The bikeId field is required.'
                            items:
                              type: string
                  -
                    description: 'Unprocessable Entity'
                    type: object
                    example:
                      error: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                      message: 'Please provide an API key'
                    properties:
                      error:
                        type: string
                        example: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                      message:
                        type: string
                        example: 'Please provide an API key'
      tags:
        - Bike
      requestBody:
        required: true
        content:
          'application/json; charset=utf-8':
            schema:
              type: object
              properties:
                bikeId:
                  type: integer
                  description: 'The ID of the bike for which to remove sharing invitations.'
                  example: null
              required:
                - bikeId
  /v8/registerBikeToCurrentUser:
    post:
      summary: 'Register Bike To Current User'
      operationId: registerBikeToCurrentUser
      description: 'Register a bike to the currently authenticated user using the frame number and verification code. QR Code Content: https://my.vanmoof.com/proof-of-ownership?bike_id={framenumber}&validation={validationCode}'
      parameters:
        -
          in: header
          name: Api-Key
          description: ''
          example: fcb38d47-f14b-30cf-843b-26283f6a5819
          schema:
            type: string
      responses:
        400:
          description: ''
          content:
            application/json:
              schema:
                oneOf:
                  -
                    description: 'Bike Registration Failed'
                    type: object
                    example:
                      error: BikeRegisterToCurrentCustomerException
                      message: 'This frame number can’t be registered.'
                    properties:
                      error:
                        type: string
                        example: BikeRegisterToCurrentCustomerException
                      message:
                        type: string
                        example: 'This frame number can’t be registered.'
                  -
                    description: 'Invalid Verification Code'
                    type: object
                    example:
                      error: InvalidVerificationCodeException
                      message: 'An invalid verification code is provided to register bike with framenumber / frameserial: {FrameNumber} verification code : {VerificationCode}'
                    properties:
                      error:
                        type: string
                        example: InvalidVerificationCodeException
                      message:
                        type: string
                        example: 'An invalid verification code is provided to register bike with framenumber / frameserial: {FrameNumber} verification code : {VerificationCode}'
                  -
                    description: 'No Bike Found During Registration'
                    type: object
                    example:
                      error: BikeNotFoundException
                      message: 'No bike found during registration'
                    properties:
                      error:
                        type: string
                        example: BikeNotFoundException
                      message:
                        type: string
                        example: 'No bike found during registration'
        401:
          description: Unauthorized
          content:
            application/json:
              schema:
                type: object
                example:
                  error: AuthenticationException
                  message: 'Invalid Credentials'
                properties:
                  error:
                    type: string
                    example: AuthenticationException
                  message:
                    type: string
                    example: 'Invalid Credentials'
        422:
          description: 'Unprocessable Entity'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message: 'Please provide an API key'
                properties:
                  error:
                    type: string
                    example: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message:
                    type: string
                    example: 'Please provide an API key'
      tags:
        - Bike
      requestBody:
        required: true
        content:
          'application/json; charset=utf-8':
            schema:
              type: object
              properties:
                framenumber:
                  type: string
                  description: 'The frame number of the bike to register.'
                  example: null
                verification:
                  type: integer
                  description: 'The verification code for the bike.'
                  example: null
                bikename:
                  type: string
                  description: 'The name to assign to the bike.'
                  example: null
              required:
                - framenumber
                - verification
  '/v8/getDesiredUpdateVersionInfo/{bikeId}':
    get:
      summary: 'Get Desired Update Version Info'
      operationId: getDesiredUpdateVersionInfo
      description: 'Retrieve the desired update version information for a specific bike. This only works for at least the SA3/SA4 bikes. SA5 and later uses another API.'
      parameters:
        -
          in: header
          name: Api-Key
          description: ''
          example: fcb38d47-f14b-30cf-843b-26283f6a5819
          schema:
            type: string
      responses:
        200:
          description: Success
          content:
            text/plain:
              schema:
                type: string
                example: "{\n  \"updateVersion\": \"{Version}\",\n  \"releaseDate\": \"{ISO8601 Date}\",\n  \"latestStable\": false,\n  \"releaseNotes\": \"\",\n  \"fileSize\": 0,\n  \"firmwareCrc\": \"{CRC}\",\n  \"transportCrc\": \"{CRC}\",\n  \"encrypted\": true,\n  \"pendingUpdatesCount\": 0,\n  \"pendingUpdates\": [\n    {\n      \"updateVersion\": \"{Version}\",\n      \"releaseDate\": \"{ISO8601 Date}\",\n      \"latestStable\": true,\n      \"releaseNotes\": \"\",\n      \"fileSize\": 0\",\n      \"firmwareCrc\": \"{CRC}\",\n      \"transportCrc\": \"{CRC}\",\n      \"encrypted\": true\n    }\n  ]\n}\n"
        400:
          description: 'Validation Failed'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: ValidationException
                  message: 'Validation failed'
                  violations:
                    bikeId:
                      - 'You are not registered as customer of this bike.'
                properties:
                  error:
                    type: string
                    example: ValidationException
                  message:
                    type: string
                    example: 'Validation failed'
                  violations:
                    type: object
                    properties:
                      bikeId:
                        type: array
                        example:
                          - 'You are not registered as customer of this bike.'
                        items:
                          type: string
        401:
          description: Unauthorized
          content:
            application/json:
              schema:
                type: object
                example:
                  error: AuthenticationException
                  message: 'Invalid Credentials'
                properties:
                  error:
                    type: string
                    example: AuthenticationException
                  message:
                    type: string
                    example: 'Invalid Credentials'
        422:
          description: 'Unprocessable Entity'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message: 'Please provide an API key'
                properties:
                  error:
                    type: string
                    example: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message:
                    type: string
                    example: 'Please provide an API key'
      tags:
        - Bike
    parameters:
      -
        in: path
        name: bikeId
        description: 'The ID of the bike to retrieve update information for.'
        example: null
        required: true
        schema:
          type: integer
  '/v8/getDesiredUpdateVersionFile/{bikeId}':
    get:
      summary: 'Get Desired Update Version File'
      operationId: getDesiredUpdateVersionFile
      description: 'Retrieve the desired update version file for a specific bike. This only works for at least the SA3/SA4 bikes. SA5 and later uses another API.'
      parameters:
        -
          in: header
          name: Api-Key
          description: ''
          example: fcb38d47-f14b-30cf-843b-26283f6a5819
          schema:
            type: string
      responses:
        200:
          description: Success
          content:
            text/plain:
              schema:
                type: string
                example: application/zip
        400:
          description: 'Validation Failed'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: ValidationException
                  message: 'Validation failed'
                  violations:
                    bikeId:
                      - 'You are not registered as customer of this bike.'
                properties:
                  error:
                    type: string
                    example: ValidationException
                  message:
                    type: string
                    example: 'Validation failed'
                  violations:
                    type: object
                    properties:
                      bikeId:
                        type: array
                        example:
                          - 'You are not registered as customer of this bike.'
                        items:
                          type: string
        401:
          description: Unauthorized
          content:
            application/json:
              schema:
                type: object
                example:
                  error: AuthenticationException
                  message: 'Invalid Credentials'
                properties:
                  error:
                    type: string
                    example: AuthenticationException
                  message:
                    type: string
                    example: 'Invalid Credentials'
        422:
          description: 'Unprocessable Entity'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message: 'Please provide an API key'
                properties:
                  error:
                    type: string
                    example: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message:
                    type: string
                    example: 'Please provide an API key'
      tags:
        - Bike
    parameters:
      -
        in: path
        name: bikeId
        description: 'The ID of the bike to retrieve the update file for.'
        example: null
        required: true
        schema:
          type: integer
  /v8/reportStolen:
    post:
      summary: 'Report Stolen'
      operationId: reportStolen
      description: 'Report a bike as stolen.'
      parameters:
        -
          in: header
          name: Api-Key
          description: ''
          example: fcb38d47-f14b-30cf-843b-26283f6a5819
          schema:
            type: string
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                type: object
                example:
                  isStolen: true
                  dateStolen: '{ISO8601 Date}'
                  status: confirmed
                  latestLocation: null
                  publicTrackingUrl: 'https://my.vanmoof.com/findmybike/show/{UUIDv4}'
                properties:
                  isStolen:
                    type: boolean
                    example: true
                  dateStolen:
                    type: string
                    example: '{ISO8601 Date}'
                  status:
                    type: string
                    example: confirmed
                  latestLocation:
                    type: string
                    example: null
                    nullable: true
                  publicTrackingUrl:
                    type: string
                    example: 'https://my.vanmoof.com/findmybike/show/{UUIDv4}'
        400:
          description: 'Validation Failed'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: ValidationException
                  message: 'Validation failed'
                  violations:
                    bikeId:
                      - 'You are not registered as customer of this bike.'
                properties:
                  error:
                    type: string
                    example: ValidationException
                  message:
                    type: string
                    example: 'Validation failed'
                  violations:
                    type: object
                    properties:
                      bikeId:
                        type: array
                        example:
                          - 'You are not registered as customer of this bike.'
                        items:
                          type: string
        401:
          description: Unauthorized
          content:
            application/json:
              schema:
                type: object
                example:
                  error: AuthenticationException
                  message: 'Invalid Credentials'
                properties:
                  error:
                    type: string
                    example: AuthenticationException
                  message:
                    type: string
                    example: 'Invalid Credentials'
        422:
          description: 'Unprocessable Entity'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message: 'Please provide an API key'
                properties:
                  error:
                    type: string
                    example: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message:
                    type: string
                    example: 'Please provide an API key'
      tags:
        - Bike
      requestBody:
        required: true
        content:
          'application/json; charset=utf-8':
            schema:
              type: object
              properties:
                bikeId:
                  type: integer
                  description: 'The ID of the bike to report as stolen.'
                  example: null
              required:
                - bikeId
  /v8/reportFound:
    post:
      summary: 'Report Found'
      operationId: reportFound
      description: 'Report a bike as found and optionally disable tracking.'
      parameters:
        -
          in: header
          name: Api-Key
          description: ''
          example: fcb38d47-f14b-30cf-843b-26283f6a5819
          schema:
            type: string
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                type: object
                example:
                  result: true
                properties:
                  result:
                    type: boolean
                    example: true
        400:
          description: ''
          content:
            application/json:
              schema:
                oneOf:
                  -
                    description: 'Validation Failed'
                    type: object
                    example:
                      error: ValidationException
                      message: 'Validation failed'
                      violations:
                        bikeId:
                          - 'You are not registered as customer of this bike.'
                    properties:
                      error:
                        type: string
                        example: ValidationException
                      message:
                        type: string
                        example: 'Validation failed'
                      violations:
                        type: object
                        properties:
                          bikeId:
                            type: array
                            example:
                              - 'You are not registered as customer of this bike.'
                            items:
                              type: string
                  -
                    description: 'Bike Not Stolen'
                    type: object
                    example:
                      error: BikeNotStolenException
                      message: 'Bike not stolen'
                    properties:
                      error:
                        type: string
                        example: BikeNotStolenException
                      message:
                        type: string
                        example: 'Bike not stolen'
        401:
          description: Unauthorized
          content:
            application/json:
              schema:
                type: object
                example:
                  error: AuthenticationException
                  message: 'Invalid Credentials'
                properties:
                  error:
                    type: string
                    example: AuthenticationException
                  message:
                    type: string
                    example: 'Invalid Credentials'
        422:
          description: 'Unprocessable Entity'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message: 'Please provide an API key'
                properties:
                  error:
                    type: string
                    example: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message:
                    type: string
                    example: 'Please provide an API key'
      tags:
        - Bike
      requestBody:
        required: true
        content:
          'application/json; charset=utf-8':
            schema:
              type: object
              properties:
                bikeId:
                  type: integer
                  description: 'The ID of the bike to report as found.'
                  example: null
                disableTracking:
                  type: boolean
                  description: 'Whether to disable tracking for the bike.'
                  example: null
              required:
                - bikeId
  /v8/removeBikeOwnership:
    post:
      summary: 'Remove Bike Ownership'
      operationId: removeBikeOwnership
      description: 'Remove ownership of a bike by providing the bike ID.'
      parameters:
        -
          in: header
          name: Api-Key
          description: ''
          example: fcb38d47-f14b-30cf-843b-26283f6a5819
          schema:
            type: string
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                type: object
                example:
                  result: true
                properties:
                  result:
                    type: boolean
                    example: true
        400:
          description: ''
          content:
            application/json:
              schema:
                oneOf:
                  -
                    description: 'Validation Failed'
                    type: object
                    example:
                      error: ValidationException
                      message: 'Validation failed'
                      violations:
                        bikeId:
                          - 'The bikeId field is required.'
                    properties:
                      error:
                        type: string
                        example: ValidationException
                      message:
                        type: string
                        example: 'Validation failed'
                      violations:
                        type: object
                        properties:
                          bikeId:
                            type: array
                            example:
                              - 'The bikeId field is required.'
                            items:
                              type: string
                  -
                    description: 'Bike Not Found'
                    type: object
                    example:
                      error: BikeNotFoundException
                      message: 'Bike not found'
                    properties:
                      error:
                        type: string
                        example: BikeNotFoundException
                      message:
                        type: string
                        example: 'Bike not found'
        401:
          description: 'Invalid Credentials'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: AuthenticationException
                  message: 'Invalid Credentials'
                properties:
                  error:
                    type: string
                    example: AuthenticationException
                  message:
                    type: string
                    example: 'Invalid Credentials'
        422:
          description: 'Unprocessable Entity'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message: 'Please provide an API key'
                properties:
                  error:
                    type: string
                    example: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message:
                    type: string
                    example: 'Please provide an API key'
      tags:
        - Bike
      requestBody:
        required: true
        content:
          'application/json; charset=utf-8':
            schema:
              type: object
              properties:
                bikeId:
                  type: string
                  description: 'The ID of the bike to remove ownership for.'
                  example: null
              required:
                - bikeId
  /v8/updateCustomerOnBike:
    post:
      summary: 'Update Customer on Bike'
      operationId: updateCustomerOnBike
      description: 'Update the customer associated with a bike, specifying their role.'
      parameters:
        -
          in: header
          name: Api-Key
          description: ''
          example: fcb38d47-f14b-30cf-843b-26283f6a5819
          schema:
            type: string
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                type: object
                example:
                  result: true
                properties:
                  result:
                    type: boolean
                    example: true
        204:
          description: 'No Content'
          content:
            application/json:
              schema:
                type: object
                nullable: true
        400:
          description: ''
          content:
            application/json:
              schema:
                oneOf:
                  -
                    description: 'Validation Failed'
                    type: object
                    example:
                      error: ValidationException
                      message: 'Validation failed'
                      violations:
                        bikeId:
                          - 'The bikeId field is required.'
                    properties:
                      error:
                        type: string
                        example: ValidationException
                      message:
                        type: string
                        example: 'Validation failed'
                      violations:
                        type: object
                        properties:
                          bikeId:
                            type: array
                            example:
                              - 'The bikeId field is required.'
                            items:
                              type: string
                  -
                    description: 'Validation Failed (tried owner role)'
                    type: object
                    example:
                      error: ValidationException
                      message: 'Validation failed'
                      violations:
                        bikeId:
                          - 'You are not registered as customer of this bike.'
                        role:
                          - 'This is not a regular customer role.'
                    properties:
                      error:
                        type: string
                        example: ValidationException
                      message:
                        type: string
                        example: 'Validation failed'
                      violations:
                        type: object
                        properties:
                          bikeId:
                            type: array
                            example:
                              - 'You are not registered as customer of this bike.'
                            items:
                              type: string
                          role:
                            type: array
                            example:
                              - 'This is not a regular customer role.'
                            items:
                              type: string
                  -
                    description: 'Customer Not Found'
                    type: object
                    example:
                      error: ValidationException
                      message: 'Validation failed'
                      violations:
                        email:
                          - 'There is no customer with this email.'
                    properties:
                      error:
                        type: string
                        example: ValidationException
                      message:
                        type: string
                        example: 'Validation failed'
                      violations:
                        type: object
                        properties:
                          email:
                            type: array
                            example:
                              - 'There is no customer with this email.'
                            items:
                              type: string
                  -
                    description: 'Bike Not Found'
                    type: object
                    example:
                      error: BikeNotFoundException
                      message: 'Bike not found'
                    properties:
                      error:
                        type: string
                        example: BikeNotFoundException
                      message:
                        type: string
                        example: 'Bike not found'
        401:
          description: 'Invalid Credentials'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: AuthenticationException
                  message: 'Invalid Credentials'
                properties:
                  error:
                    type: string
                    example: AuthenticationException
                  message:
                    type: string
                    example: 'Invalid Credentials'
        422:
          description: 'Unprocessable Entity'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message: 'Please provide an API key'
                properties:
                  error:
                    type: string
                    example: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message:
                    type: string
                    example: 'Please provide an API key'
      tags:
        - Bike
      requestBody:
        required: true
        content:
          'application/json; charset=utf-8':
            schema:
              type: object
              properties:
                bikeId:
                  type: string
                  description: 'The ID of the bike to update.'
                  example: null
                email:
                  type: string
                  description: 'The email of the customer to associate with the bike.'
                  example: null
                role:
                  type: string
                  description: 'The role of the customer (guest).'
                  example: null
              required:
                - bikeId
                - email
                - role
  /v8/removeCustomerFromBike:
    post:
      summary: 'Remove Customer from Bike'
      operationId: removeCustomerFromBike
      description: 'Remove a customer from a bike using the bike ID and customer email.'
      parameters:
        -
          in: header
          name: Api-Key
          description: ''
          example: fcb38d47-f14b-30cf-843b-26283f6a5819
          schema:
            type: string
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                type: object
                example:
                  result: true
                properties:
                  result:
                    type: boolean
                    example: true
        400:
          description: ''
          content:
            application/json:
              schema:
                oneOf:
                  -
                    description: 'Validation Failed'
                    type: object
                    example:
                      error: ValidationException
                      message: 'Validation failed'
                      violations:
                        bikeId:
                          - 'The bikeId field is required.'
                    properties:
                      error:
                        type: string
                        example: ValidationException
                      message:
                        type: string
                        example: 'Validation failed'
                      violations:
                        type: object
                        properties:
                          bikeId:
                            type: array
                            example:
                              - 'The bikeId field is required.'
                            items:
                              type: string
                  -
                    description: 'Validation Failed (tried owner role)'
                    type: object
                    example:
                      error: ValidationException
                      message: 'Validation failed'
                      violations:
                        bikeId:
                          - 'You are not registered as customer of this bike.'
                        role:
                          - 'This is not a regular customer role.'
                    properties:
                      error:
                        type: string
                        example: ValidationException
                      message:
                        type: string
                        example: 'Validation failed'
                      violations:
                        type: object
                        properties:
                          bikeId:
                            type: array
                            example:
                              - 'You are not registered as customer of this bike.'
                            items:
                              type: string
                          role:
                            type: array
                            example:
                              - 'This is not a regular customer role.'
                            items:
                              type: string
                  -
                    description: 'Customer Not Found'
                    type: object
                    example:
                      error: ValidationException
                      message: 'Validation failed'
                      violations:
                        email:
                          - 'There is no customer with this email.'
                    properties:
                      error:
                        type: string
                        example: ValidationException
                      message:
                        type: string
                        example: 'Validation failed'
                      violations:
                        type: object
                        properties:
                          email:
                            type: array
                            example:
                              - 'There is no customer with this email.'
                            items:
                              type: string
                  -
                    description: 'Bike Not Found'
                    type: object
                    example:
                      error: BikeNotFoundException
                      message: 'Bike not found'
                    properties:
                      error:
                        type: string
                        example: BikeNotFoundException
                      message:
                        type: string
                        example: 'Bike not found'
        401:
          description: 'Invalid Credentials'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: AuthenticationException
                  message: 'Invalid Credentials'
                properties:
                  error:
                    type: string
                    example: AuthenticationException
                  message:
                    type: string
                    example: 'Invalid Credentials'
        422:
          description: 'Unprocessable Entity'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message: 'Please provide an API key'
                properties:
                  error:
                    type: string
                    example: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message:
                    type: string
                    example: 'Please provide an API key'
      tags:
        - Bike
      requestBody:
        required: true
        content:
          'application/json; charset=utf-8':
            schema:
              type: object
              properties:
                bikeId:
                  type: string
                  description: 'The ID of the bike from which to remove the customer.'
                  example: null
                email:
                  type: string
                  description: 'The email of the customer to remove from the bike.'
                  example: null
              required:
                - bikeId
                - email
  /v8/postStatistics:
    post:
      summary: 'Post Statistics'
      operationId: postStatistics
      description: 'Submit ride statistics for a specific bike.'
      parameters:
        -
          in: header
          name: Api-Key
          description: ''
          example: fcb38d47-f14b-30cf-843b-26283f6a5819
          schema:
            type: string
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                type: object
                example:
                  result: true
                properties:
                  result:
                    type: boolean
                    example: true
        400:
          description: ''
          content:
            application/json:
              schema:
                oneOf:
                  -
                    description: 'Validation Failed'
                    type: object
                    example:
                      error: ValidationException
                      message: 'Validation failed'
                      violations:
                        bikeId:
                          - 'The bikeId field is required.'
                    properties:
                      error:
                        type: string
                        example: ValidationException
                      message:
                        type: string
                        example: 'Validation failed'
                      violations:
                        type: object
                        properties:
                          bikeId:
                            type: array
                            example:
                              - 'The bikeId field is required.'
                            items:
                              type: string
                  -
                    description: 'Bike Not Found'
                    type: object
                    example:
                      error: BikeNotFoundException
                      message: 'Bike not found'
                    properties:
                      error:
                        type: string
                        example: BikeNotFoundException
                      message:
                        type: string
                        example: 'Bike not found'
        401:
          description: 'Invalid Credentials'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: AuthenticationException
                  message: 'Invalid Credentials'
                properties:
                  error:
                    type: string
                    example: AuthenticationException
                  message:
                    type: string
                    example: 'Invalid Credentials'
        422:
          description: 'Unprocessable Entity'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message: 'Please provide an API key'
                properties:
                  error:
                    type: string
                    example: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message:
                    type: string
                    example: 'Please provide an API key'
      tags:
        - Bike
      requestBody:
        required: true
        content:
          'application/json; charset=utf-8':
            schema:
              type: object
              properties:
                bikeId:
                  type: string
                  description: 'The ID of the bike for which to submit statistics.'
                  example: null
                timestamp:
                  type: integer
                  description: 'The timestamp of the statistics in seconds since epoch.'
                  example: null
                distance:
                  type: integer
                  description: 'The distance covered during the ride in meters.'
                  example: null
                rideTime:
                  type: integer
                  description: 'The ride time in seconds.'
                  example: null
                batteryLevel:
                  type: integer
                  description: 'The battery level percentage at the end of the ride.'
                  example: null
                averageSpeed:
                  type: integer
                  description: 'The average speed during the ride in km/h.'
                  example: null
                maxSpeed:
                  type: integer
                  description: 'The maximum speed reached during the ride in km/h.'
                  example: null
              required:
                - bikeId
                - timestamp
                - distance
                - rideTime
                - batteryLevel
                - averageSpeed
                - maxSpeed
  '/v8/postBikeResponse/{bikeId}':
    post:
      summary: 'Post Bike Response'
      operationId: postBikeResponse
      description: 'Submit a response from the bike using its bike ID.'
      parameters:
        -
          in: header
          name: Api-Key
          description: ''
          example: fcb38d47-f14b-30cf-843b-26283f6a5819
          schema:
            type: string
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                type: object
                example:
                  result: true
                properties:
                  result:
                    type: boolean
                    example: true
        204:
          description: 'No Content'
          content:
            application/json:
              schema:
                type: object
                nullable: true
        400:
          description: ''
          content:
            application/json:
              schema:
                oneOf:
                  -
                    description: 'Validation Failed'
                    type: object
                    example:
                      error: ValidationException
                      message: 'Validation failed'
                      violations:
                        bikeId:
                          - 'The bikeId field is required.'
                    properties:
                      error:
                        type: string
                        example: ValidationException
                      message:
                        type: string
                        example: 'Validation failed'
                      violations:
                        type: object
                        properties:
                          bikeId:
                            type: array
                            example:
                              - 'The bikeId field is required.'
                            items:
                              type: string
                  -
                    description: 'Bike Not Found'
                    type: object
                    example:
                      error: BikeNotFoundException
                      message: 'Bike not found'
                    properties:
                      error:
                        type: string
                        example: BikeNotFoundException
                      message:
                        type: string
                        example: 'Bike not found'
        401:
          description: 'Invalid Credentials'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: AuthenticationException
                  message: 'Invalid Credentials'
                properties:
                  error:
                    type: string
                    example: AuthenticationException
                  message:
                    type: string
                    example: 'Invalid Credentials'
        422:
          description: 'Unprocessable Entity'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message: 'Please provide an API key'
                properties:
                  error:
                    type: string
                    example: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message:
                    type: string
                    example: 'Please provide an API key'
      tags:
        - Bike
      requestBody:
        required: true
        content:
          'application/json; charset=utf-8':
            schema:
              type: object
              properties:
                data:
                  type: string
                  description: 'The response data from the bike.'
                  example: null
              required:
                - data
    parameters:
      -
        in: path
        name: bikeId
        description: 'The ID of the bike to submit the response for.'
        example: null
        required: true
        schema:
          type: string
  '/bikes/{frameNumber}/create_certificate':
    post:
      summary: 'Create Certificate'
      operationId: createCertificate
      description: 'Create a certificate for a bike using its Bike ID. This endpoint uses the Bike API (bikeapi.production.vanmoof.cloud) instead of the main API. Ratelimited at 100 requests per 15 seconds.'
      parameters: []
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                type: object
                example:
                  created_at: '{ISO8601 Date}'
                  expiry: '{ISO8601 Date}'
                  certificate: '{Base64 Encoded Certificate}'
                properties:
                  created_at:
                    type: string
                    example: '{ISO8601 Date}'
                  expiry:
                    type: string
                    example: '{ISO8601 Date}'
                  certificate:
                    type: string
                    example: '{Base64 Encoded Certificate}'
        400:
          description: ''
          content:
            application/json:
              schema:
                oneOf:
                  -
                    description: 'Missing Body'
                    type: object
                    example:
                      err: 'invalid body: EOF'
                    properties:
                      err:
                        type: string
                        example: 'invalid body: EOF'
                  -
                    description: 'Bike ID invalid'
                    type: object
                    example:
                      err: 'bike_id format invalid'
                    properties:
                      err:
                        type: string
                        example: 'bike_id format invalid'
                  -
                    description: 'Invalid Public Key'
                    type: object
                    example:
                      err: 'invalid ed25519 public key'
                    properties:
                      err:
                        type: string
                        example: 'invalid ed25519 public key'
                  -
                    description: 'Base64 Decoding Error'
                    type: object
                    example:
                      err: 'invalid body: illegal base64 data at input byte 0'
                    properties:
                      err:
                        type: string
                        example: 'invalid body: illegal base64 data at input byte 0'
        401:
          description: 'Invalid Credentials'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: AuthenticationException
                  message: 'Invalid Credentials'
                properties:
                  error:
                    type: string
                    example: AuthenticationException
                  message:
                    type: string
                    example: 'Invalid Credentials'
        403:
          description: 'User not allowed to create certificate for this bike'
          content:
            application/json:
              schema:
                type: object
                example:
                  err: forbidden
                properties:
                  err:
                    type: string
                    example: forbidden
      tags:
        - Bike
      requestBody:
        required: true
        content:
          'application/json; charset=utf-8':
            schema:
              type: object
              properties:
                public_key:
                  type: string
                  description: 'The public key for the certificate (base64 encoded).'
                  example: null
              required:
                - public_key
    parameters:
      -
        in: path
        name: frameNumber
        description: 'The frame number of the bike.'
        example: null
        required: true
        schema:
          type: string
  /subscriptions:
    get:
      summary: 'Get Subscriptions'
      operationId: getSubscriptions
      description: 'Retrieve a list of subscriptions. USE https://subscription.production.vanmoof.cloud'
      parameters:
        -
          in: query
          name: status
          description: 'Filter by subscription status (e.g. ACTIVE, EXPIRED).'
          example: null
          required: false
          schema:
            type: string
            description: 'Filter by subscription status (e.g. ACTIVE, EXPIRED).'
            example: null
        -
          in: header
          name: Host
          description: ''
          example: subscription.production.vanmoof.cloud
          schema:
            type: string
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                oneOf:
                  -
                    description: 'Success (No Subscriptions)'
                    type: array
                    items:
                      type: object
                    example: []
                  -
                    description: Success
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                          example: '{uuid}'
                        vehicle_id:
                          type: string
                          example: '{vehicle_id}'
                        sku:
                          type: string
                          example: BETA-TRIAL
                        status:
                          type: string
                          example: EXPIRED
                        product:
                          type: string
                          example: FEATURE_SUBSCRIPTION
                        billing_cycle:
                          type: string
                          example: NONE
                        is_recurring:
                          type: boolean
                          example: false
                        created_at:
                          type: string
                          example: '2026-01-01T01:00:00.000000Z'
                        updated_at:
                          type: string
                          example: '2026-01-01T01:00:00.000000Z'
                        expired_at:
                          type: string
                          example: '2026-01-01T01:00:00.000000Z'
                        canceled_at:
                          type: string
                          example: null
                          nullable: true
                        next_billing_at:
                          type: string
                          example: null
                          nullable: true
                        trial_until:
                          type: string
                          example: null
                          nullable: true
                    example:
                      -
                        id: '{uuid}'
                        vehicle_id: '{vehicle_id}'
                        sku: BETA-TRIAL
                        status: EXPIRED
                        product: FEATURE_SUBSCRIPTION
                        billing_cycle: NONE
                        is_recurring: false
                        created_at: '2026-01-01T01:00:00.000000Z'
                        updated_at: '2026-01-01T01:00:00.000000Z'
                        expired_at: '2026-01-01T01:00:00.000000Z'
                        canceled_at: null
                        next_billing_at: null
                        trial_until: null
        401:
          description: Unauthorized
          content:
            text/plain:
              schema:
                type: string
                example: Unauthorized
      tags:
        - Cloud
  /preferences:
    get:
      summary: 'Get Notification Preferences'
      operationId: getNotificationPreferences
      description: 'Retrieve notification preferences for the user. USE https://notification.production.vanmoof.cloud'
      parameters:
        -
          in: header
          name: Host
          description: ''
          example: notification.production.vanmoof.cloud
          schema:
            type: string
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                type: object
                example:
                  languages:
                    - en-US
                  channels:
                    push:
                      vehicles:
                        FrameNumber:
                          notifications:
                            alarm_state/1:
                              enabled: false
                            alarm_state/2:
                              enabled: true
                            alarm_state/3:
                              enabled: false
                            battery_charge/custom:
                              enabled: false
                              preferences:
                                soc: 25
                            battery_charge/empty:
                              enabled: true
                            battery_charge/full:
                              enabled: true
                            battery_charge/low:
                              enabled: true
                            location_update:
                              enabled: true
                            not_locked:
                              enabled: true
                properties:
                  languages:
                    type: array
                    example:
                      - en-US
                    items:
                      type: string
                  channels:
                    type: object
                    properties:
                      push:
                        type: object
                        properties:
                          vehicles:
                            type: object
                            properties:
                              FrameNumber:
                                type: object
                                properties:
                                  notifications:
                                    type: object
                                    properties:
                                      alarm_state/1: { type: object, properties: { enabled: { type: boolean, example: false } } }
                                      alarm_state/2: { type: object, properties: { enabled: { type: boolean, example: true } } }
                                      alarm_state/3: { type: object, properties: { enabled: { type: boolean, example: false } } }
                                      battery_charge/custom: { type: object, properties: { enabled: { type: boolean, example: false }, preferences: { type: object, properties: { soc: { type: integer, example: 25 } } } } }
                                      battery_charge/empty: { type: object, properties: { enabled: { type: boolean, example: true } } }
                                      battery_charge/full: { type: object, properties: { enabled: { type: boolean, example: true } } }
                                      battery_charge/low: { type: object, properties: { enabled: { type: boolean, example: true } } }
                                      location_update: { type: object, properties: { enabled: { type: boolean, example: true } } }
                                      not_locked: { type: object, properties: { enabled: { type: boolean, example: true } } }
        401:
          description: Unauthorized
          content:
            text/plain:
              schema:
                type: string
                example: Unauthorized
      tags:
        - Cloud
    patch:
      summary: 'Update Notification Preferences'
      operationId: updateNotificationPreferences
      description: 'Update the notification preferences for the user. USE https://notification.production.vanmoof.cloud'
      parameters:
        -
          in: header
          name: Host
          description: ''
          example: notification.production.vanmoof.cloud
          schema:
            type: string
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                type: object
                example:
                  languages:
                    - en-US
                  channels:
                    push:
                      vehicles:
                        FrameNumber:
                          notifications:
                            alarm_state/1:
                              enabled: false
                            alarm_state/2:
                              enabled: true
                            alarm_state/3:
                              enabled: false
                            battery_charge/custom:
                              enabled: false
                              preferences:
                                soc: 25
                            battery_charge/empty:
                              enabled: true
                            battery_charge/full:
                              enabled: true
                            battery_charge/low:
                              enabled: true
                            location_update:
                              enabled: true
                            not_locked:
                              enabled: true
                properties:
                  languages:
                    type: array
                    example:
                      - en-US
                    items:
                      type: string
                  channels:
                    type: object
                    properties:
                      push:
                        type: object
                        properties:
                          vehicles:
                            type: object
                            properties:
                              FrameNumber:
                                type: object
                                properties:
                                  notifications:
                                    type: object
                                    properties:
                                      alarm_state/1: { type: object, properties: { enabled: { type: boolean, example: false } } }
                                      alarm_state/2: { type: object, properties: { enabled: { type: boolean, example: true } } }
                                      alarm_state/3: { type: object, properties: { enabled: { type: boolean, example: false } } }
                                      battery_charge/custom: { type: object, properties: { enabled: { type: boolean, example: false }, preferences: { type: object, properties: { soc: { type: integer, example: 25 } } } } }
                                      battery_charge/empty: { type: object, properties: { enabled: { type: boolean, example: true } } }
                                      battery_charge/full: { type: object, properties: { enabled: { type: boolean, example: true } } }
                                      battery_charge/low: { type: object, properties: { enabled: { type: boolean, example: true } } }
                                      location_update: { type: object, properties: { enabled: { type: boolean, example: true } } }
                                      not_locked: { type: object, properties: { enabled: { type: boolean, example: true } } }
        400:
          description: 'Bad Request'
          content:
            application/json:
              schema:
                type: object
                example:
                  error_code: 1000
                  error_message: 'could not decode request'
                properties:
                  error_code:
                    type: integer
                    example: 1000
                  error_message:
                    type: string
                    example: 'could not decode request'
        401:
          description: Unauthorized
          content:
            text/plain:
              schema:
                type: string
                example: Unauthorized
      tags:
        - Cloud
  '/external/vehicles/{vehicle_id}/accesses':
    get:
      summary: 'Get Vehicle Accesses'
      operationId: getVehicleAccesses
      description: 'Retrieve access list for a specific vehicle, showing owners and guests. USE https://vehicleregistry.production.vanmoof.cloud'
      parameters:
        -
          in: header
          name: Host
          description: ''
          example: vehicleregistry.production.vanmoof.cloud
          schema:
            type: string
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                type: object
                example:
                  vehicle_id: '{vehicle_id}'
                  vehicle_access:
                    -
                      rider_id: '{uuid}'
                      rider_name: 'Rider Name'
                      rider_email: rider@vanmoof.com
                      owner_id: '{owner_uuid}'
                      owner_name: 'Owner Name'
                      owner_email: owner@vanmoof.com
                      role: GUEST
                      expires_at: '2027-01-01T01:00:00.000000Z'
                      starts_at: '2026-01-01T01:00:00.000000Z'
                properties:
                  vehicle_id:
                    type: string
                    example: '{vehicle_id}'
                  vehicle_access:
                    type: array
                    example:
                      -
                        rider_id: '{uuid}'
                        rider_name: 'Rider Name'
                        rider_email: rider@vanmoof.com
                        owner_id: '{owner_uuid}'
                        owner_name: 'Owner Name'
                        owner_email: owner@vanmoof.com
                        role: GUEST
                        expires_at: '2027-01-01T01:00:00.000000Z'
                        starts_at: '2026-01-01T01:00:00.000000Z'
                    items:
                      type: object
                      properties:
                        rider_id:
                          type: string
                          example: '{uuid}'
                        rider_name:
                          type: string
                          example: 'Rider Name'
                        rider_email:
                          type: string
                          example: rider@vanmoof.com
                        owner_id:
                          type: string
                          example: '{owner_uuid}'
                        owner_name:
                          type: string
                          example: 'Owner Name'
                        owner_email:
                          type: string
                          example: owner@vanmoof.com
                        role:
                          type: string
                          example: GUEST
                        expires_at:
                          type: string
                          example: '2027-01-01T01:00:00.000000Z'
                        starts_at:
                          type: string
                          example: '2026-01-01T01:00:00.000000Z'
        401:
          description: Unauthorized
          content:
            text/plain:
              schema:
                type: string
                example: Unauthorized
      tags:
        - Cloud
    parameters:
      -
        in: path
        name: vehicle_id
        description: 'The frame number of the vehicle.'
        example: null
        required: true
        schema:
          type: string
  '/external/riders/{uuid}/invitations':
    get:
      summary: 'Get Rider Invitations'
      operationId: getRiderInvitations
      description: 'Retrieve invitations for a specific rider. USE https://vehicleregistry.production.vanmoof.cloud'
      parameters:
        -
          in: header
          name: Host
          description: ''
          example: vehicleregistry.production.vanmoof.cloud
          schema:
            type: string
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                example: []
      tags:
        - Cloud
  /external/invitations:
    get:
      summary: 'Get External Invitations'
      operationId: getExternalInvitations
      description: 'Retrieve all external invitations. USE https://vehicleregistry.production.vanmoof.cloud'
      parameters:
        -
          in: header
          name: Host
          description: ''
          example: vehicleregistry.production.vanmoof.cloud
          schema:
            type: string
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                example: []
        401:
          description: Unauthorized
          content:
            text/plain:
              schema:
                type: string
                example: Unauthorized
      tags:
        - Cloud
  '/external/riders/{uuid}/vehicles':
    get:
      summary: 'Get Rider Vehicles'
      operationId: getRiderVehicles
      description: 'Retrieve vehicles associated with a specific rider. USE https://vehicleregistry.production.vanmoof.cloud'
      parameters:
        -
          in: header
          name: Host
          description: ''
          example: vehicleregistry.production.vanmoof.cloud
          schema:
            type: string
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                type: object
                example:
                  rider_id: '{uuid}'
                  vehicle_access: []
                properties:
                  rider_id:
                    type: string
                    example: '{uuid}'
                  vehicle_access:
                    type: array
                    example: []
        401:
          description: Unauthorized
          content:
            text/plain:
              schema:
                type: string
                example: Unauthorized
      tags:
        - Cloud
  /v1/rider/bikes:
    get:
      summary: 'Bike Tracking'
      operationId: bikeTracking
      description: 'Bike Tracking. USE https://biketracking.production.vanmoof.cloud'
      parameters:
        -
          in: header
          name: Host
          description: ''
          example: biketracking.production.vanmoof.cloud
          schema:
            type: string
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                type: object
                example:
                  items: []
                properties:
                  items:
                    type: array
                    example: []
        401:
          description: Unauthorized
          content:
            text/plain:
              schema:
                type: string
                example: Unauthorized
      tags:
        - Cloud
  '/v2/states/{vehicle_id}':
    get:
      summary: 'Get Bike Tracking State'
      operationId: getBikeTrackingState
      description: 'Retrieve the tracking state of a specific vehicle. USE https://biketracking.production.vanmoof.cloud'
      parameters:
        -
          in: header
          name: Host
          description: ''
          example: biketracking.production.vanmoof.cloud
          schema:
            type: string
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                type: object
                example:
                  id: '{uuid}'
                  missing: NOT_MISSING
                  tracking: ENABLED
                  created_at: '2026-01-01T10:00:00.000000Z'
                properties:
                  id:
                    type: string
                    example: '{uuid}'
                  missing:
                    type: string
                    example: NOT_MISSING
                  tracking:
                    type: string
                    example: ENABLED
                  created_at:
                    type: string
                    example: '2026-01-01T10:00:00.000000Z'
        401:
          description: Unauthorized
          content:
            text/plain:
              schema:
                type: string
                example: Unauthorized
      tags:
        - Cloud
    parameters:
      -
        in: path
        name: vehicle_id
        description: 'The frame number of the vehicle.'
        example: null
        required: true
        schema:
          type: string
  /channels:
    delete:
      summary: 'Remove Notification Channel'
      operationId: removeNotificationChannel
      description: 'Remove a notification channel for the user. USE https://notification.production.vanmoof.cloud'
      parameters:
        -
          in: header
          name: Host
          description: ''
          example: notification.production.vanmoof.cloud
          schema:
            type: string
      responses:
        204:
          description: 'No Content'
          content:
            application/json:
              schema:
                type: object
                nullable: true
        400:
          description: 'Bad Request'
          content:
            application/json:
              schema:
                type: object
                example:
                  error_code: 1000
                  error_message: 'could not decode request'
                properties:
                  error_code:
                    type: integer
                    example: 1000
                  error_message:
                    type: string
                    example: 'could not decode request'
        401:
          description: Unauthorized
          content:
            text/plain:
              schema:
                type: string
                example: Unauthorized
      tags:
        - Cloud
    post:
      summary: 'Create Notification Channel'
      operationId: createNotificationChannel
      description: 'Create a new notification channel for the user. USE https://notification.production.vanmoof.cloud'
      parameters:
        -
          in: header
          name: Host
          description: ''
          example: notification.production.vanmoof.cloud
          schema:
            type: string
      responses:
        201:
          description: Created
          content:
            application/json:
              schema:
                type: object
                example:
                  id: '{CHANNEL_ID}'
                properties:
                  id:
                    type: string
                    example: '{CHANNEL_ID}'
        400:
          description: 'Bad Request'
          content:
            application/json:
              schema:
                type: object
                example:
                  error_code: 1000
                  error_message: 'could not decode request'
                properties:
                  error_code:
                    type: integer
                    example: 1000
                  error_message:
                    type: string
                    example: 'could not decode request'
        401:
          description: Unauthorized
          content:
            text/plain:
              schema:
                type: string
                example: Unauthorized
      tags:
        - Cloud
  '/v8/getCustomersOnBike/{bikeId}':
    get:
      summary: 'Get Customers On Bike'
      operationId: getCustomersOnBike
      description: 'Retrieve all customers associated with a specific bike.'
      parameters:
        -
          in: header
          name: Api-Key
          description: ''
          example: fcb38d47-f14b-30cf-843b-26283f6a5819
          schema:
            type: string
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                type: object
                example:
                  customers:
                    -
                      name: '{Customer Name}'
                      email: '{Customer Email}'
                      role: owner
                      start: '{ISO8601 Date}'
                      end: null
                      status: current
                properties:
                  customers:
                    type: array
                    example:
                      -
                        name: '{Customer Name}'
                        email: '{Customer Email}'
                        role: owner
                        start: '{ISO8601 Date}'
                        end: null
                        status: current
                    items:
                      type: object
                      properties:
                        name:
                          type: string
                          example: '{Customer Name}'
                        email:
                          type: string
                          example: '{Customer Email}'
                        role:
                          type: string
                          example: owner
                        start:
                          type: string
                          example: '{ISO8601 Date}'
                        end:
                          type: string
                          example: null
                          nullable: true
                        status:
                          type: string
                          example: current
        401:
          description: Unauthorized
          content:
            application/json:
              schema:
                type: object
                example:
                  error: AuthenticationException
                  message: 'Invalid Credentials'
                properties:
                  error:
                    type: string
                    example: AuthenticationException
                  message:
                    type: string
                    example: 'Invalid Credentials'
        422:
          description: 'Unprocessable Entity'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message: 'Please provide an API key'
                properties:
                  error:
                    type: string
                    example: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message:
                    type: string
                    example: 'Please provide an API key'
      tags:
        - Customer
    parameters:
      -
        in: path
        name: bikeId
        description: 'The bike ID'
        example: null
        required: true
        schema:
          type: integer
  /v8/updateCustomer:
    post:
      summary: 'Update Customer'
      operationId: updateCustomer
      description: "Update current customer's profile (partial updates allowed). Updating the email or the password requires a fresh initial token from v8/authenticate."
      parameters:
        -
          in: header
          name: Api-Key
          description: ''
          example: fcb38d47-f14b-30cf-843b-26283f6a5819
          schema:
            type: string
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                type: object
                example:
                  result:
                    uuid: '{Customer UUIDv3}'
                    name: '{Customer Name}'
                    email: '{Customer Email}'
                    emailConfirmed: boolean
                    phone: '{Customer Phone}'
                    country: '{ISO 3166-1}'
                    links:
                      show: 'http://api.vanmoof-api.com/v8/getCustomerData'
                properties:
                  result:
                    type: object
                    properties:
                      uuid:
                        type: string
                        example: '{Customer UUIDv3}'
                      name:
                        type: string
                        example: '{Customer Name}'
                      email:
                        type: string
                        example: '{Customer Email}'
                      emailConfirmed:
                        type: string
                        example: boolean
                      phone:
                        type: string
                        example: '{Customer Phone}'
                      country:
                        type: string
                        example: '{ISO 3166-1}'
                      links:
                        type: object
                        properties:
                          show:
                            type: string
                            example: 'http://api.vanmoof-api.com/v8/getCustomerData'
        401:
          description: 'Invalid Credentials'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: AuthenticationException
                  message: 'Invalid Credentials'
                properties:
                  error:
                    type: string
                    example: AuthenticationException
                  message:
                    type: string
                    example: 'Invalid Credentials'
        422:
          description: 'Unprocessable Entity'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message: 'Please provide an API key'
                properties:
                  error:
                    type: string
                    example: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message:
                    type: string
                    example: 'Please provide an API key'
      tags:
        - Customer
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: 'Customer full name'
                  example: null
                phone:
                  type: string
                  description: 'Phone number'
                  example: null
                country:
                  type: string
                  description: 'Country code (ISO 3166-1 alpha-2)'
                  example: null
                email:
                  type: string
                  description: 'Customer email address'
                  example: null
                password:
                  type: string
                  description: 'Account password'
                  example: null
  /v8/createCustomer:
    post:
      summary: 'Create Customer'
      operationId: createCustomer
      description: 'Create a new customer account. All fields are required. Password policy: The password must contain between 6 and 50 characters, a digit, an upper case and a lower case character'
      parameters:
        -
          in: header
          name: Api-Key
          description: ''
          example: fcb38d47-f14b-30cf-843b-26283f6a5819
          schema:
            type: string
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                type: object
                example:
                  result:
                    uuid: '{Customer UUIDv3}'
                    name: '{Customer Name}'
                    email: '{Customer Email}'
                    emailConfirmed: false
                    privacyPolicyAccepted: false
                properties:
                  result:
                    type: object
                    properties:
                      uuid:
                        type: string
                        example: '{Customer UUIDv3}'
                      name:
                        type: string
                        example: '{Customer Name}'
                      email:
                        type: string
                        example: '{Customer Email}'
                      emailConfirmed:
                        type: boolean
                        example: false
                      privacyPolicyAccepted:
                        type: boolean
                        example: false
        400:
          description: ''
          content:
            application/json:
              schema:
                oneOf:
                  -
                    description: 'Validation Failed'
                    type: object
                    example:
                      error: ValidationException
                      message: 'Validation failed'
                      violations:
                        name:
                          - 'The name field is required.'
                        email:
                          - 'The email field is required.'
                        country:
                          - 'The country field is required.'
                        password:
                          - 'The password field is required.'
                        confirmationUrl:
                          - 'The confirmationUrl field is required.'
                    properties:
                      error:
                        type: string
                        example: ValidationException
                      message:
                        type: string
                        example: 'Validation failed'
                      violations:
                        type: object
                        properties:
                          name:
                            type: array
                            example:
                              - 'The name field is required.'
                            items:
                              type: string
                          email:
                            type: array
                            example:
                              - 'The email field is required.'
                            items:
                              type: string
                          country:
                            type: array
                            example:
                              - 'The country field is required.'
                            items:
                              type: string
                          password:
                            type: array
                            example:
                              - 'The password field is required.'
                            items:
                              type: string
                          confirmationUrl:
                            type: array
                            example:
                              - 'The confirmationUrl field is required.'
                            items:
                              type: string
                  -
                    description: 'Email taken'
                    type: object
                    example:
                      error: ValidationException
                      message: 'Validation failed'
                      violations:
                        email:
                          - 'The email has already been taken.'
                    properties:
                      error:
                        type: string
                        example: ValidationException
                      message:
                        type: string
                        example: 'Validation failed'
                      violations:
                        type: object
                        properties:
                          email:
                            type: array
                            example:
                              - 'The email has already been taken.'
                            items:
                              type: string
        401:
          description: ''
          content:
            application/json:
              schema:
                oneOf:
                  -
                    description: 'Invalid Credentials'
                    type: object
                    example:
                      error: AuthenticationException
                      message: 'Invalid Credentials'
                    properties:
                      error:
                        type: string
                        example: AuthenticationException
                      message:
                        type: string
                        example: 'Invalid Credentials'
                  -
                    description: 'Customer Not Authorized'
                    type: object
                    example:
                      error: CustomerNotAuthorizedException
                      message: 'Customer not authorized for this action'
                    properties:
                      error:
                        type: string
                        example: CustomerNotAuthorizedException
                      message:
                        type: string
                        example: 'Customer not authorized for this action'
      tags:
        - Customer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: "Customer's full name"
                  example: null
                email:
                  type: string
                  description: 'Customer email address'
                  example: null
                country:
                  type: string
                  description: 'Country code (ISO 3166-1 alpha-2)'
                  example: null
                password:
                  type: string
                  description: 'Account password'
                  example: null
                confirmationUrl:
                  type: string
                  description: 'URL for email confirmation (Try https://www.vanmoof.com/my-vanmoof/en/account/confirm/{confirmation_token})'
                  example: null
                newsletter:
                  type: boolean
                  description: 'Subscribe to newsletter'
                  example: null
              required:
                - name
                - email
                - country
                - password
                - confirmationUrl
      security: []
  /v8/getCustomerDataHash:
    get:
      summary: 'Get Customer Data Hash'
      operationId: getCustomerDataHash
      description: 'Retrieve MD5 hash of customer data.'
      parameters:
        -
          in: header
          name: Api-Key
          description: ''
          example: fcb38d47-f14b-30cf-843b-26283f6a5819
          schema:
            type: string
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                type: object
                example:
                  hash: '{MD5_HASH}'
                properties:
                  hash:
                    type: string
                    example: '{MD5_HASH}'
        401:
          description: Unauthorized
          content:
            application/json:
              schema:
                type: object
                example:
                  error: AuthenticationException
                  message: 'Invalid Credentials'
                properties:
                  error:
                    type: string
                    example: AuthenticationException
                  message:
                    type: string
                    example: 'Invalid Credentials'
        422:
          description: 'Unprocessable Entity'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message: 'Please provide an API key'
                properties:
                  error:
                    type: string
                    example: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message:
                    type: string
                    example: 'Please provide an API key'
      tags:
        - Customer
  /v8/getCustomerData:
    get:
      summary: 'Get Customer Data'
      operationId: getCustomerData
      description: "Retrieve the authenticated customer's data and associated bikes. Data Hash is likely MD5. If a workshop is invited. The Field contains email, name, start and end. Also serviceModeEnabled is true for the time being in service mode."
      parameters:
        -
          in: query
          name: includeBikeDetails
          description: "Include details about the customer's bikes."
          example: null
          required: false
          schema:
            type: boolean
            description: "Include details about the customer's bikes."
            example: null
        -
          in: header
          name: Api-Key
          description: ''
          example: fcb38d47-f14b-30cf-843b-26283f6a5819
          schema:
            type: string
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                type: object
                example:
                  data:
                    uuid: '{UUIDv4}'
                    name: '{Customer Name}'
                    email: '{Customer Email}'
                    confirmed: boolean
                    privacyPolicyAccepted: boolean
                    phone: ''
                    country: '{Country Code}'
                    bikes:
                      -
                        id: '{BikeID}'
                        name: VanMoof
                        frameNumber: ASY31ddddd
                        bikeId: ASY31ddddd
                        frameSerial: null
                        ownerName: '{Owner}'
                        pendingSmartmoduleMacAddress: null
                        macAddress: '{MAC Address}'
                        mainEcuSerial: null
                        bleProfile: ELECTRIFIED_2021
                        controller: '2020 S'
                        eLock: true
                        speaker: true
                        smartmoduleCurrentVersion: 1.8.2
                        smartmoduleDesiredVersion: 1.9.1
                        smartmoduleLatestStable: false
                        highestAvailableSpeedLimit: null
                        tripDistance: '{TripDistance}'
                        modelName: VM01-203-EU
                        modelColor:
                          name: Light
                          primary: '#7a99ac'
                          secondary: '#7a99ac'
                        frameShape: S
                        customerRole: owner
                        startsAt: '{Date}'
                        endsAt: null
                        permissions:
                          - ADD_USER
                          - FIRMWARE_UPDATES
                          - REMOVE_USER
                          - REPORT_FOUND
                          - REPORT_STOLEN
                          - SEND_STATISTICS
                          - BACKUP_CODE
                          - BIKE_NAME
                          - VIEW_THEFT_CASES
                          - ALARM_SETTINGS
                          - COUNTRY_SETTINGS
                          - LIGHTS
                          - MOTOR_SUPPORT_LEVEL
                          - UNLOCK
                          - READ_VALUES
                          - STOLEN_MODE
                          - SWAP_SMARTMODULE
                        isTracking: false
                        stolen:
                          isStolen: false
                          dateStolen: null
                          status: not_stolen
                          latestLocation: null
                        links:
                          thumbnail: 'https://my.vanmoof.com/image/model/84'
                          show: 'http://api.vanmoof-api.com/v8/getBikeData/{BikeID}'
                      -
                        id: '{BikeID}'
                        name: VanMoof
                        frameNumber: SVTBKLdddddLL
                        bikeId: SVTBKLdddddLL
                        frameSerial: AST52IdddddL
                        ownerName: '{Owner}'
                        pendingSmartmoduleMacAddress: null
                        macAddress: null
                        mainEcuSerial: ''
                        bleProfile: ELECTRIFIED_2022
                        controller: '2022'
                        eLock: true
                        speaker: true
                        smartmoduleCurrentVersion: null
                        smartmoduleDesiredVersion: null
                        smartmoduleLatestStable: false
                        highestAvailableSpeedLimit: null
                        tripDistance: '{TripDistance}'
                        modelName: B-05S-E01EU-XX
                        modelColor:
                          name: Gray
                          primary: '#929393'
                          secondary: '#929393'
                        frameShape: S
                        customerRole: owner
                        startsAt: '{Date}'
                        endsAt: null
                        permissions:
                          - ADD_USER
                          - FIRMWARE_UPDATES
                          - REMOVE_USER
                          - REPORT_FOUND
                          - REPORT_STOLEN
                          - SEND_STATISTICS
                          - BACKUP_CODE
                          - BIKE_NAME
                          - VIEW_THEFT_CASES
                          - ALARM_SETTINGS
                          - COUNTRY_SETTINGS
                          - LIGHTS
                          - MOTOR_SUPPORT_LEVEL
                          - UNLOCK
                          - READ_VALUES
                          - STOLEN_MODE
                          - SWAP_SMARTMODULE
                        isTracking: false
                        stolen:
                          isStolen: false
                          dateStolen: null
                          status: not_stolen
                          latestLocation: null
                        links:
                          thumbnail: 'https://my.vanmoof.com/image/model/99'
                          show: 'http://api.vanmoof-api.com/v8/getBikeData/{BikeID}'
                    hasPendingBikeSharingInvitations: false
                    links:
                      hash: 'http://api.vanmoof-api.com/v8/getCustomerDataHash'
                      devices: 'http://api.vanmoof-api.com/v8/getDevices'
                      resendConfirmation: null
                      update: 'http://api.vanmoof-api.com/v8/updateCustomer'
                      addBike: 'http://api.vanmoof-api.com/v8/registerBikeToCurrentUser'
                      addFcmToken: 'http://api.vanmoof-api.com/v8/registrationToken'
                      theftCases: 'http://api.vanmoof-api.com/v8/getCurrentTheftCasesForCurrentUser'
                    bikeDetails:
                      -
                        id: '{BikeID}'
                        name: VanMoof
                        frameNumber: ASY31ddddd
                        bikeId: ASY31ddddd
                        frameSerial: null
                        ownerName: '{Owner}'
                        tripDistance: 1234
                        pendingSmartmoduleMacAddress: null
                        macAddress: '{MAC Address}'
                        mainEcuSerial: null
                        smartmoduleCurrentVersion: 1.8.2
                        smartmoduleDesiredVersion: 1.9.1
                        smartmoduleLatestStable: false
                        changeBackupCode: false
                        isTracking: false
                        highestAvailableSpeedLimit: null
                        messageAvailable: false
                        modelName: VM01-203-EU
                        modelDetails:
                          Gears: 'Automatic 4 speed shifting gears'
                          Motor: '250 - 500 W front-wheel hub motor'
                          'Top Speed': '25 km/h (EU speed)'
                          Range: '60 km (full power) ~ 150 km (economy mode)'
                          Edition: 'ES-3 2G'
                        modelColor:
                          name: Light
                          primary: '#7a99ac'
                          secondary: '#7a99ac'
                        frameShape: S
                        manufacturer: muco
                        controller: '2020 S'
                        updateMethod: 'OAD (encrypted)'
                        eLock: true
                        gsmModule: 2G
                        speaker: true
                        bleProfile: ELECTRIFIED_2021
                        bleVersion: null
                        messagesViaBLE: BLEv2
                        customerRoleFamily: Responsible
                        customerRole: owner
                        startsAt: '{Date}'
                        endsAt: null
                        permissions:
                          - ADD_USER
                          - FIRMWARE_UPDATES
                          - REMOVE_USER
                          - REPORT_FOUND
                          - REPORT_STOLEN
                          - SEND_STATISTICS
                          - BACKUP_CODE
                          - BIKE_NAME
                          - VIEW_THEFT_CASES
                          - ALARM_SETTINGS
                          - COUNTRY_SETTINGS
                          - LIGHTS
                          - MOTOR_SUPPORT_LEVEL
                          - UNLOCK
                          - READ_VALUES
                          - STOLEN_MODE
                          - SWAP_SMARTMODULE
                        key:
                          encryptionKey: '{BLE Encryption Key}'
                          passcode: '{BLE Passcode}'
                          userKeyId: 1
                        isFactoryKey: false
                        customerCount: 1
                        invitationCount: 0
                        stolen:
                          isStolen: false
                          dateStolen: null
                          status: not_stolen
                          latestLocation: null
                        hasPeaceOfMind: false
                        peaceOfMind: null
                        links:
                          hash: 'http://api.vanmoof-api.com/v8/getBikeDataHash/{BikeID}'
                          thumbnail: 'https://my.vanmoof.com/image/model/84'
                        serviceModeEnabled: false
                        workshopInfo: []
                      -
                        id: '{BikeID}'
                        name: VanMoof
                        frameNumber: SVTBKLdddddLL
                        bikeId: SVTBKLdddddLL
                        frameSerial: AST52IdddddL
                        ownerName: '{Owner}'
                        tripDistance: '{TripDistance}'
                        pendingSmartmoduleMacAddress: null
                        macAddress: null
                        mainEcuSerial: ''
                        smartmoduleCurrentVersion: null
                        smartmoduleDesiredVersion: null
                        smartmoduleLatestStable: false
                        changeBackupCode: true
                        isTracking: false
                        highestAvailableSpeedLimit: null
                        messageAvailable: false
                        modelName: B-05S-E01EU-XX
                        modelDetails: null
                        modelColor:
                          name: Gray
                          primary: '#929393'
                          secondary: '#929393'
                        frameShape: S
                        manufacturer: pegatron
                        controller: '2022'
                        updateMethod: 'OAD (encrypted)'
                        eLock: true
                        gsmModule: 4G
                        speaker: true
                        bleProfile: ELECTRIFIED_2022
                        bleVersion: null
                        messagesViaBLE: BLEv2
                        customerRoleFamily: Responsible
                        customerRole: owner
                        startsAt: '{Date}'
                        endsAt: null
                        permissions:
                          - ADD_USER
                          - FIRMWARE_UPDATES
                          - REMOVE_USER
                          - REPORT_FOUND
                          - REPORT_STOLEN
                          - SEND_STATISTICS
                          - BACKUP_CODE
                          - BIKE_NAME
                          - VIEW_THEFT_CASES
                          - ALARM_SETTINGS
                          - COUNTRY_SETTINGS
                          - LIGHTS
                          - MOTOR_SUPPORT_LEVEL
                          - UNLOCK
                          - READ_VALUES
                          - STOLEN_MODE
                          - SWAP_SMARTMODULE
                        key: null
                        isFactoryKey: true
                        customerCount: 1
                        invitationCount: 0
                        stolen:
                          isStolen: false
                          dateStolen: null
                          status: not_stolen
                          latestLocation: null
                        hasPeaceOfMind: false
                        peaceOfMind: null
                        links:
                          hash: 'http://api.vanmoof-api.com/v8/getBikeDataHash/{BikeID}'
                          thumbnail: 'https://my.vanmoof.com/image/model/99'
                        serviceModeEnabled: false
                        workshopInfo: []
                  hash: '{DATA_HASH}'
                properties:
                  data:
                    type: object
                    properties:
                      uuid:
                        type: string
                        example: '{UUIDv4}'
                      name:
                        type: string
                        example: '{Customer Name}'
                      email:
                        type: string
                        example: '{Customer Email}'
                      confirmed:
                        type: string
                        example: boolean
                      privacyPolicyAccepted:
                        type: string
                        example: boolean
                      phone:
                        type: string
                        example: ''
                      country:
                        type: string
                        example: '{Country Code}'
                      bikes:
                        type: array
                        example:
                          -
                            id: '{BikeID}'
                            name: VanMoof
                            frameNumber: ASY31ddddd
                            bikeId: ASY31ddddd
                            frameSerial: null
                            ownerName: '{Owner}'
                            pendingSmartmoduleMacAddress: null
                            macAddress: '{MAC Address}'
                            mainEcuSerial: null
                            bleProfile: ELECTRIFIED_2021
                            controller: '2020 S'
                            eLock: true
                            speaker: true
                            smartmoduleCurrentVersion: 1.8.2
                            smartmoduleDesiredVersion: 1.9.1
                            smartmoduleLatestStable: false
                            highestAvailableSpeedLimit: null
                            tripDistance: '{TripDistance}'
                            modelName: VM01-203-EU
                            modelColor:
                              name: Light
                              primary: '#7a99ac'
                              secondary: '#7a99ac'
                            frameShape: S
                            customerRole: owner
                            startsAt: '{Date}'
                            endsAt: null
                            permissions:
                              - ADD_USER
                              - FIRMWARE_UPDATES
                              - REMOVE_USER
                              - REPORT_FOUND
                              - REPORT_STOLEN
                              - SEND_STATISTICS
                              - BACKUP_CODE
                              - BIKE_NAME
                              - VIEW_THEFT_CASES
                              - ALARM_SETTINGS
                              - COUNTRY_SETTINGS
                              - LIGHTS
                              - MOTOR_SUPPORT_LEVEL
                              - UNLOCK
                              - READ_VALUES
                              - STOLEN_MODE
                              - SWAP_SMARTMODULE
                            isTracking: false
                            stolen:
                              isStolen: false
                              dateStolen: null
                              status: not_stolen
                              latestLocation: null
                            links:
                              thumbnail: 'https://my.vanmoof.com/image/model/84'
                              show: 'http://api.vanmoof-api.com/v8/getBikeData/{BikeID}'
                          -
                            id: '{BikeID}'
                            name: VanMoof
                            frameNumber: SVTBKLdddddLL
                            bikeId: SVTBKLdddddLL
                            frameSerial: AST52IdddddL
                            ownerName: '{Owner}'
                            pendingSmartmoduleMacAddress: null
                            macAddress: null
                            mainEcuSerial: ''
                            bleProfile: ELECTRIFIED_2022
                            controller: '2022'
                            eLock: true
                            speaker: true
                            smartmoduleCurrentVersion: null
                            smartmoduleDesiredVersion: null
                            smartmoduleLatestStable: false
                            highestAvailableSpeedLimit: null
                            tripDistance: '{TripDistance}'
                            modelName: B-05S-E01EU-XX
                            modelColor:
                              name: Gray
                              primary: '#929393'
                              secondary: '#929393'
                            frameShape: S
                            customerRole: owner
                            startsAt: '{Date}'
                            endsAt: null
                            permissions:
                              - ADD_USER
                              - FIRMWARE_UPDATES
                              - REMOVE_USER
                              - REPORT_FOUND
                              - REPORT_STOLEN
                              - SEND_STATISTICS
                              - BACKUP_CODE
                              - BIKE_NAME
                              - VIEW_THEFT_CASES
                              - ALARM_SETTINGS
                              - COUNTRY_SETTINGS
                              - LIGHTS
                              - MOTOR_SUPPORT_LEVEL
                              - UNLOCK
                              - READ_VALUES
                              - STOLEN_MODE
                              - SWAP_SMARTMODULE
                            isTracking: false
                            stolen:
                              isStolen: false
                              dateStolen: null
                              status: not_stolen
                              latestLocation: null
                            links:
                              thumbnail: 'https://my.vanmoof.com/image/model/99'
                              show: 'http://api.vanmoof-api.com/v8/getBikeData/{BikeID}'
                        items:
                          type: object
                          properties:
                            id:
                              type: string
                              example: '{BikeID}'
                            name:
                              type: string
                              example: VanMoof
                            frameNumber:
                              type: string
                              example: ASY31ddddd
                            bikeId:
                              type: string
                              example: ASY31ddddd
                            frameSerial:
                              type: string
                              example: null
                              nullable: true
                            ownerName:
                              type: string
                              example: '{Owner}'
                            pendingSmartmoduleMacAddress:
                              type: string
                              example: null
                              nullable: true
                            macAddress:
                              type: string
                              example: '{MAC Address}'
                            mainEcuSerial:
                              type: string
                              example: null
                              nullable: true
                            bleProfile:
                              type: string
                              example: ELECTRIFIED_2021
                            controller:
                              type: string
                              example: '2020 S'
                            eLock:
                              type: boolean
                              example: true
                            speaker:
                              type: boolean
                              example: true
                            smartmoduleCurrentVersion:
                              type: string
                              example: 1.8.2
                            smartmoduleDesiredVersion:
                              type: string
                              example: 1.9.1
                            smartmoduleLatestStable:
                              type: boolean
                              example: false
                            highestAvailableSpeedLimit:
                              type: string
                              example: null
                              nullable: true
                            tripDistance:
                              type: string
                              example: '{TripDistance}'
                            modelName:
                              type: string
                              example: VM01-203-EU
                            modelColor:
                              type: object
                              properties:
                                name:
                                  type: string
                                  example: Light
                                primary:
                                  type: string
                                  example: '#7a99ac'
                                secondary:
                                  type: string
                                  example: '#7a99ac'
                            frameShape:
                              type: string
                              example: S
                            customerRole:
                              type: string
                              example: owner
                            startsAt:
                              type: string
                              example: '{Date}'
                            endsAt:
                              type: string
                              example: null
                              nullable: true
                            permissions:
                              type: array
                              example:
                                - ADD_USER
                                - FIRMWARE_UPDATES
                                - REMOVE_USER
                                - REPORT_FOUND
                                - REPORT_STOLEN
                                - SEND_STATISTICS
                                - BACKUP_CODE
                                - BIKE_NAME
                                - VIEW_THEFT_CASES
                                - ALARM_SETTINGS
                                - COUNTRY_SETTINGS
                                - LIGHTS
                                - MOTOR_SUPPORT_LEVEL
                                - UNLOCK
                                - READ_VALUES
                                - STOLEN_MODE
                                - SWAP_SMARTMODULE
                              items:
                                type: string
                            isTracking:
                              type: boolean
                              example: false
                            stolen:
                              type: object
                              properties:
                                isStolen:
                                  type: boolean
                                  example: false
                                dateStolen:
                                  type: string
                                  example: null
                                  nullable: true
                                status:
                                  type: string
                                  example: not_stolen
                                latestLocation:
                                  type: string
                                  example: null
                                  nullable: true
                            links:
                              type: object
                              properties:
                                thumbnail:
                                  type: string
                                  example: 'https://my.vanmoof.com/image/model/84'
                                show:
                                  type: string
                                  example: 'http://api.vanmoof-api.com/v8/getBikeData/{BikeID}'
                      hasPendingBikeSharingInvitations:
                        type: boolean
                        example: false
                      links:
                        type: object
                        properties:
                          hash:
                            type: string
                            example: 'http://api.vanmoof-api.com/v8/getCustomerDataHash'
                          devices:
                            type: string
                            example: 'http://api.vanmoof-api.com/v8/getDevices'
                          resendConfirmation:
                            type: string
                            example: null
                            nullable: true
                          update:
                            type: string
                            example: 'http://api.vanmoof-api.com/v8/updateCustomer'
                          addBike:
                            type: string
                            example: 'http://api.vanmoof-api.com/v8/registerBikeToCurrentUser'
                          addFcmToken:
                            type: string
                            example: 'http://api.vanmoof-api.com/v8/registrationToken'
                          theftCases:
                            type: string
                            example: 'http://api.vanmoof-api.com/v8/getCurrentTheftCasesForCurrentUser'
                      bikeDetails:
                        type: array
                        example:
                          -
                            id: '{BikeID}'
                            name: VanMoof
                            frameNumber: ASY31ddddd
                            bikeId: ASY31ddddd
                            frameSerial: null
                            ownerName: '{Owner}'
                            tripDistance: 1234
                            pendingSmartmoduleMacAddress: null
                            macAddress: '{MAC Address}'
                            mainEcuSerial: null
                            smartmoduleCurrentVersion: 1.8.2
                            smartmoduleDesiredVersion: 1.9.1
                            smartmoduleLatestStable: false
                            changeBackupCode: false
                            isTracking: false
                            highestAvailableSpeedLimit: null
                            messageAvailable: false
                            modelName: VM01-203-EU
                            modelDetails:
                              Gears: 'Automatic 4 speed shifting gears'
                              Motor: '250 - 500 W front-wheel hub motor'
                              'Top Speed': '25 km/h (EU speed)'
                              Range: '60 km (full power) ~ 150 km (economy mode)'
                              Edition: 'ES-3 2G'
                            modelColor:
                              name: Light
                              primary: '#7a99ac'
                              secondary: '#7a99ac'
                            frameShape: S
                            manufacturer: muco
                            controller: '2020 S'
                            updateMethod: 'OAD (encrypted)'
                            eLock: true
                            gsmModule: 2G
                            speaker: true
                            bleProfile: ELECTRIFIED_2021
                            bleVersion: null
                            messagesViaBLE: BLEv2
                            customerRoleFamily: Responsible
                            customerRole: owner
                            startsAt: '{Date}'
                            endsAt: null
                            permissions:
                              - ADD_USER
                              - FIRMWARE_UPDATES
                              - REMOVE_USER
                              - REPORT_FOUND
                              - REPORT_STOLEN
                              - SEND_STATISTICS
                              - BACKUP_CODE
                              - BIKE_NAME
                              - VIEW_THEFT_CASES
                              - ALARM_SETTINGS
                              - COUNTRY_SETTINGS
                              - LIGHTS
                              - MOTOR_SUPPORT_LEVEL
                              - UNLOCK
                              - READ_VALUES
                              - STOLEN_MODE
                              - SWAP_SMARTMODULE
                            key:
                              encryptionKey: '{BLE Encryption Key}'
                              passcode: '{BLE Passcode}'
                              userKeyId: 1
                            isFactoryKey: false
                            customerCount: 1
                            invitationCount: 0
                            stolen:
                              isStolen: false
                              dateStolen: null
                              status: not_stolen
                              latestLocation: null
                            hasPeaceOfMind: false
                            peaceOfMind: null
                            links:
                              hash: 'http://api.vanmoof-api.com/v8/getBikeDataHash/{BikeID}'
                              thumbnail: 'https://my.vanmoof.com/image/model/84'
                            serviceModeEnabled: false
                            workshopInfo: []
                          -
                            id: '{BikeID}'
                            name: VanMoof
                            frameNumber: SVTBKLdddddLL
                            bikeId: SVTBKLdddddLL
                            frameSerial: AST52IdddddL
                            ownerName: '{Owner}'
                            tripDistance: '{TripDistance}'
                            pendingSmartmoduleMacAddress: null
                            macAddress: null
                            mainEcuSerial: ''
                            smartmoduleCurrentVersion: null
                            smartmoduleDesiredVersion: null
                            smartmoduleLatestStable: false
                            changeBackupCode: true
                            isTracking: false
                            highestAvailableSpeedLimit: null
                            messageAvailable: false
                            modelName: B-05S-E01EU-XX
                            modelDetails: null
                            modelColor:
                              name: Gray
                              primary: '#929393'
                              secondary: '#929393'
                            frameShape: S
                            manufacturer: pegatron
                            controller: '2022'
                            updateMethod: 'OAD (encrypted)'
                            eLock: true
                            gsmModule: 4G
                            speaker: true
                            bleProfile: ELECTRIFIED_2022
                            bleVersion: null
                            messagesViaBLE: BLEv2
                            customerRoleFamily: Responsible
                            customerRole: owner
                            startsAt: '{Date}'
                            endsAt: null
                            permissions:
                              - ADD_USER
                              - FIRMWARE_UPDATES
                              - REMOVE_USER
                              - REPORT_FOUND
                              - REPORT_STOLEN
                              - SEND_STATISTICS
                              - BACKUP_CODE
                              - BIKE_NAME
                              - VIEW_THEFT_CASES
                              - ALARM_SETTINGS
                              - COUNTRY_SETTINGS
                              - LIGHTS
                              - MOTOR_SUPPORT_LEVEL
                              - UNLOCK
                              - READ_VALUES
                              - STOLEN_MODE
                              - SWAP_SMARTMODULE
                            key: null
                            isFactoryKey: true
                            customerCount: 1
                            invitationCount: 0
                            stolen:
                              isStolen: false
                              dateStolen: null
                              status: not_stolen
                              latestLocation: null
                            hasPeaceOfMind: false
                            peaceOfMind: null
                            links:
                              hash: 'http://api.vanmoof-api.com/v8/getBikeDataHash/{BikeID}'
                              thumbnail: 'https://my.vanmoof.com/image/model/99'
                            serviceModeEnabled: false
                            workshopInfo: []
                        items:
                          type: object
                          properties:
                            id:
                              type: string
                              example: '{BikeID}'
                            name:
                              type: string
                              example: VanMoof
                            frameNumber:
                              type: string
                              example: ASY31ddddd
                            bikeId:
                              type: string
                              example: ASY31ddddd
                            frameSerial:
                              type: string
                              example: null
                              nullable: true
                            ownerName:
                              type: string
                              example: '{Owner}'
                            tripDistance:
                              type: integer
                              example: 1234
                            pendingSmartmoduleMacAddress:
                              type: string
                              example: null
                              nullable: true
                            macAddress:
                              type: string
                              example: '{MAC Address}'
                            mainEcuSerial:
                              type: string
                              example: null
                              nullable: true
                            smartmoduleCurrentVersion:
                              type: string
                              example: 1.8.2
                            smartmoduleDesiredVersion:
                              type: string
                              example: 1.9.1
                            smartmoduleLatestStable:
                              type: boolean
                              example: false
                            changeBackupCode:
                              type: boolean
                              example: false
                            isTracking:
                              type: boolean
                              example: false
                            highestAvailableSpeedLimit:
                              type: string
                              example: null
                              nullable: true
                            messageAvailable:
                              type: boolean
                              example: false
                            modelName:
                              type: string
                              example: VM01-203-EU
                            modelDetails:
                              type: object
                              properties:
                                Gears:
                                  type: string
                                  example: 'Automatic 4 speed shifting gears'
                                Motor:
                                  type: string
                                  example: '250 - 500 W front-wheel hub motor'
                                'Top Speed':
                                  type: string
                                  example: '25 km/h (EU speed)'
                                Range:
                                  type: string
                                  example: '60 km (full power) ~ 150 km (economy mode)'
                                Edition:
                                  type: string
                                  example: 'ES-3 2G'
                            modelColor:
                              type: object
                              properties:
                                name:
                                  type: string
                                  example: Light
                                primary:
                                  type: string
                                  example: '#7a99ac'
                                secondary:
                                  type: string
                                  example: '#7a99ac'
                            frameShape:
                              type: string
                              example: S
                            manufacturer:
                              type: string
                              example: muco
                            controller:
                              type: string
                              example: '2020 S'
                            updateMethod:
                              type: string
                              example: 'OAD (encrypted)'
                            eLock:
                              type: boolean
                              example: true
                            gsmModule:
                              type: string
                              example: 2G
                            speaker:
                              type: boolean
                              example: true
                            bleProfile:
                              type: string
                              example: ELECTRIFIED_2021
                            bleVersion:
                              type: string
                              example: null
                              nullable: true
                            messagesViaBLE:
                              type: string
                              example: BLEv2
                            customerRoleFamily:
                              type: string
                              example: Responsible
                            customerRole:
                              type: string
                              example: owner
                            startsAt:
                              type: string
                              example: '{Date}'
                            endsAt:
                              type: string
                              example: null
                              nullable: true
                            permissions:
                              type: array
                              example:
                                - ADD_USER
                                - FIRMWARE_UPDATES
                                - REMOVE_USER
                                - REPORT_FOUND
                                - REPORT_STOLEN
                                - SEND_STATISTICS
                                - BACKUP_CODE
                                - BIKE_NAME
                                - VIEW_THEFT_CASES
                                - ALARM_SETTINGS
                                - COUNTRY_SETTINGS
                                - LIGHTS
                                - MOTOR_SUPPORT_LEVEL
                                - UNLOCK
                                - READ_VALUES
                                - STOLEN_MODE
                                - SWAP_SMARTMODULE
                              items:
                                type: string
                            key:
                              type: object
                              properties:
                                encryptionKey:
                                  type: string
                                  example: '{BLE Encryption Key}'
                                passcode:
                                  type: string
                                  example: '{BLE Passcode}'
                                userKeyId:
                                  type: integer
                                  example: 1
                            isFactoryKey:
                              type: boolean
                              example: false
                            customerCount:
                              type: integer
                              example: 1
                            invitationCount:
                              type: integer
                              example: 0
                            stolen:
                              type: object
                              properties:
                                isStolen:
                                  type: boolean
                                  example: false
                                dateStolen:
                                  type: string
                                  example: null
                                  nullable: true
                                status:
                                  type: string
                                  example: not_stolen
                                latestLocation:
                                  type: string
                                  example: null
                                  nullable: true
                            hasPeaceOfMind:
                              type: boolean
                              example: false
                            peaceOfMind:
                              type: string
                              example: null
                              nullable: true
                            links:
                              type: object
                              properties:
                                hash:
                                  type: string
                                  example: 'http://api.vanmoof-api.com/v8/getBikeDataHash/{BikeID}'
                                thumbnail:
                                  type: string
                                  example: 'https://my.vanmoof.com/image/model/84'
                            serviceModeEnabled:
                              type: boolean
                              example: false
                            workshopInfo:
                              type: array
                              example: []
                  hash:
                    type: string
                    example: '{DATA_HASH}'
        401:
          description: Unauthorized
          content:
            application/json:
              schema:
                type: object
                example:
                  error: AuthenticationException
                  message: 'Invalid Credentials'
                properties:
                  error:
                    type: string
                    example: AuthenticationException
                  message:
                    type: string
                    example: 'Invalid Credentials'
        422:
          description: 'Unprocessable Entity'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message: 'Please provide an API key'
                properties:
                  error:
                    type: string
                    example: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message:
                    type: string
                    example: 'Please provide an API key'
      tags:
        - Customer
  /v8/getCurrentTheftCasesForCurrentUser:
    get:
      summary: 'Get Current Theft Cases For Current User'
      operationId: getCurrentTheftCasesForCurrentUser
      description: 'Retrieve theft cases for the authenticated user.'
      parameters:
        -
          in: header
          name: Api-Key
          description: ''
          example: fcb38d47-f14b-30cf-843b-26283f6a5819
          schema:
            type: string
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                type: object
                example:
                  theftCases: []
                properties:
                  theftCases:
                    type: array
                    example: []
        401:
          description: Unauthorized
          content:
            application/json:
              schema:
                type: object
                example:
                  error: AuthenticationException
                  message: 'Invalid Credentials'
                properties:
                  error:
                    type: string
                    example: AuthenticationException
                  message:
                    type: string
                    example: 'Invalid Credentials'
        422:
          description: 'Unprocessable Entity'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message: 'Please provide an API key'
                properties:
                  error:
                    type: string
                    example: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message:
                    type: string
                    example: 'Please provide an API key'
      tags:
        - Customer
  /v8/getDevices:
    get:
      summary: 'Get Devices'
      operationId: getDevices
      description: 'Retrieve registered devices for the authenticated user.'
      parameters:
        -
          in: header
          name: Api-Key
          description: ''
          example: fcb38d47-f14b-30cf-843b-26283f6a5819
          schema:
            type: string
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    device:
                      type: string
                      example: null
                      nullable: true
                    key:
                      type: string
                      example: '{Device Key}'
                example:
                  -
                    device: null
                    key: '{Device Key}'
        401:
          description: Unauthorized
          content:
            application/json:
              schema:
                type: object
                example:
                  error: AuthenticationException
                  message: 'Invalid Credentials'
                properties:
                  error:
                    type: string
                    example: AuthenticationException
                  message:
                    type: string
                    example: 'Invalid Credentials'
        422:
          description: 'Unprocessable Entity'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message: 'Please provide an API key'
                properties:
                  error:
                    type: string
                    example: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message:
                    type: string
                    example: 'Please provide an API key'
      tags:
        - Customer
  /v8/resendConfirmationEmail:
    post:
      summary: 'Resend Confirmation Email'
      operationId: resendConfirmationEmail
      description: 'Resend confirmation email to the authenticated user.'
      parameters:
        -
          in: header
          name: Api-Key
          description: ''
          example: fcb38d47-f14b-30cf-843b-26283f6a5819
          schema:
            type: string
      responses:
        200:
          description: 'Success \#TODO'
          content:
            application/json:
              schema:
                type: object
                example: {  }
                properties: {  }
        400:
          description: 'Customer Already Confirmed'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: CustomerAlreadyConfirmedException
                  message: 'Customer account is already confirmed'
                properties:
                  error:
                    type: string
                    example: CustomerAlreadyConfirmedException
                  message:
                    type: string
                    example: 'Customer account is already confirmed'
        401:
          description: Unauthorized
          content:
            application/json:
              schema:
                type: object
                example:
                  error: AuthenticationException
                  message: 'Invalid Credentials'
                properties:
                  error:
                    type: string
                    example: AuthenticationException
                  message:
                    type: string
                    example: 'Invalid Credentials'
        422:
          description: 'Unprocessable Entity'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message: 'Please provide an API key'
                properties:
                  error:
                    type: string
                    example: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message:
                    type: string
                    example: 'Please provide an API key'
      tags:
        - Customer
  /v8/validateCustomerEmail:
    post:
      summary: 'Validate Customer Email'
      operationId: validateCustomerEmail
      description: "Validate a customer's email address using a token."
      parameters:
        -
          in: header
          name: Api-Key
          description: ''
          example: fcb38d47-f14b-30cf-843b-26283f6a5819
          schema:
            type: string
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                type: object
                example:
                  result: true
                properties:
                  result:
                    type: boolean
                    example: true
        400:
          description: 'Wrong Token'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: CustomerNotConfirmedException
                  message: 'Customer account is not confirmed'
                properties:
                  error:
                    type: string
                    example: CustomerNotConfirmedException
                  message:
                    type: string
                    example: 'Customer account is not confirmed'
        401:
          description: Unauthorized
          content:
            application/json:
              schema:
                type: object
                example:
                  error: AuthenticationException
                  message: 'Invalid Credentials'
                properties:
                  error:
                    type: string
                    example: AuthenticationException
                  message:
                    type: string
                    example: 'Invalid Credentials'
        422:
          description: 'Unprocessable Entity'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message: 'Please provide an API key'
                properties:
                  error:
                    type: string
                    example: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message:
                    type: string
                    example: 'Please provide an API key'
      tags:
        - Customer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                token:
                  type: string
                  description: "The token to validate the customer's email."
                  example: null
              required:
                - token
  /v8/privacyPolicyAccepted:
    post:
      summary: 'Accept Privacy Policy'
      operationId: acceptPrivacyPolicy
      description: 'Mark the privacy policy as accepted for the authenticated customer.'
      parameters:
        -
          in: header
          name: Api-Key
          description: ''
          example: fcb38d47-f14b-30cf-843b-26283f6a5819
          schema:
            type: string
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                type: object
                example:
                  result: true
                properties:
                  result:
                    type: boolean
                    example: true
        401:
          description: Unauthorized
          content:
            application/json:
              schema:
                type: object
                example:
                  error: AuthenticationException
                  message: 'Invalid Credentials'
                properties:
                  error:
                    type: string
                    example: AuthenticationException
                  message:
                    type: string
                    example: 'Invalid Credentials'
        422:
          description: 'Unprocessable Entity'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message: 'Please provide an API key'
                properties:
                  error:
                    type: string
                    example: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message:
                    type: string
                    example: 'Please provide an API key'
      tags:
        - Customer
  /v8/forgotPassword:
    post:
      summary: 'Forgot Password'
      operationId: forgotPassword
      description: 'Request a password reset email for the given email address.'
      parameters:
        -
          in: header
          name: Api-Key
          description: ''
          example: fcb38d47-f14b-30cf-843b-26283f6a5819
          schema:
            type: string
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                type: object
                example:
                  result: true
                properties:
                  result:
                    type: boolean
                    example: true
        400:
          description: 'Validation Failed'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: ValidationException
                  message: 'Validation failed'
                  violations:
                    email:
                      - 'The selected email is invalid.'
                properties:
                  error:
                    type: string
                    example: ValidationException
                  message:
                    type: string
                    example: 'Validation failed'
                  violations:
                    type: object
                    properties:
                      email:
                        type: array
                        example:
                          - 'The selected email is invalid.'
                        items:
                          type: string
      tags:
        - Customer
      requestBody:
        required: true
        content:
          'application/json; charset=utf-8':
            schema:
              type: object
              properties:
                email:
                  type: string
                  description: 'The email address associated with the account.'
                  example: null
                redirectUrl:
                  type: string
                  description: 'The URL to redirect the user after a successful password reset. (Try https://www.vanmoof.com/my-vanmoof/en/auth/password/reset-success)'
                  example: null
              required:
                - email
                - redirectUrl
      security: []
  /v8/registrationToken:
    post:
      summary: 'Register APN Token'
      operationId: registerAPNToken
      description: 'Submit a APN registration token. (Used for push notifications on Android. No longer used)'
      parameters:
        -
          in: header
          name: Api-Key
          description: ''
          example: fcb38d47-f14b-30cf-843b-26283f6a5819
          schema:
            type: string
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                type: object
                example:
                  result: true
                properties:
                  result:
                    type: boolean
                    example: true
        401:
          description: Unauthorized
          content:
            application/json:
              schema:
                type: object
                example:
                  error: AuthenticationException
                  message: 'Invalid Credentials'
                properties:
                  error:
                    type: string
                    example: AuthenticationException
                  message:
                    type: string
                    example: 'Invalid Credentials'
        422:
          description: 'Unprocessable Entity'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message: 'Please provide an API key'
                properties:
                  error:
                    type: string
                    example: "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty"
                  message:
                    type: string
                    example: 'Please provide an API key'
      tags:
        - Customer
      requestBody:
        required: true
        content:
          'application/json; charset=utf-8':
            schema:
              type: object
              properties:
                token:
                  type: string
                  description: 'The registration token to submit.'
                  example: null
              required:
                - token
  /v1/firmwares/last:
    get:
      summary: 'Get Latest Firmware (SA5+)'
      operationId: getLatestFirmwareSA5+
      description: 'Retrieve the latest firmware version and release notes for SA5 and later Bikes. USE https://fima.production.vanmoof.cloud'
      parameters: []
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                type: object
                example:
                  version: '{version}'
                  stage: '{stage}'
                  releaseNotes:
                    EN: ''
                    DE: ''
                    NL: ''
                properties:
                  version:
                    type: string
                    example: '{version}'
                  stage:
                    type: string
                    example: '{stage}'
                  releaseNotes:
                    type: object
                    properties:
                      EN:
                        type: string
                        example: ''
                      DE:
                        type: string
                        example: ''
                      NL:
                        type: string
                        example: ''
        403:
          description: Forbidden
          content:
            application/json:
              schema:
                type: object
                example:
                  error: 'Token not found'
                properties:
                  error:
                    type: string
                    example: 'Token not found'
      tags:
        - Firmwares
  '/api/v1/riders/{riderID}/preferences':
    get:
      summary: 'Get Rider Preferences'
      operationId: getRiderPreferences
      description: "Retrieve rider preferences by rider UUID. The city field uses a format like \"{COUNTRY CITY}\" where COUNTRY is the international country code (e.g., DE for Germany) and CITY is the city code (e.g., FRA for Frankfurt am Main). Example: \"DE FRA\". USE https://tenjin.vanmoof.com/\n"
      parameters:
        -
          in: header
          name: Api-Key
          description: ''
          example: fcb38d47-f14b-30cf-843b-26283f6a5819
          schema:
            type: string
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                type: object
                example:
                  recordRides: true
                  recordCountry: false
                  city: '{COUNTRY CITY}'
                  optedOutOfCity: false
                properties:
                  recordRides:
                    type: boolean
                    example: true
                  recordCountry:
                    type: boolean
                    example: false
                  city:
                    type: string
                    example: '{COUNTRY CITY}'
                  optedOutOfCity:
                    type: boolean
                    example: false
        401:
          description: 'Unauthorized - Also returned if the rider ID is invalid'
          content:
            application/json:
              schema:
                type: object
                example:
                  error: Unauthorized
                properties:
                  error:
                    type: string
                    example: Unauthorized
      tags:
        - Rides
      security: []
  /api/v1/cities:
    get:
      summary: 'Get Cities'
      operationId: getCities
      description: 'Retrieve a list of cities. USE https://tenjin.vanmoof.com'
      parameters:
        -
          in: header
          name: Api-Key
          description: ''
          example: fcb38d47-f14b-30cf-843b-26283f6a5819
          schema:
            type: string
        -
          in: header
          name: Host
          description: ''
          example: tenjin.vanmoof.com
          schema:
            type: string
        -
          in: header
          name: Rider-Etag
          description: ''
          example: '{ETAG}'
          schema:
            type: string
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    country:
                      type: string
                      example: DE
                    code:
                      type: string
                      example: 'DE FRA'
                    name:
                      type: string
                      example: 'Frankfurt (Frankfurt am Main)'
                    location:
                      type: object
                      properties:
                        lat:
                          type: number
                          example: 50.1136
                        long:
                          type: number
                          example: 8.6797
                example:
                  -
                    country: DE
                    code: 'DE FRA'
                    name: 'Frankfurt (Frankfurt am Main)'
                    location:
                      lat: 50.1136
                      long: 8.6797
        401:
          description: Unauthorized
          content:
            application/json:
              schema:
                type: object
                example:
                  error: Unauthorized
                properties:
                  error:
                    type: string
                    example: Unauthorized
      tags:
        - Rides
  '/findmybike/coords/{bike UUIDv4}':
    get:
      summary: 'Get Bike Coordinates'
      operationId: getBikeCoordinates
      description: 'Retrieve the latest known coordinates of a bike by its UUIDv4. This endpoint does not require authentication nor is it disabled after the bike is found. USE https://my.vanmoof.com'
      parameters: []
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                type: object
                example:
                  coordinates:
                    -
                      lat: -10.47
                      lon: 105.61
                      acc: 0
                      datetime:
                        user:
                          date: '{DD-MM-YYYY}'
                          time: '13:37'
                        bike:
                          date: '{DD-MM-YYYY}'
                          time: '13:37'
                      timezone:
                        user: Europe/Amsterdam
                        bike: Europe/Berlin
                      firstTime:
                        user: '13:37'
                        bike: '13:37'
                      measurements: 1
                      type: ublox
                      measured_by: []
                  timezone: 2
                properties:
                  coordinates:
                    type: array
                    example:
                      -
                        lat: -10.47
                        lon: 105.61
                        acc: 0
                        datetime:
                          user:
                            date: '{DD-MM-YYYY}'
                            time: '13:37'
                          bike:
                            date: '{DD-MM-YYYY}'
                            time: '13:37'
                        timezone:
                          user: Europe/Amsterdam
                          bike: Europe/Berlin
                        firstTime:
                          user: '13:37'
                          bike: '13:37'
                        measurements: 1
                        type: ublox
                        measured_by: []
                    items:
                      type: object
                      properties:
                        lat:
                          type: number
                          example: -10.47
                        lon:
                          type: number
                          example: 105.61
                        acc:
                          type: integer
                          example: 0
                        datetime:
                          type: object
                          properties:
                            user:
                              type: object
                              properties:
                                date:
                                  type: string
                                  example: '{DD-MM-YYYY}'
                                time:
                                  type: string
                                  example: '13:37'
                            bike:
                              type: object
                              properties:
                                date:
                                  type: string
                                  example: '{DD-MM-YYYY}'
                                time:
                                  type: string
                                  example: '13:37'
                        timezone:
                          type: object
                          properties:
                            user:
                              type: string
                              example: Europe/Amsterdam
                            bike:
                              type: string
                              example: Europe/Berlin
                        firstTime:
                          type: object
                          properties:
                            user:
                              type: string
                              example: '13:37'
                            bike:
                              type: string
                              example: '13:37'
                        measurements:
                          type: integer
                          example: 1
                        type:
                          type: string
                          example: ublox
                        measured_by:
                          type: array
                          example: []
                  timezone:
                    type: integer
                    example: 2
      tags:
        - Website
      security: []
