{
  "openapi": "3.1.0",
  "info": {
    "title": "Outlap Live Timing API",
    "version": "1.0.0",
    "description": "Push laps, penalties and RMonitor streams into Outlap events, and read public leaderboards, laps and feed state. Times are integer milliseconds.",
    "contact": {
      "name": "Outlap support",
      "email": "support@outlap.xyz"
    }
  },
  "externalDocs": {
    "description": "Documentation",
    "url": "https://docs.outlap.xyz/api/overview"
  },
  "servers": [
    {
      "url": "https://fzfstcyowovukscxgdrh.supabase.co/functions/v1/timing-api",
      "description": "Production"
    }
  ],
  "tags": [
    {
      "name": "Ingest"
    },
    {
      "name": "Sessions"
    },
    {
      "name": "Feed"
    },
    {
      "name": "Read"
    }
  ],
  "paths": {
    "/v1/events/{eventId}/laps": {
      "post": {
        "tags": [
          "Ingest"
        ],
        "operationId": "ingestLaps",
        "summary": "Ingest laps for an event",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "description": "Up to 1,000 laps per request. Not idempotent: re-posting creates duplicates. Requires `timing:write`.",
        "externalDocs": {
          "description": "Documentation",
          "url": "https://docs.outlap.xyz/api/timing/ingest-laps"
        },
        "parameters": [
          {
            "name": "eventId",
            "in": "path",
            "required": true,
            "description": "The event's ID.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "laps"
                ],
                "properties": {
                  "laps": {
                    "type": "array",
                    "minItems": 1,
                    "maxItems": 1000,
                    "items": {
                      "$ref": "#/components/schemas/LapInput"
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Rows created.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "inserted": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Validation failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Event belongs to another club, or the key lacks `timing:write`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimit"
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "Read"
        ],
        "operationId": "listLaps",
        "summary": "List laps (public events)",
        "description": "Up to 5,000 laps, oldest first. Public events only.",
        "externalDocs": {
          "description": "Documentation",
          "url": "https://docs.outlap.xyz/api/timing/list-laps"
        },
        "parameters": [
          {
            "name": "eventId",
            "in": "path",
            "required": true,
            "description": "The event's ID.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Laps.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "event_id": {
                      "type": "string"
                    },
                    "laps": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Lap"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not found or not public.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimit"
                }
              }
            }
          }
        }
      }
    },
    "/v1/events/{eventId}/sessions/{sessionId}/laps": {
      "post": {
        "tags": [
          "Ingest"
        ],
        "operationId": "ingestSessionLaps",
        "summary": "Ingest laps for a session",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "externalDocs": {
          "description": "Documentation",
          "url": "https://docs.outlap.xyz/api/timing/ingest-laps"
        },
        "parameters": [
          {
            "name": "eventId",
            "in": "path",
            "required": true,
            "description": "The event's ID.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sessionId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "laps"
                ],
                "properties": {
                  "laps": {
                    "type": "array",
                    "minItems": 1,
                    "maxItems": 1000,
                    "items": {
                      "$ref": "#/components/schemas/LapInput"
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Rows created.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "inserted": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Validation failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Event belongs to another club, or the key lacks `timing:write`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimit"
                }
              }
            }
          }
        }
      }
    },
    "/v1/events/{eventId}/stream": {
      "post": {
        "tags": [
          "Ingest"
        ],
        "operationId": "streamTiming",
        "summary": "Stream live timing packets",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "description": "Raw RMonitor lines or vendor passings. Decoded server-side, drivers matched by transponder then car number, laps de-duplicated per transponder, lap number and session.",
        "externalDocs": {
          "description": "Documentation",
          "url": "https://docs.outlap.xyz/api/timing/stream"
        },
        "parameters": [
          {
            "name": "eventId",
            "in": "path",
            "required": true,
            "description": "The event's ID.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "vendor": {
                    "type": "string",
                    "enum": [
                      "orbits",
                      "trackside",
                      "axware",
                      "rmonitor",
                      "generic"
                    ],
                    "default": "rmonitor"
                  },
                  "lines": {
                    "type": "array",
                    "maxItems": 5000,
                    "items": {
                      "type": "string"
                    },
                    "description": "Raw RMonitor records."
                  },
                  "passings": {
                    "type": "array",
                    "maxItems": 2000,
                    "items": {
                      "$ref": "#/components/schemas/Passing"
                    }
                  },
                  "session_id": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "bridge_version": {
                    "type": "string",
                    "maxLength": 40
                  },
                  "source_label": {
                    "type": "string",
                    "maxLength": 120
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Packet processed.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "ok": {
                      "type": "boolean"
                    },
                    "recognised": {
                      "type": "integer"
                    },
                    "laps_decoded": {
                      "type": "integer"
                    },
                    "laps_inserted": {
                      "type": "integer"
                    },
                    "flag": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "session": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Validation failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Event belongs to another club, or the key lacks `timing:write`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Packet too large.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimit"
                }
              }
            }
          }
        }
      }
    },
    "/v1/events/{eventId}/penalties": {
      "post": {
        "tags": [
          "Ingest"
        ],
        "operationId": "addPenalties",
        "summary": "Add penalties",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "externalDocs": {
          "description": "Documentation",
          "url": "https://docs.outlap.xyz/api/timing/penalties"
        },
        "parameters": [
          {
            "name": "eventId",
            "in": "path",
            "required": true,
            "description": "The event's ID.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "penalties"
                ],
                "properties": {
                  "penalties": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/Penalty"
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Rows created.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "inserted": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Validation failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Event belongs to another club, or the key lacks `timing:write`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimit"
                }
              }
            }
          }
        }
      }
    },
    "/v1/events/{eventId}/sessions/{sessionId}": {
      "patch": {
        "tags": [
          "Sessions"
        ],
        "operationId": "updateSession",
        "summary": "Update session status",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "externalDocs": {
          "description": "Documentation",
          "url": "https://docs.outlap.xyz/api/timing/update-session"
        },
        "parameters": [
          {
            "name": "eventId",
            "in": "path",
            "required": true,
            "description": "The event's ID.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sessionId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "status"
                ],
                "properties": {
                  "status": {
                    "type": "string",
                    "enum": [
                      "scheduled",
                      "live",
                      "finished"
                    ]
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Updated.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "ok": {
                      "type": "boolean"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Validation failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Event belongs to another club, or the key lacks `timing:write`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimit"
                }
              }
            }
          }
        }
      }
    },
    "/v1/events/{eventId}/feed/status": {
      "post": {
        "tags": [
          "Feed"
        ],
        "operationId": "reportFeedStatus",
        "summary": "Report feed status (heartbeat)",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "externalDocs": {
          "description": "Documentation",
          "url": "https://docs.outlap.xyz/api/timing/feed-status"
        },
        "parameters": [
          {
            "name": "eventId",
            "in": "path",
            "required": true,
            "description": "The event's ID.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "status"
                ],
                "properties": {
                  "status": {
                    "type": "string",
                    "enum": [
                      "idle",
                      "connecting",
                      "live",
                      "stale",
                      "error",
                      "stopped"
                    ]
                  },
                  "vendor": {
                    "type": "string"
                  },
                  "error": {
                    "type": "string",
                    "maxLength": 500
                  },
                  "source_label": {
                    "type": "string",
                    "maxLength": 120
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Stored.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "ok": {
                      "type": "boolean"
                    },
                    "status": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimit"
                }
              }
            }
          }
        }
      }
    },
    "/v1/events/{eventId}/feed": {
      "get": {
        "tags": [
          "Feed"
        ],
        "operationId": "getFeed",
        "summary": "Get feed state (public events)",
        "externalDocs": {
          "description": "Documentation",
          "url": "https://docs.outlap.xyz/api/timing/get-feed"
        },
        "parameters": [
          {
            "name": "eventId",
            "in": "path",
            "required": true,
            "description": "The event's ID.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Feed state; `feed` is null if none has connected.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "event_id": {
                      "type": "string"
                    },
                    "feed": {
                      "oneOf": [
                        {
                          "$ref": "#/components/schemas/Feed"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not found or not public.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimit"
                }
              }
            }
          }
        }
      }
    },
    "/v1/events/{eventId}/leaderboard": {
      "get": {
        "tags": [
          "Read"
        ],
        "operationId": "getLeaderboard",
        "summary": "Get leaderboard (public events)",
        "externalDocs": {
          "description": "Documentation",
          "url": "https://docs.outlap.xyz/api/timing/leaderboard"
        },
        "parameters": [
          {
            "name": "eventId",
            "in": "path",
            "required": true,
            "description": "The event's ID.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Standings by position.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "event_id": {
                      "type": "string"
                    },
                    "results": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Result"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not found or not public.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimit"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "description": "Club API key beginning `olap_`. Shown once when created."
      }
    },
    "schemas": {
      "Error": {
        "type": "object",
        "required": [
          "error"
        ],
        "properties": {
          "error": {
            "type": "string",
            "examples": [
              "invalid api key"
            ]
          }
        },
        "additionalProperties": true
      },
      "RateLimit": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string",
            "const": "rate limit exceeded"
          },
          "scope": {
            "type": "string",
            "enum": [
              "minute",
              "hour"
            ]
          },
          "retry_after_s": {
            "type": "integer"
          }
        }
      },
      "LapInput": {
        "type": "object",
        "required": [
          "lap_number",
          "lap_time_ms"
        ],
        "properties": {
          "lap_number": {
            "type": "integer",
            "minimum": 0
          },
          "lap_time_ms": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 86400000,
            "description": "Lap time in milliseconds."
          },
          "s1_ms": {
            "type": "integer"
          },
          "s2_ms": {
            "type": "integer"
          },
          "s3_ms": {
            "type": "integer"
          },
          "s4_ms": {
            "type": "integer"
          },
          "speed_trap_kph": {
            "type": "number"
          },
          "is_valid": {
            "type": "boolean",
            "default": true
          },
          "invalid_reason": {
            "type": "string"
          },
          "transponder_id": {
            "type": "string",
            "description": "Used to resolve the driver when user_id is absent."
          },
          "user_id": {
            "type": "string",
            "description": "Outlap driver; overrides transponder lookup."
          },
          "recorded_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "Lap": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "event_id": {
            "type": "string"
          },
          "session_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "user_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "lap_number": {
            "type": "integer"
          },
          "lap_time_ms": {
            "type": "integer"
          },
          "s1_ms": {
            "type": [
              "integer",
              "null"
            ]
          },
          "s2_ms": {
            "type": [
              "integer",
              "null"
            ]
          },
          "s3_ms": {
            "type": [
              "integer",
              "null"
            ]
          },
          "s4_ms": {
            "type": [
              "integer",
              "null"
            ]
          },
          "speed_trap_kph": {
            "type": [
              "number",
              "null"
            ]
          },
          "is_valid": {
            "type": "boolean"
          },
          "invalid_reason": {
            "type": [
              "string",
              "null"
            ]
          },
          "transponder_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "source": {
            "type": "string",
            "examples": [
              "api",
              "live:orbits"
            ]
          },
          "recorded_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": true
      },
      "Passing": {
        "type": "object",
        "properties": {
          "transponder": {
            "type": "string"
          },
          "transponder_id": {
            "type": "string"
          },
          "number": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "lap": {
            "type": "integer"
          },
          "lap_number": {
            "type": "integer"
          },
          "lap_time_ms": {
            "type": "integer"
          },
          "lap_time": {
            "type": "string",
            "examples": [
              "1:42.311"
            ]
          },
          "recorded_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "Penalty": {
        "type": "object",
        "required": [
          "user_id",
          "type"
        ],
        "properties": {
          "user_id": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "examples": [
              "time",
              "points_deduction"
            ]
          },
          "session_id": {
            "type": "string"
          },
          "value_ms": {
            "type": "integer",
            "description": "Length of a time penalty."
          },
          "value_int": {
            "type": "integer",
            "description": "Points to deduct."
          },
          "reason": {
            "type": "string"
          }
        }
      },
      "Feed": {
        "type": "object",
        "properties": {
          "vendor": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "idle",
              "connecting",
              "live",
              "stale",
              "error",
              "stopped"
            ]
          },
          "last_seen_at": {
            "type": "string",
            "format": "date-time"
          },
          "laps_ingested": {
            "type": "integer"
          },
          "state": {
            "type": "object",
            "description": "Decoded state: flag, session, lapsToGo, timeToGo, classes, competitors.",
            "additionalProperties": true
          }
        }
      },
      "Result": {
        "type": "object",
        "properties": {
          "user_id": {
            "type": "string"
          },
          "position": {
            "type": [
              "integer",
              "null"
            ]
          },
          "best_lap_ms": {
            "type": [
              "integer",
              "null"
            ]
          },
          "best_lap_time": {
            "type": [
              "string",
              "null"
            ]
          },
          "laps_completed": {
            "type": "integer"
          },
          "total_time_ms": {
            "type": [
              "integer",
              "null"
            ]
          },
          "gap_to_leader_ms": {
            "type": [
              "integer",
              "null"
            ]
          },
          "points": {
            "type": [
              "number",
              "null"
            ]
          },
          "status": {
            "type": "string"
          }
        }
      }
    }
  }
}
