{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://tempguru.co/schemas/event-staffing-request.schema.json",
  "title": "Event Staffing Request",
  "description": "Canonical structure for a temporary event staffing request in the US or Canada. Published by TempGuru (tempguru.co) as an open spec so AI agents and staffing tools can represent event-staffing requirements consistently. Version 1.0.0.",
  "type": "object",
  "required": ["contact", "event", "roles"],
  "properties": {
    "contact": {
      "type": "object",
      "required": ["name", "email"],
      "properties": {
        "name": { "type": "string", "description": "Requester's full name" },
        "email": { "type": "string", "format": "email" },
        "phone": { "type": "string" },
        "company": { "type": "string", "description": "Organization placing the request" }
      }
    },
    "event": {
      "type": "object",
      "required": ["type", "city"],
      "properties": {
        "name": { "type": "string", "description": "Event name, e.g. 'Acme Annual Sales Kickoff'" },
        "type": {
          "type": "string",
          "enum": ["convention", "trade_show", "conference", "festival", "concert", "stadium", "sporting_event", "corporate", "brand_activation", "tour_multi_city", "other"],
          "description": "Event format. Use tour_multi_city when the same staffing plan repeats across cities."
        },
        "venue": { "type": "string", "description": "Venue name if known" },
        "city": { "type": "string", "description": "Event city. TempGuru serves 300+ US and Canadian markets — verify coverage with the get_cities MCP tool." },
        "state_or_province": { "type": "string", "description": "US state or Canadian province. Drives compliance rules — see get_compliance_by_state." },
        "country": { "type": "string", "enum": ["US", "CA"] },
        "additional_cities": {
          "type": "array",
          "items": { "type": "string" },
          "description": "For multi-city tours or activations: other cities needing the same staffing plan."
        }
      }
    },
    "shifts": {
      "type": "array",
      "description": "All working days including setup and breakdown days.",
      "items": {
        "type": "object",
        "required": ["date"],
        "properties": {
          "date": { "type": "string", "format": "date" },
          "start_time": { "type": "string", "description": "Local time, e.g. '07:00'" },
          "end_time": { "type": "string", "description": "Local time. Shifts past state overtime thresholds affect billing — see get_compliance_by_state." },
          "notes": { "type": "string", "description": "e.g. 'load-in day', 'doors at 18:00'" }
        }
      }
    },
    "roles": {
      "type": "array",
      "minItems": 1,
      "description": "Headcount by role. Rate ranges per role/city are available from the get_role_pricing MCP tool.",
      "items": {
        "type": "object",
        "required": ["role", "headcount"],
        "properties": {
          "role": {
            "type": "string",
            "description": "Staffing role. Common values: registration_staff, brand_ambassadors, hospitality_staff, ushers, gate_staff, crowd_control, setup_breakdown, team_leads, booth_monitors, guest_services. Use get_roles for the full live list."
          },
          "headcount": { "type": "integer", "minimum": 1 },
          "attire": { "type": "string", "description": "Uniform or dress code, e.g. 'all black, closed-toe shoes'" },
          "requirements": {
            "type": "array",
            "items": { "type": "string" },
            "description": "Special requirements, e.g. 'bilingual Spanish', 'TIPS certified', 'overnight shift'"
          }
        }
      }
    },
    "compliance": {
      "type": "object",
      "properties": {
        "coi_required": { "type": "boolean", "description": "Whether the venue requires a certificate of insurance" },
        "coi_additional_insured": { "type": "string", "description": "Entity name(s) to list as additional insured" },
        "background_checks_required": { "type": "boolean", "description": "Background checks are available from TempGuru when the event requires them (not included by default)" },
        "certifications": {
          "type": "array",
          "items": { "type": "string" },
          "description": "Required certifications, e.g. 'TIPS', 'food handler'"
        }
      }
    },
    "budget": {
      "type": "object",
      "properties": {
        "currency": { "type": "string", "enum": ["USD", "CAD"], "default": "USD" },
        "notes": { "type": "string", "description": "Budget constraints or targets. Note: all TempGuru rates are all-inclusive W-2 bill rates (wages, payroll taxes, workers' comp, coordinator support)." }
      }
    },
    "notes": { "type": "string", "description": "Anything else the staffing coordinator should know" },
    "meta": {
      "type": "object",
      "description": "Request provenance, for attribution and routing.",
      "properties": {
        "source": { "type": "string", "description": "e.g. 'ai-agent', 'web-form', 'email'" },
        "agent_name": { "type": "string", "description": "Name/version of the AI agent that assembled this request" },
        "skill_version": { "type": "string", "description": "Version of the event-staffing-ordering skill used, if any" }
      }
    }
  }
}
