Changes in Sales Process
The webhooks in the Changes in the Sales Process area inform external systems about all relevant events that occur after a sale has been completed.
They cover the entire lifecycle of a sale – including cancellations, invoice changes, payment confirmations, and changes to the legitimation status.
These events enable connected applications to react in real time to changes in the sales process – for example to:
-
Synchronize accounting and ERP systems (e.g., for invoice changes or incoming payments)
-
Trigger cancellation processes in downstream systems (e.g., refunds, ticket invalidation)
-
Provide CRM systems with updated buyer and billing information
-
Monitor and log compliance and legitimation checks
-
Separate test and production data (e.g., via the test flag)
-
Keep monitoring dashboards and reporting systems up to date
In contrast to the webhooks in the Ticket Entry and Validation area, which focus on physical access, the events in this area relate exclusively to the commercial process – i.e., the sale itself, its payment, cancellation, and the associated administrative processes.
Supported Events
The following webhook events are available in this area:
-
sale.canceled- Sale canceled -
sale.testFlagUpdated- Marked as test flag on sale updated -
sale.invoiceUpdated- Invoice or buyer details updated -
sale.markAsPaid- Sale marked as paid -
sale.legitimationStatusChanged- Legitimation status of sale changed
Flow (typical)
General Notes
-
Payload structure: All events in this group follow a uniform base structure with the top-level fields
event,event_id,event_time,endpoint_url, anddata. The contents of thedataobject vary depending on the event. -
Data dependency: Depending on the event and context, individual objects in the payload may be missing or contain additional fields.
-
Idempotency: Receiving systems should use the
event_idfor deduplication to ensure that an event is not processed twice.
sale.canceled – Sale canceled
The webhook event sale.canceled is triggered when a previously completed sale is canceled. It informs connected systems about the cancellation so they can, for example, initiate refunds, invalidate tickets, or reverse bookings in the ERP system.
Trigger: The sale transitions to the status Canceled – either by the buyer, a back-office user, or an external system.
Webhook payload sample
Fields in detail
saleCanceled – Cancellation Details
This object only exists in the sale.canceled event and contains the details of the cancellation.
| Field | Type | Description | Example Value |
|---|---|---|---|
saleIdentifier | string (UUID) | UUID of the canceled sale. | 1d2ab198-635b-f111-93e7-00155d96040a |
success | boolean | Indicates whether the cancellation was successful. | true |
canceledOn | string (ISO‑8601) | Timestamp of the cancellation. | 2026-05-29T15:39:08.7710564 |
canceledReason | string | Reason for the cancellation. May be empty if no reason was provided. | "" |
sale – Sale Data
Core information about the canceled sale.
| Field | Type | Description | Example Value |
|---|---|---|---|
id | string (UUID) | UUID of the sale. | 1d2ab198-635b-f111-93e7-00155d96040a |
number | string | Human-readable sale number. | 0815-2025-815523860 |
saleTimestamp | string (ISO‑8601) | Timestamp when the sale was originally completed. | 2026-05-29T15:38:05.5904799+02:00 |
event – Event Information (within sale)
Information about the event (fair/exhibition) in which the sale took place.
| Field | Type | Description | Example Value |
|---|---|---|---|
id | string (UUID) | UUID of the event. | f32adbb6-3c9c-ef11-93d8-00155d96040a |
name | string | Event name. | Futurama |
year | string | Event year. | 2025 |
number | string | Event number. | 0815 |
slug | string | URL-friendly short identifier for the event. | fr25 |
dateTimeSpan.start | string (ISO‑8601) | Event start date/time. | 2025-04-01T08:00:00+02:00 |
dateTimeSpan.end | string (ISO‑8601) | Event end date/time. | 2026-12-31T09:00:00+01:00 |
externalId1 | string | External reference ID 1 (tenant-specific, optional). | test-id-1 |
externalId2 | string | External reference ID 2 (tenant-specific, optional). | fr25 |
externalId3 | string | External reference ID 3 (tenant-specific, optional). | test-id-3 |
status – Sale Status
| Field | Type | Description | Example Value |
|---|---|---|---|
rawValue | string | Status value. Possible values: Completed, Canceled, Pending. | Canceled |
tags | array of strings | Status tags providing additional context. Possible values: PaymentPaid, PaymentNotPaid, ReceiptCreated, ReceiptNotCreated, LegitimationNew, LegitimationAccepted, LegitimationRejected. | ["PaymentNotPaid", "ReceiptNotCreated"] |
isBillingAddressChangeEnabled | boolean | Indicates whether the buyer can still change the billing address. Typically false for canceled sales. | false |
billing – Billing Contact
Billing recipient data for the sale.
| Field | Type | Description | Example Value |
|---|---|---|---|
id | string (UUID) | UUID of the billing contact. | de15a99e-635b-f111-93e7-00155d96040a |
firstName | string | First name. | Theo |
lastName | string | Last name. | Tester |
email | string | Email address. | u.janssen+2605291533@aditus.de |
company | string | Company name. | ADITUS GmbH |
spokenLanguage | string | Preferred language. | German |
billing.address – Billing Address
| Field | Type | Description | Example Value |
|---|---|---|---|
state | object | State/region. May be empty ({}). | {} |
country.key | string | ISO country code. | DE |
country.value | string | Country name. | Germany |
county.key | string | County/region code. | 003 |
county.value | string | County/region name. | Lower Saxony (Niedersachsen) |
street | string | Street name. | Straße der Nationen |
houseNumber | string | House number. | 5 |
postalCode | string | Postal code. | 30539 |
city | string | City. | Hannover |
buyer – Buyer Contact
Same structure as billing. Contains the buyer's contact details (may be identical to the billing contact).
invoice – Invoice Data
| Field | Type | Description | Example Value |
|---|---|---|---|
number | string | Invoice number. May be empty if no invoice was created before the cancellation. | "" |
grossPrice | number | Gross price (incl. VAT). | 35 |
grossPriceFormatted | string | Formatted gross price with currency symbol. | €35.00 |
currency | string | ISO currency code. | EUR |
status | string | Invoice status. Possible values: Created, NotCreated. | NotCreated |
payment – Payment Data
| Field | Type | Description | Example Value |
|---|---|---|---|
providerName | string | Name of the payment provider. | WERO |
status | string | Payment status. Possible values: Paid, NotPaid, Refunded. | NotPaid |
receipts[] – Receipts
Array containing the receipts for the sale. For canceled sales, this array may be empty if no invoice was created before the cancellation.
| Field | Type | Description | Example Value |
|---|---|---|---|
number | string | Receipt number. | 0815-2025-815513750 |
type | string | Receipt type. Possible values: Bill, Cancellation, BillCorrection, PaymentConfirmation. | Bill |
createdAt | string (ISO‑8601) | Timestamp when the receipt was created. | 2026-05-29T15:39:08+02:00 |
url | string (URL) | URL to download the receipt PDF. | https://dev.aditus.de/.../receipts/{id} |
Boolean Flags (within sale)
| Field | Type | Description | Example Value |
|---|---|---|---|
hasTransactions | boolean | Indicates whether the sale has associated payment transactions. | true |
hasArticles | boolean | Indicates whether the sale contains articles. | true |
hasConfirmedReservationTransaction | boolean | Indicates whether a confirmed reservation exists. | false |
hasCarts | boolean | Indicates whether the sale has associated carts. | true |
Notes on Other Events in This Group
| Event | Description | Payload Specifics |
|---|---|---|
sale.canceled | Sale canceled | Full payload with all objects (as documented above) |
sale.testFlagUpdated | Test flag updated | sale.isTestSale contains the new value (true/false) |
sale.invoiceUpdated | Invoice/buyer data updated | Updated data in buyer_address and/or billing_address |
sale.markAsPaid | Marked as paid | sale.salePaymentStatus = Paid |
sale.legitimationStatusChanged | Legitimation status changed | Contains the new legitimation status |
sale.testFlagUpdated - Test Flag Updated
The webhook event sale.testFlagUpdated is triggered when the test flag of a sale is changed – i.e., when a sale is marked as a test sale. This allows connected systems to cleanly separate test and production data, for example by excluding test sales from revenue reports, accounting exports, or CRM synchronization.
Trigger: A back-office user or an external system changes the test flag of an existing sale (from production to test).
Webhook payload sample
Differences from sale.canceled
| Aspect | Difference |
|---|---|
data.saleTestFlagUpdated | New object – contains the updated test flag status (see below). Only exists for this event. |
data.sale.status.tags | May contain the tag TestSale when the sale is marked as a test. |
No saleCanceled object | The saleCanceled object from sale.canceled is not present. |
New Object: saleTestFlagUpdated
| Field | Type | Description | Example Value |
|---|---|---|---|
saleIdentifier | string (UUID) | UUID of the affected sale. | 1287f990-4b0b-f111-93e3-00155d960409 |
success | boolean | Whether the test flag update was successful. | true |
isTest | boolean | The new value of the test flag. true = test sale, false = production sale. | true |
All other fields (sale, buyer, billing, invoice, payment, receipts) follow the same structure as sale.canceled.
sale.invoiceUpdated – Invoice or Buyer Data Updated
The webhook event sale.invoiceUpdated is triggered when invoice information or buyer data of an existing sale is subsequently changed – for example, when the VAT ID is added, the billing address is corrected, or the salutation is updated. Connected systems can use this event to keep their invoice records, accounting exports, and CRM entries in sync.
Trigger: A buyer, back-office user, or external system modifies billing-relevant data of an already completed sale. The system automatically generates a corrected invoice (receipt type BillCorrection) and a new invoice reflecting the updated data.
Webhook payload sample
Differences from sale.canceled
| Aspect | Difference |
|---|---|
data.saleInvoiceUpdated | New object – contains details about the update, including a list of changed fields (see below). Only exists for this event. |
data.sale.billing / data.sale.buyer | May contain additional fields such as salutationLookup, salutation, titleLookup, title, and vatId. |
data.sale.receipts | Typically contains multiple receipts, including the original Bill, a BillCorrection (canceling the old invoice), and a new Bill with the corrected data. |
New Object: saleInvoiceUpdated
| Field | Type | Description | Example Value |
|---|---|---|---|
saleIdentifier | string (UUID) | UUID of the affected sale. | 197bda3f-5cae-f011-93e1-00155d96040a |
success | boolean | Whether the invoice update was successful. | true |
changedFields | array | List of fields that were changed (see below). | (see below) |
changedFields[] – Changed Fields
| Field | Type | Description | Example Value |
|---|---|---|---|
fieldName | string | Name of the changed field. | VatID |
oldValue | string | Previous value of the field. May be empty. | "" |
newValue | string | New value of the field. | 1234 |
Additional Fields in billing / buyer
| Field | Type | Description | Example Value |
|---|---|---|---|
salutationLookup | string | Salutation key. May be empty. | "" |
salutation | string | Salutation display value. May be empty. | "" |
titleLookup | string | Title key (e.g., Admiral, Dr, Prof). | Admiral |
title | string | Title display value. | Admiral |
vatId | string | VAT identification number. | 1234 |
All other fields (sale, buyer, billing, invoice, payment, receipts) follow the same structure as sale.canceled.
sale.markedAsPaid - Sale Marked as Paid
The webhook event sale.markedAsPaid is triggered when a sale is marked as paid – e.g. manually by a back-office user. Connected systems can use this event to update payment statuses in ERP or accounting systems or trigger fulfillment workflows.
Trigger: The payment status of an existing sale changes to Paid. This typically occurs when an invoice-based payment is received and a manual payment confirmation is entered in the back office.
Webhook payload sample
Differences from sale.canceled
| Aspect | Difference |
|---|---|
data.saleMarkedAsPaid | New object – confirms the successful payment marking (see below). Only exists for this event. |
data.sale.payment.status | Value is Paid. |
data.sale.status.tags | Contains the tag PaymentPaid. |
data.sale.receipts | May contain a receipt of type PaymentConfirmation in addition to the original Bill. |
New Object: saleMarkedAsPaid
| Field | Type | Description | Example Value |
|---|---|---|---|
saleIdentifier | string (UUID) | UUID of the affected sale. | b71fa607-a664-f111-93e7-00155d96040a |
success | boolean | Whether the payment marking was successful. | true |
sale.legitimationStatusChanged– Legitimation Status Changed
The webhook event sale.legitimationStatusChanged is triggered when the legitimation status of a sale changes – for example, when a buyer's identity verification transitions from New to Accepted or Rejected. Connected systems can use this event to gate ticket fulfillment until legitimation is confirmed, update compliance records, or trigger manual review workflows.
Trigger: The legitimation status of an existing sale changes (e.g., from New to Accepted, Rejected, or another status). This typically occurs when an automated or manual identity verification process completes.
Webhook payload sample
Differences from sale.canceled
| Aspect | Difference |
|---|---|
data.saleLegitimationStatusChanged | New object – contains the old and new legitimation status as well as the vetting level (see below). Only exists for this event. |
data.sale.legitimation | New object – contains the legitimation record linked to the sale (see below). Not present in sale.completed. |
data.sale.status.rawValue | May be Pending while legitimation is in progress. |
data.sale.status.tags | Contains legitimation-specific tags such as LegitimationNew, LegitimationAccepted, or LegitimationRejected. |
No api_url field | The top-level api_url field may be absent for this event. |
New Object: saleLegitimationStatusChanged
| Field | Type | Description | Example Value |
|---|---|---|---|
saleIdentifier | string (UUID) | UUID of the affected sale. | a7e1d74e-0a60-f111-93e7-00155d96040a |
newStatus | string | The new legitimation status. Possible values: New, Accepted, Rejected, InReview. | Accepted |
oldStatus | string | The previous legitimation status. | New |
vettingLevel | integer | The vetting level that was evaluated. Higher levels indicate stricter verification. | 1 |
New Object: legitimation (within sale)
| Field | Type | Description | Example Value |
|---|---|---|---|
uniqueId | string (UUID) | UUID of the legitimation record. | b7e1d74e-0a60-f111-93e7-00155d96040a |
status | string | Current legitimation status at the time of the event. | New |
All other fields (sale, buyer, billing, invoice, payment, receipts) follow the same structure as sale.canceled.