{
  "info": {
    "name": "LapViz API",
    "description": "Set the variable apiKey to a personal API key (Account \u203A API keys on https://lapviz.com). Guides: https://lapviz.com/developers/docs. Reference: https://lapviz.com/swagger.",
    "version": "1.0",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "auth": {
    "type": "apikey",
    "apikey": [
      {
        "key": "key",
        "value": "X-Api-Key",
        "type": "string"
      },
      {
        "key": "value",
        "value": "{{apiKey}}",
        "type": "string"
      },
      {
        "key": "in",
        "value": "header",
        "type": "string"
      }
    ]
  },
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://lapviz.com",
      "type": "string"
    },
    {
      "key": "apiKey",
      "value": "",
      "type": "string"
    }
  ],
  "item": [
    {
      "name": "Account",
      "description": "The authenticated account and the public driver cards.",
      "item": [
        {
          "name": "Driver card of an account (display name, category, number, country, avatar)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/users/info/:userId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "users",
                "info",
                ":userId"
              ],
              "variable": [
                {
                  "key": "userId",
                  "value": "",
                  "description": "Required. Account identifier, e.g. \u0060users/1-A\u0060 (URL-encoded: \u0060users%2F1-A\u0060)."
                }
              ]
            },
            "description": "Driver card of an account (display name, category, number, country, avatar). Someone else\u0027s card only when his\r\nprofile is public: not private, not a minor, not disabled (the same rule as the public team pages)."
          }
        },
        {
          "name": "The authenticated account: identifier, e-mail address, roles and driver card",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/users/me",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "users",
                "me"
              ]
            },
            "description": "The authenticated account: identifier, e-mail address, roles and driver card. The first call to make with a new key."
          }
        },
        {
          "name": "Sharing of the new sessions of the user, when he chose it (null: never) and how many sessions it...",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/users/me/sharing-preference",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "users",
                "me",
                "sharing-preference"
              ]
            },
            "description": "Sharing of the new sessions of the user, when he chose it (null: never) and how many sessions it would change."
          }
        },
        {
          "name": "The user chooses the sharing of his new sessions, and optionally gives it to all his sessions",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/users/me/sharing-preference",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "users",
                "me",
                "sharing-preference"
              ]
            },
            "description": "The user chooses the sharing of his new sessions, and optionally gives it to all his sessions.",
            "body": {
              "mode": "raw",
              "raw": "{\r\n  \u0022sharing\u0022: 0,\r\n  \u0022applyToExisting\u0022: false\r\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        }
      ]
    },
    {
      "name": "Sessions",
      "description": "Search, read, edit, delete and export lap timing sessions, their laps, sectors and telemetry channels.",
      "item": [
        {
          "name": "Deletes a session (soft deletion, like the web site): its owner or an administrator only",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/session/:sessionId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "session",
                ":sessionId"
              ],
              "variable": [
                {
                  "key": "sessionId",
                  "value": "",
                  "description": "Required. Share identifier of the session."
                }
              ]
            },
            "description": "Deletes a session (soft deletion, like the web site): its owner or an administrator only."
          }
        },
        {
          "name": "A session: circuit, driver, start and duration, best, rolling and theoretical laps, every lap and...",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/session/:sessionId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "session",
                ":sessionId"
              ],
              "variable": [
                {
                  "key": "sessionId",
                  "value": "",
                  "description": "Required. Share identifier of the session."
                }
              ]
            },
            "description": "A session: circuit, driver, start and duration, best, rolling and theoretical laps, every lap and sector, the\r\nweather and, when the caller may read the telemetry, the names of its channels.\n\nAuthentication is optional: anonymous callers see the public sessions and the lap times of the sessions shared\r\nwith their lap times only. The share identifier is the last part of the address of the session page\r\n(https://lapviz.com/session/{sessionId})."
          }
        },
        {
          "name": "Changes the label, description, notes, sharing, vehicle or setup sheet of a session of the caller...",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/session/:sessionId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "session",
                ":sessionId"
              ],
              "variable": [
                {
                  "key": "sessionId",
                  "value": "",
                  "description": "Required."
                }
              ]
            },
            "description": "Changes the label, description, notes, sharing, vehicle or setup sheet of a session of the caller; the fields\r\nleft out (null) keep their value.\n\nExample: make a session visible to everybody.\r\n            \r\n    { \u0022sharing\u0022: \u0022Public\u0022 }\r\n            \r\nSharing: \u0060Public\u0060 (everything), \u0060Laptimes\u0060 (lap times only, the telemetry stays private),\r\n\u0060Restricted\u0060 (the people it is shared with on the site) or \u0060Private\u0060.",
            "body": {
              "mode": "raw",
              "raw": "{\r\n  \u0022label\u0022: \u0022\u0022,\r\n  \u0022description\u0022: \u0022\u0022,\r\n  \u0022notes\u0022: \u0022\u0022,\r\n  \u0022sharing\u0022: \u0022\u0022,\r\n  \u0022vehicleId\u0022: \u0022\u0022,\r\n  \u0022setup\u0022: {\r\n    \u0022tyres\u0022: \u0022\u0022,\r\n    \u0022tyreCondition\u0022: \u0022\u0022,\r\n    \u0022tyreLaps\u0022: 0,\r\n    \u0022pressureFront\u0022: 0,\r\n    \u0022pressureRear\u0022: 0,\r\n    \u0022gearingFront\u0022: 0,\r\n    \u0022gearingRear\u0022: 0,\r\n    \u0022carburation\u0022: \u0022\u0022,\r\n    \u0022chassis\u0022: \u0022\u0022,\r\n    \u0022feeling\u0022: 0\r\n  }\r\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "The laps and sectors of a session with the samples of every telemetry channel, for the whole sess...",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/session/alldata/:sessionId/:lap",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "session",
                "alldata",
                ":sessionId",
                ":lap"
              ],
              "query": [
                {
                  "key": "generator",
                  "value": "",
                  "description": "Timing source, when the session has several (e.g. the data logger and a phone app); by default the telemetry device.",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "sessionId",
                  "value": "",
                  "description": "Required. Share identifier of the session."
                },
                {
                  "key": "lap",
                  "value": "",
                  "description": "Required. Lap number, from 1; none for the whole session."
                }
              ]
            },
            "description": "The laps and sectors of a session with the samples of every telemetry channel, for the whole session or one lap."
          }
        },
        {
          "name": "Samples of one telemetry channel during one lap",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/session/data/:sessionId/:lap/:channel",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "session",
                "data",
                ":sessionId",
                ":lap",
                ":channel"
              ],
              "variable": [
                {
                  "key": "sessionId",
                  "value": "",
                  "description": "Required. Share identifier of the session."
                },
                {
                  "key": "lap",
                  "value": "",
                  "description": "Required. Lap number, from 1."
                },
                {
                  "key": "channel",
                  "value": "",
                  "description": "Required. Channel name, as listed in \u0060channels\u0060 by \u0060GET /api/session/{sessionId}\u0060 (e.g. \u0060GPS Speed\u0060, \u0060RPM\u0060)."
                }
              ]
            },
            "description": "Samples of one telemetry channel during one lap."
          }
        },
        {
          "name": "A session written in another file format: the telemetry for analysis tools, the trajectory for ma...",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/session/export/:sessionId/:format",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "session",
                "export",
                ":sessionId",
                ":format"
              ],
              "query": [
                {
                  "key": "generator",
                  "value": "",
                  "description": "Timing source, when the session has several; by default the telemetry device.",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "sessionId",
                  "value": "",
                  "description": "Required. Share identifier of the session."
                },
                {
                  "key": "format",
                  "value": "",
                  "description": "Required. One of the formats above."
                }
              ]
            },
            "description": "A session written in another file format: the telemetry for analysis tools, the trajectory for maps, subtitles\r\nand motion graphics for video editors, or the file originally imported.\n\nFormats: \u0060lvz\u0060 (LapViz, every sample and timing source), \u0060csv\u0060, \u0060gpx\u0060, \u0060kml\u0060, \u0060geojson\u0060,\r\n\u0060srt\u0060 (SubRip subtitles), \u0060csrt\u0060 (coloured subtitles), \u0060txt\u0060 (text description), \u0060mgjson\u0060\r\n(Adobe After Effects motion graphics) and \u0060org\u0060 (the original file, its owner only).\r\nEvery format carries the telemetry: the caller must be allowed to read it (a session shared with its lap times\r\nonly is not exported)."
          }
        },
        {
          "name": "Searches the sessions the caller may see: his own, those shared with him or with the teams he coa...",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/session/search",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "session",
                "search"
              ]
            },
            "description": "Searches the sessions the caller may see: his own, those shared with him or with the teams he coaches, and the\r\npublic ones. Newest first, one page at a time.\n\nExample: your 20 latest sessions with telemetry at Mariembourg.\r\n            \r\n    { \u0022mine\u0022: true, \u0022circuitCode\u0022: \u0022mariembourg\u0022, \u0022telemetryDataAvailable\u0022: true, \u0022activePageIndex\u0022: 1, \u0022pageSize\u0022: 20 }\r\n            \r\n\u0060pageSize\u0060 is at most 20; \u0060activePageIndex\u0060 starts at 1. \u0060totalRecords\u0060 counts every page.",
            "body": {
              "mode": "raw",
              "raw": "{\r\n  \u0022userId\u0022: \u0022\u0022,\r\n  \u0022userIds\u0022: [\r\n    \u0022\u0022\r\n  ],\r\n  \u0022mine\u0022: false,\r\n  \u0022circuit\u0022: \u0022\u0022,\r\n  \u0022circuitCode\u0022: \u0022\u0022,\r\n  \u0022telemetryDataAvailable\u0022: false,\r\n  \u0022videoAvailable\u0022: false,\r\n  \u0022weatherTemperatureMin\u0022: 0,\r\n  \u0022weatherTemperatureMax\u0022: 0,\r\n  \u0022weatherConditions\u0022: \u0022\u0022,\r\n  \u0022activePageIndex\u0022: 0,\r\n  \u0022pageSize\u0022: 0,\r\n  \u0022from\u0022: \u00222026-01-01T00:00:00Z\u0022,\r\n  \u0022to\u0022: \u00222026-01-01T00:00:00Z\u0022\r\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "The vehicles of the caller, the primary one first: the values of \u0060vehicleId\u0060 when editing a session",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/session/vehicles",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "session",
                "vehicles"
              ]
            },
            "description": "The vehicles of the caller, the primary one first: the values of \u0060vehicleId\u0060 when editing a session."
          }
        }
      ]
    },
    {
      "name": "Library sync",
      "description": "Keep a local copy of your session library up to date: change feed, LapViz files and metadata.",
      "item": [
        {
          "name": "Data of a session in the LapViz format (.lvz), for the apps: resumable with Range requests (send...",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/session/:sessionId/file",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "session",
                ":sessionId",
                "file"
              ],
              "variable": [
                {
                  "key": "sessionId",
                  "value": "",
                  "description": "Required."
                }
              ]
            },
            "description": "Data of a session in the LapViz format (.lvz), for the apps: resumable with Range requests (send If-Range with the\r\nentity tag: the description written in the file, setup included, changes with the edits of the session)."
          }
        },
        {
          "name": "Change feed of the session library of the user: sessions created or changed, and sessions that le...",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/session/changes",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "session",
                "changes"
              ],
              "query": [
                {
                  "key": "cursor",
                  "value": "",
                  "description": "Cursor returned by the previous call; none for the whole library.",
                  "disabled": true
                },
                {
                  "key": "pageSize",
                  "value": "",
                  "description": "Most changes in the response (1-500).",
                  "disabled": true
                }
              ]
            },
            "description": "Change feed of the session library of the user: sessions created or changed, and sessions that left it\r\n(deleted, given to another account), since cursor."
          }
        }
      ]
    },
    {
      "name": "Import",
      "description": "Send data logger and lap timer files: LapViz recognises more than 20 formats and creates the sessions in the background.",
      "item": [
        {
          "name": "Imports a data logger or lap timer file (AiM, Alfano, Unipro, RaceBox, RaceChrono, GPX, CSV and m...",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "lv-session-id",
                "value": "",
                "description": "Your identifier of the session (letters, digits and dashes, at most 64): makes the upload idempotent.",
                "disabled": true
              },
              {
                "key": "lv-driver",
                "value": "",
                "description": "Account the sessions belong to: yours (default), a driver you coach, or \u0027auto\u0027 to recognise him from the file.",
                "disabled": true
              },
              {
                "key": "lv-source-device",
                "value": "",
                "description": "Lap timer the file comes from, \u0027brand:serial\u0027: recognises the driver of a shared kart.",
                "disabled": true
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/session/import",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "session",
                "import"
              ]
            },
            "description": "Imports a data logger or lap timer file (AiM, Alfano, Unipro, RaceBox, RaceChrono, GPX, CSV and many more): the\r\nsessions are created in the background, follow them with \u0060GET /api/session/import/{jobId}\u0060.\n\nExample:\r\n            \r\n    curl -H \u0022X-Api-Key: lvz_...\u0022 -F \u0022file=@session.xrk\u0022 https://lapviz.com/api/session/import\r\n            \r\nThe sessions take the default sharing of the account. Send \u0060lv-session-id\u0060 with an identifier of your own to\r\nmake the upload idempotent: sending the same session again returns the stored one instead of a duplicate.\r\nThe formats: https://lapviz.com/formats.",
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "file",
                  "type": "file",
                  "src": [],
                  "description": "The file, with its original name."
                }
              ]
            }
          }
        },
        {
          "name": "State of an imported file: \u0060Enqueued\u0060 or \u0060Processing\u0060 while it is read, then \u0060Success\u0060 with the s...",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/session/import/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "session",
                "import",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "Required. The \u0060jobId\u0060 returned by the import."
                }
              ]
            },
            "description": "State of an imported file: \u0060Enqueued\u0060 or \u0060Processing\u0060 while it is read, then \u0060Success\u0060 with the\r\nsessions created (\u0060shareIds\u0060: a file may hold several) or \u0060Failed\u0060 with the reason.\n\nPoll every few seconds after \u0060POST /api/session/import\u0060; most files take a few seconds."
          }
        },
        {
          "name": "Driver recognized for a laptimer before its files are sent, from the previous choices of the user...",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/session/import/detect",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "session",
                "import",
                "detect"
              ]
            },
            "description": "Driver recognized for a laptimer before its files are sent, from the previous choices of the user (the same\r\ndetection as the import with \u0022lv-driver: auto\u0022): the app shows him as the default choice. 204 when none.",
            "body": {
              "mode": "raw",
              "raw": "{\r\n  \u0022brand\u0022: \u0022\u0022,\r\n  \u0022serial\u0022: \u0022\u0022,\r\n  \u0022sourceDevice\u0022: \u0022\u0022,\r\n  \u0022deviceName\u0022: \u0022\u0022,\r\n  \u0022driverName\u0022: \u0022\u0022,\r\n  \u0022vehicleName\u0022: \u0022\u0022\r\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Drivers the user may import sessions for: himself first, then the drivers of the teams he coaches...",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/session/import/drivers",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "session",
                "import",
                "drivers"
              ]
            },
            "description": "Drivers the user may import sessions for: himself first, then the drivers of the teams he coaches (those who do\r\nnot share with the coaches cannot be chosen). Used by the apps that download the laptimers of a team."
          }
        }
      ]
    },
    {
      "name": "Teams",
      "description": "Teams, their members and roles, invitations and the sessions shared with the coaches.",
      "item": [
        {
          "name": "The teams of the user, by name",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/teams",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "teams"
              ]
            },
            "description": "The teams of the user, by name."
          }
        },
        {
          "name": "Creates a team owned by the user",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/teams",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "teams"
              ]
            },
            "description": "Creates a team owned by the user.",
            "body": {
              "mode": "raw",
              "raw": "{\r\n  \u0022name\u0022: \u0022\u0022,\r\n  \u0022description\u0022: \u0022\u0022,\r\n  \u0022roles\u0022: [\r\n    \u0022\u0022\r\n  ]\r\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "The team with its members (and its invitations for the admins); 404 when the user is not a member",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/teams/:teamKey",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "teams",
                ":teamKey"
              ],
              "variable": [
                {
                  "key": "teamKey",
                  "value": "",
                  "description": "Required."
                }
              ]
            },
            "description": "The team with its members (and its invitations for the admins); 404 when the user is not a member."
          }
        },
        {
          "name": "The user joins the team that invited him, or declines; 404 without invitation",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/teams/:teamKey/invitation",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "teams",
                ":teamKey",
                "invitation"
              ],
              "variable": [
                {
                  "key": "teamKey",
                  "value": "",
                  "description": "Required."
                }
              ]
            },
            "description": "The user joins the team that invited him, or declines; 404 without invitation.",
            "body": {
              "mode": "raw",
              "raw": "{\r\n  \u0022accept\u0022: false\r\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "An admin creates an invitation (only the owner invites coaches)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/teams/:teamKey/invites",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "teams",
                ":teamKey",
                "invites"
              ],
              "variable": [
                {
                  "key": "teamKey",
                  "value": "",
                  "description": "Required."
                }
              ]
            },
            "description": "An admin creates an invitation (only the owner invites coaches).",
            "body": {
              "mode": "raw",
              "raw": "{\r\n  \u0022days\u0022: 0,\r\n  \u0022uses\u0022: 0,\r\n  \u0022roles\u0022: [\r\n    \u0022\u0022\r\n  ]\r\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "An admin revokes an invitation link or code: it stops working at once",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/teams/:teamKey/invites/:inviteKey",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "teams",
                ":teamKey",
                "invites",
                ":inviteKey"
              ],
              "variable": [
                {
                  "key": "teamKey",
                  "value": "",
                  "description": "Required."
                },
                {
                  "key": "inviteKey",
                  "value": "",
                  "description": "Required."
                }
              ]
            },
            "description": "An admin revokes an invitation link or code: it stops working at once."
          }
        },
        {
          "name": "The user leaves the team (the owner gives it to another member first)",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/teams/:teamKey/leave",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "teams",
                ":teamKey",
                "leave"
              ],
              "variable": [
                {
                  "key": "teamKey",
                  "value": "",
                  "description": "Required."
                }
              ]
            },
            "description": "The user leaves the team (the owner gives it to another member first)."
          }
        },
        {
          "name": "Removes a member: the owner removes anyone but himself, an admin the members who are not admins",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/teams/:teamKey/members/:memberKey",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "teams",
                ":teamKey",
                "members",
                ":memberKey"
              ],
              "variable": [
                {
                  "key": "teamKey",
                  "value": "",
                  "description": "Required."
                },
                {
                  "key": "memberKey",
                  "value": "",
                  "description": "Required."
                }
              ]
            },
            "description": "Removes a member: the owner removes anyone but himself, an admin the members who are not admins."
          }
        },
        {
          "name": "Changes the access level of a member (\u0060member\u0060 or \u0060admin\u0060, by the owner only) and his functions i...",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/teams/:teamKey/members/:memberKey",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "teams",
                ":teamKey",
                "members",
                ":memberKey"
              ],
              "variable": [
                {
                  "key": "teamKey",
                  "value": "",
                  "description": "Required."
                },
                {
                  "key": "memberKey",
                  "value": "",
                  "description": "Required."
                }
              ]
            },
            "description": "Changes the access level of a member (\u0060member\u0060 or \u0060admin\u0060, by the owner only) and his functions in the\r\nteam: \u0060driver\u0060, \u0060coach\u0060, \u0060manager\u0060, \u0060engineer\u0060, \u0060mechanic\u0060, \u0060parent\u0060. A member sets\r\nhis own functions, an admin those of the members who are not admins; only the owner makes someone coach.",
            "body": {
              "mode": "raw",
              "raw": "{\r\n  \u0022access\u0022: \u0022\u0022,\r\n  \u0022roles\u0022: [\r\n    \u0022\u0022\r\n  ]\r\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "The owner gives the team to another member",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/teams/:teamKey/owner",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "teams",
                ":teamKey",
                "owner"
              ],
              "variable": [
                {
                  "key": "teamKey",
                  "value": "",
                  "description": "Required."
                }
              ]
            },
            "description": "The owner gives the team to another member.",
            "body": {
              "mode": "raw",
              "raw": "{\r\n  \u0022memberKey\u0022: \u0022\u0022\r\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "The user shares all his sessions with the coaches of the team, or only his public ones",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/teams/:teamKey/share",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "teams",
                ":teamKey",
                "share"
              ],
              "variable": [
                {
                  "key": "teamKey",
                  "value": "",
                  "description": "Required."
                }
              ]
            },
            "description": "The user shares all his sessions with the coaches of the team, or only his public ones.",
            "body": {
              "mode": "raw",
              "raw": "{\r\n  \u0022share\u0022: false\r\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "The team of an invitation code, before joining it (the codes tried are limited per user)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/teams/invitation/:code",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "teams",
                "invitation",
                ":code"
              ],
              "variable": [
                {
                  "key": "code",
                  "value": "",
                  "description": "Required."
                }
              ]
            },
            "description": "The team of an invitation code, before joining it (the codes tried are limited per user)."
          }
        },
        {
          "name": "The teams whose admins invited the user (from his profile), waiting for his answer",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/teams/invitations",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "teams",
                "invitations"
              ]
            },
            "description": "The teams whose admins invited the user (from his profile), waiting for his answer."
          }
        },
        {
          "name": "Joins the team of the code: 200 with the team, 404 unknown code, 410 expired or used up",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/teams/join",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "teams",
                "join"
              ]
            },
            "description": "Joins the team of the code: 200 with the team, 404 unknown code, 410 expired or used up.",
            "body": {
              "mode": "raw",
              "raw": "{\r\n  \u0022code\u0022: \u0022\u0022\r\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        }
      ]
    },
    {
      "name": "Webhooks",
      "description": "Addresses that receive the events of your account, signed: a session imported, changed or deleted, an import that failed.",
      "item": [
        {
          "name": "The webhooks of the account, oldest first",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/webhooks",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "webhooks"
              ]
            },
            "description": "The webhooks of the account, oldest first."
          }
        },
        {
          "name": "Creates a webhook",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/webhooks",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "webhooks"
              ]
            },
            "description": "Creates a webhook. The response carries its signing secret, which is not shown again: keep it with your\r\nreceiver to check the \u0060LapViz-Signature\u0060 header.\n\nExample:\r\n            \r\n    { \u0022url\u0022: \u0022https://example.com/lapviz\u0022, \u0022description\u0022: \u0022My dashboard\u0022, \u0022events\u0022: [\u0022session.created\u0022, \u0022session.deleted\u0022] }\r\n            \r\nAt most 5 webhooks per account. The address must use HTTPS and be reachable on the internet.",
            "body": {
              "mode": "raw",
              "raw": "{\r\n  \u0022url\u0022: \u0022\u0022,\r\n  \u0022description\u0022: \u0022\u0022,\r\n  \u0022events\u0022: [\r\n    \u0022\u0022\r\n  ],\r\n  \u0022enabled\u0022: false\r\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Deletes a webhook: no more events are sent to it",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/webhooks/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "webhooks",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "Required."
                }
              ]
            },
            "description": "Deletes a webhook: no more events are sent to it."
          }
        },
        {
          "name": "A webhook of the account",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/webhooks/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "webhooks",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "Required. Webhook identifier, e.g. \u00601-A\u0060."
                }
              ]
            },
            "description": "A webhook of the account."
          }
        },
        {
          "name": "Changes the address, description or events of a webhook, or pauses (\u0060enabled: false\u0060) or resumes it",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/webhooks/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "webhooks",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "Required."
                }
              ]
            },
            "description": "Changes the address, description or events of a webhook, or pauses (\u0060enabled: false\u0060) or resumes it.",
            "body": {
              "mode": "raw",
              "raw": "{\r\n  \u0022url\u0022: \u0022\u0022,\r\n  \u0022description\u0022: \u0022\u0022,\r\n  \u0022events\u0022: [\r\n    \u0022\u0022\r\n  ],\r\n  \u0022enabled\u0022: false\r\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "The latest deliveries of a webhook (30 days at most), newest first, with their payload",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/webhooks/:id/deliveries",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "webhooks",
                ":id",
                "deliveries"
              ],
              "query": [
                {
                  "key": "take",
                  "value": "",
                  "description": "How many, 1 to 100 (default 30).",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "Required. Webhook identifier."
                }
              ]
            },
            "description": "The latest deliveries of a webhook (30 days at most), newest first, with their payload."
          }
        },
        {
          "name": "Sends a \u0060ping\u0060 event to the webhook now, to check the receiver (even when it is paused)",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/webhooks/:id/ping",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "webhooks",
                ":id",
                "ping"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "Required."
                }
              ]
            },
            "description": "Sends a \u0060ping\u0060 event to the webhook now, to check the receiver (even when it is paused)."
          }
        },
        {
          "name": "A new signing secret; the previous one stops signing at once",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/webhooks/:id/secret",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "webhooks",
                ":id",
                "secret"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "Required."
                }
              ]
            },
            "description": "A new signing secret; the previous one stops signing at once. The response is the only copy."
          }
        },
        {
          "name": "Sends a delivery again, as a new delivery of the same event (same \u0060id\u0060 in the body: deduplicate o...",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/webhooks/deliveries/:deliveryId/redeliver",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "webhooks",
                "deliveries",
                ":deliveryId",
                "redeliver"
              ],
              "variable": [
                {
                  "key": "deliveryId",
                  "value": "",
                  "description": "Required. Delivery identifier, e.g. \u006012-A\u0060."
                }
              ]
            },
            "description": "Sends a delivery again, as a new delivery of the same event (same \u0060id\u0060 in the body: deduplicate on it)."
          }
        }
      ]
    },
    {
      "name": "Circuits",
      "description": "The circuits of LapViz and the timing lines a lap timer needs. Public: no authentication.",
      "item": [
        {
          "name": "Circuits updated since lastUpdateDateTime within radius km, with their geometry, as LapViz.Teleme...",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/circuit/configurations",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "circuit",
                "configurations"
              ],
              "query": [
                {
                  "key": "lastUpdateDateTime",
                  "value": "",
                  "description": "Only the circuits changed after this instant (ISO 8601, UTC); \u00602000-01-01T00:00:00Z\u0060 for all.",
                  "disabled": true
                },
                {
                  "key": "lat",
                  "value": "",
                  "description": "Latitude of the centre, in decimal degrees.",
                  "disabled": true
                },
                {
                  "key": "lon",
                  "value": "",
                  "description": "Longitude of the centre, in decimal degrees.",
                  "disabled": true
                },
                {
                  "key": "radius",
                  "value": "",
                  "description": "Radius in kilometres, at most 200.",
                  "disabled": true
                }
              ]
            },
            "description": "Circuits updated since lastUpdateDateTime within radius km,\r\nwith their geometry, as LapViz.Telemetry circuit configurations: what a lap timer\r\n(LapViz.Laptimer) needs to detect the circuit and time laps. Circuits without bounding\r\nbox or timing line are left out. Public: no authentication needed.\n\nThe objects are the \u0060CircuitConfiguration\u0060 of the open source LapViz.Telemetry library\r\n(https://github.com/lapviz/LapViz.Telemetry): start/finish and sector lines, bounding box and circuit type.\r\nSend the time of your previous call as \u0060lastUpdateDateTime\u0060 to receive only what changed.",
            "auth": {
              "type": "noauth"
            }
          }
        },
        {
          "name": "The 10 circuits closest to a position, nearest first",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/circuit/nearby",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "circuit",
                "nearby"
              ],
              "query": [
                {
                  "key": "lat",
                  "value": "",
                  "description": "Latitude, in decimal degrees (WGS 84).",
                  "disabled": true
                },
                {
                  "key": "lon",
                  "value": "",
                  "description": "Longitude, in decimal degrees (WGS 84).",
                  "disabled": true
                },
                {
                  "key": "radius",
                  "value": "",
                  "description": "Search radius in kilometres, at most 200.",
                  "disabled": true
                }
              ]
            },
            "description": "The 10 circuits closest to a position, nearest first. Public: no authentication needed.",
            "auth": {
              "type": "noauth"
            }
          }
        },
        {
          "name": "Searches the circuits by name, code, venue or location",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/circuit/search",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "circuit",
                "search"
              ],
              "query": [
                {
                  "key": "text",
                  "value": "",
                  "description": "Words to look for; none for every circuit.",
                  "disabled": true
                },
                {
                  "key": "p",
                  "value": "",
                  "description": "Page number, from 1.",
                  "disabled": true
                },
                {
                  "key": "s",
                  "value": "",
                  "description": "Circuits per page, 1 to 100 (default 20).",
                  "disabled": true
                }
              ]
            },
            "description": "Searches the circuits by name, code, venue or location. Public: no authentication needed.",
            "auth": {
              "type": "noauth"
            }
          }
        }
      ]
    }
  ]
}