> ## Documentation Index
> Fetch the complete documentation index at: https://docs.scanova.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Event Venue Component

> Defines the venue configuration for event-based QR Codes, supporting both physical and online events. This component enables detailed address information, joining options, and location display on maps.

## Overview

The **Event Venue Component** specifies where and how an event will take place — whether it’s a **physical location**, an **online meeting**, or a **hybrid combination** of both.\
It provides structured fields for address, map location, join buttons, and related event details such as contact numbers and notes.

This schema ensures that QR Code landing pages can accurately represent venue information with visual consistency and functional join options (e.g., “Join on Zoom”, “View on Map”).

## Properties

| Property                | Type            | Required               | Description                                                                                                                                                                                                                            |
| :---------------------- | :-------------- | :--------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **venueType**           | `array<string>` | No                     | Defines the type of event venue. Supported values: `physical`, `online`. Minimum: 1, Maximum: 2.                                                                                                                                       |
| **title**               | `string`        | No                     | Event title. Maximum 50 characters.                                                                                                                                                                                                    |
| **address**             | `string`        | Conditionally required | Physical address of the event. Required when `venueType` includes `physical`.                                                                                                                                                          |
| **hasMapLocation**      | `boolean`       | No                     | Indicates if a map location should be displayed. Default: `false`.                                                                                                                                                                     |
| **location**            | `object`        | No                     | Location object with map coordinates. Structure defined in [Base Map Component](/guides/category-components/components/_base_map) (`provider`, `latitude`, `longitude`, `placeId`, `placeName`). Used when `hasMapLocation` is `true`. |
| **joinButton**          | `object`        | Conditionally required | Reference to [Button Component](/guides/category-components/components/button). Required when `venueType` includes `online`.                                                                                                           |
| **joiningPhoneNumbers** | `array<object>` | No                     | List of phone numbers that attendees can use to join or contact the event. Maximum 10 entries.                                                                                                                                         |
| **joiningPassword**     | `string`        | No                     | Access password or meeting code. Maximum 400 characters.                                                                                                                                                                               |
| **eventNotes**          | `string`        | No                     | Additional information or instructions for attendees. Maximum 1000 characters.                                                                                                                                                         |
| **formatting**          | `object`        | No                     | Defines text, card, and icon styling references for consistent visual layout.                                                                                                                                                          |

***

### 🧩 **Formatting Object**

| Sub-Property  | Type     | Description                        |
| :------------ | :------- | :--------------------------------- |
| **textStyle** | `object` | Reference to Text Style Component. |
| **cardStyle** | `object` | Reference to Card Style Component. |
| **iconStyle** | `object` | Reference to Icon Style Component. |

***

## Used in Categories

This component is used in the following QR Code categories:

* [Event](/guides/category-components/categories/event)
* [Wedding](/guides/category-components/categories/wedding)

## Example Schema

<CodeGroup>
  ```json Schema theme={null}
  {
    "$schema": "http://json-schema.org/draft-07/schema#",
    "definitions": {},
    "title": "Event Venue component",
    "description": "Validate event venue component schema",
    "type": "object",
    "additionalProperties": false,
    "properties": {
      "venueType": {
        "type": "array",
        "minItems": 1,
        "maxItems": 2,
        "items": {
          "type": "string",
          "enum": [
            "physical",
            "online"
          ]
        }
      },
      "title": {
        "type": "string",
        "maxLength": 50,
        "description": "Event Title."
      },
      "address": {
        "type": "string",
        "minLength": 5,
        "maxLength": 1000
      },
      "hasMapLocation": {
        "type": "boolean",
        "default": false,
        "description": "Whether location has to be shown on google map"
      },
      "location": {
        "$ref": "_base_map.json#/properties/location"
      },
      "joinButton": {
        "$ref": "button.json"
      },
      "joiningPhoneNumbers": {
        "type": "array",
        "description": "Phone number to join events.",
        "maxItems": 10,
        "$comment": "Allow up to 10 numbers.",
        "additionalProperties": false,
        "items": {
          "type": "object",
          "required": [
            "phoneNumber"
          ],
          "additionalProperties": false,
          "properties": {
            "phoneNumber": {
              "type": "string",
              "maxLength": 30,
              "pattern": "^(\\d{1,20})$|^((\\+\\d{1,3}([- ])?\\(?\\d\\)?([- ])?\\d{1,5})|(\\(?\\d{2,6}\\)?))([- ])?(\\d{3,4})([- ])?(\\d{4})([- ])?((x|ext|;)([- ])?\\d{1,5})?$"
            },
            "label": {
              "type": "string"
            }
          }
        }
      },
      "joiningPassword": {
        "type": "string",
        "description": "Joining password",
        "maxLength": 400
      },
      "eventNotes": {
        "type": "string",
        "maxLength": 1000,
        "description": "Event Notes."
      },
      "formatting": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "textStyle": {
            "$ref": "style/text.json"
          },
          "cardStyle": {
            "$ref": "style/card.json"
          },
          "iconStyle": {
            "$ref": "style/icon.json"
          }
        }
      }
    },
    "oneOf": [
      {
        "properties": {
          "venueType": {
            "const": [
              "physical"
            ]
          }
        },
        "required": [
          "address"
        ]
      },
      {
        "properties": {
          "venueType": {
            "const": [
              "online"
            ]
          }
        },
        "required": [
          "joinButton"
        ]
      },
      {
        "properties": {
          "venueType": {
            "const": [
              "physical",
              "online"
            ]
          }
        },
        "required": [
          "address",
          "joinButton"
        ]
      },
      {
        "properties": {
          "venueType": {
            "const": [
              "online",
              "physical"
            ]
          }
        },
        "required": [
          "address",
          "joinButton"
        ]
      }
    ]
  }
  ```
</CodeGroup>

## Example Payload (with location)

When `hasMapLocation` is `true`, the `location` object follows the Base Map structure:

<CodeGroup>
  ```json Example theme={null}
  {
    "type": "event_venue",
    "data": {
      "title": "Venue",
      "venueType": ["physical"],
      "address": "Noida",
      "hasMapLocation": true,
      "formatting": {
        "textStyle": { "fontFamily": "Montserrat", "fontSize": 1, "textColor": "#121314" },
        "cardStyle": { "backgroundColor": "#FFFFFF" },
        "iconStyle": { "color": "#121314" }
      },
      "location": {
        "provider": "google",
        "latitude": 40.7081616,
        "longitude": -73.95690320000001,
        "placeId": "ChIJ4Zjf3eBbwokRxKxez3eOqA0",
        "placeName": "315 Broadway, Brooklyn, NY 11211, USA"
      }
    }
  }
  ```
</CodeGroup>

## Notes

* `venueType` determines which properties are required:
  * `physical` → `address` required
  * `online` → `joinButton` required
  * `both` → both `address` and `joinButton` required
* The **map location** can be displayed only when `hasMapLocation` is set to `true` and `location` is defined.
* Supports **up to 10 phone numbers** for attendee contact or join options.
* Password and notes fields are optional but recommended for private or hybrid events.
