Eventim (Ticketcorner) integration
Integrate ticketing with our SSO
Unidy provides a native integration that synchronizes Eventim contacts with Unidy accounts. The synchronization is fully bi-directional, meaning changes made in either system are reflected in the other. Both create events and update events are included in the sync process.
The Eventim integration is available as a native Unidy plugin and can be added easily to your brand. Installation and configuration are handled by your Unidy contact.
Initial setup
The basic setup requires an API connection to your Eventim account:
- Base URL
- Client ID
- Client secret
SSO in Eventim
Unidy SSO can be integrated in Eventim. However, your contact at Eventim has to set this up. Eventim will require the following information for this:
- Host
- Client ID
- Scopes
Scopes determine which information will be exchanged upon login from the Identity provider (Unidy) to the client (Eventim).
Contact synchronization
Contacts stored in Eventim can be synchronized with Unidy accounts to
- provide your users a seamless usage of your Eventim shop
- access the data of your users in Eventim, so you can use it for your marketing campaigns and user communication
Eventim contacts and Unidy accounts are connected by two measures:
- Eventim contact stores Unidy ID as authorization ID
- Unidy Account stores Eventim Tixx ID as plugin data
The sync works bi-directional between Eventim contacts and Unidy accounts. This 2-way sync allows for the seamless transfer of create and update events between the two platforms.

Upon any create or update event in either Eventim or Unidy, a webhook is generated. The webhook subscriptions are automatically created through our plugin upon installation. These webhooks contain essential information and serve as triggers for the synchronization process.

Synced Information
The synchronization process ensures that the following information is kept up-to-date between Eventim contacts and Unidy accounts:
- Unidy ID
- First name
- Last name
- Date of birth
- Address information
- Company
- Salutation
- Eventim tixxCustomerNumber
- Eventim customerState.name
- Eventim customerState.description
- Eventim customerState.state
Phone number is not part of the current sync scope
Custom Mappings:
Custom mappings provide flexibility in the synchronization process. Administrators can configure additional attributes to be synchronized or assign contacts to custom user groups such as membership or discount groups.
Configuration Options:
Administrators can fine-tune the synchronization process with the following configuration options:
- Invite New Users: Determine whether users created in Unidy by Eventim are directly invited, receiving an invitation email upon creation (true/false).
- Assign Users by Email: Specify whether contacts in Eventim are identified by email instead of the Eventim custom number (true/false).
- Sync new users: Determine whether all newly created users in Unidy should be synched to Eventim
The last method is not recommended as email may not be unique in Eventim.
Eventim -> Unidy
On receipt of a CUSTOMER_UPDATE webhook, the sync process begins. The webhook contains a UUID, which is used to fetch the payload from Eventim webhook API.
As there is no general contact API in Eventim, the retrieval of webhooks is crucial for data integrity. However, Eventim webhook retry mechanism ensures a high level of reliability in the synchronization process.
Depending on the given sync settings, users in Unidy are either created or updated.
The linked Unidy user to an Eventim contact is identified through the Unidy ID.
Unidy -> Eventim
Changes made in Unidy trigger create or update events. These are used conversely to update the respective contacts in Eventim to maintain data consistency across platforms.
The linked Eventim contact to a Unidy user is identified through the Eventim Tixx ID.
Sync Conflicts
In the following section, you will find a description of Eventim-specific synchronization conflicts and instructions on how to resolve them.
EVENTIM TIXX ID | UNIDY ID |
DUPLICATE EVENTIM CONNECTION | |
t661684dc9eaa3 | 87059c0d-62c8-429c-9986-1d25e71e8399 |
t66e2e204e4887 | 87059c0d-62c8-429c-9986-1d25e71e8399 |
MULTIPLE ASSIGNMENT | |
t661684dc9eaa3 | 87059c0d-62c8-429c-9986-1d25e71e8399 |
t661684dc9eaa3 | 9916d3db-1303-4d6f-ae2d-a5881ce51fb8 |
Duplicated Eventim Connection
You might have the case that your ticketing team wants to purchase tickets for VIPs, scouts, etc.. A usual approach to this is, to create a new customer in Eventim with the information of the respective VIP, but with their own email address.

When this happens, Unidy receives an update from Eventim with the new Eventim Tixx ID for the respective Email address. Unidy then would normally create a new connection between the respective Tixx ID and Unidy ID to establish the sync for the Unidy user to the Eventim customer. However, this is not possible in this case, since the Unidy user is already connected to a different Eventim customer. This is why Unidy raises a “Duplicate Eventim Connection” sync conflict. You have 3 option how to resolve this conflict:
- Ignore If you just want to ignore the conflict without any action, click Ignore
- Connect In case you want the user to be overwritten in Unidy with Eventim data and establish a new connection between Unidy and Eventim user, click Connect.
- Dismiss If you don’t want to overwrite the information in Unidy with the information of the new customer in Eventim, you should click Dismiss. In this case a new connection is not established, and existing information is synced from Unidy to Eventim for the already connected user.
Use case B: Merging two customers in Eventim with the same email address
You might have created a second Eventim customer with the same Email address as the first one. In that case you can merge customers. This will delete the first customer in Eventim and leave only the new customer object.
When this happens, Unidy receives an update from Eventim with the new Eventim Tixx ID for the respective Email address. Unidy then would normally create a new connection between the respective Tixx ID and Unidy ID to establish the sync for the Unidy user to the Eventim customer. However, this is not possible in this case, since the Unidy user is already connected to a different customer. This is why Unidy raises a “Duplicate Eventim Connection” sync conflict.
Since you want in this case to establish a connection with the new customer in Eventim, you should click on Connect. Now the Unidy ID will be synced to the new Eventim customer as authorization method and the connection in Unidy will be updated with the new Tixx ID.
Multiple Assignment
Use Case C: Switch Unidy accounts for existing Eventim customers
When wanting to change the Unidy ID of existing customers in Eventim, you can do so by editing the Authorization on the Eventim customer. You can simply add the new Unidy ID of an existing user in Unidy that you want to use.

When you do so, Unidy receives an update with the respective Eventim Tixx ID and the new Unidy ID you want to use. Since, Unidy already has a relation to a different Unidy user for this Tixx ID, Unidy raises a sync conflict of the type Multiple Assignment.
If you want to accept your changes, simply click Connect.
Resource not found
When syncing tickets or subscriptions from Eventim to Unidy, Unidy plugin uses different methods to identify the user associated with the ticket.
- Check for existing tickets or subscriptions: First, the plugin checks if the ticket or subscription is already stored in Unidy by comparing the ticket ID. If it exists, the plugin updates the existing ticket or subscription.
- Check for an associated Unidy ID: If the ticket is not found, the plugin checks whether the Eventim customer already has a Unidy ID stored for authentication.
- Check for email match: If no Unidy ID is found, the plugin checks whether the customer’s email is already in Unidy.
If steps 2 and 3 are unsuccessful, a new user can either be created in Unidy (if the Create missing users when syncing tickets option is enabled) or a Resource not found sync conflict is triggered.
In the case of a sync conflict, you can either ignore it or manually add the user to Unidy so the ticket or subscription can be synced during their next purchase.
Ticket Synchronization
Purchased tickets can be synchronized with Unidy. Tickets in Eventim are always purchased by associated contacts. The synchronization of tickets depends on the corresponding Eventim contact being successfully synced to an account in Unidy. If the contact is not available in Unidy, the related tickets cannot be synchronized. For more information, see section Contact Synchronization.
Upon ticket creation, Eventim sends two webhooks: ORDER_UPDATE and ORDER_TICKET_UPDATE.
ORDER_UPDATE- Contains order invoice details in a single webhook per order.
- Required to extract ticket statuses (valid, expired, cancelled, etc.).
ORDER_TICKET_UPDATE- Is triggered for each ticket purchase, resulting in multiple webhooks for orders with multiple tickets.
- Contains ticket details like type (e.g. seasonal or single game), price, seating, venue, and event details.
Eventim doesn’t have a general Ticket API for querying tickets. Hence, Unidy plugin relies solely on webhook reception to retrieve ticket information. Failure to capture a webhook would render ticket information irretrievable.
Upon webhook receipt, the plugin utilizes the UUID to extract payload via Eventim's Webhook API.

Based on the given configuration, the Eventim plugin in Unidy creates either a ticket, or a subscription.
The ticket sync is a one-way sync, meaning that tickets are synced to Unidy, but if they are updated in Unidy, they are not updated accordingly in Eventim. I.e. updates for tickets must happen always in Eventim.
Ticket object in Unidy
Tickets from Eventim are synced as Tickets in Unidy. If the ticket from Eventim is a seasonal ticket, it can also be configured to be synced as Subscription.
Tickets and Subscriptions both always belong to a Ticket Category or Subscription Category. This has to be considered when activating the sync. You have the following options to assign category IDs:
- Either add value mapping (e.g. certain event ID mapped to a category ID)
- use fallback category ID in plugin settings, that is being used, when you either didn’t setup a value mapping, or if the given attribute doesn’t match any mapped values.
Sync triggers
- Create: When new tickets are purchased in Eventim, Eventim creates an order-invoice and a ticket for each purchased ticket. The created tickets are synced to Unidy.
- Update: Tickets in Eventim can change. E.g. seating, start date and time, or status (i.e. when user cancels or ticket expires). The respective tickets in Unidy are updated accordingly. If a ticket wouldn’t be existing in Unidy yet, it would be created instead.
Synced ticket attributes
You can customize what kind of information is synced from Eventim to Unidy. You can also decide as which attributes the information is stored in Unidy. When first creating the plugin, Unidy plugin is generating some default mappings to ensure that the tickets can be synced in general.
The level of detail that can be synchronized with Unidy depends on the Eventim API. The following information is available for synchronization.
Example payload ORDER_UPDATE
{
"invoiceId": "26123456789",
"extNumber": "a21324354",
"orderId": "65281000",
"customer": {
"id": "abc123123123",
"customerNumber": "MXXX0001-1",
"authenticationEmail": "jd@provider.tld",
"status": "active",
"firstName": "John",
"lastName": "Doe",
"middleName": "",
"initials": "",
"ticketName": "",
"company": "",
"title": "",
"salutation": "Herr",
"gender": "male",
"nationality": "",
"fiscalCode": "",
"dateOfBirth": "",
"placeOfBirth": "",
"countryOfBirth": "",
"streetAndNumber": "Doe Street 5",
"postalCode": "10000",
"city": "Doe City",
"province": "",
"country": "UK",
"addressSupplement": "",
"additionalAddresses": [
{
"id": 10000000,
"customerId": "abc123123123",
"salutation": "Frau",
"title": "",
"firstName": "Jane",
"middleName": "",
"initials": "",
"lastName": "Doe",
"company": "",
"street": "Doe Street 5",
"postalCode": "10000",
"city": "Doe City",
"country": "UK",
"province": "",
"addressSupplement": "",
"addressType": "standard"
}
],
"communications": [
{
"id": 20000000,
"customerId": "abc123123123",
"communicationType": "email",
"communicationValue": "jd@provider.tld"
}
],
"possessedCardIds": [],
"authorization": ""
},
"affiliate": {
"id": 1000,
"title": "1. FC Verein",
"companyId": "fc"
},
"parentAffiliate": {
"id": 1000,
"title": "1. FC Verein",
"companyId": "fc"
},
"saleOperator": {
"id": "1080000",
"username": "salesperson",
"name": "Sales Person"
},
"salesChannel": {
"code": "i",
"description": "Interne VVK"
},
"date": "2021-02-01T11:01:00+01:00",
"vatPrepaid": false,
"additionalFee": [
{
"id": "6017D19DCD19C",
"description": "Mitnahme",
"isoAmount": {
"amount": "0",
"currency": "EUR"
},
"vat": "0.0000"
}
],
"totalPrice": "129.00E",
"totalPriceIso": {
"amount": "129",
"currency": "EUR"
},
"paymentType": "CASH",
"payments": [
{
"paymentType": "CASH",
"isoAmount": {
"amount": "129",
"currency": "EUR"
}
}
],
"expiredTickets": [],
"cancelledTickets": [],
"pendingTickets": [],
"enteredTickets": [],
"transferedTickets": [],
"deliveryMethod": {
"id": 1020,
"name": "Mitnahme"
},
"invoiceAddress": {
"id": 123456790,
"customerId": "abc123123123",
"salutation": "Herr",
"title": "",
"firstName": "John",
"middleName": "",
"initials": "",
"lastName": "Doe",
"company": "",
"street": "Doe Street 5",
"postalCode": "10000",
"city": "Dow City",
"country": "UK",
"province": "",
"addressSupplement": "",
"addressType": "standard"
},
"deliveryAddress": {
"id": 123456789,
"customerId": "abc123123123",
"salutation": "Frau",
"title": "",
"firstName": "Jane",
"middleName": "",
"initials": "",
"lastName": "Doe",
"company": "",
"street": "Doe Street 5",
"postalCode": "10000",
"city": "Dow City",
"country": "UK",
"province": "",
"addressSupplement": "",
"addressType": "standard"
},
"type": "Invoice",
"accounts": [],
"events": [
{
"id": 300000,
"competitionId": 5000,
"competitionName": "Bundesliga",
"name": "1. Heimspiel",
"type": "single",
"status": [
"active",
"informational"
],
"vatCode": "",
"isFiscal": false,
"isDeletable": false,
"startTime": "2021-03-14T20:00:00+01:00",
"endTime": "2021-03-14T22:00:00+01:00",
"endOfSaleTime": "2021-03-14T23:59:00+01:00",
"maxCancellationDate": "2021-05-16T00:00:00+02:00",
"requiresPersonalisation": false,
"requiresPoliceAuthorisation": false,
"uniqueVisitor": false,
"isChangeOfNamesAllowed": false,
"description": "Soccer Game",
"information": "",
"searchTerms": "FC, Bundesliga",
"performer": [
{
"name": "1. FC Verein",
"imgUrl": "events/opponents/home/1/6/../url.jpg",
"type": "home"
},
{
"name": "TUS Verein",
"imgUrl": "events/opponents/home/1/9/../differenturl.svg",
"type": "guest"
}
],
"venue": {
"id": 4000,
"name": "Stadion des FC",
"isFancardStadium": false,
"fiscalCode": ""
},
"ticketServer": "192.168.0.1"
}
],
"validTickets": [
"26123456789-1",
"26123456789-2"
]
}Example payload ORDER_TICKET_UPDATE
{
"id": "26123456789-1",
"type": "single",
"isClubSale": false,
"isVirtualTicket": false,
"canBeTransfered": false,
"isBlockedInAC": false,
"needsPersonalisation": false,
"affiliateId": 1000,
"userId": 1080000,
"eventURL": "Event/100000/",
"eventDescription": "Soccer Game",
"customerId": "abc123123123",
"areaId": 1212121,
"areaLabel": "Block A",
"areaURL": "Event/100000/Area/200000/",
"seat":
{
"rowId": 0,
"rowLabel": "A",
"seatId": 50,
"seatLabel": "A51",
"priceCategoryId": 133208,
"priceCategoryName": "Normalpreis PK2",
"uniqueSeatId": "1211087000286"
},
"totalPrice": "13.00E",
"totalPriceIso":
{
"amount": "13",
"currency": "EUR"
},
"priceComponents":
[
{
"amount": "13.00",
"isoAmount":
{
"amount": "13",
"currency": "EUR"
},
"isoNetAmount":
{
"amount": "10.92",
"currency": "EUR"
},
"currency": "EUR",
"type": "base",
"vat": "0.1900",
"isoVatAmount":
{
"amount": "2.08",
"currency": "EUR"
}
}
],
"status": "B",
"isPrinted": false,
"prePrinted":
{
"ticketsPrePrinted": false
},
"invoiceId": "26123456789",
"barcode": "AB00008899801400000099",
"eventData":
{
"id": 300000,
"competitionId": 5000,
"competitionName": "Bundesliga",
"name": "1. Heimspiel",
"type": "single",
"status":
[
"active",
"informational"
],
"vatCode": "",
"isFiscal": false,
"isDeletable": false,
"startTime": "2021-03-14T20:00:00+01:00",
"endTime": "2021-03-14T22:00:00+01:00",
"endOfSaleTime": "2021-03-14T23:59:00+01:00",
"maxCancellationDate": "2021-05-16T00:00:00+02:00",
"requiresPersonalisation": false,
"requiresPoliceAuthorisation": false,
"uniqueVisitor": false,
"isChangeOfNamesAllowed": false,
"description": "Soccer Game",
"information": "",
"searchTerms": "FC, Bundesliga",
"performer":
[
{
"name": "1. FC Verein",
"imgUrl": "events/opponents/home/1/6/../url.jpg",
"type": "home"
},
{
"name": "TUS Verein",
"imgUrl": "events/opponents/home/1/9/../differenturl.svg",
"type": "guest"
}
],
"venue":
{
"id": 4000,
"name": "Stadion des FC",
"isFancardStadium": false,
"fiscalCode": ""
},
"ticketServer": "192.168.0.1"
}
}Recommended mapping (for all the options please refer to webhook payload of ORDER_TICKET_UPDATE):
Attribute | Description | Expl value | Default mapping in Unidy |
id | Unique identifier of the ticket | 26123456789-1 | reference |
type | Type of ticket | single / subscription_ticket | ticket_category_id or
subscription_category_id |
isClubSale | Indicates if it's a club sale | false / true | metadata |
isVirtualTicket | Indicates if it's a virtual ticket | false / true | metadata |
canBeTransfered | Indicates if ticket can be transferred | false / true | metadata |
needsPersonalisation | Indicates if ticket needs personalization | false / true | metadata |
eventURL | URL of the event | Event/100000/ | metadata |
eventDescription | Description of the event | Soccer Game | metadata |
areaId | ID of the seating area | 1212121 | metadata |
areaLabel | Label of the seating area | Block A | metadata |
areaURL | URL of the seating area | Event/100000/Area/200000/ | metadata |
seat.rowId | Row ID of the seat | 0 | metadata |
seat.rowLabel | Label of the row | A | metadata |
seat.seatId | Seat ID | 50 | metadata |
seat.seatLabel | Label of the seat | A51 | metadata |
seat.priceCategoryId | Price category ID | 133208 | metadata |
seat.priceCategoryName | Name of the price category | Normalpreis PK2 | metadata |
seat.uniqueSeatId | Unique seat ID | 1211087000286 | metadata |
totalPriceIso.amount | Total price amount in ISO format | 13 | price |
totalPriceIso.currency | Total price currency in ISO format | EUR | metadata |
status | Payment status of ticket (B → paid; Z → returned) | B / Z | metadata |
barcode | Barcode of the ticket | AB00008899801400000099 | metadata |
eventData.competitionId | ID of the competition | 5000 | metadata |
eventData.competitionName | Name of the competition | Bundesliga | metadata |
eventdata.name | Name of the event | 1. Heimspiel | title |
eventData.type | Type of the event | single | metadata |
eventData.startTime | Start time of the event | 2021-03-14T20:00:00+01:00 | starts_at |
eventData.endTime | End time of the event | 2021-03-14T22:00:00+01:00 | ends_at |
eventData.maxCancellationDate | Max cancellation date of the event | 2021-05-16T00:00:00+02:00 | metadata |
eventData.description | Description of the event | Soccer Game | text |
eventdata.performer.name | Name of the performer | 1. FC Verein, TUS Verein | metadata |
eventData.performer.imgUrl | Image URL of the performer | events/opponents/home/1/6/../url.jpg, events/opponents/home/1/9/../differenturl.svg | metadata |
eventData.performer.type | Type of the performer (home/guest) | home, guest | metadata |
eventdata.venue.id | ID of the venue | 4000 | metadata |
eventdata.venue.name | Name of the venue | Stadion des FC | venue |
Configuration options
- Ticket Sync Enabled (true/false): Enables the synchronization of ticket data to Unidy
- Sync seasonal tickets as (Subscription/Ticket): Allows you to choose whether the synchronized ticket should be created in Unidy as subscription or ticket object
- Update fields with empty value (true/false): If we receive a ticket update with an empty attribute, that has previously been non-empty, you can decide to not overwrite this information with the empty values.
- Use category title and description if blank (true/false): If you don’t setup a value mapping for the category IDs (ticket / subscription), or if the given attribute doesn’t match any mapped values, we can use a fallback ID.
- Fallback ticket category: The ticket category you want to use by default or fallback.
- Fallback subscription category: The subscription category you want to use by default or fallback.
- Ticket Sync Service ID (e.g. 5): Allows you to choose a corresponding service determining the API access to these data at the later stage
- Ticket Sync Subscription Category ID (e.g. 442e9873-9d71-44f6-81ab-6517e59ac36f): Allows you to map tickets to the corresponding ticket categories in Unidy
- Create missing users when syncing tickets (true/false): If set to true the corresponding user will be created in Unidy in case it’s not there yet. If set to false ticket will not be created in Unidy
Integration use cases
For the possible use cases please refer to Eventim x Unidy Use Cases