{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://openteesheet.com/schemas/venue-export.schema.json",
  "title": "OpenTeeSheet venue export (open format v1)",
  "description": "Everything a venue owner's account holds about their venue in the open format: the venue, every bay, every booking, every door grant and every bay session. The same document from GET /api/v1/venue/export, `openteesheet export` and the MCP tool export_venue_data. Every record is complete (all fields present, null when unknown).",
  "type": "object",
  "properties": {
    "format": {
      "const": "openteesheet.venue-export"
    },
    "version": {
      "const": 1
    },
    "schema": {
      "const": "https://openteesheet.com/schemas/venue-export.schema.json"
    },
    "exported_at": {
      "type": "string",
      "format": "date-time"
    },
    "venue": {
      "allOf": [
        {
          "$ref": "https://openteesheet.com/schemas/venue.schema.json"
        },
        {
          "type": "object",
          "required": [
            "active",
            "city",
            "created_at",
            "description",
            "email",
            "id",
            "location",
            "name",
            "object",
            "open_24_7",
            "operating_hours",
            "payment_mode",
            "phone",
            "slug",
            "state",
            "timezone",
            "website"
          ]
        }
      ]
    },
    "bays": {
      "type": "array",
      "items": {
        "allOf": [
          {
            "$ref": "https://openteesheet.com/schemas/bay.schema.json"
          },
          {
            "type": "object",
            "required": [
              "active",
              "buffer_minutes",
              "id",
              "launch_monitor",
              "max_players",
              "name",
              "object",
              "rate_cents",
              "session_control",
              "simulator",
              "sort_order",
              "venue_id"
            ]
          }
        ]
      }
    },
    "bookings": {
      "type": "array",
      "items": {
        "allOf": [
          {
            "$ref": "https://openteesheet.com/schemas/booking.schema.json"
          },
          {
            "type": "object",
            "required": [
              "amount_cents",
              "bay_id",
              "created_at",
              "customer_email",
              "customer_name",
              "customer_phone",
              "duration_minutes",
              "end_time",
              "extra_players",
              "guest_fee_cents",
              "id",
              "object",
              "payment_status",
              "players",
              "start_time",
              "status",
              "venue_id"
            ]
          }
        ]
      }
    },
    "door_grants": {
      "type": "array",
      "items": {
        "allOf": [
          {
            "$ref": "https://openteesheet.com/schemas/door-grant.schema.json"
          },
          {
            "type": "object",
            "required": [
              "booking_id",
              "created_at",
              "external_id",
              "id",
              "lock_id",
              "method",
              "object",
              "provider",
              "revoked_at",
              "status",
              "venue_id",
              "window_end",
              "window_start"
            ]
          }
        ]
      }
    },
    "bay_sessions": {
      "type": "array",
      "items": {
        "allOf": [
          {
            "$ref": "https://openteesheet.com/schemas/bay-session.schema.json"
          },
          {
            "type": "object",
            "required": [
              "bay_id",
              "booking_id",
              "last_error",
              "object",
              "started_at",
              "state",
              "stopped_at",
              "updated_at",
              "venue_id"
            ]
          }
        ]
      }
    },
    "counts": {
      "type": "object",
      "properties": {
        "bays": {
          "type": "integer",
          "minimum": 0
        },
        "bookings": {
          "type": "integer",
          "minimum": 0
        },
        "door_grants": {
          "type": "integer",
          "minimum": 0
        },
        "bay_sessions": {
          "type": "integer",
          "minimum": 0
        }
      },
      "required": [
        "bays",
        "bookings",
        "door_grants",
        "bay_sessions"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "format",
    "version",
    "schema",
    "exported_at",
    "venue",
    "bays",
    "bookings",
    "door_grants",
    "bay_sessions",
    "counts"
  ],
  "additionalProperties": false
}
