How It Works

Attendify’s offers an end-to-end mobile event app platform encompassing three core components:

  1. Attendify Hub - a powerful content management system (CMS) tailored to the efficient creation and management of mobile event apps.
  2. Social Platform - a range of backend services that power thousands of private social networks, built to scale.
  3. Mobile Event Apps - iOS, Android and HTML5 mobile applications.

Our Public API offers a simple way to integrate external systems and automatically add and update event information to our system. The API is designed for event management, registration, and various external content management (CMS) systems to automatically propagate event information to Attendify Hub and mobile event apps.

Summary:

Leveraging Attendify’s API begins with:

  1. Sign up for a free Attendify account.
  2. Create an event app inAttendify Hub. Link your data to your event app using theDeveloper Dashboard.
  3. After syncing data review your app and submit it for publication in the App Store & Google play.
  4. We’ll publish your app to the App Store & Google Play within 5-7 business days.
  5. The API integration will automatically keep your mobile event app up to date and in-sync with your external system.

image

For every event app you need provide an api endpoint from which Attendify will fetch event data. Create a link between Attendify Application and your data endpoint in the Attendify Developer Dashboard. Attendify will request and fetch data and propagate it to user devices every 15 minutes. Each request will have unique signature allowing your system to identify Attendify’s Platform, for more information on security and authorization see the security section.

Quick Start

To start using Attendify’s Public API you need to login to the Developer Dashboard and accept ourAPI Terms of Service. Signing in to the Developers Portal is as easy as entering the username and password for your existing Attendify account. If you don’t yet have an account you can sign up free.

Once you’ve signed up and accepted the terms, theDeveloper Dashboard will allow you to create and manage API integrations.

Creating Your First API Integration:

1. Create an Event App in Attendify Hub.

Go toAttendify Hub and create your first event app, to set up an integration you must have at least one event app in your account. Fig. 1 below shows a screenshot of the Attendify Hub dashboard, simply click the green “Create App” button.

You can choose to synchronize with either a single or multi-event app, for more information about the types of apps you can build and their features, please see our website or contact us for more information.

image

2. Create an integration in the Developer Dashboard

Open theDeveloper Dashboard and click “Create Synchronization” and fill out the form displayed below as Fig. 2.

Start by selecting the event you want to integrate with and providing the data source URL to your server from which Attendify will fetch event data. You can check availability of this URL by clicking the “Check” button. If your server have basic auth, you can provide credentials for it in Basic Access Authentication section, this parameter is optional, but we encourage you to use access authorization. At Security Credentials section we provide token and secret keys used for signing requests, which you always can regenerate in the Developer Dashboard.

image

3. Manage and Test your Integration.

After saving the integration it will appear in the list of “your integrations” in the Developer Dashboard as displayed in Fig 3. below. Event data is automatically synchronized every each 15 minutes. You can preview changes in Attendify Studio Applicationfor iOS andfor Android.

image

You can manage existing integrations including editing the integration details, manually syncing, or deactivating an integration as shown in Fig. 4 below.

image

Data Schema

Attendify's API accepts JSON and XML data formats, full data scheme definitions available here:XSD scheme andJSON scheme.

Attendify’s mobile event apps are composed of several features, each of which represents a specific content type (speakers, sponsors, exhibitors, etc.) Attendify requires at least three features to be selected for each mobile event app you create, and you may add several features of the same type, i.e. two or more schedules.

Every feature has a name with a maximum length of 12 characters, and a list of 100 icons which you can choose from (see Fig. 2 below). and viewalbe hub.

Each entity within a given feature, such as a Speaker, Sponsor, Place on map or Session has a field ID. This ID field must be unique among all event data as it is used for identification of this entity. It should represent entity ID from your system and will help you identify content in our hub. On the next image you can see Speaker imported from an external source with the ID shown in title bar.

Speaker ID

Although some features looks the same, they all have a different internal representation, so using different features allows for the best user experience and more accurate analytics reporting.

List of available icons:

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100

About:

The "About" feature allow to create page with several sections and is commonly used to communicate information about the event, travel information, instructions for wi-fi connectivity, and many other types of information that event attendees need to have for a productive experience. The “About” feature contains a title and description for each sub-section, you can add as many sub-sections within a single “About” feature as needed.

image
image

"feature-about": {
  "title": "Feature About",
  "description": "Add menu item with about sections",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "id": { "type": "string" },
    "name": { "type": "string", "default": "About" },
    "type": { "type": "string", "enum": [ "feature-about" ] },
    "icon": {
      "type": "string",
      "pattern": "^[0-9]{1,3}$",
      "default": "26"
    },
    "sorting": {
      "type": "string",
      "enum": [ "manual" ]
    },
    "sections": {
      "title": "Sections",
      "description": "List of sections",
      "type": "array",
      "items": { "$ref": "#/definitions/about-section" },
      "minItems": 1,
      "uniqueItems": true
    },
    "limitedAccess": { "type": "boolean", "default": false }
  },
  "required": [ "id", "type", "name", "icon", "sorting", "sections" ]
},
"about-section": {
  "title": "About Section",
  "description": "All fields are required.",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "id": { "type": "string", "description": "Required."},
    "type": { "type": "string", "enum": [ "about-section" ], "description": "Required." },
    "title": { "type": "string", "description": "Required." },
    "content": { "type": "string", "description": "Required. Can have HTML tags: images, links, lists and basic text decoration" }
  },
  "required": [ "id", "type", "title", "content" ]
},
<xs:complexType name="FeatureAbout">
  <xs:sequence>
      <xs:element type="xs:string" name="Name" default="About" />
      <xs:element type="xs:string" name="Icon" default="26" />
      <xs:element name="Sorting">
          <xs:simpleType>
              <xs:restriction base="xs:string">
                  <xs:enumeration value="manual"/>
              </xs:restriction>
          </xs:simpleType>
      </xs:element>
      <xs:element name="Sections">
          <xs:complexType>
              <xs:sequence>
                  <xs:element name="AboutSection" maxOccurs="unbounded" minOccurs="1">
                      <xs:complexType>
                          <xs:sequence>
                              <xs:element type="xs:string" name="Content"/>
                              <xs:element type="xs:string" name="Title"/>
                          </xs:sequence>
                          <xs:attribute type="xs:string" name="id" />
                      </xs:complexType>
                  </xs:element>
              </xs:sequence>
          </xs:complexType>
      </xs:element>
  </xs:sequence>
  <xs:attribute type="xs:string" name="id" />
  <xs:attribute type="xs:boolean" name="limitedaccess" />
</xs:complexType>

Schedule:

The “Schedule” feature allows you to create a fully customizable list of sessions at your event. Create a single or multi-track schedule, connect sessions to speakers, upload documents, and much more.

Please note the following:

  • Sessions are organized by date.
  • If you use the multi-track feature it has both a title and color marker.
  • You can link sessions directly to speakers.
  • Companies can be assigned a group and sorted accordingly.
  • You can upload documents such as presentations or PDF documents. The maximum file size for each document is 50mb, although we recommend a maximum file size of 5mb. Accepted file types include PDF, DOC, DOCX, PPT, PPTX, XLS, and XLSX.

image
image

"feature-schedule": {
  "title": "Feature Schedule",
  "description": "...",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "id": { "type": "string" },
    "name": { "type": "string", "default": "Schedule" },
    "type": { "type": "string",  "enum": [ "feature-schedule" ] },
    "icon": {
      "type": "string",
      "pattern": "^[0-9]{1,3}$",
      "default": "13"
    },
    "settings": { "$ref": "#/definitions/schedule-settings" },
    "sessions": {
      "title": "Sessions",
      "description": "Schedule sessions",
      "type": "array",
      "items": { "$ref": "#/definitions/schedule-session" },
      "minItems": 1,
      "uniqueItems": true
    },
    "limitedAccess": { "type": "boolean", "default": false }
  },
  "required": [ "id", "type", "name", "icon", "sessions" ]
}
"schedule-settings": {
  "title": "Schedule Settings",
  "description": "Used for setting schedule time format, time zone ",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "type": { "type": "string", "enum": [ "schedule-settings" ] },
    "timeFormat": {
      "type": "string",
      "enum": [ "12", "24" ]
    },
    "timeZone": {
      "type": "string",
      "enum": [
        "US/Samoa",
        "US/Hawaii",
        "US/Alaska",
        "US/Pacific",
        "US/Mountain",
        "US/Arizona",
        "America/Chihuahua",
        "US/Central",
        "US/Eastern",
        "Canada/Atlantic",
        "Canada/Newfoundland",
        "America/Buenos_Aires",
        "Brazil/East",
        "Atlantic/Azores",
        "GMT",
        "Europe/London",
        "Greenwich",
        "Europe/Brussels",
        "Europe/Berlin",
        "CET",
        "Europe/Kiev",
        "EET",
        "Europe/Athens",
        "Europe/Istanbul",
        "Europe/Minsk",
        "Asia/Baku",
        "Asia/Dubai",
        "Asia/Kabul",
        "Asia/Yekaterinburg",
        "Asia/Calcutta",
        "Asia/Novosibirsk",
        "Asia/Almaty",
        "Asia/Bangkok",
        "Asia/Jakarta",
        "Asia/Hong_Kong",
        "Asia/Tokyo",
        "Australia/Darwin",
        "Australia/South",
        "Australia/Melbourne",
        "Pacific/Nauru",
        "Pacific/Auckland",
        "Pacific/Fiji"
      ]
    },
    "multiTrack": { "type": "boolean" },
    "isPersonalized": { "type": "boolean" }
  },
  "required": [ "type", "timeFormat", "timeZone", "multiTrack" ]
},
"schedule-track": {
  "title": "Schedule Track",
  "description": "Schedule track can be used for grouping sessions. Each session can have one track.",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "name": { "type": "string" },
    "color": { "type": "string" }
  },
  "required": [ "name" ]
},
"schedule-session": {
  "title": "Schedule Session",
  "description": "Event session entity. Required defined time frame. Can have links to speakers, files.",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "id": { "type": "string" },
    "type": { "type": "string", "enum": [ "schedule-session" ] },
    "startTime": { "type": "string", "format": "date-time", "description": "Session start time." },
    "endTime": { "type": "string", "format": "date-time", "description": "Session end time time." },
    "title": { "type": "string", "description": "Session title." },
    "description": { "type": "string", "description": "Brief info about session." },
    "location": { "type": "string", "description": "Session location." },
    "tracks": {
      "title": "Tracks",
      "description": "List of track names",
      "type": "array",
      "items": { "$ref": "#/definitions/schedule-track" },
      "minItems": 0,
      "uniqueItems": true
    },
    "speakers": {
      "title": "Speakers",
      "description": "List of speaker IDs",
      "type": "array",
      "items": { "type": "string" },
      "minItems": 0,
      "uniqueItems": true
    },
    "files": {
      "title": "Files",
      "description": "List of public available links to files",
      "type": "array",
      "items": { "type": "string",  "format": "uri" },
      "minItems": 0,
      "uniqueItems": true
    }
  },
  "required": [ "id", "type", "startTime", "endTime", "title" ]
},
<xs:complexType name="FeatureSchedule">
  <xs:sequence>
      <xs:element type="xs:string" name="Name" default="Schedule" />
      <xs:element type="xs:string" name="Icon" default="13" />
      <xs:element name="Settings">
          <xs:complexType>
              <xs:sequence>
                <xs:element name="Object">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="TimeFormat">
                                <xs:simpleType>
                                    <xs:restriction base="xs:string">
                                        <xs:enumeration value="12"/>
                                        <xs:enumeration value="24"/>
                                    </xs:restriction>
                                </xs:simpleType>
                            </xs:element>
                            <xs:element type="xs:string" name="TimeZone"/>
                            <xs:element type="xs:boolean" name="MultiTrack"/>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
              </xs:sequence>
          </xs:complexType>
      </xs:element>
      <xs:element name="Sessions">
          <xs:complexType>
              <xs:sequence>
                  <xs:element name="ScheduleSession" maxOccurs="unbounded" minOccurs="1">
                      <xs:complexType>
                          <xs:sequence>
                              <xs:element name="Files">
                                  <xs:complexType>
                                      <xs:sequence>
                                          <xs:element type="xs:string" name="File"/>
                                      </xs:sequence>
                                  </xs:complexType>
                              </xs:element>
                              <xs:element name="Speakers">
                                  <xs:complexType>
                                      <xs:sequence>
                                          <xs:element type="xs:string" name="Speaker"/>
                                      </xs:sequence>
                                  </xs:complexType>
                              </xs:element>
                              <xs:element type="xs:string" name="Description"/>
                              <xs:element type="xs:string" name="Title"/>
                              <xs:element name="Tracks">
                                  <xs:complexType>
                                      <xs:sequence>
                                          <xs:element name="Track">
                                              <xs:complexType>
                                                  <xs:sequence>
                                                      <xs:element type="xs:string" name="Color"/>
                                                      <xs:element type="xs:string" name="Name"/>
                                                  </xs:sequence>
                                              </xs:complexType>
                                          </xs:element>
                                      </xs:sequence>
                                  </xs:complexType>
                              </xs:element>
                              <xs:element type="xs:string" name="Location"/>
                              <xs:element type="xs:string" name="StartTime"/>
                              <xs:element type="xs:string" name="EndTime"/>
                          </xs:sequence>
                          <xs:attribute type="xs:string" name="id"/>
                      </xs:complexType>
                  </xs:element>
              </xs:sequence>
          </xs:complexType>
      </xs:element>
  </xs:sequence>
  <xs:attribute type="xs:string" name="id"/>
  <xs:attribute type="xs:boolean" name="limitedaccess" />
</xs:complexType>

Speakers:

The "Speakers" feature allows you to provide a complete list of speakers/moderators along with their photo, bio, contact information, as well as any related documents documents.

Please note the following:

  • Speaker photos must be at least 120x120px in JPG or PNG formats.
  • Speaker can be marked as featured content.
  • Speakers can be assigned to and organized by groups.
  • Speakers can be linked to sessions on your Schedule, which allows for seamless navigation between them.
  • You can upload documents such as presentations or PDF documents. The maximum file size for each document is 50mb, although we recommend a maximum file size of 5mb. Accepted file types include PDF, DOC, DOCX, PPT, PPTX, XLS, and XLSX.

image
image

"feature-speakers": {
  "title": "Feature Speakers",
  "description": "Add menu item with speakers",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "id": { "type": "string" },
    "name": { "type": "string", "default": "Speakers" },
    "type": { "type": "string", "enum": [ "feature-speakers" ] },
    "icon": {
      "type": "string",
      "pattern": "^[0-9]{1,3}$",
      "default": "69"
    },
    "sorting": {
      "type": "string",
      "enum": [ "manual", "firstName", "lastName", "group" ]
    },
    "speakers": {
      "title": "Speakers",
      "description": "List of speakers",
      "type": "array",
      "items": { "$ref": "#/definitions/speaker" },
      "minItems": 1,
      "uniqueItems": true
    },
    "limitedAccess": { "type": "boolean", "default": false }
  },
  "required": [ "id", "type", "name", "icon", "sorting", "speakers" ]
},
"speaker": {
  "title": "Speaker",
  "description": "Represent speaker entity, firstName and lastName required.",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "id": { "type": "string" },
    "type": { "type": "string", "enum": [ "speaker" ] },
    "firstName": { "type": "string" },
    "lastName": { "type": "string" },
    "company": { "type": "string", "description": "Optional. Speaker company." },
    "position": { "type": "string", "description": "Optional. Speaker company." },
    "email": { "type": "string", "description": "Optional. Public email address." },
    "phone": { "type": "string", "description": "Optional. Public phone." },
    "description": { "type": "string", "description": "Optional. Speaker bio or major achievements."},
    "photo": { "type": "string", "format": "uri", "description": "Optional. Link to the image. Min image size is 120x120." },
    "sessions": {
      "title": "Sessions",
      "description": "List of session IDs",
      "type": "array",
      "items": { "type": "string" },
      "minItems": 0,
      "uniqueItems": true
    },
    "groups": {
      "title": "Groups",
      "description": "List of speaker group names",
      "type": "array",
      "items": { "type": "string" },
      "minItems": 0,
      "uniqueItems": true
    },
    "files": {
      "title": "Files",
      "description": "List of public available links to files",
      "type": "array",
      "items": { "type": "string",  "format": "uri" },
      "minItems": 0,
      "uniqueItems": true
    },
    "twitter": {"type": "string", "description": "Optional. Twitter Social Link"},
    "facebook": {"type": "string", "description": "Optional. Facebook Social Link"},
    "linkedin": {"type": "string", "description": "Optional. LinkdIn Social Link"},
    "google": {"type": "string", "description": "Optional. Google+ Social Link"},
    "isFeatured": {"type": "boolean", "default": false}
  },
  "required": [ "id", "type", "firstName", "lastName" ]
},
<xs:complexType name="FeatureSpeakers">
  <xs:sequence>
      <xs:element type="xs:string" name="Name" default="Speakers" />
      <xs:element type="xs:string" name="Icon" default="69" />
      <xs:element name="Sorting">
          <xs:simpleType>
              <xs:restriction base="xs:string">
                  <xs:enumeration value="manual"/>
                  <xs:enumeration value="firstName"/>
                  <xs:enumeration value="lastName"/>
                  <xs:enumeration value="group"/>
              </xs:restriction>
          </xs:simpleType>
      </xs:element>
      <xs:element name="Speakers">
          <xs:complexType>
              <xs:sequence>
                  <xs:element name="Speaker" maxOccurs="unbounded" minOccurs="1">
                      <xs:complexType>
                          <xs:sequence>
                              <xs:element name="Files">
                                  <xs:complexType>
                                      <xs:sequence>
                                          <xs:element type="xs:string" name="File"/>
                                      </xs:sequence>
                                  </xs:complexType>
                              </xs:element>
                              <xs:element type="xs:string" name="Description"/>
                              <xs:element type="xs:string" name="FirstName"/>
                              <xs:element name="Sessions">
                                  <xs:complexType>
                                      <xs:sequence>
                                          <xs:element type="xs:string" name="Session"/>
                                      </xs:sequence>
                                  </xs:complexType>
                              </xs:element>
                              <xs:element type="xs:string" name="LastName"/>
                              <xs:element type="xs:string" name="Company"/>
                              <xs:element type="xs:string" name="Email"/>
                              <xs:element type="xs:string" name="Phone"/>
                              <xs:element name="Groups">
                                  <xs:complexType>
                                      <xs:sequence>
                                          <xs:element type="xs:string" name="Group"/>
                                      </xs:sequence>
                                  </xs:complexType>
                              </xs:element>
                              <xs:element type="xs:string" name="Photo"/>
                              <xs:element type="xs:string" name="Position"/>
                              <xs:element type="xs:string" name="Facebook" minOccurs="0" maxOccurs="1" default=""/>
                              <xs:element type="xs:string" name="Twitter" minOccurs="0" maxOccurs="1"  default=""/>
                              <xs:element type="xs:string" name="Linkedin" minOccurs="0" maxOccurs="1"  default=""/>
                              <xs:element type="xs:string" name="Google" minOccurs="0" maxOccurs="1"  default=""/>
                              <xs:element type="xs:boolean" name="isFeatured" minOccurs="0" maxOccurs="1"  default="false"/>
                          </xs:sequence>
                          <xs:attribute type="xs:string" name="id"/>
                      </xs:complexType>
                  </xs:element>
              </xs:sequence>
          </xs:complexType>
      </xs:element>
  </xs:sequence>
  <xs:attribute type="xs:string" name="id" />
  <xs:attribute type="xs:boolean" name="limitedaccess" />
</xs:complexType>

Staff (Multi-Event Only):

The “Staff” feature is designed for associations or companies that want to include a list of executives, event staff, or other group of people at the container level of their Multi-Event app.

The “Staff” feature is very similar to “Speakers” with the exception that “Staff” cannot be linked to sessions on your schedule.

Please note the following:

  • Staff member photos must be at least 120x120px in JPG or PNG formats.
  • Staff members can be assigned to and organized by groups. split to groups.
  • You can upload documents such as presentations or PDF documents. The maximum file size for each document is 50mb, although we recommend a maximum file size of 5mb. Accepted file types include PDF, DOC, DOCX, PPT, PPTX, XLS, and XLSX.

image
image

"feature-staff": {
  "title": "Feature Staff",
  "description": "...",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "id": { "type": "string" },
    "name": { "type": "string", "default": "Staff" },
    "type": { "type": "string", "enum": [ "feature-staff" ] },
    "icon": {
      "type": "string",
      "pattern": "^[0-9]{1,3}$",
      "default": "70"
    },
    "sorting": {
      "type": "string",
      "enum": [ "manual", "firstName", "lastName", "group" ]
    },
    "members": {
      "title": "Members",
      "description": "List of members",
      "type": "array",
      "items": { "$ref": "#/definitions/member" },
      "minItems": 1,
      "uniqueItems": true
    },
    "limitedAccess": { "type": "boolean", "default": false }
  },
  "required": [ "id", "type", "name", "icon", "sorting", "members" ]
},
"member": {
  "title": "Member",
  "description": "Company staff member",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "id": { "type": "string" },
    "type": { "type": "string", "enum": [ "member" ] },
    "firstName": { "type": "string", "description": "Member first name." },
    "lastName": { "type": "string", "description": "Member last name." },
    "company": { "type": "string", "description": "Optional. Company name." },
    "position": { "type": "string", "description": "Optional. Member position in company." },
    "email": { "type": "string", "description": "Optional. Email address." },
    "phone": { "type": "string", "description": "Optional. Work phone number." },
    "description": { "type": "string", "description": "Optional. Member bio, area of responsibility, major role in company, etc." },
    "photo": { "type": "string", "format": "uri", "description": "Optional. Link to image. Min image size is 120x120." },
    "groups": {
      "title": "Groups",
      "description": "List of member group names",
      "type": "array",
      "items": { "type": "string" },
      "minItems": 0,
      "uniqueItems": true
    },
    "files": {
      "title": "Files",
      "description": "List of public available links to files",
      "type": "array",
      "items": { "type": "string",  "format": "uri" },
      "minItems": 0,
      "uniqueItems": true
    },
    "twitter": {"type": "string", "description": "Optional. Twitter Social Link"},
    "facebook": {"type": "string", "description": "Optional. Facebook Social Link"},
    "linkedin": {"type": "string", "description": "Optional. LinkdIn Social Link"},
    "google": {"type": "string", "description": "Optional. Google+ Social Link"}
  },
  "required": [ "id", "type", "firstName", "lastName" ]
},
<xs:complexType name="FeatureStaff">
  <xs:sequence>
      <xs:element type="xs:string" name="Name" default="Staff" />
      <xs:element type="xs:string" name="Icon" default="70" />
      <xs:element name="Sorting">
          <xs:simpleType>
              <xs:restriction base="xs:string">
                  <xs:enumeration value="manual"/>
                  <xs:enumeration value="firstName"/>
                  <xs:enumeration value="lastName"/>
                  <xs:enumeration value="group"/>
              </xs:restriction>
          </xs:simpleType>
      </xs:element>
      <xs:element name="Members">
          <xs:complexType>
              <xs:sequence>
                  <xs:element name="Member" maxOccurs="unbounded" minOccurs="1">
                      <xs:complexType>
                          <xs:sequence>
                              <xs:element type="xs:string" name="Company"/>
                              <xs:element type="xs:string" name="Description"/>
                              <xs:element type="xs:string" name="Email"/>
                              <xs:element type="xs:string" name="FirstName"/>
                              <xs:element type="xs:string" name="LastName"/>
                              <xs:element type="xs:string" name="Phone"/>
                              <xs:element type="xs:string" name="Photo"/>
                              <xs:element type="xs:string" name="Position"/>
                              <xs:element name="Groups" minOccurs="0">
                                  <xs:complexType>
                                      <xs:sequence>
                                          <xs:element type="xs:string" name="Group"/>
                                      </xs:sequence>
                                  </xs:complexType>
                              </xs:element>
                              <xs:element name="Files" minOccurs="0">
                                  <xs:complexType>
                                      <xs:sequence>
                                          <xs:element type="xs:string" name="File"/>
                                      </xs:sequence>
                                  </xs:complexType>
                              </xs:element>
                              <xs:element type="xs:string" name="Facebook" minOccurs="0" maxOccurs="1" default=""/>
                              <xs:element type="xs:string" name="Twitter" minOccurs="0" maxOccurs="1"  default=""/>
                              <xs:element type="xs:string" name="Linkedin" minOccurs="0" maxOccurs="1"  default=""/>
                              <xs:element type="xs:string" name="Google" minOccurs="0" maxOccurs="1"  default=""/>
                          </xs:sequence>
                          <xs:attribute type="xs:string" name="id"/>
                      </xs:complexType>
                  </xs:element>
              </xs:sequence>
          </xs:complexType>
      </xs:element>
  </xs:sequence>
  <xs:attribute type="xs:string" name="id" />
  <xs:attribute type="xs:boolean" name="limitedaccess" />
</xs:complexType>

Exhibit Maps:

The “Exhibit Maps” feature allows you to upload one or more custom exhibit maps to your app.

Please note the following:

  • You can upload as many exhibit maps as you need.
  • Each exhibit map must have a title.
  • Exhibit maps must be at least 640x830px in JPG or PNG format.

image

"feature-exhibit-maps": {
  "title": "Feature Exhibit Maps",
  "description": "...",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "id": { "type": "string" },
    "name": { "type": "string", "default": "Exhibit Map" },
    "type": { "type": "string", "enum": [ "feature-exhibit-maps" ] },
    "icon": {
      "type": "string",
      "pattern": "^[0-9]{1,3}$",
      "default": "50"
    },
    "sorting": {
      "type": "string",
      "enum": [ "manual" ]
    },
    "maps": {
      "title": "Maps",
      "description": "List of exhibit maps",
      "type": "array",
      "items": { "$ref": "#/definitions/exhibit-map" },
      "minItems": 1,
      "uniqueItems": true
    },
    "limitedAccess": { "type": "boolean", "default": false }
  },
  "required": [ "id", "type", "name", "icon", "sorting", "maps" ]
},
"exhibit-map": {
  "title": "Exhibit Map",
  "description": "Plan of exhibition with booth numbers.",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "id": { "type": "string" },
    "type": { "type": "string", "enum": [ "exhibit-map" ] },
    "about": { "type": "string", "description": "Optional. Floor number or exhibition place name." },
    "photo": { "type": "string", "format": "uri", "description": "Image should be at least 640x830 in size." }
  },
  "required": [ "id", "type", "photo" ]
},
<xs:complexType name="FeatureExhibitMaps">
  <xs:sequence>
      <xs:element type="xs:string" name="Name" default="Exhibit Map" />
      <xs:element type="xs:string" name="Icon" default="50" />
      <xs:element name="Sorting">
          <xs:simpleType>
              <xs:restriction base="xs:string">
                  <xs:enumeration value="manual"/>
              </xs:restriction>
          </xs:simpleType>
      </xs:element>
      <xs:element name="Maps">
          <xs:complexType>
              <xs:sequence>
                  <xs:element name="Map" maxOccurs="unbounded" minOccurs="1">
                      <xs:complexType>
                          <xs:sequence>
                              <xs:element type="xs:string" name="Photo"/>
                              <xs:element type="xs:string" name="About"/>
                          </xs:sequence>
                          <xs:attribute type="xs:string" name="id"/>
                      </xs:complexType>
                  </xs:element>
              </xs:sequence>
          </xs:complexType>
      </xs:element>
  </xs:sequence>
  <xs:attribute type="xs:string" name="id"/>
  <xs:attribute type="xs:boolean" name="limitedaccess" />
</xs:complexType>

Exhibitors:

The “Exhibitors” feature allows you to add a list of companies/organizations exhibiting at your event. Exhibitors feature a logo, profile, booth number, and the ability to upload related documents.

Please note the following:

  • Exhibitor logos must be at least 180x120 in JPG or PNG format.
  • Exhibitors can be assigned to and organized by categories.
  • Exhibitor can be marked as featured content.
  • You can include an exhibit booth number.
  • You can upload documents such as presentations or PDF documents. The maximum file size for each document is 50mb, although we recommend a maximum file size of 5mb. Accepted file types include PDF, DOC, DOCX, PPT, PPTX, XLS, and XLSX.

image
image

"feature-exhibitors": {
  "title": "Feature Exhibitors",
  "description": "...",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "id": { "type": "string" },
    "name": { "type": "string", "default": "Exhibitors" },
    "type": { "type": "string", "enum": [ "feature-exhibitors" ] },
    "icon": {
      "type": "string",
      "pattern": "^[0-9]{1,3}$",
      "default": "41"
    },
    "sorting": {
      "type": "string",
      "enum": [ "manual", "company", "category" ]
    },
    "exhibitors": {
      "title": "Exhibitors",
      "description": "List of exhibitors",
      "type": "array",
      "items": { "$ref": "#/definitions/exhibitor" },
      "minItems": 1,
      "uniqueItems": true
    },
    "limitedAccess": { "type": "boolean", "default": false }
  },
  "required": [ "id", "type", "name", "icon", "sorting", "exhibitors" ]
},
"exhibitor": {
  "title": "Exhibitor",
  "description": "A company or entity which is present on exhibition.",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "id": { "type": "string" },
    "type": { "type": "string", "enum": [ "exhibitor" ] },
    "company": { "type": "string", "description": "Optional. Comnany name." },
    "booth": { "type": "string", "description": "Booth(s) number" },
    "website": { "type": "string", "description": "Optional. Exhibitor website." },
    "email": { "type": "string", "description": "Optional. Exhibitor contact email." },
    "phone": { "type": "string", "description": "Optional. Exhibitor contact email." },
    "address": { "type": "string", "description": "Optional. Exhibitor address." },
    "profile": { "type": "string", "description": "Optional. Brief info about exhibitor." },
    "logo": { "type": "string", "format": "uri" },
    "categories": {
      "title": "Categories",
      "description": "List of exhibitor categories names",
      "type": "array",
      "items": { "type": "string" },
      "minItems": 0,
      "uniqueItems": true
    },
    "files": {
      "title": "Files",
      "description": "List of public available links to files",
      "type": "array",
      "items": { "type": "string",  "format": "uri" },
      "minItems": 0,
      "uniqueItems": true
    },
    "twitter": {"type": "string", "description": "Optional. Twitter Social Link"},
    "facebook": {"type": "string", "description": "Optional. Facebook Social Link"},
    "linkedin": {"type": "string", "description": "Optional. LinkdIn Social Link"},
    "google": {"type": "string", "description": "Optional. Google+ Social Link"},
    "isFeatured": {"type": "boolean", "default": false}

  },
  "required": [ "id", "type", "company" ]
},
<xs:complexType name="FeatureExhibitors">
  <xs:sequence>
      <xs:element type="xs:string" name="Name" default="Exhibitors" />
      <xs:element type="xs:string" name="Icon" default="41" />
      <xs:element name="Sorting">
          <xs:simpleType>
              <xs:restriction base="xs:string">
                  <xs:enumeration value="manual"/>
                  <xs:enumeration value="company"/>
                  <xs:enumeration value="category"/>
              </xs:restriction>
          </xs:simpleType>
      </xs:element>
      <xs:element name="Exhibitors">
          <xs:complexType>
              <xs:sequence>
                  <xs:element name="Exhibitor" maxOccurs="unbounded" minOccurs="1">
                      <xs:complexType>
                          <xs:sequence>
                              <xs:element type="xs:anyURI" name="Website"/>
                              <xs:element type="xs:string" name="Profile"/>
                              <xs:element type="xs:string" name="Company"/>
                              <xs:element name="Categories">
                                  <xs:complexType>
                                      <xs:sequence>
                                          <xs:element type="xs:string" name="Category"/>
                                      </xs:sequence>
                                  </xs:complexType>
                              </xs:element>
                              <xs:element type="xs:string" name="Phone"/>
                              <xs:element type="xs:short" name="Booth"/>
                              <xs:element type="xs:string" name="Address"/>
                              <xs:element type="xs:string" name="Logo"/>
                              <xs:element type="xs:string" name="Email"/>
                              <xs:element type="xs:string" name="Facebook" minOccurs="0" maxOccurs="1" default=""/>
                              <xs:element type="xs:string" name="Twitter" minOccurs="0" maxOccurs="1"  default=""/>
                              <xs:element type="xs:string" name="Linkedin" minOccurs="0" maxOccurs="1"  default=""/>
                              <xs:element type="xs:string" name="Google" minOccurs="0" maxOccurs="1"  default=""/>
                              <xs:element type="xs:boolean" name="isFeatured" minOccurs="0" maxOccurs="1"  default="false"/>
                          </xs:sequence>
                          <xs:attribute type="xs:string" name="id"/>
                      </xs:complexType>
                  </xs:element>
              </xs:sequence>
          </xs:complexType>
      </xs:element>
  </xs:sequence>
  <xs:attribute type="xs:string" name="id"/>
  <xs:attribute type="xs:boolean" name="limitedaccess" />
</xs:complexType>

Maps:

The "Maps" feature allows you to add points of interest to an interactive Apple or Google map to help attendees find their way to the event venue or other nearby attractions.

Please note the following:

  • Each point added to the map can be included in a group such as “Hotels” or “Restaurants.”

image
image

"feature-maps": {
  "title": "Feature Maps",
  "description": "...",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "id": { "type": "string" },
    "name": { "type": "string", "default": "Map" },
    "type": { "type": "string",  "enum": [ "feature-maps" ] },
    "icon": {
      "type": "string",
      "pattern": "^[0-9]{1,3}$",
      "default": "48"
    },
    "sorting": {
      "type": "string",
      "enum": [ "manual", "group" ]
    },
    "places": {
      "title": "Places",
      "description": "List of places",
      "type": "array",
      "items": { "$ref": "#/definitions/place" },
      "minItems": 1,
      "uniqueItems": true
    },
    "limitedAccess": { "type": "boolean", "default": false }
  },
  "required": [ "id", "type", "name", "icon", "sorting", "places" ]
},
"place": {
  "title": "Place",
  "description": "Place is POI on the map.",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "id": { "type": "string" },
    "type": { "type": "string", "enum": [ "place" ] },
    "address": { "type": "string", "description": "Place address." },
    "name": { "type": "string", "description": "Place title." },
    "description": { "type": "string", "description": "Optional. Place description or how to reach notes." },
    "lat": { "type": "number", "description": "Optional. Place latitude." },
    "lng": { "type": "number", "description": "Optional. Place longitude." },
    "groups": {
      "title": "Groups",
      "description": "List of place group names",
      "type": "array",
      "items": { "type": "string" },
      "minItems": 0,
      "uniqueItems": true
    }
  },
  "required": [ "id", "type", "address", "name" ]
},
<xs:complexType name="FeatureMaps">
  <xs:sequence>
      <xs:element type="xs:string" name="Name" default="Map" />
      <xs:element type="xs:string" name="Icon" default="48" />
      <xs:element name="Sorting">
          <xs:simpleType>
              <xs:restriction base="xs:string">
                  <xs:enumeration value="manual"/>
                  <xs:enumeration value="group"/>
              </xs:restriction>
          </xs:simpleType>
      </xs:element>
      <xs:element name="Places">
          <xs:complexType>
              <xs:choice maxOccurs="unbounded" minOccurs="1">
                  <xs:element name="Place">
                      <xs:complexType>
                          <xs:sequence>
                              <xs:element type="xs:string" name="Address"/>
                              <xs:element type="xs:string" name="Description"/>
                              <xs:element name="Groups">
                                  <xs:complexType>
                                      <xs:sequence>
                                          <xs:element type="xs:string" name="Group" maxOccurs="unbounded"/>
                                      </xs:sequence>
                                  </xs:complexType>
                              </xs:element>
                              <xs:element type="xs:float" name="Lat"/>
                              <xs:element type="xs:float" name="Lng"/>
                              <xs:element type="xs:string" name="Name"/>
                          </xs:sequence>
                          <xs:attribute type="xs:string" name="id"/>
                      </xs:complexType>
                  </xs:element>
              </xs:choice>
          </xs:complexType>
      </xs:element>
  </xs:sequence>
  <xs:attribute type="xs:string" name="id"/>
  <xs:attribute type="xs:boolean" name="limitedaccess" />
</xs:complexType>

News:

The “News” feature allow you to add an RSS feed to your app. Each feed should have a title and valid RSS/ATOM feed url.

image

"feature-news": {
  "title": "Feature News Feeds",
  "description": "...",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "id": { "type": "string" },
    "name": { "type": "string", "default": "News" },
    "type": { "type": "string",  "enum": [ "feature-news" ] },
    "icon": {
      "type": "string",
      "pattern": "^[0-9]{1,3}$",
      "default": "32"
    },
    "sorting": {
      "type": "string",
      "enum": [ "manual" ]
    },
    "feeds": {
      "title": "Feeds",
      "description": "List of news feeds",
      "type": "array",
      "items": { "$ref": "#/definitions/feed" },
      "minItems": 1,
      "uniqueItems": true
    },
    "limitedAccess": { "type": "boolean", "default": false }
  },
  "required": [ "id", "type", "name", "icon", "sorting", "feeds" ]
},
"feed": {
  "title": "News Feed",
  "description": "Represent one RSS feed stream.",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "id": { "type": "string" },
    "type": { "type": "string", "enum": [ "feed" ] },
    "title": { "type": "string", "description": "Optional. Custom feed title."},
    "url": { "type": "string", "format": "uri", "description": "Feed url." },
    "count": { "type": "integer", "description": "Optional. Number of latest items to show." },
    "format": { "type": "string", "enum": [ "img" ] }
  },
  "required": [ "id", "type", "url" ]
},
<xs:complexType name="FeatureNews">
  <xs:sequence>
      <xs:element type="xs:string" name="Name" default="News" />
      <xs:element type="xs:string" name="Icon" default="32" />
      <xs:element name="Sorting">
          <xs:simpleType>
              <xs:restriction base="xs:string">
                  <xs:enumeration value="manual"/>
              </xs:restriction>
          </xs:simpleType>
      </xs:element>
      <xs:element name="Feeds">
          <xs:complexType>
              <xs:sequence>
                  <xs:element name="Feed" maxOccurs="unbounded" minOccurs="1">
                      <xs:complexType>
                          <xs:sequence>
                              <xs:element type="xs:string" name="Title"/>
                              <xs:element type="xs:anyURI" name="Url"/>
                              <xs:element type="xs:integer" name="Count" default="10"/>
                              <xs:element type="xs:string" name="Format" default="img"/>
                          </xs:sequence>
                          <xs:attribute type="xs:string" name="id"/>
                      </xs:complexType>
                  </xs:element>
              </xs:sequence>
          </xs:complexType>
      </xs:element>
  </xs:sequence>
  <xs:attribute type="xs:string" name="id"/>
  <xs:attribute type="xs:boolean" name="limitedaccess" />
</xs:complexType>

Sponsors:

The “Sponsors” feature allows you to list all the sponsors at your event including the ability to include a profile, attach documents, and sort sponsors according to levels/groups.

Please note the following:

  • Sponsor logos must be at least 180x120 in JPG or PNG format.
  • Sponsor can be marked as featured content.
  • Sponsors can be assigned a level/group such as “Silver” or “Gold” and sorted by level.
  • You can upload documents such as presentations or PDF documents. The maximum file size for each document is 50mb, although we recommend a maximum file size of 5mb. Accepted file types include PDF, DOC, DOCX, PPT, PPTX, XLS, and XLSX.

image
image

"feature-sponsors": {
  "title": "Feature Sponsors",
  "description": "...",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "id": { "type": "string" },
    "name": { "type": "string", "default": "Sponsors" },
    "type": { "type": "string",  "enum": [ "feature-sponsors" ] },
    "icon": {
      "type": "string",
      "pattern": "^[0-9]{1,3}$",
      "default": "87"
    },
    "sorting": {
      "type": "string",
      "enum": [ "manual", "company", "level" ]
    },
    "sponsors": {
      "title": "Sponsors",
      "description": "List of sponsors",
      "type": "array",
      "items": { "$ref": "#/definitions/sponsor" },
      "minItems": 1,
      "uniqueItems": true
    },
    "limitedAccess": { "type": "boolean", "default": false }
  },
  "required": [ "id", "type", "name", "icon", "sorting", "sponsors" ]
},
"sponsor": {
  "title": "Sponsor",
  "description": "Represent sponsor entity.",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "id": { "type": "string" },
    "type": { "type": "string", "enum": [ "sponsor" ] },
    "company": { "type": "string", "description": "Optional. Sponsor title." },
    "website": { "type": "string", "description": "Optional. Sponsor website." },
    "email": { "type": "string", "description": "Optional. Sponsor contact email." },
    "phone": { "type": "string", "description": "Optional. Sponsor contact phone." },
    "address": { "type": "string", "description": "Optional. Sponsor address." },
    "profile": { "type": "string", "description": "Optional. Sponsor description." },
    "logo": { "type": "string", "format": "uri", "description": "Optional. Sponsor logo. Min image size is 180x120." },
    "levels": {
      "title": "Levels",
      "description": "List of sponsor level names",
      "type": "array",
      "items": { "type": "string" },
      "minItems": 0,
      "uniqueItems": true
    },
    "files": {
      "title": "Files",
      "description": "List of public available links to files",
      "type": "array",
      "items": { "type": "string",  "format": "uri" },
      "minItems": 0,
      "uniqueItems": true
    },
    "twitter": {"type": "string", "description": "Optional. Twitter Social Link"},
    "facebook": {"type": "string", "description": "Optional. Facebook Social Link"},
    "linkedin": {"type": "string", "description": "Optional. LinkdIn Social Link"},
    "google": {"type": "string", "description": "Optional. Google+ Social Link"},
    "isFeatured": {"type": "boolean", "default": false}

  },
  "required": [ "id", "type", "company" ]
},
<xs:complexType name="FeatureSponsors">
  <xs:sequence>
      <xs:element type="xs:string" name="Name" default="Sponsors" />
      <xs:element type="xs:string" name="Icon" default="87" />
      <xs:element name="Sorting">
          <xs:simpleType>
              <xs:restriction base="xs:string">
                  <xs:enumeration value="manual"/>
                  <xs:enumeration value="company"/>
                  <xs:enumeration value="level"/>
              </xs:restriction>
          </xs:simpleType>
      </xs:element>
      <xs:element name="Sponsors">
          <xs:complexType>
              <xs:sequence>
                  <xs:element name="Sponsor" maxOccurs="unbounded" minOccurs="1">
                      <xs:complexType>
                          <xs:sequence>
                              <xs:element type="xs:anyURI" name="Website"/>
                              <xs:element type="xs:string" name="Profile"/>
                              <xs:element type="xs:string" name="Company"/>
                              <xs:element type="xs:string" name="Email"/>
                              <xs:element type="xs:string" name="Phone"/>
                              <xs:element name="Levels">
                                  <xs:complexType>
                                      <xs:sequence>
                                          <xs:element type="xs:string" name="Level"/>
                                      </xs:sequence>
                                  </xs:complexType>
                              </xs:element>
                              <xs:element type="xs:string" name="Address"/>
                              <xs:element type="xs:string" name="Logo"/>
                              <xs:element type="xs:string" name="Facebook" minOccurs="0" maxOccurs="1" default=""/>
                              <xs:element type="xs:string" name="Twitter" minOccurs="0" maxOccurs="1"  default=""/>
                              <xs:element type="xs:string" name="Linkedin" minOccurs="0" maxOccurs="1"  default=""/>
                              <xs:element type="xs:string" name="Google" minOccurs="0" maxOccurs="1"  default=""/>
                              <xs:element type="xs:boolean" name="isFeatured" minOccurs="0" maxOccurs="1"  default="false"/>
                          </xs:sequence>
                          <xs:attribute type="xs:string" name="id"/>
                      </xs:complexType>
                  </xs:element>
              </xs:sequence>
          </xs:complexType>
      </xs:element>
  </xs:sequence>
  <xs:attribute type="xs:string" name="id"/>
  <xs:attribute type="xs:boolean" name="limitedaccess" />
</xs:complexType>

Companies (Multi-Event Only):

The “Companies” feature is designed for associations or companies that want to include a list of members, partners, or other organizations at the container level of their Multi-Event app. The “Companies” feature is very similar to “Sponsors”

Please note the following:

  • Logos must be at least 180x120 in JPG or PNG format.
  • Companies can be assigned a group and sorted accordingly.
  • You can upload documents such as presentations or PDF documents. The maximum file size for each document is 50mb, although we recommend a maximum file size of 5mb. Accepted file types include PDF, DOC, DOCX, PPT, PPTX, XLS, and XLSX.

image
image

"feature-companies": {
  "title": "Feature Companies",
  "description": "...",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "id": { "type": "string" },
    "name": { "type": "string", "default": "Companies" },
    "type": { "type": "string", "enum": [ "feature-companies" ] },
    "icon": {
      "type": "string",
      "pattern": "^[0-9]{1,3}$",
      "default": "55"
    },
    "sorting": {
      "type": "string",
      "enum": [ "manual", "name", "category" ]
    },
    "companies": {
      "title": "Companies",
      "description": "List of companies",
      "type": "array",
      "items": { "$ref": "#/definitions/company" },
      "minItems": 1,
      "uniqueItems": true
    },
    "limitedAccess": { "type": "boolean", "default": false }
  },
  "required": [ "id", "type", "name", "icon", "sorting", "companies" ]
},
"company": {
  "title": "Company",
  "description": "Represent company entity",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "id": { "type": "string" },
    "type": { "type": "string", "enum": [ "company" ] },
    "address": { "type": "string", "description": "Optional. Company address." },
    "description": { "type": "string", "description": "Optional. Company description, headline." },
    "email": { "type": "string", "description": "Optional. Company contact email." },
    "name": { "type": "string", "description": "Company title." },
    "phone": { "type": "string", "description": "Optional. Company contact phone." },
    "website": { "type": "string", "description": "Optional. Company website." },
    "logo": { "type": "string", "format": "uri", "description": "Optional. Link to image. Min image size is 180x120." },
    "categories": {
      "title": "Categories",
      "description": "List of company category names",
      "type": "array",
      "items": { "type": "string" },
      "minItems": 0,
      "uniqueItems": true
    },
    "files": {
      "title": "Files",
      "description": "List of public available links to files",
      "type": "array",
      "items": { "type": "string",  "format": "uri" },
      "minItems": 0,
      "uniqueItems": true
    },
    "twitter": {"type": "string", "description": "Optional. Twitter Social Link"},
    "facebook": {"type": "string", "description": "Optional. Facebook Social Link"},
    "linkedin": {"type": "string", "description": "Optional. LinkdIn Social Link"},
    "google": {"type": "string", "description": "Optional. Google+ Social Link"}

  },
  "required": [ "id", "type", "name" ]
},
<xs:complexType name="FeatureCompanies">
  <xs:sequence>
      <xs:element type="xs:string" name="Name" default="Companies" />
      <xs:element type="xs:string" name="Icon" default="55" />
      <xs:element name="Sorting">
          <xs:simpleType>
              <xs:restriction base="xs:string">
                  <xs:enumeration value="manual"/>
                  <xs:enumeration value="company"/>
                  <xs:enumeration value="level"/>
              </xs:restriction>
          </xs:simpleType>
      </xs:element>
      <xs:element name="Companies">
          <xs:complexType>
              <xs:sequence>
                  <xs:element name="Company" maxOccurs="unbounded" minOccurs="1">
                      <xs:complexType>
                          <xs:sequence>
                              <xs:element type="xs:string" name="Address"/>
                              <xs:element name="Categories">
                                  <xs:complexType>
                                      <xs:sequence>
                                          <xs:element type="xs:string" name="Category"/>
                                      </xs:sequence>
                                  </xs:complexType>
                              </xs:element>
                              <xs:element type="xs:string" name="Description"/>
                              <xs:element type="xs:string" name="Email"/>
                              <xs:element type="xs:string" name="Logo"/>
                              <xs:element type="xs:string" name="Name"/>
                              <xs:element type="xs:string" name="Phone"/>
                              <xs:element type="xs:anyURI" name="Website"/>
                              <xs:element type="xs:string" name="Facebook" minOccurs="0" maxOccurs="1" default=""/>
                              <xs:element type="xs:string" name="Twitter" minOccurs="0" maxOccurs="1"  default=""/>
                              <xs:element type="xs:string" name="Linkedin" minOccurs="0" maxOccurs="1"  default=""/>
                              <xs:element type="xs:string" name="Google" minOccurs="0" maxOccurs="1"  default=""/>
                          </xs:sequence>
                          <xs:attribute type="xs:string" name="id"/>
                      </xs:complexType>
                  </xs:element>
              </xs:sequence>
          </xs:complexType>
      </xs:element>
  </xs:sequence>
  <xs:attribute type="xs:string" name="id"/>
  <xs:attribute type="xs:boolean" name="limitedaccess" />
</xs:complexType>

WebView:

The “WebView” feature allow to link to any webpage and open it within your mobile even tapp. Web view requires a valid URL and title for the page.

image

"feature-webview": {
  "title": "Feature Web View",
  "description": "...",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "id": { "type": "string" },
    "name": { "type": "string", "default": "WebView" },
    "type": { "type": "string", "enum": [ "feature-webview" ] },
    "icon": {
      "type": "string",
      "pattern": "^[0-9]{1,3}$",
      "default": "53"
    },
    "webview": { "$ref": "#/definitions/webview" },
    "limitedAccess": { "type": "boolean", "default": false }
  },
  "required": [ "id", "type", "name", "icon", "webview" ]
},
"webview": {
  "title": "Web View",
  "description": "Represent screen with custom web page.",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "id": { "type": "string" },
    "type": { "type": "string", "enum": [ "webview" ] },
    "title": { "type": "string", "description": "Optional. Item title." },
    "url": { "type": "string", "format": "uri", "description": "Web page URL." },
    "openExternal": { "type": "boolena", "default": false }
  },
  "required": [ "id", "type", "url" ]
},
<xs:complexType name="FeatureWebview">
  <xs:sequence>
      <xs:element type="xs:string" name="Name" default="WebView" />
      <xs:element type="xs:string" name="Icon" default="53" />
      <xs:element name="Webview">
          <xs:complexType>
              <xs:sequence>
                <xs:element name="Object">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element type="xs:anyURI" name="Url"/>
                            <xs:element type="xs:string" name="Title"/>
                        </xs:sequence>
                        <xs:attribute type="xs:boolean" name="openExternal"/>
                    </xs:complexType>
                </xs:element>
              </xs:sequence>
          </xs:complexType>
      </xs:element>
  </xs:sequence>
  <xs:attribute type="xs:string" name="id"/>
  <xs:attribute type="xs:boolean" name="limitedaccess" />
</xs:complexType>

Twitter:

The "Twitter" feature allows you to show one or more Twitter streams based on either hashtags (#attendify), specific accounts (@attendifyapp), or any search term (Event Apps).

image

"feature-twitter": {
  "title": "Feature Twitter",
  "description": "...",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "id": { "type": "string" },
    "name": { "type": "string", "default": "Twitter" },
    "type": { "type": "string", "enum": [ "feature-twitter" ] },
    "icon": {
      "type": "string",
      "pattern": "^[0-9]{1,3}$",
      "default": "100"
    },
    "sorting": {
      "type": "string",
      "enum": [ "manual" ]
    },
    "queries": {
      "title": "Queries",
      "description": "Twitter handles and hashtags",
      "type": "array",
      "items": { "$ref": "#/definitions/twitter" },
      "minItems": 1,
      "uniqueItems": true
    },
    "limitedAccess": { "type": "boolean", "default": false }
  },
  "required": [ "id", "type", "name", "icon", "sorting", "queries" ]
},
"twitter": {
  "title": "Twitter Search Query",
  "description": "Represent one twitter search term.",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "type": { "type": "string", "enum": [ "twitter" ] },
    "term": {
      "type": "string",
      "pattern": "^[#|@]\\S+$",
      "description": "User ID or hash tag."
    }
  },
  "required": [ "type", "term" ]
},
<xs:complexType name="FeatureTwitter">
  <xs:sequence>
      <xs:element type="xs:string" name="Name" default="Twitter" />
      <xs:element type="xs:string" name="Icon" default="100" />
      <xs:element name="Sorting">
          <xs:simpleType>
              <xs:restriction base="xs:string">
                  <xs:enumeration value="manual"/>
              </xs:restriction>
          </xs:simpleType>
      </xs:element>
      <xs:element name="Queries">
          <xs:complexType>
              <xs:sequence>
                  <xs:element name="Term"/>
              </xs:sequence>
          </xs:complexType>
      </xs:element>
  </xs:sequence>
  <xs:attribute type="xs:string" name="id"/>
  <xs:attribute type="xs:boolean" name="limitedaccess" />
</xs:complexType>

Security

Authorization

Attendify’s API supports Basic Auth.To use it, provide credentials on the "Create Synchronization" step. If th the Basic Auth credential is provided, Attendify’s server will use it for each request sent to your data provider. Credentials can be always changed on the synchronization edit page.

Request Signature

Another security check can be performed on the data provider side allowing you to verify that the request was made from Attendify’s server. Each Attendify request contains a token in theX-Attendify-Token header and current date in theDate header formatted to RFC 822. You can find the token value in "Synchronization setting" page.

X-Attendify-Request-Signature header contains a signature of request, his signature is unique for each Attendify request. The value of this signature is calculated based onX-Attendify-Token,Date, request method an URI and your secret key, it uses theHMAC-SHA1 method.

from hashlib import sha1
import hmac
import base64
secret = b"Secret from Attendify Synchronization page"
headers = {
"method":"POST",
"date":"2015-01-01 12:00:00",
"x-attendify-token":"token"
}  # assuming this is headers dictionary from request
request_uri = "http://example.com/event/document"  # assuming this is URI from request
raw = "\n".join([
headers["method"],
headers["date"],
"x-attendify-token:" + headers["x-attendify-token"],
request_uri
])
hashed = hmac.new(secret, raw.encode(), sha1)
print(base64.b64encode(hashed.digest()))
$request_signature = $_SERVER['HTTP_X_Attendify_Request_Signature']
$SECRET = "Secret from Attendify Synchronization page"
$data_to_sign = implode("\n", array(
    $_SERVER['REQUEST_METHOD'],
    $_SERVER['HTTP_Date'],
    "x-attendify-token:" + $_SERVER['HTTP_X_Attendify_Token'],
    $_SERVER['REQUEST_URI']
));
$valid_signature = base64_encode(hash_hmac("sha1", $data_to_sign, $SECRET))
// $request_signature and $valid_signature should match

FAQ

How can I test my server locally?

Use any network tunneling software, likengrok

Assume your local server is bound to127.0.0.1:8080. Download and install ngrok. Than run ngrok 8080 which will create a secure channel to your local machine and will give you a public address likehttp://b0e5b5e.ngrok.com

May I use static files?

Yes. For instance you can use Gist from Github.com. Just paste content of your data file into new private Gist. Select "Raw" view and you will get a public available link likehttps://gist.githubusercontent.com/jurka/965823404c6ceeccb3b5/raw/2044ff5115d9299a916a2d14d2905ac11fbbbae6/single-event.json. Use this link in Synchronization settings.