{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/craftingeventfinder-com/json-schema/craftingeventfinder-com-organizer-event-input-schema.json",
  "title": "OrganizerEventInput",
  "x-generated": "2026-11-04",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/craftingeventfinder-com-openapi.yml#/components/schemas/OrganizerEventInput",
  "type": "object",
  "properties": {
    "title": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "start_date": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "end_date": {
      "anyOf": [
        {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
        },
        {
          "type": "string",
          "enum": [
            ""
          ]
        }
      ]
    },
    "city": {
      "type": "string",
      "maxLength": 100,
      "description": "The town; required unless location_kind is online"
    },
    "state": {
      "type": "string",
      "maxLength": 40,
      "description": "A US state name or two-letter code; required unless location_kind is online (then taken from the time zone)"
    },
    "venue": {
      "type": "string",
      "maxLength": 200
    },
    "street_address": {
      "type": "string",
      "maxLength": 200
    },
    "postal_code": {
      "anyOf": [
        {
          "type": "string",
          "pattern": "^\\d{5}$"
        },
        {
          "type": "string",
          "enum": [
            ""
          ]
        }
      ]
    },
    "location_kind": {
      "type": "string",
      "enum": [
        "venue",
        "online",
        "hybrid",
        "multi"
      ]
    },
    "timezone": {
      "type": "string",
      "maxLength": 64,
      "description": "The event's own clock (IANA, like America/Chicago); required for an online or hybrid event"
    },
    "languages": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 40
      },
      "maxItems": 5,
      "description": "The languages the event is held in, as BCP 47 codes (en, es); leave out when unknown"
    },
    "hosted_by": {
      "type": "string",
      "maxLength": 120,
      "description": "The group or shop hosting an online or hybrid event"
    },
    "craft_types": {
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 60
      },
      "maxItems": 20,
      "default": []
    },
    "event_type": {
      "type": "string",
      "maxLength": 40
    },
    "tags": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 60
      },
      "maxItems": 20
    },
    "start_time": {
      "type": "string",
      "maxLength": 8
    },
    "end_time": {
      "type": "string",
      "maxLength": 8
    },
    "is_free": {
      "type": "boolean"
    },
    "price_note": {
      "type": "string",
      "maxLength": 200
    },
    "url": {
      "anyOf": [
        {
          "type": "string",
          "format": "uri"
        },
        {
          "type": "string",
          "enum": [
            ""
          ]
        }
      ]
    },
    "description": {
      "type": "string",
      "maxLength": 5000
    },
    "join_url": {
      "type": "string",
      "maxLength": 500
    },
    "join_meeting_id": {
      "type": "string",
      "maxLength": 40
    },
    "join_passcode": {
      "type": "string",
      "maxLength": 40
    },
    "join_phone": {
      "type": "string",
      "maxLength": 40
    },
    "contact_name": {
      "type": "string",
      "maxLength": 120
    },
    "contact_email": {
      "type": "string",
      "maxLength": 200
    },
    "organizer_email": {
      "type": "string"
    },
    "summary": {
      "type": "string",
      "maxLength": 300
    },
    "signup_note": {
      "type": "string",
      "maxLength": 200
    },
    "recurrence": {
      "type": "string",
      "maxLength": 500
    }
  },
  "required": [
    "title",
    "start_date"
  ],
  "additionalProperties": false
}