--- name: AccountCreatedEvent version: 1.0.0 summary: Event emitted when a new merchant account aggregate is created schemaPath: "./schema.json" x-tags: - label: 'broker: Axon' - label: 'javaType: eu.nets.ms.collecting.event.account.create.v1.AccountCreatedEvent' - label: 'aggregate: MerchantAccount' owners: - easy-collecting id: AccountCreatedEvent badges: - content: Collecting backgroundColor: green textColor: white - content: MerchantAccountAggregate backgroundColor: yellow textColor: white x-entities: - id: merchant-account-entity - id: bookkeeping-config-entity - id: chart-of-accounts-entity --- # AccountCreatedEvent Published when a new MerchantAccount aggregate is successfully created in the accounting system. ## Schema ## Purpose This event indicates that a new merchant account has been established with the necessary configuration for financial transaction processing. It serves as the foundation for all subsequent accounting operations for the merchant. ## Key Attributes - **Account ID**: Unique identifier for the newly created merchant account (UUID) - **Owner ID**: Reference to the account owner (merchant) - **Currency**: The currency in which the account operates (ISO 4217) - **Country**: Country code where the account is registered (ISO 3166) - **IBAN**: International Bank Account Number for the account - **BIC**: Bank Identifier Code for the financial institution - **Delay Configuration**: Settlement delay settings for the account ## Business Impact - **Account Activation**: Merchant account is now ready for transaction processing - **Transaction Enablement**: Enables booking of payments, refunds, and fees - **Balance Tracking**: Initializes balance tracking for various account types - **Compliance Setup**: Establishes regulatory and operational parameters ## Integration Points This event is consumed by: - **Balance Views**: For account balance reporting and monitoring - **Transaction Processing**: To validate account existence before processing - **Settlement Services**: For settlement configuration and processing - **Reporting Systems**: For merchant account analytics and reporting ## Account Initialization Upon account creation, the following capabilities are established: - **Double-Entry Bookkeeping**: Account supports proper accounting principles - **Multi-Currency Support**: If configured for multiple currencies - **Balance Categories**: Support for different balance types (MerchantDebt, ClientFunds, etc.) - **Transaction Types**: Ready to process various transaction categories ## Raw Schema:./schema.json { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "title": "AccountCreatedEvent", "description": "Event emitted when a new merchant account aggregate is created", "properties": { "accountId": { "type": "object", "description": "Account identifier", "properties": { "value": { "type": "string", "format": "uuid", "description": "The unique account UUID" } }, "required": ["value"] }, "ownerId": { "type": "object", "description": "Owner identifier", "properties": { "value": { "type": "string", "format": "uuid", "description": "The unique owner UUID" } }, "required": ["value"] }, "currency": { "type": "string", "pattern": "^[A-Z]{3}$", "description": "The currency in which the account operates (ISO 4217, 3 characters)", "example": "EUR" }, "delay": { "type": "integer", "description": "Delay configuration for the account", "example": 2 }, "country": { "type": "string", "pattern": "^[A-Z]{3}$", "description": "Country code where the account operates (ISO 3166, 3 characters)", "example": "NOR" }, "iban": { "type": "string", "maxLength": 34, "description": "International Bank Account Number", "example": "NO9386011117947" }, "bic": { "type": "string", "maxLength": 34, "description": "Bank Identifier Code", "example": "DNBANOKKXXX" }, "bookkeepingConfigId": { "type": "integer", "description": "Bookkeeping configuration identifier", "example": 15656 }, "timestamp": { "type": "string", "format": "date-time", "description": "Timestamp when the account was created" } }, "required": ["accountId", "ownerId", "currency", "delay", "country", "iban", "bic", "bookkeepingConfigId", "timestamp"], "additionalProperties": false } --- name: AccountDefinitionAddedEvent version: 1.0.0 summary: Event emitted when a new account definition is added to a merchant account x-tags: - label: 'broker: Axon' - label: 'javaType: eu.nets.ms.collecting.event.accounting.v1.AccountDefinitionAddedEvent' - label: 'aggregate: MerchantAccount' owners: - easy-collecting id: AccountDefinitionAddedEvent badges: - content: Collecting backgroundColor: green textColor: white - content: MerchantAccountAggregate backgroundColor: yellow textColor: white x-entities: - id: merchant-account-entity - id: account-definition-entity schemaPath: "./schema.json" --- # AccountDefinitionAddedEvent Published when a new account definition is successfully added to an existing merchant account's ledger structure. ## Schema ## Purpose This event indicates that a merchant account now supports a new type of account, enabling new financial products or account categories. ## Key Attributes - **Aggregate ID**: Merchant account aggregate identifier - **Hierarchy**: Ledger hierarchy level - **Sub Hierarchy**: Sub-ledger hierarchy level - **Account Holder ID**: Identifier of the merchant - **Currency**: Account currency - **Definition**: The new account definition (ID, type, name) ## Business Impact - Enables dynamic expansion of account types for existing merchants - Supports introduction of new financial products - Maintains ledger flexibility and extensibility ## Raw Schema:./schema.json { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "title": "AccountDefinitionAddedEvent", "description": "Event emitted when a new account definition is added to a merchant account", "properties": { "accountId": { "type": "object", "description": "Account identifier", "properties": { "value": { "type": "string", "format": "uuid", "description": "The unique account UUID" } }, "required": ["value"] }, "accountDefinitionId": { "type": "integer", "description": "Account definition identifier", "example": 15652 }, "accountDefinitionName": { "type": "string", "description": "Name of the account definition", "example": "MerchantDebt" }, "timestamp": { "type": "string", "format": "date-time", "description": "Timestamp when the account definition was added" } }, "required": ["accountId", "accountDefinitionId", "accountDefinitionName", "timestamp"], "additionalProperties": false } --- name: accountDeposit.created.event.v1 version: 1.5.0 id: accountDeposit.created.event.v1 --- Exchange: payment --- name: AmountReservedEvent version: 1.0.0 summary: Event emitted when an amount is reserved in a merchant account schemaPath: "./schema.json" x-tags: - label: 'broker: Axon' - label: 'javaType: eu.nets.ms.collecting.event.accounting.v1.AmountReservedEvent' - label: 'aggregate: MerchantAccount' owners: - easy-collecting id: AmountReservedEvent badges: - content: Collecting backgroundColor: green textColor: white - content: MerchantAccountAggregate backgroundColor: yellow textColor: white x-entities: - id: merchant-account-entity --- # AmountReservedEvent Published when an amount is successfully reserved on a merchant account as part of the refund authorization process. ## Schema ## Purpose This event indicates that funds have been held (reserved) from the merchant's available balance to ensure sufficient funds are available for a potential refund. The reservation prevents the merchant from accessing these funds until the refund is either confirmed or the reservation is released. ## Key Attributes - **Account ID**: Merchant account aggregate identifier where the reservation was made - **Transaction ID**: Unique identifier for the transaction requiring the reservation - **Reserved Amount**: Amount that has been reserved from available balance - **Currency**: Currency of the reserved amount - **Reservation Timestamp**: When the reservation was created - **Refund Reference**: Reference to the refund request that triggered the reservation - **Available Balance**: Updated available balance after reservation ## Business Impact - **Balance Reduction**: Available balance is reduced by the reserved amount - **Refund Guarantee**: Ensures funds are available when refund is confirmed - **Risk Mitigation**: Prevents insufficient balance issues during refund processing - **Cash Flow Management**: Provides visibility into pending refund obligations ## Integration Points This event is consumed by: - **Balance Views**: To update available balance displays and reporting - **Refund Processing**: To track reservation status and amounts - **Risk Management**: For monitoring reserved amounts and exposure - **Accounting Reports**: For balance reconciliation and audit trails ## Reservation Mechanics The reservation process affects account balances as follows: - **Total Balance**: Remains unchanged (no actual funds movement) - **Available Balance**: Reduced by the reserved amount - **Reserved Amount**: Tracked separately for future release or confirmation - **Transaction History**: Records the reservation for audit purposes ## Follow-up Actions After this event, the reservation can be: - **Released**: Via ReleaseReservationCommand when refund is cancelled/expired - **Confirmed**: When the actual refund transaction is processed - **Expired**: Automatically released after a configured timeout period ## Raw Schema:./schema.json { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "title": "AmountReservedEvent", "description": "Event emitted when an amount is reserved in a merchant account", "properties": { "accountId": { "type": "object", "description": "Account identifier", "properties": { "value": { "type": "string", "format": "uuid", "description": "The unique account UUID" } }, "required": ["value"] }, "reservationId": { "type": "object", "description": "Reservation identifier", "properties": { "value": { "type": "string", "format": "uuid", "description": "The unique reservation UUID" } }, "required": ["value"] }, "amount": { "type": "integer", "minimum": 0, "description": "Amount reserved (in smallest currency unit, e.g., 25000 = 250.00)", "example": 25000 }, "currency": { "type": "string", "pattern": "^[A-Z]{3}$", "description": "Currency of the reservation (ISO 4217)", "example": "EUR" }, "accountType": { "type": "string", "description": "Type of account for the reservation", "example": "MerchantDebt" }, "reference": { "type": "string", "description": "External reference for the reservation", "example": "refund-prep-67890" }, "timestamp": { "type": "string", "format": "date-time", "description": "Timestamp when the amount was reserved" } }, "required": ["accountId", "reservationId", "amount", "currency", "accountType", "timestamp"], "additionalProperties": false } --- name: BalanceUpdatedEvent version: 1.0.0 summary: Event emitted when account balances are updated after transaction posting or other operations schemaPath: "./schema.json" x-tags: - label: 'broker: Axon' - label: 'javaType: eu.nets.ms.collecting.event.accounting.v1.BalanceUpdatedEvent' - label: 'aggregate: MerchantAccount' owners: - easy-collecting id: BalanceUpdatedEvent badges: - content: Collecting backgroundColor: green textColor: white - content: MerchantAccountAggregate backgroundColor: yellow textColor: white x-entities: - id: merchant-account-entity --- # BalanceUpdatedEvent Published when account balances are updated with new postings after a balance reset has occurred. ## Schema ## Purpose This event is used to update account balances when the account is in a reset state, ensuring that transactions posted after a balance reset are properly reflected in the account balances. ## Key Attributes - **Aggregate ID**: Merchant account aggregate identifier - **Postings**: List of postings to apply to account balances ## Business Impact - Maintains accurate balance tracking after balance resets - Ensures transaction integrity during balance reset periods - Supports proper accounting when balances have been cleared ## Raw Schema:./schema.json { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "title": "BalanceUpdatedEvent", "description": "Event emitted when account balances are updated after transaction posting or other operations", "properties": { "accountId": { "type": "object", "description": "Account identifier", "properties": { "value": { "type": "string", "format": "uuid", "description": "The unique account UUID" } }, "required": ["value"] }, "balanceUpdates": { "type": "array", "description": "List of balance updates for different account types", "items": { "type": "object", "properties": { "accountDefinitionId": { "type": "integer", "description": "Account definition identifier" }, "accountDefinitionName": { "type": "string", "description": "Account definition name" }, "previousBalance": { "type": "integer", "description": "Previous balance amount (in smallest currency unit, e.g., 100 = 1.00)" }, "newBalance": { "type": "integer", "description": "New balance amount (in smallest currency unit, e.g., 100 = 1.00)" }, "change": { "type": "integer", "description": "Balance change amount (in smallest currency unit, e.g., 100 = 1.00)" } }, "required": ["accountDefinitionId", "accountDefinitionName", "previousBalance", "newBalance", "change"] } }, "currency": { "type": "string", "pattern": "^[A-Z]{3}$", "description": "Currency of the balances (ISO 4217)", "example": "EUR" }, "timestamp": { "type": "string", "format": "date-time", "description": "Timestamp when the balances were updated" } }, "required": ["accountId", "balanceUpdates", "currency", "timestamp"], "additionalProperties": false } --- name: dispute.initiated.event.v1 version: 1.0.0 summary: dispute.initiated.event.v1 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Events.Dispute.DisputeInitiatedEvent' id: dispute.initiated.event.v1 --- --- name: LedgerIdUpdatedEvent version: 1.0.0 summary: Event emitted when the ledger ID reference for a merchant account is updated x-tags: - label: 'broker: Axon' - label: 'javaType: eu.nets.ms.collecting.event.accounting.v1.LedgerIdUpdatedEvent' - label: 'aggregate: MerchantAccount' owners: - easy-collecting id: LedgerIdUpdatedEvent badges: - content: Collecting backgroundColor: green textColor: white - content: MerchantAccountAggregate backgroundColor: yellow textColor: white x-entities: - id: merchant-account-entity schemaPath: "./schema.json" --- # LedgerIdUpdatedEvent Published when account definition IDs are successfully updated in a merchant account ledger structure. ## Schema ## Purpose This event indicates that account definitions have been migrated from old IDs to new IDs while preserving balances and transaction history. ## Key Attributes - **Aggregate ID**: Merchant account aggregate identifier - **Old And New Account Definition Ids Map**: Mapping of old account IDs to new account IDs ## Business Impact - Enables migration of account structures - Supports system upgrades and configuration changes - Maintains data integrity during ID migrations ## Raw Schema:./schema.json { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "title": "LedgerIdUpdatedEvent", "description": "Event emitted when the ledger ID reference for a merchant account is updated", "properties": { "accountId": { "type": "object", "description": "Account identifier", "properties": { "value": { "type": "string", "format": "uuid", "description": "The unique account UUID" } }, "required": ["value"] }, "ledgerId": { "type": "object", "description": "Ledger identifier", "properties": { "value": { "type": "string", "format": "uuid", "description": "The unique ledger UUID" } }, "required": ["value"] }, "previousLedgerId": { "type": "object", "description": "Previous ledger identifier", "properties": { "value": { "type": "string", "format": "uuid", "description": "The previous ledger UUID" } } }, "timestamp": { "type": "string", "format": "date-time", "description": "Timestamp when the ledger ID was updated" } }, "required": ["accountId", "ledgerId", "timestamp"], "additionalProperties": false } --- name: merchant.account.created.event.v1 version: 1.8.0 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Events.MerchantAccount.MerchantAccountCreatedEvent' id: merchant.account.created.event.v1 --- Exchange: merchant --- name: merchant.account.created.event.v2 version: 2.3.0 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V2.Events.MerchantAccountCreatedEvent' id: merchant.account.created.event.v2 --- Exchange: merchant --- name: merchant.account.created.event.v3 version: 3.3.0 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V3.Events.MerchantAccount.MerchantAccountCreatedEvent' id: merchant.account.created.event.v3 --- Exchange: --- name: merchant.account.deactivated.event.v1 version: 1.3.0 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Events.MerchantAccount.MerchantAccountDeactivatedEvent' id: merchant.account.deactivated.event.v1 --- Exchange: merchant --- name: merchant.account.reactivated.event.v1 version: 1.1.0 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Events.MerchantAccount.MerchantAccountReactivatedEvent' id: merchant.account.reactivated.event.v1 --- Exchange: merchant --- name: merchant.account.settlementConfiguration.updated.event.v1 version: 1.1.0 summary: merchant.account.settlementConfiguration.updated.event.v1 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Events.MerchantAccount.MerchantAccountSettlementConfigurationUpdatedEvent' id: merchant.account.settlementConfiguration.updated.event.v1 --- --- name: merchant.apiKeys.create.failed.event.v1 version: 1.2.0 summary: merchant.apiKeys.create.failed.event.v1 x-tags: - label: 'dotnetType: Nets.Easy.Messages.Models.V1.Events.Merchant.MerchantApiKeysCreateFailedEvent' - label: 'exchange: merchant' - label: 'broker: rabbitmq' id: merchant.apiKeys.create.failed.event.v1 --- --- name: merchant.apiKeys.created.event.v1 version: 1.6.0 x-tags: - label: 'dotnetType: Mms.Infrastructure.Requests.Messages.V1.Events.Merchant.MerchantApiKeysCreatedEvent' - label: 'exchange: merchant' - label: 'broker: rabbitmq' id: merchant.apiKeys.created.event.v1 --- Exchange: merchant --- name: merchant.apiKeys.created.event.v2 version: 2.0.0 summary: merchant.apiKeys.created.event.v2 x-tags: - label: 'dotnetType: Nets.Easy.Messages.Models.V2.Events.Merchant.MerchantApiKeysCreatedEvent' - label: 'exchange: merchant' - label: 'broker: rabbitmq' id: merchant.apiKeys.created.event.v2 --- --- id: merchant.apiKeys.live.revoke.created.event.v1 name: merchant.apiKeys.live.revoke.created.event.v1 version: 1.0.0 x-tags: - label: 'dotnetType: Nets.Easy.Messages.V1.Events.Merchant.MerchantApiKeysLiveRevokeCreatedEvent' - label: 'exchange: merchant' - label: 'broker: rabbitmq' --- --- name: merchant.apiKeys.live.revoke.failed.event.v1 version: 1.1.0 summary: merchant.apiKeys.live.revoke.failed.event.v1 x-tags: - label: 'dotnetType: Nets.Easy.Messages.Models.V1.Events.Merchant.MerchantApiKeysLiveRevokeFailedEvent' - label: 'exchange: merchant' - label: 'broker: rabbitmq' id: merchant.apiKeys.live.revoke.failed.event.v1 --- --- id: merchant.apiKeys.test.revoke.created.event.v1 name: merchant.apiKeys.test.revoke.created.event.v1 version: 1.0.0 x-tags: - label: 'dotnetType: Nets.Easy.Messages.V1.Events.Merchant.MerchantApiKeysTestRevokeCreatedEvent' - label: 'exchange: merchant' - label: 'broker: rabbitmq' --- --- name: merchant.apiKeys.test.revoke.failed.event.v1 version: 1.1.0 summary: merchant.apiKeys.test.revoke.failed.event.v1 x-tags: - label: 'dotnetType: Nets.Easy.Messages.Models.V1.Events.Merchant.MerchantApiKeysTestRevokeFailedEvent' - label: 'exchange: merchant' - label: 'broker: rabbitmq' id: merchant.apiKeys.test.revoke.failed.event.v1 --- --- name: merchant.approved.event.v1 version: 1.14.0 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Events.Merchant.MerchantApprovedEvent' id: merchant.approved.event.v1 --- Exchange: merchant --- name: merchant.approved.event.v2 version: 2.8.0 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V2.Events.Merchant.MerchantApprovedEvent' id: merchant.approved.event.v2 --- Exchange: merchant --- name: merchant.approved.event.v3 version: 3.4.0 summary: merchant.approved.event.v3 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V3.Events.Merchant.MerchantApprovedEvent' id: merchant.approved.event.v3 --- --- name: merchant.billingDetails.updated.event.v1 version: 1.2.0 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Events.Merchant.MerchantBillingDetailsUpdatedEvent' id: merchant.billingDetails.updated.event.v1 --- Exchange: merchant --- name: merchant.contactPerson.updated.event.v1 version: 1.2.0 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Events.Merchant.MerchantContactPersonUpdatedEvent' id: merchant.contactPerson.updated.event.v1 --- Exchange: merchant --- name: merchant.created.event.v1 version: 1.3.0 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Events.Merchant.MerchantCreatedEvent' id: merchant.created.event.v1 --- Exchange: merchant --- id: merchant.deactivated.event.v1 name: merchant.deactivated.event.v1 version: 1.0.0 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.Models.V1.Events.Merchant.MerchantDeactivatedEvent' --- --- id: merchant.reactivated.event.v1 name: merchant.reactivated.event.v1 version: 1.0.0 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.Models.V1.Events.Merchant.MerchantReactivatedEvent' --- --- id: merchant.surcharge.disabled.event.v1 name: merchant.surcharge.disabled.event.v1 version: 1.2.0 x-tags: - label: 'exchange: merchant' - label: 'dotnetType: Nets.Easy.Messages.Models.V1.Events.Merchant.MerchantSurchargeDisabledEvent' - label: 'broker: rabbitmq' --- --- id: merchant.surcharge.enabled.event.v1 name: merchant.surcharge.enabled.event.v1 version: 1.2.0 x-tags: - label: 'exchange: merchant' - label: 'dotnetType: Nets.Easy.Messages.Models.V1.Events.Merchant.MerchantSurchargeEnabledEvent' - label: 'broker: rabbitmq' --- --- name: merchant.updated.event.v1 version: 1.4.0 x-tags: - label: 'broker: rabbitmq' - label: 'exchange: merchant' - label: 'dotnetType: Nets.Easy.Messages.V1.Events.Merchant.MerchantUpdatedEvent' id: merchant.updated.event.v1 --- Exchange: merchant --- id: merchant.virtualCard.disabled.event.v1 name: merchant.virtualCard.disabled.event.v1 version: 1.0.0 x-tags: - label: 'exchange: merchant' - label: 'dotnetType: Nets.Easy.Messages.Models.V1.Events.Merchant.MerchantVirtualCardDisabledEvent' - label: 'broker: rabbitmq' --- --- id: merchant.virtualCard.enabled.event.v1 name: merchant.virtualCard.enabled.event.v1 version: 1.0.0 x-tags: - label: 'exchange: merchant' - label: 'dotnetType: Nets.Easy.Messages.Models.V1.Events.Merchant.MerchantVirtualCardEnabledEvent' - label: 'broker: rabbitmq' --- --- name: merchantAccountPaymentMethod.arvato.changed.event.v1 version: 1.1.0 summary: merchantAccountPaymentMethod.arvato.changed.event.v1 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.CheckoutAndProcessing.Events.V1.MerchantAccountPaymentMethod.ArvatoPaymentMethodConfigurationChanged' id: merchantAccountPaymentMethod.arvato.changed.event.v1 --- --- name: merchantAccountPaymentMethod.arvato.created.event.v1 version: 1.4.0 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Events.MerchantAccountPaymentMethod.MerchantAccountPaymentMethodArvatoCreatedEvent' id: merchantAccountPaymentMethod.arvato.created.event.v1 --- Exchange: merchant --- name: merchantAccountPaymentMethod.arvato.created.event.v2 version: 2.1.0 summary: merchantAccountPaymentMethod.arvato.created.event.v2 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.CheckoutAndProcessing.Events.V1.MerchantAccountPaymentMethod.ArvatoConfigured' id: merchantAccountPaymentMethod.arvato.created.event.v2 --- --- name: merchantAccountPaymentMethod.baxId.created.event.v1 version: 1.2.0 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.CheckoutAndProcessing.Events.V1.MerchantAccountPaymentMethod.MerchantAccountPaymentMethodBaxIdCreatedEvent' id: merchantAccountPaymentMethod.baxId.created.event.v1 --- Exchange: --- name: merchantAccountPaymentMethod.card.changed.event.v1 version: 1.1.0 summary: merchantAccountPaymentMethod.card.changed.event.v1 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.CheckoutAndProcessing.Events.V1.MerchantAccountPaymentMethod.CardPaymentMethodConfigurationChanged' id: merchantAccountPaymentMethod.card.changed.event.v1 --- --- name: merchantAccountPaymentMethod.created.event.v1 version: 1.1.0 summary: merchantAccountPaymentMethod.created.event.v1 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.CheckoutAndProcessing.Events.V1.MerchantAccountPaymentMethod.MerchantAccountPaymentMethodAdded' id: merchantAccountPaymentMethod.created.event.v1 --- --- name: merchantAccountPaymentMethod.dankort.configured.event.v1 version: 1.1.0 summary: merchantAccountPaymentMethod.dankort.configured.event.v1 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.CheckoutAndProcessing.Events.V1.MerchantAccountPaymentMethod.DankortCardPaymentMethodConfigured' id: merchantAccountPaymentMethod.dankort.configured.event.v1 --- --- name: merchantAccountPaymentMethod.DankortTofId.created.event.v1 version: 1.1.0 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.CheckoutAndProcessing.Events.V1.MerchantAccountPaymentMethod.DankortTofIdCreated' id: merchantAccountPaymentMethod.DankortTofId.created.event.v1 --- Exchange: --- id: merchantAccountPaymentMethod.DankortTofId.created.event.v2 name: merchantAccountPaymentMethod.DankortTofId.created.event.v2 version: 1.1.0 x-tags: - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.CheckoutAndProcessing.Events.V2.MerchantAccountPaymentMethod.DankortTofIdCreated' - label: 'exchange: merchant' --- --- name: merchantAccountPaymentMethod.disabled.event.v1 version: 1.3.0 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.CheckoutAndProcessing.Events.V1.MerchantAccountPaymentMethod.MerchantAccountPaymentMethodDisabled' id: merchantAccountPaymentMethod.disabled.event.v1 --- Exchange: merchant --- name: merchantAccountPaymentMethod.enabled.event.v1 version: 1.2.0 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.CheckoutAndProcessing.Events.V1.MerchantAccountPaymentMethod.MerchantAccountPaymentMethodEnabled' id: merchantAccountPaymentMethod.enabled.event.v1 --- Exchange: merchant --- name: merchantAccountPaymentMethod.internal.event.v1 version: 1.2.0 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.CheckoutAndProcessing.Events.V1.MerchantAccountPaymentMethod.MerchantAccountPaymentMethodInternalEvent' id: merchantAccountPaymentMethod.internal.event.v1 --- Exchange: merchant --- name: merchantAccountPaymentMethod.steps.created.event.v1 version: 1.3.0 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Events.MerchantAccountPaymentMethod.MerchantAccountPaymentMethodStepsCreatedEvent' id: merchantAccountPaymentMethod.steps.created.event.v1 --- Exchange: merchant --- name: merchantAccountTopup.created.event.v1 version: 1.0.0 id: merchantAccountTopup.created.event.v1 --- Exchange: payment --- name: merchantApplication.approved.event.v1 version: 1.15.0 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Requests.Merchant.MerchantApplicationAprovedEvent' id: merchantApplication.approved.event.v1 --- Exchange: merchant Sent when the merchant's due dilligence process concludes and the decision is Approved. This is a necessary prerequisite for activating a merchant. Note: merchantApplication.* events use merchantApplicationId in the header rather then merchant's uuid. --- name: merchantApplication.approved.event.v2 version: 2.0.0 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V2.Requests.Merchant.MerchantApplicationApprovedEvent' id: merchantApplication.approved.event.v2 --- Exchange: merchant Sent when the merchant's due dilligence process concludes and the decision is Approved. This is a necessary prerequisite for activating a merchant. Note: merchantApplication.* events use merchantApplicationId in the header rather then merchant's uuid. --- name: merchantApplication.created.event.v1 version: 1.16.0 id: merchantApplication.created.event.v1 --- Exchange: merchant Sent when the merchant's application passess pre-screening in CMP (so called RMI - Review of Merchant Information). This event is required to register a merchant id in CRM and consequently send documents via documents API. Note: merchantApplication.* events use merchantApplicationId in the header rather then merchant's uuid. --- name: merchantApplication.created.event.v2 version: 2.0.0 id: merchantApplication.created.event.v2 --- Exchange: merchant Sent when the merchant's application passess pre-screening in CMP (so called RMI - Review of Merchant Information). This event is required to register a merchant id in CRM and consequently send documents to via documents API. Note: merchantApplication.* events use merchantApplicationId in the header rather then merchant's uuid. --- name: merchantApplication.rejected.event.v1 version: 1.15.0 id: merchantApplication.rejected.event.v1 --- Exchange: merchant Sent when the merchant's due dilligence process concludes and the decision is Rejected. This is means that the merchant must not be activated. Note: merchantApplication.* events use merchantApplicationId in the header rather then merchant's uuid. --- name: merchantApplication.rejected.event.v2 version: 2.0.0 id: merchantApplication.rejected.event.v2 --- Exchange: merchant Sent when the merchant's due dilligence process concludes and the decision is Rejected. This is means that the merchant must not be activated. Note: merchantApplication.* events use merchantApplicationId in the header rather then merchant's uuid. --- name: merchantApplication.riskscored.event.v1 version: 1.0.0 id: merchantApplication.riskscored.event.v1 --- Exchange: merchant Sent when the merchant's due dilligence process concludes and the decision is Approved. It contains details regarding merchant's risk assessment. It is sent always in conjuction with MerchantApplicationApproved event. Note: merchantApplication.* events use merchantApplicationId in the header rather then merchant's uuid. --- name: merchantApplication.riskscored.event.v2 version: 2.1.0 id: merchantApplication.riskscored.event.v2 --- Exchange: merchant Sent when the merchant's due dilligence process concludes and the decision is Approved. It contains details regarding merchant's risk assessment. It is sent always in conjuction with MerchantApplicationApproved event. Note: merchantApplication.* events use merchantApplicationId in the header rather then merchant's uuid. --- name: merchantApplication.riskscored.event.v3 version: 3.2.0 id: merchantApplication.riskscored.event.v3 x-tags: - label: 'dotnetType: Nets.Easy.Messages.Models.V3.Events.MerchantApplication.MerchantApplicationRiskScoredEvent' - label: 'broker: rabbitmq' - label: 'exchange: merchant' --- Exchange: merchant Sent when the merchant's due dilligence process concludes and the decision is Approved. It contains details regarding merchant's risk assessment. It is sent always in conjuction with MerchantApplicationApproved event. Note: merchantApplication.* events use merchantApplicationId in the header rather then merchant's uuid. --- id: merchantBalance.updated.event.v1 name: merchantBalance.updated.event.v1 version: 1.2.0 --- Emitted at the start of the day for the previous day for all open merchant accounts. It can also be emitted for older days if a transaction is booked with a value date in the past, causing the balances to change. --- name: merchantDomain.verification.completed.event.v1 version: 1.0.0 id: merchantDomain.verification.completed.event.v1 --- Exchange: --- name: merchantDomain.verification.failed.event.v1 version: 1.0.0 id: merchantDomain.verification.failed.event.v1 --- Exchange: --- name: merchantDomain.verification.initiated.event.v1 version: 1.0.0 id: merchantDomain.verification.initiated.event.v1 --- Exchange: --- name: merchantLedger.transactionPosted.event.v1 version: 1.1.0 id: merchantLedger.transactionPosted.event.v1 --- Exchange: --- name: merchantPrice.updated.event.v1 version: 1.2.0 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Events.MerchantPrice.MerchantpriceUpdatedEvent' id: merchantPrice.updated.event.v1 --- Exchange: --- name: notification.onboarding.webhook.attempt.log.message.v1 version: 1.3.0 x-tags: - label: 'exchange: notification' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Events.NotificationOnboardingWebhookAttemptLogMessage' id: notification.onboarding.webhook.attempt.log.message.v1 --- Exchange: notification --- name: notification.payment.webhook.attempt.log.message.v1 version: 1.3.0 x-tags: - label: 'exchange: notification' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Events.NotificationPaymentWebhookAttemptLogMessage' id: notification.payment.webhook.attempt.log.message.v1 --- Exchange: notification --- name: partner.allowedPriceLists.updated.event.v1 version: 1.2.0 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Events.Partner.PartnerAllowedPriceListsUpdatedEvent' id: partner.allowedPriceLists.updated.event.v1 --- Exchange: merchant --- name: partner.apiKeys.live.created.event.v1 version: 1.2.0 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Events.Partner.PartnerApiKeysLiveCreatedEvent' id: partner.apiKeys.live.created.event.v1 --- Exchange: merchant --- name: partner.apiKeys.test.created.event.v1 version: 1.2.0 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Events.Partner.PartnerApiKeysTestCreatedEvent' id: partner.apiKeys.test.created.event.v1 --- Exchange: merchant --- name: partner.company.updated.event.v1 version: 1.3.0 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Events.Partner.PartnerCompanyUpdatedEvent' id: partner.company.updated.event.v1 --- Exchange: merchant --- name: partner.contactPerson.updated.event.v1 version: 1.3.0 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Events.Partner.PartnerContactPersonUpdatedEvent' id: partner.contactPerson.updated.event.v1 --- Exchange: merchant --- name: partner.created.event.v1 version: 1.3.0 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Events.Partner.PartnerCreatedEvent' id: partner.created.event.v1 --- Exchange: merchant --- name: partner.crmPartnerId.updated.event.v1 version: 1.2.0 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Events.Partner.PartnerCrmPartnerIdUpdatedEvent' id: partner.crmPartnerId.updated.event.v1 --- Exchange: merchant --- name: partner.defaultPermissions.updated.event.v1 version: 1.2.0 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Events.Partner.PartnerDefaultPermissionsUpdatedEvent' id: partner.defaultPermissions.updated.event.v1 --- Exchange: merchant --- name: partner.merchantAccountPermissions.live.updated.event.v1 version: 1.3.0 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Events.Partner.PartnerMerchantPermissionLiveUpdatedEvent' id: partner.merchantAccountPermissions.live.updated.event.v1 --- Exchange: merchant --- name: partner.merchantAccountPermissions.test.updated.event.v1 version: 1.3.0 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Events.Partner.PartnerMerchantPermissionTestUpdatedEvent' id: partner.merchantAccountPermissions.test.updated.event.v1 --- Exchange: merchant --- name: payment.a2a.initialized.event.v1 version: 1.1.0 summary: payment.a2a.initialized.event.v1 x-tags: - label: 'exchange: payment' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.CheckoutAndProcessing.Events.V1.AccountToAccountPaymentInitialized' id: payment.a2a.initialized.event.v1 --- --- name: payment.a2a.refund.declined.event.v1 version: 1.1.0 summary: payment.a2a.refund.declined.event.v1 x-tags: - label: 'exchange: payment' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.CheckoutAndProcessing.Events.V1.AccountToAccountRefundHasBeenDeclined' id: payment.a2a.refund.declined.event.v1 --- --- name: payment.cancel.created.event.v1 version: 1.8.0 x-tags: - label: 'broker: rabbitmq' - label: 'exchange: payment' - label: 'dotnetType: Nets.Easy.Messages.CheckoutAndProcessing.Events.V1.PaymentCancelled' id: payment.cancel.created.event.v1 --- Exchange: payment --- name: payment.cancel.failed.event.v1 version: 1.9.0 x-tags: - label: 'broker: rabbitmq' - label: 'exchange: payment' - label: 'dotnetType: Nets.Easy.Messages.CheckoutAndProcessing.Events.V1.PaymentCancelFailed' id: payment.cancel.failed.event.v1 --- Exchange: payment --- name: payment.charge.created.event.v1 version: 1.16.0 x-tags: - label: 'exchange: payment' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.CheckoutAndProcessing.Events.V1.PaymentCharged' id: payment.charge.created.event.v1 --- Exchange: payment --- name: payment.charge.created.event.v2 version: 2.12.0 x-tags: - label: 'exchange: payment' - label: 'dotnetType: Nets.Easy.Messages.CheckoutAndProcessing.Events.V2.PaymentCharged' - label: 'broker: rabbitmq' id: payment.charge.created.event.v2 --- Exchange: payment --- name: payment.charge.failed.event.v1 version: 1.15.0 x-tags: - label: 'dotnetType: Nets.Easy.Messages.CheckoutAndProcessing.Events.V1.PaymentChargeFailed' - label: 'exchange: payment' - label: 'broker: rabbitmq' id: payment.charge.failed.event.v1 --- Exchange: payment --- name: payment.charge.failed.event.v2 version: 2.6.0 x-tags: - label: 'exchange: payment' - label: 'dotnetType: Nets.Easy.Messages.CheckoutAndProcessing.Events.V2.PaymentChargeFailed' - label: 'broker: rabbitmq' id: payment.charge.failed.event.v2 --- Exchange: payment --- name: payment.charge.feeAdded.event.v1 version: 1.4.0 x-tags: - label: 'exchange: payment' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.CheckoutAndProcessing.Events.V1.ChargeFeeAdded' id: payment.charge.feeAdded.event.v1 --- Exchange: payment --- name: payment.charge.request.v1 version: 1.5.0 x-tags: - label: 'exchange: payment' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Requests.Payment.ChargePaymentCommand' id: payment.charge.request.v1 --- Exchange: payment --- name: payment.charging.internal.event.v1 version: 1.1.0 summary: payment.charging.internal.event.v1 x-tags: - label: 'exchange: payment' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.CheckoutAndProcessing.Events.V1.ChargeInitiatedEvent' id: payment.charging.internal.event.v1 --- --- name: payment.checkout.completed.event.v1 version: 1.7.0 x-tags: - label: 'exchange: payment' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.CheckoutAndProcessing.Events.V1.CheckoutCompleted' id: payment.checkout.completed.event.v1 --- Exchange: payment --- name: payment.consumer.refunded.event.v1 version: 1.1.0 summary: payment.consumer.refunded.event.v1 x-tags: - label: 'broker: rabbitmq' - label: 'exchange: payment' - label: 'dotnetType: Nets.Easy.Messages.CheckoutAndProcessing.Events.V1.PaymentConsumerRefunded' id: payment.consumer.refunded.event.v1 --- --- name: payment.created.event.v1 version: 1.11.0 x-tags: - label: 'broker: rabbitmq' - label: 'exchange: payment' - label: 'dotnetType: Nets.Easy.Messages.CheckoutAndProcessing.Events.V1.PaymentCreated' id: payment.created.event.v1 --- Exchange: payment --- name: payment.internal.event.v1 version: 1.4.0 x-tags: - label: 'exchange: payment' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.CheckoutAndProcessing.Events.V1.PaymentInternalEvent' id: payment.internal.event.v1 --- Exchange: payment --- name: payment.orderItems.updated.event.v1 version: 1.4.0 x-tags: - label: 'exchange: payment' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.CheckoutAndProcessing.Events.V1.OrderItemsUpdated' id: payment.orderItems.updated.event.v1 --- Exchange: payment --- name: payment.paymentMethod.verification.created.event.v1 version: 1.10.0 x-tags: - label: 'exchange: payment' - label: 'dotnetType: Nets.Easy.Messages.CheckoutAndProcessing.Events.V1.AccountWasVerified' - label: 'broker: rabbitmq' id: payment.paymentMethod.verification.created.event.v1 --- Exchange: payment --- name: payment.paymentMethod.verification.failed.event.v1 version: 1.11.0 x-tags: - label: 'exchange: payment' - label: 'dotnetType: Nets.Easy.Messages.CheckoutAndProcessing.Events.V1.AccountVerificationFailed' - label: 'broker: rabbitmq' id: payment.paymentMethod.verification.failed.event.v1 --- Exchange: payment --- name: payment.pendingRefund.cancel.request.v1 version: 1.3.0 x-tags: - label: 'exchange: payment' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Requests.Payment.CancelPaymentRefundCommand' id: payment.pendingRefund.cancel.request.v1 --- Exchange: payment --- name: payment.pendingRefund.cancelled.event.v1 version: 1.1.0 id: payment.pendingRefund.cancelled.event.v1 --- Exchange: payment --- name: payment.referenceUpdated.event.v1 version: 1.4.0 x-tags: - label: 'exchange: payment' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.CheckoutAndProcessing.Events.V1.PaymentUpdatedReferenceInformation' id: payment.referenceUpdated.event.v1 --- Exchange: payment --- name: payment.refund.cancel.initiated.event.v1 version: 1.1.0 summary: payment.refund.cancel.initiated.event.v1 x-tags: - label: 'exchange: payment' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.CheckoutAndProcessing.Events.V1.RefundCancelInitiated' id: payment.refund.cancel.initiated.event.v1 --- --- name: payment.refund.completed.event.v1 version: 1.11.0 x-tags: - label: 'dotnetType: Nets.Easy.Messages.CheckoutAndProcessing.Events.V1.RefundCompleted' - label: 'exchange: payment' - label: 'broker: rabbitmq' id: payment.refund.completed.event.v1 --- Exchange: payment --- name: payment.refund.consumerRefunded.event.v1 version: 1.5.0 id: payment.refund.consumerRefunded.event.v1 --- Exchange: payment --- name: payment.refund.failed.event.v1 version: 1.11.0 x-tags: - label: 'dotnetType: Nets.Easy.Messages.CheckoutAndProcessing.Events.V1.RefundFailed' - label: 'exchange: payment' - label: 'broker: rabbitmq' id: payment.refund.failed.event.v1 --- Exchange: payment --- name: payment.refund.feeAdded.event.v1 version: 1.4.0 x-tags: - label: 'exchange: payment' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.CheckoutAndProcessing.Events.V1.RefundFeeAdded' id: payment.refund.feeAdded.event.v1 --- Exchange: payment --- name: payment.refund.initiated.event.v1 version: 1.10.0 x-tags: - label: 'exchange: payment' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.CheckoutAndProcessing.Events.V1.RefundInitiated' id: payment.refund.initiated.event.v1 --- Exchange: payment --- name: payment.refund.initiated.event.v2 version: 2.2.0 x-tags: - label: 'dotnetType: Nets.Easy.Messages.CheckoutAndProcessing.Events.V2.RefundInitiated' - label: 'exchange: payment' - label: 'broker: rabbitmq' id: payment.refund.initiated.event.v2 --- Exchange: --- name: payment.reservation.created.event.v1 version: 1.19.0 x-tags: - label: 'exchange: payment' - label: 'dotnetType: Nets.Easy.Messages.CheckoutAndProcessing.Events.V1.ReservationCreated' - label: 'broker: rabbitmq' id: payment.reservation.created.event.v1 --- Exchange: payment --- name: payment.reservation.failed.event.v1 version: 1.20.0 x-tags: - label: 'exchange: payment' - label: 'dotnetType: Nets.Easy.Messages.CheckoutAndProcessing.Events.V1.ReservationFailed' - label: 'broker: rabbitmq' id: payment.reservation.failed.event.v1 --- Exchange: payment --- name: payment.sale.created.event.v1 version: 1.2.0 summary: payment.sale.created.event.v1 x-tags: - label: 'exchange: payment' - label: 'dotnetType: Nets.Easy.Messages.CheckoutAndProcessing.Events.V1.PaymentDirectlyCharged' - label: 'broker: rabbitmq' id: payment.sale.created.event.v1 --- --- name: payment.sale.failed.event.v1 version: 1.2.0 summary: payment.sale.failed.event.v1 x-tags: - label: 'exchange: payment' - label: 'dotnetType: Nets.Easy.Messages.CheckoutAndProcessing.Events.V1.PaymentDirectChargeFailed' - label: 'broker: rabbitmq' id: payment.sale.failed.event.v1 --- --- name: payment.shippingaddress.verified.event.v1 version: 1.1.0 summary: payment.shippingaddress.verified.event.v1 x-tags: - label: 'exchange: payment' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.CheckoutAndProcessing.Events.V1.ShippingAddressHasBeenVerified' id: payment.shippingaddress.verified.event.v1 --- --- name: payment.subscription.initiated.event.v1 version: 1.1.0 summary: payment.subscription.initiated.event.v1 x-tags: - label: 'exchange: payment' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.CheckoutAndProcessing.Events.V1.SubscriptionInitiated' id: payment.subscription.initiated.event.v1 --- --- name: PlatformCreatedEvent version: 1.0.0 summary: Event emitted when a new platform has been created in the collecting system schemaPath: "./schema.json" x-tags: - label: 'broker: Axon' - label: 'javaType: eu.nets.ms.collecting.event.platform.create.v1.PlatformCreatedEvent' - label: 'aggregate: Platform' owners: - easy-collecting id: PlatformCreatedEvent badges: - content: Collecting backgroundColor: green textColor: white - content: PlatformAggregate backgroundColor: yellow textColor: white x-entities: - id: platform-entity --- # PlatformCreatedEvent Published when a new Platform aggregate has been successfully created in the collecting system. ## Schema ## Purpose This event indicates that a new platform has been configured and is ready for use in payment processing operations. It establishes the platform's association with account holders and makes it available for transaction routing and processing. ## Key Attributes - **Platform ID**: Unique identifier for the newly created platform - **Platform Name**: Name of the payment platform (e.g., EASY, XPAY, NPG, PAYTRAIL) - **Account Holder ID**: Identifier of the account holder associated with this platform - **Version**: Version number of the platform configuration - **Creation Timestamp**: When the platform was created - **Configuration Settings**: Platform-specific configuration parameters ## Business Impact - **Platform Availability**: Platform is now ready for payment processing - **Routing Enablement**: Enables transaction routing to the new platform - **Account Association**: Establishes relationship between platform and account holder - **Configuration Activation**: Platform-specific settings are now active ## Integration Points This event is consumed by: - **Payment Processing**: To enable transaction routing to the new platform - **Merchant Onboarding**: For associating merchants with available platforms - **Configuration Management**: To track platform lifecycle and changes - **Reporting Systems**: For platform usage analytics and monitoring ## Platform Types The system supports various types of payment platforms: - **Payment Gateways**: EASY, XPAY for payment processing - **Next Generation**: NPG for modern payment flows - **Regional Platforms**: PAYTRAIL for specific market coverage - **Specialized Services**: Platform-specific payment capabilities ## Follow-up Actions After platform creation, the following activities are enabled: - **Merchant Association**: Merchants can be configured to use the platform - **Transaction Processing**: Payments can be routed through the platform - **Configuration Updates**: Platform settings can be modified as needed - **Performance Monitoring**: Platform usage and performance tracking begins ## Raw Schema:./schema.json { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "title": "PlatformCreatedEvent", "description": "Event emitted when a new platform has been created in the collecting system", "properties": { "platformId": { "type": "object", "description": "Platform identifier", "properties": { "value": { "type": "string", "description": "The unique platform ID" } }, "required": ["value"] }, "platformName": { "type": "string", "description": "The name of the platform (e.g., easy, xpay, npg, paytrail)" } }, "required": ["platformId", "platformName"], "additionalProperties": false } --- name: priceList.updated.event.v1 version: 1.3.0 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Events.PartnerPrice.PartnerPriceListUpdatedEvent' id: priceList.updated.event.v1 --- Exchange: --- name: refundAuthorization.accepted.event.v1 version: 1.5.0 x-tags: - label: 'exchange: payment' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Events.RefundAuthorizationAccepted' id: refundAuthorization.accepted.event.v1 --- Exchange: payment --- name: refundAuthorization.canceled.event.v1 version: 1.4.0 x-tags: - label: 'exchange: payment' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Events.RefundAuthorizationCanceled' id: refundAuthorization.canceled.event.v1 --- Exchange: payment --- name: refundAuthorization.confirmed.event.v1 version: 1.4.0 x-tags: - label: 'exchange: payment' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Events.RefundAuthorizationConfirmed' id: refundAuthorization.confirmed.event.v1 --- Exchange: payment --- name: refundAuthorization.expired.event.v1 version: 1.4.0 x-tags: - label: 'exchange: payment' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Events.RefundAuthorizationExpired' id: refundAuthorization.expired.event.v1 --- Exchange: payment --- name: refundAuthorization.pending.event.v1 version: 1.5.0 x-tags: - label: 'exchange: payment' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Events.RefundAuthorizationPending' id: refundAuthorization.pending.event.v1 --- Exchange: payment --- name: relay.dispute.closed.event version: 0.0.0 id: relay.dispute.closed.event --- Dispute closed webhook --- name: relay.dispute.opened.event version: 0.0.0 id: relay.dispute.opened.event --- Dispute opened webhook --- name: relay.dispute.responserequired.event version: 0.0.0 id: relay.dispute.responserequired.event --- Dispute Response Required webhook --- name: relay.enrollment.activated.event version: 0.0.0 id: relay.enrollment.activated.event --- Relay enrollment activated webhook --- name: relay.enrollment.deactivated.event version: 0.0.0 id: relay.enrollment.deactivated.event --- Relay enrollment deactivated webhook --- name: relay.enrollment.noncompliant.event version: 0.0.0 id: relay.enrollment.noncompliant.event --- Relay enrollment non-compliant webhook --- name: relay.enrollment.pending.event version: 0.0.0 id: relay.enrollment.pending.event --- Relay enrollment pending webhook --- name: relay.enrollment.terminated.event version: 0.0.0 id: relay.enrollment.terminated.event --- Relay enrollment terminated webhook --- name: relay.enrollment.updated.event version: 0.0.0 id: relay.enrollment.updated.event --- Relay enrollment updated webhook This Relay-side event is not currently part of the Easy webhook subscription set. Easy subscribes to `PaymentMethodEnrollment.Pending`, `PaymentMethodEnrollment.Activated`, `PaymentMethodEnrollment.Deactivated`, `PaymentMethodEnrollment.NonCompliant`, and `PaymentMethodEnrollment.Terminated`. --- name: relay.merchant.activated.event version: 0.0.0 id: relay.merchant.activated.event --- Relay merchant activated webhook --- name: relay.merchant.created.event version: 0.0.0 id: relay.merchant.created.event --- Relay merchant created webhook --- name: relay.merchant.deactivated.event version: 0.0.0 id: relay.merchant.deactivated.event --- Relay merchant deactivated webhook --- name: relay.merchant.updated.event version: 0.0.0 id: relay.merchant.updated.event --- Relay merchant updated webhook --- name: relay.payment.authorize.completed.event version: 0.0.0 id: relay.payment.authorize.completed.event --- Authorize completed webhook --- name: relay.payment.authorize.failed.event version: 0.0.0 id: relay.payment.authorize.failed.event --- Authorize failed webhook --- name: relay.payment.cancel.completed.event version: 0.0.0 id: relay.payment.cancel.completed.event --- Cancel completed webhook --- name: relay.payment.cancel.failed.event version: 0.0.0 id: relay.payment.cancel.failed.event --- Cancel failed webhook --- name: relay.payment.capture.completed.event version: 0.0.0 id: relay.payment.capture.completed.event --- Capture completed webhook --- name: relay.payment.capture.failed.event version: 0.0.0 id: relay.payment.capture.failed.event --- Capture failed webhook --- name: relay.payment.charge.completed.event version: 0.0.0 id: relay.payment.charge.completed.event --- Charge completed webhook --- name: relay.payment.charge.failed.event version: 0.0.0 id: relay.payment.charge.failed.event --- Charge failed webhook --- name: relay.payment.refund.completed.event version: 0.0.0 id: relay.payment.refund.completed.event --- Refund completed webhook --- name: relay.payment.refund.failed.event version: 0.0.0 id: relay.payment.refund.failed.event --- Refund failed webhook --- name: RemovePendingRefundEvent version: 1.0.0 summary: Event emitted when a pending refund is removed from the eligible refunds list schemaPath: "./schema.json" x-tags: - label: 'broker: Axon' - label: 'javaType: eu.nets.ms.collecting.event.accounting.v1.RemovePendingRefundEvent' - label: 'aggregate: MerchantAccount' owners: - easy-collecting id: RemovePendingRefundEvent badges: - content: Collecting backgroundColor: green textColor: white - content: MerchantAccountAggregate backgroundColor: yellow textColor: white x-entities: - id: merchant-account-entity --- # RemovePendingRefundEvent Published when a pending refund is successfully removed from the eligible refunds tracking system. ## Schema ## Purpose This event indicates that a managed transaction is no longer being tracked for automatic refund authorization, typically because it has been processed, cancelled, or became ineligible. ## Key Attributes - **Aggregate ID**: Merchant account aggregate identifier - **Managed Transaction ID**: Unique identifier for the managed transaction being removed ## Business Impact - Maintains accurate tracking of eligible refunds - Prevents unnecessary automatic authorization attempts - Supports refund lifecycle management ## Raw Schema:./schema.json { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "title": "RemovePendingRefundEvent", "description": "Event emitted when a pending refund is removed from the eligible refunds list", "properties": { "accountId": { "type": "object", "description": "Account identifier", "properties": { "value": { "type": "string", "format": "uuid", "description": "The unique account UUID" } }, "required": ["value"] }, "pendingRefundId": { "type": "object", "description": "Pending refund identifier", "properties": { "value": { "type": "string", "format": "uuid", "description": "The unique pending refund UUID" } }, "required": ["value"] }, "amount": { "type": "integer", "minimum": 0, "description": "Amount of the removed pending refund (in smallest currency unit, e.g., 7500 = 75.00)", "example": 7500 }, "currency": { "type": "string", "pattern": "^[A-Z]{3}$", "description": "Currency of the pending refund (ISO 4217)", "example": "EUR" }, "reason": { "type": "string", "description": "Reason for removing the pending refund", "example": "Refund processed successfully" }, "timestamp": { "type": "string", "format": "date-time", "description": "Timestamp when the pending refund was removed" } }, "required": ["accountId", "pendingRefundId", "amount", "currency", "timestamp"], "additionalProperties": false } --- name: ReservationReleasedEvent version: 1.0.0 summary: Event emitted when a previously made reservation is released in a merchant account schemaPath: "./schema.json" x-tags: - label: 'broker: Axon' - label: 'javaType: eu.nets.ms.collecting.event.accounting.v1.ReservationReleasedEvent' - label: 'aggregate: MerchantAccount' owners: - easy-collecting id: ReservationReleasedEvent badges: - content: Collecting backgroundColor: green textColor: white - content: MerchantAccountAggregate backgroundColor: yellow textColor: white x-entities: - id: merchant-account-entity --- # ReservationReleasedEvent Published when a previously held reservation is successfully released from a merchant account, making the funds available again for use. ## Schema ## Purpose This event indicates that funds that were previously reserved for a potential refund have been released back to the merchant's available balance. This occurs when a refund is confirmed, cancelled, or when a reservation expires. ## Key Attributes - **Account ID**: Merchant account aggregate identifier where the reservation was released - **Transaction ID**: Unique identifier for the transaction whose reservation was released - **Released Amount**: Amount that has been released back to available balance - **Currency**: Currency of the released amount - **Release Timestamp**: When the reservation was released - **Release Reason**: Reason for the release (REFUND_CONFIRMED, EXPIRED, CANCELLED) - **Updated Available Balance**: New available balance after the release ## Business Impact - **Balance Restoration**: Available balance is increased by the released amount - **Liquidity Improvement**: Merchant regains access to previously reserved funds - **Cash Flow Optimization**: Improves merchant's cash flow position - **Reservation Cleanup**: Removes completed reservations from tracking ## Integration Points This event is consumed by: - **Balance Views**: To update available balance displays and reporting - **Cash Flow Management**: For merchant liquidity monitoring - **Refund Processing**: To track completion of refund workflows - **Accounting Reports**: For balance reconciliation and audit trails ## Release Scenarios Reservations are released in the following situations: - **Refund Confirmed**: When a refund transaction is successfully processed - **Refund Cancelled**: When a refund request is cancelled by merchant or system - **Reservation Expired**: When a reservation times out without confirmation - **Manual Release**: Administrative action to release stuck reservations - **System Cleanup**: Automated cleanup of orphaned reservations ## Balance Impact The release process affects account balances as follows: - **Total Balance**: Remains unchanged (no actual funds movement) - **Available Balance**: Increased by the released amount - **Reserved Amount**: Reduced by the released amount - **Transaction History**: Records the release for audit purposes ## Follow-up Actions After this event, the following may occur: - **Refund Processing**: If the release was due to refund confirmation - **Notification**: Merchant may be notified of the balance change - **Reconciliation**: Balance reconciliation processes may be triggered ## Raw Schema:./schema.json { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "title": "ReservationReleasedEvent", "description": "Event emitted when a previously made reservation is released in a merchant account", "properties": { "accountId": { "type": "object", "description": "Account identifier", "properties": { "value": { "type": "string", "format": "uuid", "description": "The unique account UUID" } }, "required": ["value"] }, "reservationId": { "type": "object", "description": "Reservation identifier", "properties": { "value": { "type": "string", "format": "uuid", "description": "The unique reservation UUID that was released" } }, "required": ["value"] }, "amount": { "type": "integer", "minimum": 0, "description": "Amount that was released (in smallest currency unit, e.g., 25000 = 250.00)", "example": 25000 }, "currency": { "type": "string", "pattern": "^[A-Z]{3}$", "description": "Currency of the released reservation (ISO 4217)", "example": "EUR" }, "reason": { "type": "string", "description": "Reason for releasing the reservation", "example": "Transaction completed" }, "timestamp": { "type": "string", "format": "date-time", "description": "Timestamp when the reservation was released" } }, "required": ["accountId", "reservationId", "amount", "currency", "timestamp"], "additionalProperties": false } --- name: ScheduleAuthorizeForEligibleRefundsEvent version: 1.0.0 summary: Event emitted when authorization is scheduled for eligible refunds based on available balance schemaPath: "./schema.json" x-tags: - label: 'broker: Axon' - label: 'javaType: eu.nets.ms.collecting.event.accounting.v1.ScheduleAuthorizeForEligibleRefundsEvent' - label: 'aggregate: MerchantAccount' owners: - easy-collecting id: ScheduleAuthorizeForEligibleRefundsEvent badges: - content: Collecting backgroundColor: green textColor: white - content: MerchantAccountAggregate backgroundColor: yellow textColor: white x-entities: - id: merchant-account-entity --- # ScheduleAuthorizeForEligibleRefundsEvent Published when eligible pending refunds are scheduled for automatic authorization due to sufficient account balance. ## Schema ## Purpose This event triggers the automatic authorization process for refunds that have become eligible based on available account balance, implementing a first-in-first-out approach. ## Key Attributes - **Managed Transaction IDs**: List of managed transaction identifiers to be authorized - **Account ID**: Merchant account aggregate identifier ## Business Impact - Automates refund authorization process - Improves customer satisfaction through faster refund processing - Optimizes cash flow management by authorizing refunds as soon as funds are available - Reduces manual processing overhead ## Raw Schema:./schema.json { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "title": "ScheduleAuthorizeForEligibleRefundsEvent", "description": "Event emitted when authorization is scheduled for eligible refunds based on available balance", "properties": { "accountId": { "type": "object", "description": "Account identifier", "properties": { "value": { "type": "string", "format": "uuid", "description": "The unique account UUID" } }, "required": ["value"] }, "eligibleRefunds": { "type": "array", "description": "List of refunds scheduled for authorization", "items": { "type": "object", "properties": { "refundId": { "type": "string", "format": "uuid", "description": "Unique refund identifier" }, "amount": { "type": "integer", "description": "Refund amount (in smallest currency unit, e.g., 10000 = 100.00)" }, "scheduledDate": { "type": "string", "format": "date-time", "description": "When the authorization is scheduled" } }, "required": ["refundId", "amount", "scheduledDate"] } }, "totalScheduledAmount": { "type": "integer", "description": "Total amount of refunds scheduled for authorization (in smallest currency unit, e.g., 85000 = 850.00)", "example": 85000 }, "currency": { "type": "string", "pattern": "^[A-Z]{3}$", "description": "Currency of the refunds (ISO 4217)", "example": "EUR" }, "timestamp": { "type": "string", "format": "date-time", "description": "Timestamp when the authorization was scheduled" } }, "required": ["accountId", "eligibleRefunds", "totalScheduledAmount", "currency", "timestamp"], "additionalProperties": false } --- name: settlement.cancelled.event.v1 version: 1.3.0 id: settlement.cancelled.event.v1 --- Exchange: settlement --- name: settlement.confirmed.event.v1 version: 1.4.0 x-tags: - label: 'exchange: settlement' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Events.Settlement.SettlementConfirmedEvent' id: settlement.confirmed.event.v1 --- Exchange: settlement --- name: settlement.confirmed.event.v2 version: 2.2.0 id: settlement.confirmed.event.v2 --- Exchange: --- name: settlement.created.event.v1 version: 1.5.0 x-tags: - label: 'exchange: settlement' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Events.Settlement.SettlementCreatedEvent' id: settlement.created.event.v1 --- Exchange: merchant --- name: settlement.created.event.v2 version: 2.1.0 id: settlement.created.event.v2 --- Exchange: --- name: settlement.transactions.added.event.v1 version: 1.1.0 x-tags: - label: 'exchange: settlement' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Events.Settlement.SettlementTransactionsAddedEvent' id: settlement.transactions.added.event.v1 --- Exchange: settlement --- name: settlementConfiguration.assigned.event.v1 version: 1.2.0 id: settlementConfiguration.assigned.event.v1 --- Exchange: --- name: signupProcess.signupFailed.event.v1 version: 1.0.0 x-tags: - label: 'exchange: signup' - label: 'broker: rabbitmq' - label: 'javaType: dibs.easy.on.messageprocessor.messages.signup.SignupFailedEvent' id: signupProcess.signupFailed.event.v1 --- Exchange: signup Sent from Signup when the e-signing process initated by merchant in ESign failed (expired, failed, cancelled). --- name: signupProcess.signupInitialized.event.v1 version: 1.0.0 x-tags: - label: 'exchange: signup' - label: 'broker: rabbitmq' - label: 'javaType: dibs.easy.on.messageprocessor.messages.signup.SignupInitializedEvent' id: signupProcess.signupInitialized.event.v1 --- Exchange: signup Sent from Signup when new Signup Process has been created (using the API). --- name: signupProcess.signupOrderInserted.event.v2 version: 2.0.0 x-tags: - label: 'exchange: signup' - label: 'broker: rabbitmq' - label: 'javaType: dibs.easy.on.messageprocessor.messages.signup.SignupOrderInsertedEvent' id: signupProcess.signupOrderInserted.event.v2 --- Exchange: signup Sent from Signup when merchant succesfully initiated e-signing of contract in ESign. Note: The event does not mean the e-signing was succesfull. It only indicates that e-signing started and merchant entered the signing form. --- name: signupProcess.signupSigned.event.v1 version: 1.0.0 x-tags: - label: 'exchange: signup' - label: 'broker: rabbitmq' - label: 'javaType: dibs.easy.on.messageprocessor.messages.signup.SignupSignedEvent' id: signupProcess.signupSigned.event.v1 --- Exchange: signup Sent from Signup when merchant succesfully completed e-signing a contract (in ESign or Docusign). --- name: subscription.bulk.charge.initiated.v1 version: 1.1.0 summary: subscription.bulk.charge.initiated.v1 x-tags: - label: 'exchange: payment' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.CheckoutAndProcessing.Events.V1.Subscriptions.BulkChargeOfSubscriptionsInitiated' id: subscription.bulk.charge.initiated.v1 --- --- name: subscription.bulk.verification.initiated.v1 version: 1.1.0 summary: subscription.bulk.verification.initiated.v1 x-tags: - label: 'exchange: payment' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.CheckoutAndProcessing.Events.V1.Subscriptions.BulkVerificationOfSubscriptionsInitiated' id: subscription.bulk.verification.initiated.v1 --- --- name: subscription.created.event.v1 version: 1.12.0 x-tags: - label: 'exchange: payment' - label: 'dotnetType: Nets.Easy.Messages.CheckoutAndProcessing.Events.V1.Subscriptions.SubscriptionCreated' - label: 'broker: rabbitmq' id: subscription.created.event.v1 --- Exchange: payment --- name: subscription.updated.event.v1 version: 1.3.0 x-tags: - label: 'exchange: payment' - label: 'dotnetType: Nets.Easy.Messages.CheckoutAndProcessing.Events.V1.Subscriptions.SubscriptionUpdated' - label: 'broker: rabbitmq' id: subscription.updated.event.v1 --- Exchange: --- name: transactionFee.calculated.event.v1 version: 1.2.0 x-tags: - label: 'exchange: payment' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Responses.TransactionFee.TransactionFeeCalculatedEvent' id: transactionFee.calculated.event.v1 --- Exchange: --- name: TransactionPostedEvent version: 1.0.0 summary: Event emitted when a financial transaction is posted to a merchant account schemaPath: "./schema.json" x-tags: - label: 'broker: Axon' - label: 'javaType: eu.nets.ms.collecting.event.accounting.v1.TransactionPostedEvent' - label: 'aggregate: MerchantAccount' owners: - easy-collecting id: TransactionPostedEvent badges: - content: Collecting backgroundColor: green textColor: white - content: MerchantAccountAggregate backgroundColor: yellow textColor: white x-entities: - id: merchant-account-entity - id: transaction-definition-entity - id: posting-rule-entity --- # TransactionPostedEvent Published when a financial transaction is successfully posted to a merchant account using double-entry bookkeeping principles. ## Schema ## Purpose This event indicates that a financial transaction has been processed and recorded in the merchant's account ledger, updating relevant account balances according to the configured posting rules. It represents the completion of the transaction booking process. ## Key Attributes - **Account ID**: Merchant account aggregate identifier where the transaction was posted - **Transaction ID**: Unique identifier for the posted transaction - **Transaction Type**: Type of transaction (CHARGE, REFUND, FEE_ADDED, REMITTANCE, etc.) - **Amount**: Transaction amount that was posted - **Currency**: Currency of the transaction - **Value Date**: Date when the transaction takes effect - **Posting Timestamp**: When the transaction was posted - **Account Postings**: List of account balance changes made by this transaction - **Reference Information**: Transaction reference and provider details ## Business Impact - **Balance Updates**: Account balances are updated according to posting rules - **Financial Recording**: Transaction is permanently recorded in the ledger - **Audit Trail**: Creates immutable record for financial auditing - **Compliance**: Maintains double-entry bookkeeping integrity ## Integration Points This event is consumed by: - **Balance Views**: To update account balance displays and reporting - **Financial Reporting**: For generating financial statements and reports - **Reconciliation Services**: For matching transactions with external sources - **Audit Systems**: For maintaining compliance and audit trails - **Analytics**: For transaction volume and financial performance analysis ## Transaction Types Supported The system processes various transaction types: ### Payment Operations - **CHARGE**: Customer payment transactions - **REFUND**: Money returned to customers - **FEE_ADDED**: Additional fees applied to transactions ### Settlement Operations - **REMITTANCE**: Settlement payments to merchants - **RESERVE_REMITTANCE**: Holding funds before settlement - **REVERSE_REMITTANCE**: Reversal of settlement payments ### Account Management - **TOPUP**: Manual account balance increases - **ADJUSTMENT_CREDIT**: Positive balance adjustments - **ADJUSTMENT_DEBIT**: Negative balance adjustments ### Operational Fees - **SCHEME_FEE**: Payment network processing fees - **CAPS_REMITTANCE**: Capacity-based settlements ## Double-Entry Bookkeeping Each transaction posting follows double-entry principles: - **Balanced Postings**: Total debits equal total credits - **Account Categories**: Affects appropriate asset, liability, or revenue accounts - **Posting Rules**: Applied according to transaction definition configuration - **Balance Integrity**: Maintains accounting equation balance ## Automatic Processing Transaction posting may trigger additional automatic processes: - **Reservation Release**: Automatic release of related reservations - **Balance Notifications**: Trigger balance threshold notifications - **Refund Authorization**: Enable automatic refund processing if sufficient balance - **Remittance Scheduling**: Update remittance order dates for applicable transactions ## Raw Schema:./schema.json { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "title": "TransactionPostedEvent", "description": "Event emitted when a financial transaction is posted to a merchant account", "properties": { "accountId": { "type": "object", "description": "Account identifier", "properties": { "value": { "type": "string", "format": "uuid", "description": "The unique account UUID" } }, "required": ["value"] }, "transactionId": { "type": "object", "description": "Transaction identifier", "properties": { "value": { "type": "string", "format": "uuid", "description": "The unique transaction UUID" } }, "required": ["value"] }, "transactionType": { "type": "string", "enum": ["CHARGE", "REFUND", "FEE_ADDED", "CHARGEBACK", "TOPUP", "REMITTANCE", "ADJUSTMENT_CREDIT", "ADJUSTMENT_DEBIT"], "description": "Type of transaction posted", "example": "CHARGE" }, "amount": { "type": "integer", "description": "Transaction amount (in smallest currency unit, e.g., 10050 = 100.50)", "example": 10050 }, "currency": { "type": "string", "pattern": "^[A-Z]{3}$", "description": "Currency of the transaction (ISO 4217)", "example": "EUR" }, "reference": { "type": "string", "description": "External reference for the transaction", "example": "order-12345" }, "description": { "type": "string", "description": "Description of the transaction", "example": "Payment for order #12345" }, "postings": { "type": "array", "description": "List of account postings made", "items": { "type": "object", "properties": { "accountDefinitionId": { "type": "integer", "description": "Account definition identifier" }, "accountDefinitionName": { "type": "string", "description": "Account definition name" }, "amount": { "type": "integer", "description": "Posted amount (in smallest currency unit, e.g., 10050 = 100.50)" }, "sign": { "type": "string", "enum": ["POSITIVE", "NEGATIVE"], "description": "Posting sign" } }, "required": ["accountDefinitionId", "accountDefinitionName", "amount", "sign"] } }, "timestamp": { "type": "string", "format": "date-time", "description": "Timestamp when the transaction was posted" } }, "required": ["accountId", "transactionId", "transactionType", "amount", "currency", "postings", "timestamp"], "additionalProperties": false } --- name: UpdateEligiblePendingRefundsArmedEvent version: 1.0.0 summary: Event emitted when the eligibility status for pending refunds is updated based on available balance schemaPath: "./schema.json" x-tags: - label: 'broker: Axon' - label: 'javaType: eu.nets.ms.collecting.event.accounting.v1.UpdateEligiblePendingRefundsArmedEvent' - label: 'aggregate: MerchantAccount' owners: - easy-collecting id: UpdateEligiblePendingRefundsArmedEvent badges: - content: Collecting backgroundColor: green textColor: white - content: MerchantAccountAggregate backgroundColor: yellow textColor: white x-entities: - id: merchant-account-entity --- # UpdateEligiblePendingRefundsArmedEvent Published when a pending refund eligibility trigger is successfully armed for automatic authorization. ## Schema ## Purpose This event indicates that a managed transaction has been added to the eligible pending refunds tracking, enabling automatic refund authorization when sufficient balance becomes available. ## Key Attributes - **Aggregate ID**: Merchant account aggregate identifier - **Amount**: Required amount for the refund - **Managed Transaction ID**: Unique identifier for the managed transaction ## Business Impact - Enables automatic refund processing - Improves customer experience through faster refund authorization - Reduces manual intervention for eligible refunds ## Raw Schema:./schema.json { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "title": "UpdateEligiblePendingRefundsArmedEvent", "description": "Event emitted when the eligibility status for pending refunds is updated based on available balance", "properties": { "accountId": { "type": "object", "description": "Account identifier", "properties": { "value": { "type": "string", "format": "uuid", "description": "The unique account UUID" } }, "required": ["value"] }, "availableBalance": { "type": "integer", "description": "Available balance used for refund eligibility calculation (in smallest currency unit, e.g., 150000 = 1500.00)", "example": 150000 }, "currency": { "type": "string", "pattern": "^[A-Z]{3}$", "description": "Currency of the balance (ISO 4217)", "example": "EUR" }, "eligibleRefunds": { "type": "array", "description": "List of refunds that became eligible for processing", "items": { "type": "object", "properties": { "refundId": { "type": "string", "format": "uuid", "description": "Unique refund identifier" }, "amount": { "type": "integer", "description": "Refund amount (in smallest currency unit, e.g., 10000 = 100.00)" } }, "required": ["refundId", "amount"] } }, "totalEligibleAmount": { "type": "integer", "description": "Total amount of eligible refunds (in smallest currency unit, e.g., 85000 = 850.00)", "example": 85000 }, "timestamp": { "type": "string", "format": "date-time", "description": "Timestamp when the eligibility was updated" } }, "required": ["accountId", "availableBalance", "currency", "eligibleRefunds", "totalEligibleAmount", "timestamp"], "additionalProperties": false } --- name: user.addedToMerchant.event.v1 version: 1.2.0 id: user.addedToMerchant.event.v1 --- Exchange: merchant --- name: user.addedToPartner.event.v1 version: 1.1.0 id: user.addedToPartner.event.v1 --- Exchange: --- name: user.created.event.v1 version: 1.2.0 id: user.created.event.v1 --- Exchange: merchant --- name: user.removedFromMerchant.event.v1 version: 1.1.0 id: user.removedFromMerchant.event.v1 --- Exchange: --- name: AddAccountDefinitionCommand version: 1.0.0 summary: Command to add a new account definition to an existing merchant account ledger schemaPath: "./schema.json" x-tags: - label: 'broker: Axon' - label: 'javaType: eu.nets.ms.collecting.command.accounting.v1.AddAccountDefinitionCommand' - label: 'aggregate: MerchantAccount' owners: - easy-collecting id: AddAccountDefinitionCommand badges: - content: Collecting backgroundColor: green textColor: white - content: MerchantAccountAggregate backgroundColor: yellow textColor: white x-entities: - id: merchant-account-entity - id: account-definition-entity --- # AddAccountDefinitionCommand Adds a new account definition to an existing merchant account's ledger structure. ## Schema ## Purpose This command allows dynamic addition of new account types to existing merchant accounts, enabling support for new financial products or account categories. ## Key Attributes - **ID**: Merchant account aggregate identifier - **Ledger**: Hierarchy level - **Sub**: Sub-hierarchy level - **Definition**: Account definition containing ID, type, and name ## Business Rules - Account definition must exist in the configured chart of accounts - Account definition must not already exist in the ledger - Validates definition matches configured account structure ## Result Produces an `AccountDefinitionAddedEvent` when successful. ## Raw Schema:./schema.json { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "title": "AddAccountDefinitionCommand", "description": "Command to add a new account definition to an existing merchant account ledger", "properties": { "accountId": { "type": "object", "description": "Account identifier", "properties": { "value": { "type": "string", "format": "uuid", "description": "The unique account UUID" } }, "required": ["value"] }, "accountDefinitionId": { "type": "integer", "description": "Account definition identifier", "example": 15652 }, "accountDefinitionName": { "type": "string", "description": "Name of the account definition", "example": "MerchantDebt" } }, "required": ["accountId", "accountDefinitionId", "accountDefinitionName"], "additionalProperties": false } --- name: communicator.email.response.v1 version: 1.0.0 summary: communicator.email.response.v1 x-tags: - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Responses.Communicator.CommunicatorEmailResponse' id: communicator.email.response.v1 --- --- name: communicator.http.request.v1 version: 1.2.0 id: communicator.http.request.v1 --- Exchange: notification --- name: communicator.http.response.v1 version: 1.1.0 x-tags: - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Responses.Communicator.CommunicatorHttpResponse' id: communicator.http.response.v1 --- Exchange: notification --- name: communicator.sms.response.v1 version: 1.0.0 summary: communicator.sms.response.v1 x-tags: - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Responses.Communicator.CommunicatorSmsResponse' id: communicator.sms.response.v1 --- --- name: CreateAccountCommand version: 1.0.0 summary: Command to create a new merchant account aggregate in the accounting system schemaPath: "./schema.json" x-tags: - label: 'broker: Axon' - label: 'javaType: eu.nets.ms.collecting.command.accounting.v1.CreateAccountCommand' - label: 'aggregate: MerchantAccount' owners: - easy-collecting id: CreateAccountCommand badges: - content: Collecting backgroundColor: green textColor: white - content: MerchantAccountAggregate backgroundColor: yellow textColor: white x-entities: - id: merchant-account-entity --- # CreateAccountCommand Creates a new MerchantAccount aggregate with the specified configuration and chart of accounts. ## Schema ## Purpose This command initializes a new merchant account aggregate that will manage financial transactions and balances for a specific merchant in a given currency. ## Key Attributes - **ID**: Unique identifier for the merchant account aggregate - **Currency**: The currency in which the account operates - **Account Holder ID**: Identifier of the merchant who owns the account - **Account Holder Name**: Name of the merchant - **Ledger**: Hierarchy level (e.g., "COLLECTING") - **Sub**: Sub-hierarchy level (e.g., merchant-specific identifier) - **Booking Type**: Type of booking (STANDARD, IPSP) ## Business Rules - Only one general ledger account is allowed per currency - Chart of accounts must be defined for the specified ledger hierarchy - Account metadata is stored for non-IPSP booking types - Validates that the ledger configuration exists in the admin backend ## Result When successful, this command produces an `AccountCreatedEvent` and stores account metadata in the repository. ## Raw Schema:./schema.json { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "title": "CreateAccountCommand", "description": "Command to create a new merchant account aggregate in the accounting system", "properties": { "accountId": { "type": "object", "description": "Account identifier", "properties": { "value": { "type": "string", "format": "uuid", "description": "The unique account UUID" } }, "required": ["value"] }, "ownerId": { "type": "object", "description": "Owner identifier", "properties": { "value": { "type": "string", "format": "uuid", "description": "The unique owner UUID" } }, "required": ["value"] }, "currency": { "type": "string", "pattern": "^[A-Z]{3}$", "description": "The currency in which the account operates (ISO 4217, 3 characters)", "example": "EUR" }, "delay": { "type": "integer", "description": "Delay configuration for the account", "example": 2 }, "country": { "type": "string", "pattern": "^[A-Z]{3}$", "description": "Country code where the account operates (ISO 3166, 3 characters)", "example": "NOR" }, "iban": { "type": "string", "maxLength": 34, "description": "International Bank Account Number", "example": "NO9386011117947" }, "bic": { "type": "string", "maxLength": 34, "description": "Bank Identifier Code", "example": "DNBANOKKXXX" }, "bookkeepingConfigId": { "type": "integer", "description": "Bookkeeping configuration identifier", "example": 15656 } }, "required": ["accountId", "ownerId", "currency", "delay", "country", "iban", "bic", "bookkeepingConfigId"], "additionalProperties": false } --- name: dispute.initiate.request.v1 version: 1.0.0 summary: dispute.initiate.request.v1 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Requests.Dispute.DisputeInitiateRequest' id: dispute.initiate.request.v1 --- --- name: dispute.initiate.response.v1 version: 1.0.0 summary: dispute.initiate.response.v1 x-tags: - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Responses.Dispute.DisputeInitiateResponse' id: dispute.initiate.response.v1 --- --- name: merchant.account.create.request.v1 version: 1.7.0 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Requests.Merchant.MerchantAccountCreateRequest' id: merchant.account.create.request.v1 --- Exchange: merchant --- name: merchant.account.create.request.v2 version: 1.1.0 summary: merchant.account.create.request.v2 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V2.Requests.Merchant.MerchantAccountCreateRequest' id: merchant.account.create.request.v2 --- --- name: merchant.account.create.request.v3 version: 3.2.0 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V3.Requests.MerchantAccount.MerchantAccountCreateRequest' id: merchant.account.create.request.v3 --- Exchange: --- name: merchant.account.create.response.v1 version: 1.2.0 id: merchant.account.create.response.v1 --- Exchange: merchant --- name: merchant.account.deactivate.request.v1 version: 1.1.0 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Requests.MerchantAccount.MerchantAccountDeactivateRequest' id: merchant.account.deactivate.request.v1 --- Exchange: --- name: merchant.account.migrate.request.v1 version: 1.1.0 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Requests.MerchantAccount.MerchantAccountMigrateRequest' id: merchant.account.migrate.request.v1 --- Exchange: --- name: merchant.account.migrate.response.v1 version: 1.1.0 x-tags: - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Responses.Merchant.MerchantAccountMigrateResponse' id: merchant.account.migrate.response.v1 --- Exchange: --- name: merchant.account.reactivate.request.v1 version: 1.1.0 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Requests.MerchantAccount.MerchantAccountReactivateRequest' id: merchant.account.reactivate.request.v1 --- Exchange: --- name: merchant.account.settlementConfiguration.update.request.v1 version: 1.1.0 summary: merchant.account.settlementConfiguration.update.request.v1 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Requests.Merchant.MerchantAccountSettlementConfigurationUpdateRequest' id: merchant.account.settlementConfiguration.update.request.v1 --- --- name: merchant.apiKeys.create.request.v1 version: 1.0.0 summary: merchant.apiKeys.create.request.v1 x-tags: - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.Models.V1.Requests.Merchant.MerchantApiKeysCreateRequest' - label: 'exchange: merchant' id: merchant.apiKeys.create.request.v1 --- --- name: merchant.apiKeys.live.revoke.request.v1 version: 1.1.0 summary: merchant.apiKeys.live.revoke.request.v1 x-tags: - label: 'dotnetType: Nets.Easy.Messages.V1.Requests.Merchant.MerchantApiKeysLiveRevokeRequest' - label: 'exchange: merchant' - label: 'broker: rabbitmq' id: merchant.apiKeys.live.revoke.request.v1 --- --- name: merchant.apiKeys.test.revoke.request.v1 version: 1.0.0 summary: merchant.apiKeys.test.revoke.request.v1 x-tags: - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.Models.V1.Requests.Merchant.MerchantApiKeysTestRevokeRequest' - label: 'exchange: merchant' id: merchant.apiKeys.test.revoke.request.v1 --- --- name: merchant.billingDetails.update.request.v1 version: 1.2.0 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Requests.Merchant.MerchantBillingDetailsUpdateRequest' id: merchant.billingDetails.update.request.v1 --- Exchange: merchant --- name: merchant.billingDetails.update.response.v1 version: 1.2.0 x-tags: - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Responses.Merchant.MerchantBillingDetailsUpdateResponse' id: merchant.billingDetails.update.response.v1 --- Exchange: merchant --- name: merchant.contactPerson.update.request.v1 version: 1.2.0 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Requests.Merchant.MerchantContactPersonUpdateRequest' id: merchant.contactPerson.update.request.v1 --- Exchange: merchant --- name: merchant.contactPerson.update.response.v1 version: 1.2.0 x-tags: - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Responses.Merchant.MerchantContactPersonUpdateResponse' id: merchant.contactPerson.update.response.v1 --- Exchange: merchant --- name: merchant.create.request.v1 version: 1.5.0 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Requests.Merchant.MerchantCreateRequest' id: merchant.create.request.v1 --- Exchange: merchant --- name: merchant.create.request.v2 version: 1.1.0 summary: merchant.create.request.v2 x-tags: - label: 'dotnetType: Nets.Easy.Messages.Models.V2.Requests.Merchant.MerchantCreateRequest' - label: 'exchange: merchant' - label: 'broker: rabbitmq' id: merchant.create.request.v2 --- --- name: merchant.create.response.v1 version: 1.2.0 id: merchant.create.response.v1 --- Exchange: merchant --- id: merchant.surcharge.disable.request.v1 name: merchant.surcharge.disable.request.v1 version: 1.1.0 x-tags: - label: 'dotnetType: Nets.Easy.Messages.Models.V1.Requests.Merchant.MerchantSurchargeDisableRequest' - label: 'exchange: merchant' - label: 'broker: rabbitmq' --- --- id: merchant.surcharge.enable.request.v1 name: merchant.surcharge.enable.request.v1 version: 1.1.0 x-tags: - label: 'dotnetType: Nets.Easy.Messages.Models.V1.Requests.Merchant.MerchantSurchargeEnableRequest' - label: 'exchange: merchant' - label: 'broker: rabbitmq' --- --- name: merchant.update.request.v1 version: 1.2.0 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Requests.Merchant.MerchantUpdateRequest' id: merchant.update.request.v1 --- Exchange: merchant --- name: merchant.update.response.v1 version: 1.2.0 x-tags: - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Responses.Merchant.MerchantUpdateResponse' id: merchant.update.response.v1 --- Exchange: merchant --- name: merchantAccountPaymentMethod.arvato.create.request.v1 version: 1.4.0 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Requests.MerchantAccountPaymentMethod.MerchantAccountPaymentMethodArvatoCreateRequest' id: merchantAccountPaymentMethod.arvato.create.request.v1 --- Exchange: merchant --- name: merchantAccountPaymentMethod.arvato.create.response.v1 version: 1.2.0 id: merchantAccountPaymentMethod.arvato.create.response.v1 --- Exchange: merchant --- name: merchantAccountPaymentMethod.steps.create.request.v1 version: 1.3.0 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Requests.MerchantAccountPaymentMethod.MerchantAccountPaymentMethodStepsCreateRequest' id: merchantAccountPaymentMethod.steps.create.request.v1 --- Exchange: merchant --- name: merchantAccountPaymentMethod.steps.create.response.v1 version: 1.2.0 id: merchantAccountPaymentMethod.steps.create.response.v1 --- Exchange: merchant --- name: merchantApplication.create.request.v1 version: 1.6.0 summary: No event; Signup calls CMP API to create a merchant application case x-tags: - label: 'interface: http' - label: 'operation: POST /api/cases' - label: 'producer: signup' - label: 'consumer: cmp' id: merchantApplication.create.request.v1 --- ## Signup to CMP handoff This command models the direct API call from Signup to CMP when Signup has collected the merchant data and the merchant has signed the initial agreement. In other words, if the question is "which event sends data from Signup to CMP?", the precise answer is: no event does that handoff; Signup calls CMP's API with **merchantApplication.create.request.v1**. CMP receives this command through its `POST /api/cases` endpoint. The request creates a new merchant application case for due diligence checks such as AML, KYC, regulatory review, and risk handling. This command is separate from CMP's output events. After CMP has created and processed the case, CMP can emit events such as **merchantApplication.created.event.v1**, **merchantApplication.approved.event.v2**, **merchantApplication.rejected.event.v1**, and **merchantApplication.riskscored.event.v3**. Exchange: merchant --- name: notification.http.request.v1 version: 1.3.0 x-tags: - label: 'exchange: notification' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Requests.Notifications.NotificationHttpRequestMessage' id: notification.http.request.v1 --- Exchange: notification --- name: notification.http.response.v1 version: 1.2.0 x-tags: - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Responses.Notifications.NotificationHttpResponseMessage' id: notification.http.response.v1 --- Exchange: notification --- name: partner.allowedPriceLists.update.request.v1 version: 1.2.0 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Requests.Partner.PartnerAllowedPriceListsUpdateRequest' id: partner.allowedPriceLists.update.request.v1 --- Exchange: merchant --- name: partner.allowedPriceLists.update.response.v1 version: 1.2.0 x-tags: - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Responses.Partner.PartnerAllowedPriceListsUpdateResponse' id: partner.allowedPriceLists.update.response.v1 --- Exchange: merchant --- name: partner.company.update.request.v1 version: 1.3.0 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Requests.Partner.PartnerCompanyUpdateRequest' id: partner.company.update.request.v1 --- Exchange: merchant --- name: partner.company.update.response.v1 version: 1.2.0 x-tags: - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Responses.Partner.PartnerCompanyUpdateResponse' id: partner.company.update.response.v1 --- Exchange: merchant --- name: partner.contactPerson.update.request.v1 version: 1.3.0 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Requests.Partner.PartnerContactPersonUpdateRequest' id: partner.contactPerson.update.request.v1 --- Exchange: merchant --- name: partner.contactPerson.update.response.v1 version: 1.2.0 x-tags: - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Responses.Partner.PartnerContactPersonUpdateResponse' id: partner.contactPerson.update.response.v1 --- Exchange: merchant --- name: partner.create.request.v1 version: 1.3.0 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Requests.Partner.PartnerCreateRequest' id: partner.create.request.v1 --- Exchange: merchant --- name: partner.create.response.v1 version: 1.2.0 x-tags: - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Responses.Partner.PartnerCreateResponse' id: partner.create.response.v1 --- Exchange: merchant --- name: partner.crmPartnerId.update.request.v1 version: 1.2.0 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Requests.Partner.PartnerCrmPartnerUpdateRequest' id: partner.crmPartnerId.update.request.v1 --- Exchange: merchant REPLICATED, use instead partner.update.request.v1 --- name: partner.crmPartnerId.update.response.v1 version: 1.2.0 x-tags: - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Responses.Partner.PartnerCrmPartnerUpdateResponse' id: partner.crmPartnerId.update.response.v1 --- Exchange: merchant --- name: partner.defaultPermissions.update.request.v1 version: 1.2.0 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Requests.Partner.PartnerDefaultPermissionsUpdateRequest' id: partner.defaultPermissions.update.request.v1 --- Exchange: merchant --- name: partner.defaultPermissions.update.response.v1 version: 1.2.0 x-tags: - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Responses.Partner.PartnerDefaultPermissionsUpdateResponse' id: partner.defaultPermissions.update.response.v1 --- Exchange: merchant --- name: partner.merchantAccountPermissions.update.request.v1 version: 1.3.0 x-tags: - label: 'exchange: merchant' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Requests.Partner.PartnerMerchantPermissionsUpdateRequest' id: partner.merchantAccountPermissions.update.request.v1 --- Exchange: merchant --- name: partner.merchantAccountPermissions.update.response.v1 version: 1.2.0 x-tags: - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Responses.Partner.PartnerMerchantPermissionsUpdateResponse' id: partner.merchantAccountPermissions.update.response.v1 --- Exchange: merchant --- name: payment.cancel.request.v1 version: 1.5.0 x-tags: - label: 'exchange: payment' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Requests.Payment.CancelPaymentCommand' id: payment.cancel.request.v1 --- Exchange: payment --- id: payment.charge.request.v1 name: payment.charge.request.v1 version: 1.1.0 x-tags: - label: 'exchange: payment' - label: 'dotnetType: Nets.Easy.Messages.V1.Requests.Payment.ChargePaymentCommand' - label: 'broker: rabbitmq' --- --- name: payment.externalrefund.retry.request.v1 version: 1.1.0 summary: payment.externalrefund.retry.request.v1 x-tags: - label: 'exchange: payment' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Requests.Payment.RetryExternalRefundCommand' id: payment.externalrefund.retry.request.v1 --- --- id: payment.pendingRefund.cancel.request.v1 name: payment.pendingRefund.cancel.request.v1 version: 1.1.0 x-tags: - label: 'exchange: payment' - label: 'dotnetType: Nets.Easy.Messages.V1.Requests.Payment.CancelPaymentRefundCommand' - label: 'broker: rabbitmq' --- --- name: payment.refund.request.v1 version: 1.5.0 x-tags: - label: 'exchange: payment' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Requests.Payment.RefundPaymentCommand' id: payment.refund.request.v1 --- Exchange: payment --- name: PlatformCreateCommand version: 1.0.0 summary: Command to create a new platform in the collecting system schemaPath: "./schema.json" x-tags: - label: 'broker: Axon' - label: 'javaType: eu.nets.ms.collecting.command.platform.v1.PlatformCreateCommand' - label: 'aggregate: Platform' owners: - easy-collecting id: PlatformCreateCommand badges: - content: Collecting backgroundColor: green textColor: white - content: PlatformAggregate backgroundColor: yellow textColor: white x-entities: - id: platform-entity --- # PlatformCreateCommand Creates a new Platform aggregate that represents a payment platform configuration in the collecting system. ## Schema ## Purpose This command initializes a new platform configuration that can be used for payment processing, defining platform-specific settings and associations with account holders. ## Key Attributes - **Platform ID**: Unique identifier for the platform - **Platform Name**: Name of the payment platform (e.g., EASY, XPAY, NPG, PAYTRAIL) - **Account Holder ID**: Identifier of the account holder associated with this platform - **Version**: Optional version number for the platform configuration ## Supported Platforms - **EASY**: Easy payment platform for Nordic markets - **XPAY**: XPAY payment gateway - **NPG**: Next Payment Gateway - **PAYTRAIL**: Paytrail payment service ## Business Rules - Platform ID must be unique across the system - Platform name must be specified and non-empty - Account holder ID must reference a valid account holder - Platform configurations determine transaction processing behavior ## Result When successful, this command produces a `PlatformCreatedEvent` and stores the platform configuration for use in payment processing. ## Raw Schema:./schema.json { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "title": "PlatformCreateCommand", "description": "Command to create a new platform in the collecting system", "properties": { "id": { "type": "object", "description": "Platform identifier", "properties": { "value": { "type": "string", "description": "The unique platform ID" } }, "required": ["value"] }, "platformName": { "type": "string", "description": "The name of the platform (e.g., easy, xpay, npg, paytrail)" } }, "required": ["id", "platformName"], "additionalProperties": false } --- name: PostTransactionCommand version: 1.0.0 summary: Command to post a financial transaction to a merchant account schemaPath: "./schema.json" x-tags: - label: 'broker: Axon' - label: 'javaType: eu.nets.ms.collecting.command.accounting.v1.PostTransactionCommand' - label: 'aggregate: MerchantAccount' owners: - easy-collecting id: PostTransactionCommand badges: - content: Collecting backgroundColor: green textColor: white - content: MerchantAccountAggregate backgroundColor: yellow textColor: white x-entities: - id: merchant-account-entity - id: transaction-definition-entity - id: posting-rule-entity --- # PostTransactionCommand Posts a financial transaction to a merchant account using configured posting rules and double-entry bookkeeping principles. ## Schema ## Purpose This command processes financial transactions by applying the appropriate posting rules to update account balances while maintaining accounting integrity. ## Key Attributes - **ID**: Merchant account aggregate identifier - **Transaction ID**: Unique identifier for the transaction - **Transaction Type**: Type of transaction (CHARGE, REFUND, FEE_ADDED, etc.) - **Amount**: Transaction amount - **Currency**: Transaction currency - **Value Date**: Date when the transaction takes effect - **Timestamp**: When the transaction occurred - **Reference**: Transaction reference information - **Provider**: Payment provider information - **Ledger/Sub**: Hierarchy identifiers ## Business Rules - Transaction must be supported by configured posting rules - Currency must match the account currency - Sufficient balance checks for liability accounts - IPSP booking types are ignored - Automatically releases any reservations for the transaction - Sets remittance order dates for applicable transaction types ## Result Produces a `TransactionPostedEvent` and may trigger balance notifications. ## Raw Schema:./schema.json { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "title": "PostTransactionCommand", "description": "Command to post a financial transaction to a merchant account", "properties": { "accountId": { "type": "object", "description": "Account identifier", "properties": { "value": { "type": "string", "format": "uuid", "description": "The unique account UUID" } }, "required": ["value"] }, "transactionId": { "type": "object", "description": "Transaction identifier", "properties": { "value": { "type": "string", "format": "uuid", "description": "The unique transaction UUID" } }, "required": ["value"] }, "transactionType": { "type": "string", "enum": ["CHARGE", "REFUND", "FEE_ADDED", "CHARGEBACK", "TOPUP", "REMITTANCE", "ADJUSTMENT_CREDIT", "ADJUSTMENT_DEBIT"], "description": "Type of transaction to post", "example": "CHARGE" }, "amount": { "type": "integer", "minimum": 0, "description": "Transaction amount (in smallest currency unit, e.g., 10050 = 100.50)", "example": 10050 }, "currency": { "type": "string", "pattern": "^[A-Z]{3}$", "description": "Currency of the transaction (ISO 4217)", "example": "EUR" }, "reference": { "type": "string", "description": "External reference for the transaction", "example": "order-12345" }, "description": { "type": "string", "description": "Description of the transaction", "example": "Payment for order #12345" } }, "required": ["accountId", "transactionId", "transactionType", "amount", "currency"], "additionalProperties": false } --- name: refundAuthorization.cancel.request.v1 version: 1.3.0 x-tags: - label: 'exchange: payment' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Requests.RefundAuthorization.RefundAuthorizationCancelRequest' id: refundAuthorization.cancel.request.v1 --- Exchange: payment --- name: refundAuthorization.confirm.request.v1 version: 1.3.0 x-tags: - label: 'exchange: payment' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Requests.RefundAuthorization.RefundAuthorizationConfirmRequest' id: refundAuthorization.confirm.request.v1 --- Exchange: payment --- name: refundAuthorization.create.request.v1 version: 1.4.0 x-tags: - label: 'exchange: payment' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Requests.RefundAuthorization.RefundAuthorizationCreateRequest' id: refundAuthorization.create.request.v1 --- Exchange: payment --- name: relay.enrollment.activate.request.v2 version: 2.0.0 id: relay.enrollment.activate.request.v2 --- Activate a Relay enrollment request --- name: relay.enrollment.deactivate.request.v2 version: 2.0.0 id: relay.enrollment.deactivate.request.v2 --- Deactivate a Relay enrollment request --- name: relay.enrollment.enroll.request.v2 version: 2.0.0 id: relay.enrollment.enroll.request.v2 --- Enroll a Relay merchant request --- name: relay.enrollment.terminate.request.v2 version: 2.0.0 id: relay.enrollment.terminate.request.v2 --- Terminate a Relay enrollment request --- name: relay.enrollment.update.request.v2 version: 2.0.0 id: relay.enrollment.update.request.v2 --- Update a Relay enrollment request --- name: relay.merchant.activate.request.v2 version: 2.0.0 id: relay.merchant.activate.request.v2 --- Activate a Relay merchant request --- name: relay.merchant.create.request.v2 version: 2.0.0 id: relay.merchant.create.request.v2 --- Create a Relay merchant request --- name: relay.merchant.deactivate.request.v2 version: 2.0.0 id: relay.merchant.deactivate.request.v2 --- Deactivate a Relay merchant request --- name: relay.merchant.update.request.v2 version: 2.0.0 id: relay.merchant.update.request.v2 --- Update a Relay merchant request --- name: relay.notificationconfiguration.create.request.v2 version: 2.0.0 id: relay.notificationconfiguration.create.request.v2 --- Create a Relay notification configuration request --- name: relay.notificationconfiguration.delete.request.v2 version: 2.0.0 id: relay.notificationconfiguration.delete.request.v2 --- Delete a Relay notification configuration request --- name: relay.notificationconfiguration.update.request.v2 version: 2.0.0 id: relay.notificationconfiguration.update.request.v2 --- Update a Relay notification configuration request --- name: relay.payment.authorize.request.v2 version: 2.0.0 id: relay.payment.authorize.request.v2 --- Authorize an APM payment request --- name: relay.payment.cancel.request.v2 version: 2.0.0 id: relay.payment.cancel.request.v2 --- Cancel an APM payment request --- name: relay.payment.capture.request.v2 version: 2.0.0 id: relay.payment.capture.request.v2 --- Authorize an APM payment request --- name: relay.payment.charge.request.v2 version: 2.0.0 id: relay.payment.charge.request.v2 --- Charge an APM payment request --- name: relay.payment.refund.request.v2 version: 2.0.0 id: relay.payment.refund.request.v2 --- Refund an APM payment request --- name: ReleaseReservationCommand version: 1.0.0 summary: Command to release a previously made reservation in a merchant account schemaPath: "./schema.json" x-tags: - label: 'broker: Axon' - label: 'javaType: eu.nets.ms.collecting.command.accounting.v1.ReleaseReservationCommand' - label: 'aggregate: MerchantAccount' owners: - easy-collecting id: ReleaseReservationCommand badges: - content: Collecting backgroundColor: green textColor: white - content: MerchantAccountAggregate backgroundColor: yellow textColor: white x-entities: - id: merchant-account-entity --- # ReleaseReservationCommand Releases a previously held reservation on a merchant account, typically as part of the refund confirmation process. ## Schema ## Purpose This command releases funds that were previously reserved for a potential refund, making them available again in the merchant's account balance. It's executed when a refund is confirmed or when a reservation expires. ## Key Attributes - **Account ID**: Merchant account aggregate identifier - **Transaction ID**: Unique identifier for the transaction being released - **Amount**: Amount to be released from reservation - **Currency**: Currency of the reserved amount - **Reservation Reference**: Reference to the original reservation ## Business Rules - Reservation must exist for the specified transaction - Amount must match the originally reserved amount - Currency must match the account currency - Only active reservations can be released - Account balance is updated to reflect the released amount ## Usage Scenarios - **Refund Confirmation**: When a refund is successfully processed - **Reservation Expiry**: When a reservation times out without confirmation - **Manual Release**: Administrative action to release stuck reservations - **Failed Refund**: When refund processing fails and funds need to be released ## Result When successful, this command produces a `ReservationReleasedEvent` and updates the merchant account balance by releasing the reserved funds. ## Raw Schema:./schema.json { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "title": "ReleaseReservationCommand", "description": "Command to release a previously made reservation in a merchant account", "properties": { "accountId": { "type": "object", "description": "Account identifier", "properties": { "value": { "type": "string", "format": "uuid", "description": "The unique account UUID" } }, "required": ["value"] }, "reservationId": { "type": "object", "description": "Reservation identifier", "properties": { "value": { "type": "string", "format": "uuid", "description": "The unique reservation UUID to release" } }, "required": ["value"] }, "reason": { "type": "string", "description": "Reason for releasing the reservation", "example": "Transaction completed" } }, "required": ["accountId", "reservationId"], "additionalProperties": false } --- name: RemovePendingRefundCommand version: 1.0.0 summary: Command to remove a pending refund from the eligible refunds list x-tags: - label: 'broker: Axon' - label: 'javaType: eu.nets.ms.collecting.command.accounting.v1.RemovePendingRefundCommand' - label: 'aggregate: MerchantAccount' owners: - easy-collecting id: RemovePendingRefundCommand badges: - content: Collecting backgroundColor: green textColor: white - content: MerchantAccountAggregate backgroundColor: yellow textColor: white x-entities: - id: merchant-account-entity schemaPath: "./schema.json" --- # RemovePendingRefundCommand Removes a pending refund from the eligible refunds tracking when it's no longer needed for automatic authorization. ## Schema ## Purpose This command removes a managed transaction from the eligible pending refunds map, typically when the refund has been processed, cancelled, or is no longer eligible for automatic authorization. ## Key Attributes - **ID**: Merchant account aggregate identifier - **Managed Transaction ID**: Unique identifier for the managed transaction to remove ## Business Rules - Only removes the refund if it exists in the eligible refunds map - Used when refunds are processed manually or become ineligible ## Result Produces a `RemovePendingRefundEvent` when the managed transaction exists in the map. ## Raw Schema:./schema.json { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "title": "RemovePendingRefundCommand", "description": "Command to remove a pending refund from the eligible refunds list", "properties": { "accountId": { "type": "object", "description": "Account identifier", "properties": { "value": { "type": "string", "format": "uuid", "description": "The unique account UUID" } }, "required": ["value"] }, "pendingRefundId": { "type": "object", "description": "Pending refund identifier", "properties": { "value": { "type": "string", "format": "uuid", "description": "The unique pending refund UUID" } }, "required": ["value"] }, "reason": { "type": "string", "description": "Reason for removing the pending refund", "example": "Refund processed successfully" } }, "required": ["accountId", "pendingRefundId"], "additionalProperties": false } --- name: ReservationCommand version: 1.0.0 summary: Command to reserve an amount in a merchant account for future transactions x-tags: - label: 'broker: Axon' - label: 'javaType: eu.nets.ms.collecting.command.accounting.v1.ReservationCommand' - label: 'aggregate: MerchantAccount' owners: - easy-collecting id: ReservationCommand badges: - content: Collecting backgroundColor: green textColor: white - content: MerchantAccountAggregate backgroundColor: yellow textColor: white x-entities: - id: merchant-account-entity schemaPath: "./schema.json" --- # ReservationCommand Creates a reservation on a merchant account as part of the refund authorization process, ensuring sufficient funds are available for the potential refund. ## Schema ## Purpose This command verifies the merchant's balance and reserves the specified amount for a potential refund. The reservation ensures that funds are held and available when the refund is confirmed, preventing insufficient balance issues during refund processing. ## Key Attributes - **Account ID**: Merchant account aggregate identifier - **Transaction ID**: Unique identifier for the transaction requiring reservation - **Amount**: Amount to be reserved for the potential refund - **Currency**: Currency of the reservation amount - **Refund Reference**: Reference to the refund request requiring the reservation - **Expiry Date**: Optional expiration date for the reservation ## Business Rules - Account must have sufficient available balance for the reservation - Currency must match the merchant account currency - Amount must be positive and greater than zero - Only one active reservation per transaction ID is allowed - Reservations reduce available balance but don't affect total balance - Expired reservations are automatically released ## Reservation Process 1. **Balance Verification**: Check if sufficient funds are available 2. **Amount Reservation**: Hold the specified amount from available balance 3. **Tracking**: Record reservation details for future release or confirmation 4. **Event Generation**: Produce AmountReservedEvent upon successful reservation ## Usage Scenarios - **Refund Authorization**: Initial step in refund processing workflow - **Pre-authorization**: Holding funds before final refund confirmation - **Risk Management**: Ensuring funds availability for disputed transactions - **Balance Management**: Temporary allocation of funds for pending operations ## Result When successful, this command produces an `AmountReservedEvent` and updates the merchant account to reflect the reserved amount, reducing available balance while maintaining total balance. ## Raw Schema:./schema.json { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "title": "ReservationCommand", "description": "Command to reserve an amount in a merchant account", "properties": { "accountId": { "type": "object", "description": "Account identifier", "properties": { "value": { "type": "string", "format": "uuid", "description": "The unique account UUID" } }, "required": ["value"] }, "reservationId": { "type": "object", "description": "Reservation identifier", "properties": { "value": { "type": "string", "format": "uuid", "description": "The unique reservation UUID" } }, "required": ["value"] }, "amount": { "type": "integer", "minimum": 0, "description": "Amount to reserve (in smallest currency unit, e.g., 25000 = 250.00)", "example": 25000 }, "currency": { "type": "string", "pattern": "^[A-Z]{3}$", "description": "Currency of the reservation (ISO 4217)", "example": "EUR" }, "accountType": { "type": "string", "description": "Type of account for the reservation", "example": "MerchantDebt" }, "reference": { "type": "string", "description": "External reference for the reservation", "example": "refund-prep-67890" } }, "required": ["accountId", "reservationId", "amount", "currency", "accountType"], "additionalProperties": false } --- name: settlementConfiguration.assign.request.v1 version: 1.1.0 id: settlementConfiguration.assign.request.v1 --- Exchange: --- name: settlementConfiguration.assign.response.v1 version: 1.0.0 id: settlementConfiguration.assign.response.v1 --- Exchange: --- name: testAccount.create.request.v1 version: 1.1.0 id: testAccount.create.request.v1 --- Exchange: Creates a new test account in Easy. A merchant is created and a portal user. --- name: testAccount.create.response.v1 version: 1.1.0 id: testAccount.create.response.v1 --- Exchange: --- name: transactionFee.calculate.request.v1 version: 1.3.0 x-tags: - label: 'exchange: pm' - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Requests.TransactionFee.TransactionFeeCalculateRequest' id: transactionFee.calculate.request.v1 --- Exchange: pm --- name: transactionFee.calculate.response.v1 version: 1.2.0 x-tags: - label: 'broker: rabbitmq' - label: 'dotnetType: Nets.Easy.Messages.V1.Responses.TransactionFee.TransactionFeeCalculateResponse' id: transactionFee.calculate.response.v1 --- Exchange: pm --- name: UpdateEligiblePendingRefundsArmCommand version: 1.0.0 summary: Command to update the eligibility status for pending refunds based on available balance schemaPath: "./schema.json" x-tags: - label: 'broker: Axon' - label: 'javaType: eu.nets.ms.collecting.command.accounting.v1.UpdateEligiblePendingRefundsArmCommand' - label: 'aggregate: MerchantAccount' owners: - easy-collecting id: UpdateEligiblePendingRefundsArmCommand badges: - content: Collecting backgroundColor: green textColor: white - content: MerchantAccountAggregate backgroundColor: yellow textColor: white x-entities: - id: merchant-account-entity --- # UpdateEligiblePendingRefundsArmCommand Arms a pending refund eligibility trigger that will automatically authorize refunds when sufficient balance is available. ## Schema ## Purpose This command sets up automatic refund authorization by tracking eligible pending refunds and their required amounts. When the account balance becomes sufficient, eligible refunds are automatically scheduled for authorization. ## Key Attributes - **ID**: Merchant account aggregate identifier - **Amount**: Required amount for the refund - **Managed Transaction ID**: Unique identifier for the managed transaction ## Business Rules - Tracks refunds that are eligible for automatic authorization - Refunds are authorized when cumulative balance allows - Uses a first-in-first-out approach for refund authorization ## Result Produces an `UpdateEligiblePendingRefundsArmedEvent` when successful. ## Raw Schema:./schema.json { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "title": "UpdateEligiblePendingRefundsArmCommand", "description": "Command to update the eligibility status for pending refunds based on available balance", "properties": { "accountId": { "type": "object", "description": "Account identifier", "properties": { "value": { "type": "string", "format": "uuid", "description": "The unique account UUID" } }, "required": ["value"] }, "availableBalance": { "type": "integer", "description": "Available balance for refund eligibility calculation (in smallest currency unit, e.g., 150000 = 1500.00)", "example": 150000 }, "currency": { "type": "string", "pattern": "^[A-Z]{3}$", "description": "Currency of the balance (ISO 4217)", "example": "EUR" } }, "required": ["accountId", "availableBalance", "currency"], "additionalProperties": false } --- name: UpdateLedgerIdCommand version: 1.0.0 summary: Command to update the ledger ID reference for a merchant account x-tags: - label: 'broker: Axon' - label: 'javaType: eu.nets.ms.collecting.command.accounting.v1.UpdateLedgerIdCommand' - label: 'aggregate: MerchantAccount' owners: - easy-collecting id: UpdateLedgerIdCommand badges: - content: Collecting backgroundColor: green textColor: white - content: MerchantAccountAggregate backgroundColor: yellow textColor: white x-entities: - id: merchant-account-entity schemaPath: "./schema.json" --- # UpdateLedgerIdCommand Updates the account definition IDs in an existing merchant account ledger structure. ## Schema ## Purpose This command enables migration of account definitions by updating the mapping between old and new account definition IDs while preserving balances and transaction history. ## Key Attributes - **ID**: Merchant account aggregate identifier - **Old And New Account Definition Ids Map**: Mapping of old account IDs to new account IDs ## Business Rules - Map size must match the number of accounts in the ledger - All old account IDs must exist in the current ledger - Validates that all existing accounts are being migrated ## Result Produces a `LedgerIdUpdatedEvent` when successful. ## Raw Schema:./schema.json { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "title": "UpdateLedgerIdCommand", "description": "Command to update the ledger ID reference for a merchant account", "properties": { "accountId": { "type": "object", "description": "Account identifier", "properties": { "value": { "type": "string", "format": "uuid", "description": "The unique account UUID" } }, "required": ["value"] }, "ledgerId": { "type": "object", "description": "Ledger identifier", "properties": { "value": { "type": "string", "format": "uuid", "description": "The unique ledger UUID" } }, "required": ["value"] } }, "required": ["accountId", "ledgerId"], "additionalProperties": false } --- name: user.create.request.v1 version: 1.2.0 id: user.create.request.v1 --- Exchange: merchant --- name: GetEligibleTransactions version: 1.0.0 summary: Re x-tags: - label: 'broker: Axon' - label: 'javaType: eu.nets.ms.collecting.query.transaction.v1.rq.EligibleTransactionsQuery' owners: - easy-collecting id: GetEligibleTransactions badges: - content: Collecting backgroundColor: green textColor: white --- The `GetEligibleTransactions` message is an `EligibleTransactionsQuery` used to retrieve eligible transactions for a remittance order. The response is provided as an `EligibleTransactionsResponse`. --- name: relay.enrollment.get.query.v2 version: 2.0.0 summary: Get Relay Enrollment owners: - relay-apm id: relay.enrollment.get.query.v2 --- Get Relay Enrollment Details --- name: relay.merchant.get.query.v2 version: 2.0.0 summary: Get Relay Merchant owners: - relay-apm id: relay.merchant.get.query.v2 --- Get Relay Merchant details --- name: relay.notificationconfiguration.get.query.v2 version: 2.0.0 summary: Get Relay Notification Configuration owners: - relay-apm id: relay.notificationconfiguration.get.query.v2 --- Get Relay Notification Configuration Details --- name: relay.payment.getoperationssummary.query.v2 version: 2.0.0 summary: Get Relay Payment Operations Summary owners: - relay-apm id: relay.payment.getoperationssummary.query.v2 --- Get Relay Payment details --- name: relay.payment.getsummary.query.v2 version: 2.0.0 summary: Get Relay Payment Summary owners: - relay-apm id: relay.payment.getsummary.query.v2 --- Get Relay Payment details --- name: AML id: aml version: 1.0.0 summary: No summary owners: - easy-sap sends: [] receives: - version: 1.x.x id: merchant.approved.event.v1 - version: 2.x.x id: merchant.approved.event.v2 - version: 1.x.x id: merchant.approved.event.v3 - version: 1.x.x id: merchant.updated.event.v1 - version: 1.x.x id: payment.charge.created.event.v1 - version: 2.x.x id: payment.charge.created.event.v2 - version: 1.x.x id: payment.checkout.completed.event.v1 - version: 1.x.x id: payment.consumer.refunded.event.v1 - version: 1.x.x id: payment.created.event.v1 - version: 1.x.x id: payment.refund.initiated.event.v1 - version: 1.x.x id: payment.reservation.created.event.v1 --- Sample description of the service --- name: BackOffice id: backoffice version: 1.0.0 summary: Service that contains events related to MerchantAccountPaymentMethod badges: - content: PaymentMethod backgroundColor: blue textColor: white owners: - easy-processing sends: - version: 1.x.x id: merchantAccountPaymentMethod.arvato.changed.event.v1 - version: 1.x.x id: merchantAccountPaymentMethod.arvato.created.event.v1 - version: 1.x.x id: merchantAccountPaymentMethod.arvato.created.event.v2 - version: 1.x.x id: merchantAccountPaymentMethod.baxId.created.event.v1 - version: 1.x.x id: merchantAccountPaymentMethod.card.changed.event.v1 - version: 1.x.x id: merchantAccountPaymentMethod.dankort.configured.event.v1 - version: 1.x.x id: merchantAccountPaymentMethod.DankortTofId.created.event.v1 - version: 1.x.x id: merchantAccountPaymentMethod.DankortTofId.created.event.v2 - version: 1.x.x id: merchantAccountPaymentMethod.disabled.event.v1 - version: 1.x.x id: merchantAccountPaymentMethod.enabled.event.v1 - version: 1.x.x id: merchantAccountPaymentMethod.internal.event.v1 - version: 1.x.x id: merchantAccountPaymentMethod.steps.created.event.v1 receives: - version: 1.x.x id: merchant.account.created.event.v1 - version: 2.x.x id: merchant.account.created.event.v2 --- --- name: Checkout id: checkout version: 1.0.0 summary: No summary badges: - content: C# backgroundColor: blue textColor: white owners: - easy-checkout sends: - version: 1.x.x id: payment.created.event.v1 --- Sample description of the service --- name: CMP id: cmp version: 1.0.0 summary: Case Managment Platform badges: - content: Java backgroundColor: blue textColor: white owners: - easy-optin sends: - version: 1.x.x id: merchantApplication.created.event.v1 - version: 1.x.x id: merchantApplication.rejected.event.v1 - version: 3.x.x id: merchantApplication.riskscored.event.v3 - version: 2.x.x id: merchantApplication.approved.event.v2 receives: - version: 1.x.x id: merchantApplication.create.request.v1 specifications: - type: openapi path: casemgmt_api.yaml name: CMP API --- ## Overview CMP (Case Managment Platform) is a workflow system for handling due dilligence in merchant onboarding. From a black box perspective CMP has 2 inputs and 1 output. ![CMP Diagram 2](/catalog-images/onboarding/cmp/onboarding_cmp2.png) **Inputs**: - API - allows to create new cases and get info on their progress - UI - used by onboarding agents / escalation team / support team to handle human tasks in case automatic prorgression is not possible (e.g. due to data quality / error etc) The **output** of CMP is determined by the specific case type being processed. Currently for ECOM Onboarding it's one of 4 events: - Merchant Application Created - Merchant Application Risk Scored - Merchant Application Approved - Merchant Application Rejected See links in the side panel for event details. In addition to sending events CMP also performs the following after case is processed: - Send emails to interested parties - Call CRM document api to upload contract / email summaries End actions of case processing are fully customizable. More technical details: https://nexigroup-netsnordics.atlassian.net/wiki/spaces/MSECOMM/pages/449183751/CMP+Technical+Overview ## API CMP's api allows to: - create new cases (merchant applications) that require due dilligence checks (aml, kyc, regulatory, risk related) - check case status CMP's API is currently called directly only by Signup system. Data does not move from Signup to CMP using an event. The Signup to CMP handoff is **merchantApplication.create.request.v1**, a direct command/API call to `POST /api/cases`; it is not an event. Other external systems (CRM, Merchant Portal, Partner Portal) call Signup's API and use it as a proxy to create a case. This is because: - The mentioned systems do not have all required information for performing due dilligence and merchant needs to provide the missing parts with the help of Signup forms, - Before starting due dilligence the merchant needs to sign an initial agreement. Signup helps with this by providing esigning functionality. It is also possible for other external systems to call the CMP's api directly (bypassing Signup) although they need to provide all required data in input. Doing background checks needs to also be legally justified. API's details: https://nexigroup-netsnordics.atlassian.net/wiki/spaces/MSECOMM/pages/449183751/CMP+Technical+Overview#6.-Case-Managment-Platform-API ## EMO migration 2025 In 2024 decision was made to replace EMO running on Oracle Fusion with an open source based solution. Goals: - Lower operational cost + risk - Futureproof the solution After discussions DSL approach was selected with Spring Framework as backbone. It's widely known tech and zero license fee. Camunda was dismissed as too costly in upkeep and mantainance Azure Functions was dismissed for lack of support for human tasks. In 2025 CMP replaced EMO. CMP is functionally 1-1 equivalent with EMO. ![CMP Diagram 1](/catalog-images/onboarding/cmp/onboarding_cmp1.png) ## Node diagram ## Raw Schema:casemgmt_api.yaml openapi: 3.0.3 info: title: Case Managment Platform API version: 1.0.0 paths: /api/case-types: get: tags: - Case Type description: Returns list of all defined case types responses: "200": description: "Successful operation" content: application/json: schema: $ref: "#/components/schemas/CaseTypeList" post: tags: - Case Type description: Creates a new case type. requestBody: content: application/json: schema: $ref: "#/components/schemas/CaseType" responses: "201": description: "Successful operation" content: application/json: schema: $ref: "#/components/schemas/CaseTypeCreateResult" "400": description: "Invalid request" content: application/json: schema: $ref: "#/components/schemas/ErrorMsg" /api/case-types/{id}: get: tags: - Case Type description: Returns details for the specified case type id parameters: - name: "id" in: "path" required: true schema: type: string responses: "200": description: "Successful operation" content: application/json: schema: $ref: "#/components/schemas/CaseType" "400": description: "Invalid request" content: application/json: schema: $ref: "#/components/schemas/ErrorMsg" "404": description: "Not found" content: application/json: schema: $ref: "#/components/schemas/ErrorMsg" /api/case-types/aliases: get: tags: - Case Type Alias description: Returns all case type aliases. Aliases can be used as an alternative to case type id when creating new cases. responses: "200": description: "Successful operation" content: application/json: schema: $ref: "#/components/schemas/CaseTypeAliasList" /api/case-types/aliases/{alias}: get: tags: - Case Type Alias description: Returns the case type id associated with specified alias parameters: - name: "alias" in: "path" required: true schema: type: string responses: "200": description: "Successful operation" content: application/json: schema: $ref: "#/components/schemas/CaseTypeAlias" "404": description: "Not found" content: application/json: schema: $ref: "#/components/schemas/ErrorMsg" put: tags: - Case Type Alias description: Attaches a new case type id for the specified alias parameters: - name: "alias" in: "path" required: true schema: type: string requestBody: content: application/json: schema: $ref: "#/components/schemas/CaseTypeAliasCreateRequest" responses: "202": description: "Operation accepted" "404": description: "Not found" content: application/json: schema: $ref: "#/components/schemas/ErrorMsg" delete: tags: - Case Type Alias description: Deletes the provided case alias parameters: - name: "alias" in: "path" required: true schema: type: string responses: "202": description: "Operation accepted" "404": description: "Not found" content: application/json: schema: $ref: "#/components/schemas/ErrorMsg" /api/cases: post: tags: - Cases description: Creates a new case of the specified type. The provided input data will be processed by the CreateProcessor (if present) and then validated agains the schema as defined in case type definiton. requestBody: content: application/json: schema: $ref: '#/components/schemas/CaseCreateRequest' responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/CaseCreateResult' /api/cases/{caseId}/info: get: tags: - Cases description: Returns basic information about a case, including status and progress parameters: - name: caseId in: path required: true schema: type: string format: uuid responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/CaseInfo' /api/cases/{caseId}/data: get: tags: - Cases description: Endpoint for retrieving json data associated with a specific case. The returned data is inline with json schema as defined in the associated case type (returned by /api/cases/{caseId}/info). parameters: - name: caseId in: path required: true schema: type: string format: uuid responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/CaseData' /api/cases/search: post: tags: - Cases description: Search cases by the metadata attributes. Allows to specify result fields by providing predefined params or json paths to be executed against payload. The result fields a re defined as a map of . The can be one of 'caseSeqId' / 'state' / 'milestone' / 'stage' / 'created' / 'modified' / '$jsonPathToCaseData' requestBody: content: application/json: schema: $ref: '#/components/schemas/CaseSearchRequest' responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/CaseSearchResult' /api/action-results: post: tags: - Action Result description: Endpoint for asynchronously sending action results. When ActionExecutor returns an IN_PROGRESS status it will pause execution. The execution can be resumed using this endpoint e.g. by an external system. The execId value is available in ActionExecutor as input. requestBody: content: application/json: schema: $ref: "#/components/schemas/ActionResultRequest" responses: '202': description: successful operation '400': description: "Invalid request" content: application/json: schema: $ref: "#/components/schemas/ErrorMsg" components: schemas: CaseTypeCreateResult: type: object properties: caseTypeId: type: string format: uuid CaseType: type: object properties: name: type: string description: type: string schema: $ref: '#/components/schemas/Schema' flowDef: $ref: '#/components/schemas/Flow' createFormId: type: string description: Reference to a CustomViewProcessor implementation that will render a form in case mgmt for creating a case of this type manually. Data submitted from the form will be processed by createProcessor (if present). viewFormId: type: string description: Reference to a CaseViewProcessor implementation that will render a detailed view of a case of this type in case search results createProcessor: type: string description: Reference to a DataProcessor implementation that should be invoked when case of this type is created. This allows data transformation / enhancment. The result data should be inline with case type schema. If createProcessor is not provided initData will be passed on and directly validated against the schema. searchParams: type: object additionalProperties: type: string description: Map of search params that will be selectable as part of case search. The mapped value can be a json path that will be executed against the data sent during case creation. example: name: helloworld description: Description for a helloworld case type definition schema: id: helloworld-schema properties: name: type: string required: true flowDef: name: helloworld-flow startStep: hello steps: hello: action: std.log params: txt: Hello world! Hello $data.name! createFormId: helloworld.caseCreateForm viewFormId: helloworld.caseViewForm createProcessor: helloworld.createProcessor searchParams: name: $name CaseTypeList: type: object properties: items: type: array items: $ref: "#/components/schemas/CaseType" CaseTypeAliasCreateRequest: type: object properties: caseTypeId: type: string format: uuid CaseTypeAlias: type: object properties: alias: type: string caseTypeId: type: string format: uuid CaseTypeAliasList: type: object properties: items: type: array items: $ref: "#/components/schemas/CaseTypeAlias" CaseInfo: type: object properties: id: type: string format: uuid description: Technical case identifier seqId: type: integer description: Human readable case identifier version: type: integer description: Version of case info record typeId: type: string format: uuid description: Reference to case type schemaId: type: string format: uuid description: Reference to schema associated with a case type runId: type: string format: uuid description: Reference to flow instance associated with the case milestone: type: string description: Last achieved milestone associated with the case. Milestones are set in flow. state: $ref: "#/components/schemas/CaseState" stage: type: string description: Current stage the case is currentlyin. Stages are set in flow. created: type: string format: date-time modified: type: string format: date-time example: seqId : 972 id : 22ed60e1-8881-40a7-b314-26efc502aca1 version : 12 typeId : afb81756-fbdd-4970-a969-7596aa5ecfa1 schemaId : eb254cc4-44f6-4add-adff-5ad56ced7dbc runId : 74c22816-2bd5-48dd-85cc-82eac88d490c state : approved milestone : null stage : end created : 2025-07-08T11:40:47.507+00:00 modified : 2025-07-08T13:09:26.698+00:00 CaseData: type: object description: The json data associated with a specific case. Data needs to be inline with the schema associated with the type of this case. example: ctx: origin: api merchantLang: EN trustedSignature: false creator: signup merchantNumberExists: false organizationNumberExists: true noResponseFromMerchant: true autoCloseCase: false caseId: 41fa603a-008c-46ac-801b-b4236f235511 caseSeqId: '392' caseCreated: '2025-07-03 18:12:28' payment: swishId: null settlementDelay: 5 paymentMethods: - KLARNA - MasterCard - PAYPAL - Trustly - Vipps - Visa company: organizationNumber: '810059672' vatNumber: NO810059672 name: test dbaName: test addressLine1: test addressLine2: '' postalCode: '1234' city: oslo countryCode: NOR legalFormInternalCode: OT7 phone: '+47.41643007' invoiceEmail: aditya.raj1@external.nexigroup.com invoiceAddressLine1: test invoiceAddressLine2: '' invoicePostalCode: '1234' invoiceCity: oslo invoiceCountryCode: NOR companyDetailCorrected: false contact: name: test lastName: testt phone: '+47.67574848' email: sehla.pathan@external.nexigroup.com correlationId: 631c825c22ae68cea23dd64581457733 beneficialOwners: role: BO updatedOn: '2025-07-03 18:12:39' owners: - postalCode: '1455' personLegalIdentifier: 190920-00332 dateOfBirth: '2020-09-19' countryCode: USA ownId: '' jobTitle: Manager city: Oslo nameUpdatedForSamePerson: false confirmedByPersonLookup: false uciId: OWN30005554 confirmedByCaseHandler: true firstName: NANDASHI bvdId: '' percentageOfOwnership: 50 addressLine1: oslo confirmedByOfficialRegistry: true lastName: NANDASHI nationality: NOR prepayment: prepaymentQuestions: prepaidTurnover: null daysBetweenDeliveryAndPrepayment: null prepaidGoodsAndServices: null seasonalPrepaidTurnover: na paymentMethodsAllocation: cards: 30 invoice: null wallet: 40 averageReturn: 11 webshop: introductionType: indirect webshopLive: true webshopUrlProtocol: https name: test liveUrl: 'https://www.siteshop.com/' integrationPartner: Denmark Shop integrationPartnerEmail: partner522dkk@dibseasytest.eu integrationPartnerId: 3d66cfd29a0d4ae18cbe971d5bfe9e62 testUrl: '' testUser: '' testPass: '' salesRepresentative: '' salesPartnerName: '' mcc: '6513' mccDescPortal: Real estate agents and managers — rentals nace: '770000' advancePayment: false avgTransactionValue: low: 500 high: 1000 annualTurnover: low: 500001 high: 750000 pastYearFinancialResult: '2276' mccDesc: Real estate agents and managers — rentals productTypes: - physical_goods - services merchant: id: dfbf25de540545f790c5260008480b66 number: '100351410' pricing: priceListId: DENORNOK pricingDocumentNo: null currency: NOK fees: - name: cardCaptureFee amount: 2.2 - name: cardCaptureServiceFee amount: 2.3 - name: cardRefundFee amount: 2.5 - name: cardRefundServiceFee amount: 0 - name: invoiceCaptureFee amount: 10 - name: invoiceCaptureServiceFee amount: 2.2 - name: invoiceRefundFee amount: 2.5 - name: invoiceRefundServiceFee amount: 0 - name: installmentCaptureFee amount: 10 - name: installmentCaptureServiceFee amount: 2.2 - name: installmentRefundFee amount: 2.5 - name: installmentRefundServiceFee amount: 0 - name: vippsCaptureFee amount: 3.2 - name: vippsCaptureServiceFee amount: 2.2 - name: vippsRefundFee amount: 2.5 - name: vippsRefundServiceFee amount: 0 - name: signOnFee amount: 1990 - name: subscriptionFee amount: 349 - name: payPalCaptureFee amount: 0.5 - name: payPalRefundFee amount: 0 ultimateOwningCompany: companyDetailCorrected: false companyOwner: false sap: notes: '' lastSyncTime: '2025-07-11 07:10:59' lastSyncMsg: '' lastSyncOk: true externalCompanyInformation: country: Norge dunsNumber: '515034296' city: EIDSVÅG I ROMSDAL organizationNumber: '810059672' rating: AAA operatingStatus: '1' name: Aasen & Farstad AS legalFormCode: '500' legalFormInternalCode: OT7 addressLine1: Sjøgardsvegen 8 postalCode: '6460' naceCodes: - code: '682090' description: Utleie av egen eller leid fast eiendom ellers boardMembers: [] signature: [] financialResult: - date: '2024-12-31' result: '1659' - date: '2023-12-31' result: '1337' - date: '2022-12-31' result: '1479' updatedOn: '2025-07-03 18:12:38' errorCode: null errorDescription: null requiredDocumentsStatus: errorCode: null errorDescription: null updatedOn: '2025-07-03 18:12:39' caseHandler: name: sepat fullName: Sehla Pathan correlationId: 520b714b119d57bd912cc53470346622 financialRiskMatrix: original: finalOutcome: HIGH riskOutcomes: - checkName: ACTIVEORGNO checkInputValue: Active outcomeValue: LOW - checkName: SIGNATURE checkInputValue: test demoo outcomeValue: HIGH - checkName: RATINGPAYMENTREMARK checkInputValue: A - Strong financial performance outcomeValue: LOW - checkName: EXPECTEDTURNOVER checkInputValue: '750000' outcomeValue: LOW - checkName: PREPAYMENT checkInputValue: 'false' outcomeValue: LOW - checkName: MCC checkInputValue: '6513,RISK' outcomeValue: HIGH - checkName: NACECODE checkInputValue: '770000,RISK' outcomeValue: HIGH - checkName: AGREEMENTTYPE checkInputValue: WEB outcomeValue: HIGH - checkName: COUNTRY checkInputValue: NOR outcomeValue: LOW - checkName: AVGTRANSVALUE checkInputValue: 500-1000 NOK outcomeValue: LOW errorCode: null errorDescription: null updatedOn: '2025-07-11 07:09:08' current: finalOutcome: HIGH riskOutcomes: - checkName: ACTIVEORGNO checkInputValue: Active outcomeValue: LOW - checkName: SIGNATURE checkInputValue: test demoo outcomeValue: HIGH - checkName: RATINGPAYMENTREMARK checkInputValue: A - Strong financial performance outcomeValue: LOW - checkName: EXPECTEDTURNOVER checkInputValue: '750000' outcomeValue: LOW - checkName: PREPAYMENT checkInputValue: 'false' outcomeValue: LOW - checkName: MCC checkInputValue: '6513,RISK' outcomeValue: HIGH - checkName: NACECODE checkInputValue: '770000,RISK' outcomeValue: HIGH - checkName: AGREEMENTTYPE checkInputValue: WEB outcomeValue: HIGH - checkName: COUNTRY checkInputValue: NOR outcomeValue: LOW - checkName: AVGTRANSVALUE checkInputValue: 500-1000 NOK outcomeValue: LOW errorCode: null errorDescription: null updatedOn: '2025-07-11 07:09:08' riskCheck: checks: - value: RC19 label: Should the application be rejected according to a match in decline list? comments: '' - value: RC20 label: Should the application be escalated according to the onboarding policy? comments: '' - value: RC21 label: >- Is the official company information more than 3 Months old and/or is the credit rating for the company missing? comments: '' - value: RC22 label: Picture ID of signatory/signee is missing? comments: '' - value: RC23 label: The signer of the agreement is not authorised to sign? comments: '' - value: RC24 label: Does the company have any payment remarks? comments: '' - value: RC25 label: Documentation of the customer?s settlement account is missing? comments: '' - value: RC26 label: Bank account is not owned by the applying company? comments: '' - value: RC27 label: >- Must the merchant be investigated further, because of a hit in Sanctions/PEP screening? actionUser: system actionDate: '2025-07-11 07:20:00' status: approved comments: '' - value: RC28 label: Are special checks required due to high risk MCC? comments: '' - value: RC29 label: Is there adverse media to be found about the merchant/principal? comments: '' - value: RC30 label: Point of sale does not exist in Google Street View? comments: '' - value: RC31 label: Telephone number or address does not exist in public databases? comments: '' - value: RC34 label: >- Is the company an existing merchant, with any agreements? If yes, then note the Revenue for the last 12 months and number of chargebacks in EMO comment field comments: '' - value: RC35 label: >- If the merchant have credit risk exposure and needs to be escalated to Risk, is the required financial statements not collected or unavailable in credit rating? Exceptions for national administrative agencies such as municipalities and counties exist. comments: '' - value: RC40 label: Is the merchant operating as a Payment Facilitator or wallet? comments: '' - value: RC47 label: Is there a match in VMSS? status: rejected actionUser: system actionDate: '2025-07-22 13:37:27' comments: '' - value: RC48 label: Is there a match in MATCH? status: approved actionUser: system actionDate: '2025-07-11 07:20:09' comments: '' errorCode: null errorDescription: null updatedOn: '2025-07-11 07:09:08' note: '' internalCaseRejectionReason: null aml: current: assessmentId: 68709e831b92bc08dbf10291 startedOn: '2025-07-11 07:17:55' errorCode: null errorDescription: null risks: - riskElement: Nets riskFactor: >- Where does Nets operate? (i.e. which entity/entities have contracts with the customer?) riskFactorName: LEGALCOUNTRY inputValue: Norway riskAMLInputValue: 'NO' riskRating: LOW riskScore: '5' riskAccepted: false riskAcceptedOptionId: '' riskAcceptedOptions: - id: RF1-OPT-1 rating: ULTRA_HIGH score: 30 name: 'EDD completed: Acceptable' - id: RF1-OPT-2 rating: PROHIBITED score: null name: 'EDD completed: Not acceptable/prohibited' - id: RF1-OPT-3 rating: ULTRA_HIGH score: 30 name: 'EDD completed: Risk accepted by Compliance' - riskElement: Nets riskFactor: Which Nets licence is used with the customer? riskFactorName: LICENCETYPE inputValue: Norway riskAMLInputValue: DOMESTIC_LICENCE riskRating: LOW riskScore: '5' riskAccepted: false riskAcceptedOptionId: null - riskElement: Introduction risk riskFactor: Customer introduction channel riskFactorName: INTROTYPE inputValue: Indirect 3rd Party riskAMLInputValue: KNOWN_3RD_PARTY_PARTNER riskRating: MEDIUM riskScore: '10' riskAccepted: false riskAcceptedOptionId: null - riskElement: Service riskFactor: Customer's services with Nets? riskFactorName: SERVICES inputValue: Web riskAMLInputValue: Acquiring++ riskRating: HIGH riskScore: '15' riskAccepted: false riskAcceptedOptionId: null - riskElement: Product Distribution riskFactor: Customer's products with Nets? riskFactorName: PRODUCT inputValue: Web riskAMLInputValue: ONLINE_POS riskRating: HIGH riskScore: '15' riskAccepted: false riskAcceptedOptionId: null - riskElement: Customer riskFactor: Customer's company type? riskFactorName: COMPANYTYPE inputValue: 500 - Limited company riskAMLInputValue: '500' riskRating: MEDIUM riskScore: '10' riskAccepted: false riskAcceptedOptionId: '' riskAcceptedOptions: - id: RF6-OPT-1 rating: HIGH score: 15 name: Onboarding - Clarified Company Type & Completed EDD - id: RF6-OPT-2 rating: PROHIBITED score: null name: >- Onboarding - could not clarify company type or remains Unacceptable - riskElement: Customer riskFactor: Have the BO's been Verified riskFactorName: COMPANYOFFICERS inputValue: 'Yes' riskAMLInputValue: 'true' riskRating: LOW riskScore: '5' riskAccepted: false riskAcceptedOptionId: '' riskAcceptedOptions: - id: RF7-OPT-1 rating: LOW score: 5 name: BO Verified - by Onboarding - id: RF7-OPT-2 rating: MEDIUM score: 10 name: Exemption given - by Compliance (AML Risk Accepted) - id: RF7-OPT-3 rating: PROHIBITED score: null name: Exemption NOT given - by Compliance (AML Risk NOT Accepted) - riskElement: Customer riskFactor: Sanction/PEP Screening riskFactorName: COMPANYANDCOMPANYOFFICERS inputValue: NO810059672 riskAMLInputValue: Manual actions in BVD required riskRating: UNACCEPTABLE riskScore: null riskAccepted: false riskAcceptedOptionId: '' riskAcceptedOptions: - id: RF8-OPT-1 rating: LOW score: 5 name: False positive - id: RF8-OPT-2 rating: MEDIUM score: 10 name: Former PEP more than 12 months - id: RF8-OPT-3 rating: HIGH score: 30 name: True PEP - Low Influence - id: RF8-OPT-4 rating: ULTRA_HIGH score: 161 name: True PEP - Compliance Approved - id: RF8-OPT-5 rating: ULTRA_HIGH score: 161 name: True Enforcement - Compliance Approved - id: RF8-OPT-6 rating: ULTRA_HIGH score: 161 name: True Sanctions - Compliance Approved - id: RF8-OPT-7 rating: ULTRA_HIGH score: 161 name: Adverse Media - Compliance Approved - id: RF8-OPT-8 rating: ULTRA_HIGH score: 161 name: Former PEP within 12 months - Compliance Approved - id: RF8-OPT-9 rating: ULTRA_HIGH score: 161 name: Enhanced monitoring - Compliance Approved - id: RF8-OPT-10 rating: PROHIBITED score: null name: Compliance rejected - id: RF8-OPT-11 rating: PROHIBITED score: null name: Compliance rejected - Sanctions - riskElement: Customer riskFactor: Company's registration country? riskFactorName: REGISTEREDCOUNTRY inputValue: Norway riskAMLInputValue: 'NO' riskRating: LOW riskScore: '5' riskAccepted: false riskAcceptedOptionId: '' riskAcceptedOptions: - id: RF9-OPT-1 rating: ULTRA_HIGH score: 30 name: 'EDD completed: Acceptable' - id: RF9-OPT-2 rating: PROHIBITED score: null name: 'EDD completed: Not acceptable/prohibited' - id: RF9-OPT-3 rating: ULTRA_HIGH score: 30 name: 'EDD completed: Risk accepted by Compliance' - riskElement: Customer riskFactor: Company's operation country? riskFactorName: OPERATINGCOUNTRY inputValue: Norway riskAMLInputValue: 'NO' riskRating: LOW riskScore: '5' riskAccepted: false riskAcceptedOptionId: '' riskAcceptedOptions: - id: RF10-OPT-1 rating: ULTRA_HIGH score: 30 name: 'EDD completed: Acceptable' - id: RF10-OPT-2 rating: PROHIBITED score: null name: 'EDD completed: Not acceptable/prohibited' - id: RF10-OPT-3 rating: ULTRA_HIGH score: 30 name: 'EDD completed: Risk accepted by Compliance' - riskElement: Customer riskFactor: Country of BO/BOs? riskFactorName: CUSTOMERBOCOUNTRY inputValue: NOR riskAMLInputValue: 'NO' riskRating: LOW riskScore: '5' riskAccepted: false riskAcceptedOptionId: '' riskAcceptedOptions: - id: RF11-OPT-1 rating: ULTRA_HIGH score: 30 name: 'EDD completed: Acceptable' - id: RF11-OPT-2 rating: PROHIBITED score: null name: 'EDD completed: Not acceptable/prohibited' - id: RF11-OPT-3 rating: ULTRA_HIGH score: 30 name: 'EDD completed: Risk accepted by Compliance' - riskElement: Customer riskFactor: Customer's offered services/products? riskFactorName: INDUSTRYNACEMCC inputValue: '6513' riskAMLInputValue: '6513' riskRating: HIGH riskScore: '15' riskAccepted: false riskAcceptedOptionId: null - riskElement: Customer riskFactor: Customer's type of operation (type of sales)? riskFactorName: ENDDELIVERYCHANNEL inputValue: Web riskAMLInputValue: eComm/Online Only riskRating: HIGH riskScore: '15' riskAccepted: false riskAcceptedOptionId: null - riskElement: Transaction riskFactor: Value (total merchant card turnover) riskFactorName: VALUE inputValue: '500001-750000,NOK' riskAMLInputValue: '625000.5, NOK' riskRating: LOW riskScore: '5' riskAccepted: false riskAcceptedOptionId: null - riskElement: Transaction riskFactor: ATV (Average Transaction Value) riskFactorName: ATV inputValue: 500-1000 riskAMLInputValue: '750, NOK' riskRating: MEDIUM riskScore: '10' riskAccepted: false riskAcceptedOptionId: null - riskElement: Transaction riskFactor: Volume (Number & frequency of transactions) riskFactorName: VOLUME inputValue: MCC Code - 6513 riskAMLInputValue: LM riskRating: LOW riskScore: '5' riskAccepted: false riskAcceptedOptionId: null - riskElement: Banking Method riskFactor: Customer's settlement bank? riskFactorName: SETTLEMENTBANK inputValue: 'Danske Bank,Norway' riskAMLInputValue: 'NO' riskRating: LOW riskScore: '5' riskAccepted: false riskAcceptedOptionId: '' riskAcceptedOptions: - id: RF17-OPT-3 rating: ULTRA_HIGH score: 30 name: 'EDD completed: Acceptable' - id: RF17-OPT-4 rating: PROHIBITED score: null name: 'EDD completed: Not acceptable/prohibited' - id: RF17-OPT-5 rating: ULTRA_HIGH score: 30 name: 'EDD completed: Risk accepted by Compliance' outcome: STOP score: '0' endedOn: '2025-07-11 07:19:13' original: risks: - riskElement: Nets riskFactor: >- Where does Nets operate? (i.e. which entity/entities have contracts with the customer?) riskFactorName: LEGALCOUNTRY inputValue: Norway riskAMLInputValue: 'NO' riskRating: LOW riskScore: '5' riskAccepted: false riskAcceptedOptionId: null riskAcceptedOptions: - id: RF1-OPT-1 rating: ULTRA_HIGH score: 30 name: 'EDD completed: Acceptable' - id: RF1-OPT-2 rating: PROHIBITED score: null name: 'EDD completed: Not acceptable/prohibited' - id: RF1-OPT-3 rating: ULTRA_HIGH score: 30 name: 'EDD completed: Risk accepted by Compliance' - riskElement: Nets riskFactor: Which Nets licence is used with the customer? riskFactorName: LICENCETYPE inputValue: Norway riskAMLInputValue: DOMESTIC_LICENCE riskRating: LOW riskScore: '5' riskAccepted: false riskAcceptedOptionId: null - riskElement: Introduction risk riskFactor: Customer introduction channel riskFactorName: INTROTYPE inputValue: Indirect 3rd Party riskAMLInputValue: KNOWN_3RD_PARTY_PARTNER riskRating: MEDIUM riskScore: '10' riskAccepted: false riskAcceptedOptionId: null - riskElement: Service riskFactor: Customer's services with Nets? riskFactorName: SERVICES inputValue: Web riskAMLInputValue: Acquiring++ riskRating: HIGH riskScore: '15' riskAccepted: false riskAcceptedOptionId: null - riskElement: Product Distribution riskFactor: Customer's products with Nets? riskFactorName: PRODUCT inputValue: Web riskAMLInputValue: ONLINE_POS riskRating: HIGH riskScore: '15' riskAccepted: false riskAcceptedOptionId: null - riskElement: Customer riskFactor: Customer's company type? riskFactorName: COMPANYTYPE inputValue: 500 - Limited company riskAMLInputValue: '500' riskRating: MEDIUM riskScore: '10' riskAccepted: false riskAcceptedOptionId: null riskAcceptedOptions: - id: RF6-OPT-1 rating: HIGH score: 15 name: Onboarding - Clarified Company Type & Completed EDD - id: RF6-OPT-2 rating: PROHIBITED score: null name: >- Onboarding - could not clarify company type or remains Unacceptable - riskElement: Customer riskFactor: Have the BO's been Verified riskFactorName: COMPANYOFFICERS inputValue: 'Yes' riskAMLInputValue: 'true' riskRating: LOW riskScore: '5' riskAccepted: false riskAcceptedOptionId: null riskAcceptedOptions: - id: RF7-OPT-1 rating: LOW score: 5 name: BO Verified - by Onboarding - id: RF7-OPT-2 rating: MEDIUM score: 10 name: Exemption given - by Compliance (AML Risk Accepted) - id: RF7-OPT-3 rating: PROHIBITED score: null name: Exemption NOT given - by Compliance (AML Risk NOT Accepted) - riskElement: Customer riskFactor: Sanction/PEP Screening riskFactorName: COMPANYANDCOMPANYOFFICERS inputValue: NO810059672 riskAMLInputValue: Manual actions in BVD required riskRating: UNACCEPTABLE riskScore: null riskAccepted: false riskAcceptedOptionId: null riskAcceptedOptions: - id: RF8-OPT-1 rating: LOW score: 5 name: False positive - id: RF8-OPT-2 rating: MEDIUM score: 10 name: Former PEP more than 12 months - id: RF8-OPT-3 rating: HIGH score: 30 name: True PEP - Low Influence - id: RF8-OPT-4 rating: ULTRA_HIGH score: 161 name: True PEP - Compliance Approved - id: RF8-OPT-5 rating: ULTRA_HIGH score: 161 name: True Enforcement - Compliance Approved - id: RF8-OPT-6 rating: ULTRA_HIGH score: 161 name: True Sanctions - Compliance Approved - id: RF8-OPT-7 rating: ULTRA_HIGH score: 161 name: Adverse Media - Compliance Approved - id: RF8-OPT-8 rating: ULTRA_HIGH score: 161 name: Former PEP within 12 months - Compliance Approved - id: RF8-OPT-9 rating: ULTRA_HIGH score: 161 name: Enhanced monitoring - Compliance Approved - id: RF8-OPT-10 rating: PROHIBITED score: null name: Compliance rejected - id: RF8-OPT-11 rating: PROHIBITED score: null name: Compliance rejected - Sanctions - riskElement: Customer riskFactor: Company's registration country? riskFactorName: REGISTEREDCOUNTRY inputValue: Norway riskAMLInputValue: 'NO' riskRating: LOW riskScore: '5' riskAccepted: false riskAcceptedOptionId: null riskAcceptedOptions: - id: RF9-OPT-1 rating: ULTRA_HIGH score: 30 name: 'EDD completed: Acceptable' - id: RF9-OPT-2 rating: PROHIBITED score: null name: 'EDD completed: Not acceptable/prohibited' - id: RF9-OPT-3 rating: ULTRA_HIGH score: 30 name: 'EDD completed: Risk accepted by Compliance' - riskElement: Customer riskFactor: Company's operation country? riskFactorName: OPERATINGCOUNTRY inputValue: Norway riskAMLInputValue: 'NO' riskRating: LOW riskScore: '5' riskAccepted: false riskAcceptedOptionId: null riskAcceptedOptions: - id: RF10-OPT-1 rating: ULTRA_HIGH score: 30 name: 'EDD completed: Acceptable' - id: RF10-OPT-2 rating: PROHIBITED score: null name: 'EDD completed: Not acceptable/prohibited' - id: RF10-OPT-3 rating: ULTRA_HIGH score: 30 name: 'EDD completed: Risk accepted by Compliance' - riskElement: Customer riskFactor: Country of BO/BOs? riskFactorName: CUSTOMERBOCOUNTRY inputValue: NOR riskAMLInputValue: 'NO' riskRating: LOW riskScore: '5' riskAccepted: false riskAcceptedOptionId: null riskAcceptedOptions: - id: RF11-OPT-1 rating: ULTRA_HIGH score: 30 name: 'EDD completed: Acceptable' - id: RF11-OPT-2 rating: PROHIBITED score: null name: 'EDD completed: Not acceptable/prohibited' - id: RF11-OPT-3 rating: ULTRA_HIGH score: 30 name: 'EDD completed: Risk accepted by Compliance' - riskElement: Customer riskFactor: Customer's offered services/products? riskFactorName: INDUSTRYNACEMCC inputValue: '6513' riskAMLInputValue: '6513' riskRating: HIGH riskScore: '15' riskAccepted: false riskAcceptedOptionId: null - riskElement: Customer riskFactor: Customer's type of operation (type of sales)? riskFactorName: ENDDELIVERYCHANNEL inputValue: Web riskAMLInputValue: eComm/Online Only riskRating: HIGH riskScore: '15' riskAccepted: false riskAcceptedOptionId: null - riskElement: Transaction riskFactor: Value (total merchant card turnover) riskFactorName: VALUE inputValue: '500001-750000,NOK' riskAMLInputValue: '625000.5, NOK' riskRating: LOW riskScore: '5' riskAccepted: false riskAcceptedOptionId: null - riskElement: Transaction riskFactor: ATV (Average Transaction Value) riskFactorName: ATV inputValue: 500-1000 riskAMLInputValue: '750, NOK' riskRating: MEDIUM riskScore: '10' riskAccepted: false riskAcceptedOptionId: null - riskElement: Transaction riskFactor: Volume (Number & frequency of transactions) riskFactorName: VOLUME inputValue: MCC Code - 6513 riskAMLInputValue: LM riskRating: LOW riskScore: '5' riskAccepted: false riskAcceptedOptionId: null - riskElement: Banking Method riskFactor: Customer's settlement bank? riskFactorName: SETTLEMENTBANK inputValue: 'Danske Bank,Norway' riskAMLInputValue: 'NO' riskRating: LOW riskScore: '5' riskAccepted: false riskAcceptedOptionId: null riskAcceptedOptions: - id: RF17-OPT-3 rating: ULTRA_HIGH score: 30 name: 'EDD completed: Acceptable' - id: RF17-OPT-4 rating: PROHIBITED score: null name: 'EDD completed: Not acceptable/prohibited' - id: RF17-OPT-5 rating: ULTRA_HIGH score: 30 name: 'EDD completed: Risk accepted by Compliance' outcome: STOP score: '0' startedOn: '2025-07-11 07:17:55' endedOn: '2025-07-11 07:19:13' errorCode: null errorDescription: null recalcRequested: null gcmInformation: governmentControlled: false governmentCountries: '' updatedOn: '2025-07-11 07:20:02' externalVmssCheck: vmss: checkStartDate: '2025-07-22T11:37:18.975Z' requestId: 41fa603a-008c-46ac-801b-b4236f23551120250722133716957 recalcRequested: false operatorIntervention: false riskLevel: green hitList: [] errorCode: null errorDescription: null updatedOn: '2025-07-22 13:37:27' taskId: 81147ac9-db58-4727-9601-e661fde236fe match: checkStartDate: '2025-07-11T05:20:07.089Z' requestId: 41fa603a-008c-46ac-801b-b4236f23551120250711072006989 recalcRequested: false operatorIntervention: false riskLevel: amber hitList: - hitCode: '04' addedOnDate: '2024-02-09' owners: - ownerName: value: WEFWE WEFWEF matchLevel: 'N' ownerAddress: value: 'WEFWEF,WEFWE,GBR' matchLevel: 'N' merchantName: value: TEST matchLevel: E merchantAddress: value: 'FWEF,WEFW,GBR' matchLevel: 'N' webAddresses: null - hitCode: '05' addedOnDate: '2026-06-08' owners: - ownerName: value: WFEWE WEFWEF matchLevel: 'N' ownerAddress: value: 'QEQWE,QEWQW,GBR' matchLevel: 'N' merchantName: value: TEST matchLevel: E merchantAddress: value: '23423,FERGR,GBR' matchLevel: 'N' webAddresses: null - hitCode: '13' addedOnDate: '2024-03-03' owners: - ownerName: value: TEST TEST matchLevel: 'N' ownerAddress: value: 'TEST,TEST,USA' matchLevel: 'N' merchantName: value: TEST matchLevel: E merchantAddress: value: 'TEST,TEST,USA' matchLevel: 'N' webAddresses: - value: - WWW.TESTMERCHANT.COM matchLevel: 'N' - hitCode: '04' addedOnDate: '2020-06-11' owners: - ownerName: value: 1234123 AAA matchLevel: 'N' ownerAddress: value: 'CHANGCHUN,JILIN,CHN' matchLevel: 'N' merchantName: value: TEST matchLevel: E merchantAddress: value: 'TEST,CHONG MING XIAN,CHN' matchLevel: 'N' webAddresses: null - hitCode: '13' addedOnDate: '2024-10-05' owners: - ownerName: value: DAVID SMITH matchLevel: 'N' ownerAddress: value: 'DALLAS,USA' matchLevel: 'N' merchantName: value: TEST matchLevel: E merchantAddress: value: '42 ELM AVENUE,DALLAS,USA' matchLevel: 'N' webAddresses: null - hitCode: '03' addedOnDate: '2025-10-04' owners: - ownerName: value: ANTHONY EMERY matchLevel: 'N' ownerAddress: value: 'H HABERSAATHSTRASSE,GLASGOW,GBR' matchLevel: 'N' merchantName: value: TEST matchLevel: E merchantAddress: value: 'JJJJ, LABURNUM DRIVE,ABERMEE,GBR' matchLevel: 'N' webAddresses: null - hitCode: '03' addedOnDate: '2024-04-03' owners: - ownerName: value: ANTHONY EMERY matchLevel: 'N' ownerAddress: value: 'H HABERSAATHSTRASSE,GLASGOW,GBR' matchLevel: 'N' merchantName: value: TEST matchLevel: E merchantAddress: value: 'CLAYTON STREETHJ, LABURNUM DRIVE,ABERMEE,GBR' matchLevel: 'N' webAddresses: null - hitCode: '03' addedOnDate: '2024-10-11' owners: - ownerName: value: ANTHONY EMERY matchLevel: 'N' ownerAddress: value: '144-146 DALSETTER AVENUE,GLASGOW,GBR' matchLevel: 'N' merchantName: value: TEST matchLevel: E merchantAddress: value: 'THE THOMAS BUILDING, 50, MORFA ROAD,SWANSEA,GBR' matchLevel: 'N' webAddresses: null - hitCode: '03' addedOnDate: '2024-03-09' owners: - ownerName: value: ANTHONY EMERY matchLevel: 'N' ownerAddress: value: '144-146 DALSETTER AVENUE,GLASGOW,GBR' matchLevel: 'N' merchantName: value: TEST matchLevel: E merchantAddress: value: '1, RAVENWOOD,SWADLINCOTE,GBR' matchLevel: 'N' webAddresses: null - hitCode: '14' addedOnDate: '2026-04-11' owners: - ownerName: value: '***** *****' matchLevel: 'N' ownerAddress: value: '4/F FONTAINE BLDG NO.18 MODY ROAD,TSIMSHATSUI,USA' matchLevel: 'N' merchantName: value: EVIL CORP 2 matchLevel: E merchantAddress: value: '4/F FONTAINE BUILDING NO.18 MODY ROAD,TSIMSHATSUI,USA' matchLevel: 'N' webAddresses: - value: - WWW.EVIL-CORP.COM matchLevel: 'N' errorCode: VM002 errorDescription: 'MATCH : Merchant Match' updatedOn: '2025-07-11 07:20:09' taskId: 2f06a6c4-5752-45c3-aa6d-a2e2e3d83757 escalation: SMECreditRiskManagement bankAccounts: accounts: - bankName: Danske Bank isBankNameManual: false swift: ESSENOKX bankType: Traditional iban: NO9386011117947 isManuallyAltered: false currencyCode: NOK mainAccountIdx: 0 attachments: - docId: BA3A3260A61B1FE0968543DE6EC284E0 source: EASY-SIGNUP status: '' category: DT39 uploadDate: '2025-07-03 16:23:58' comments: '' filename: signup_contract_20250703_162357.pdf - filename: signup_contract_20250711_050953.pdf docId: BA3A3260A61B1FE097C2A9023A0BC4E0 category: DT39 comments: '' source: EASY-SIGNUP uploadDate: '2025-07-11 05:09:54' status: '' - status: '' comments: '' docId: BA3A3260A61B1FE097C2AB15821F44E0 filename: ContentServerCopy.postman_collection 1.json uploadDate: '2025-07-11 05:10:22' source: MERCHANT category: DT20 - source: MERCHANT docId: BA3A3260A61B1FE097C2C20826A0C4E0 category: DT5 comments: '' status: '' uploadDate: '2025-07-11 07:15:31' filename: Content Server Copy.postman_collection 1.json authorizedSignatories: - confirmedByIdRights: false createdManually: false lastName: demoo confirmedByCaseHandler: true signeePosition: employee firstName: test CaseCreateRequest: type: object properties: caseType: format: string description: Reference to a case type id (uuid) or case type alias. Case type id allows to pinpoint a specific case type version. Alias allows to modify case types transparently to api users. initData: description: Initial data to store in the case. The data needs to be inline with case type schema (alternatively a Case Data Processor that transforms input data can be employed). example: caseType: helloworld initData: name: Adam CaseCreateResult: type: object properties: caseId: type: string format: uuid CaseSearchRequest: type: object properties: searchField: type: string searchValue: type: string caseStates: type: array items: $ref: "#/components/schemas/CaseState" resultFields: type: object example: searchField: organizationNumber searchValue: '16832634' resultFields: caseSeqId: caseSeqId orgId: $company.organizationNumber merchantId: $merchant.number CaseSearchResult: type: array items: $ref: "#/components/schemas/CaseCustomInfo" example: - caseId: 71d64404-6857-47fb-9de0-245c09ff45f8 fields: merchantId: '100218860' caseSeqId: '199' orgId: '16832634' - caseId: 752f2dfa-3cdc-4991-b2ba-0eb4aad9e2fb fields: merchantId: '100218860' caseSeqId: '198' orgId: '16832634' CaseCustomInfo: type: object properties: caseId: type: string format: uuid fields: type: object ActionResultRequest: type: object properties: execId: type: string format: uuid status: type: string enum: - COMPLETED - IN_PROGRESS - ERROR endValue: type: string required: - execId - status CaseState: type: string enum: - pending - inprogress - approved - rejected - closed Flow: type: object description: Defines the flow to be executed when a new case of this type is created properties: name: type: string desc: type: string startStep: type: string steps: type: object additionalProperties: $ref: '#/components/schemas/FlowStep' FlowStep: type: object properties: fork: type: boolean description: Should the step start a parallel execution of all outgoing paths join: type: boolean description: Should the step wait for all incoming paths action: type: string description: Reference to ActionExecutor implementation to be invoked as part of this step. saveResAs: type: string description: Name of the variable that should keep the action execution result. The variable can be later referenced in other places as $var) params: type: object additionalProperties: type: string nextStep: type: string description: Points to next steps to be executed. Alternatively nextSteps can be used. nextSteps: type: array items: $ref: '#/components/schemas/FlowNextStep' description: Defines possible next steps that are evaluated based on the action result. If there's only 1 path use nextStep instead. FlowNextStep: type: object properties: nextStep: type: string eval: type: string wait: type: string Schema: type: object description: Defines the syntax of case data to be stored and validated against properties: id: type: string description: type: string properties: type: object additionalProperties: $ref: '#/components/schemas/Property' definitions: type: object additionalProperties: $ref: '#/components/schemas/Property' Property: type: object properties: description: description: "A base type (string/boolean/decimal/integer/object) or a reference to definition (e.g. #mydef)" type: string enum: - string - boolean - decimal - integer - object type: type: string required: type: boolean array: type: boolean properties: type: object description: Map of String->Property type. Wasn't mapped to /components/schemas/Property because of Openapi 3 problem ErrorMsg: type: object properties: status: type: integer message: type: string timestamp: type: string format: date-time --- name: Collecting Accounting id: collecting-accounting version: 1.0.0 summary: Core accounting service managing financial transactions, merchant accounts, and platform configurations using double-entry bookkeeping principles badges: - content: Java backgroundColor: blue textColor: white - content: Collecting backgroundColor: green textColor: white owners: - easy-collecting sends: - id: AccountCreatedEvent - id: AccountDefinitionAddedEvent - id: LedgerIdUpdatedEvent - id: AmountReservedEvent - id: ReservationReleasedEvent - id: TransactionPostedEvent - id: PlatformCreatedEvent - id: UpdateEligiblePendingRefundsArmedEvent - id: RemovePendingRefundEvent - id: ScheduleAuthorizeForEligibleRefundsEvent - id: BalanceUpdatedEvent receives: - id: merchant.created.event.v1 version: 1.x.x - id: merchant.account.created.event.v1 version: 1.x.x - id: merchant.account.created.event.v2 version: 2.x.x - id: merchant.account.created.event.v3 version: 3.x.x - id: merchant.approved.event.v1 version: 1.x.x - id: merchant.approved.event.v2 version: 2.x.x - id: merchant.approved.event.v3 version: 3.x.x - id: merchantAccountPaymentMethod.DankortTofId.created.event.v2 version: 1.x.x - id: payment.charge.created.event.v1 version: 1.x.x - id: payment.charge.created.event.v2 version: 2.x.x - id: payment.charge.feeAdded.event.v1 version: 1.x.x - id: transactionFee.calculated.event.v1 version: 1.x.x - id: CreateAccountCommand - id: AddAccountDefinitionCommand - id: UpdateLedgerIdCommand - id: ReservationCommand - id: ReleaseReservationCommand - id: PostTransactionCommand - id: PostTransactionViaCommand - id: BalanceNotificationArmCommand - id: UpdateEligiblePendingRefundsArmCommand - id: RemovePendingRefundCommand - id: PlatformCreateCommand entities: - id: platform-entity - id: merchant-account-entity - id: chart-of-accounts-entity - id: bookkeeping-config-entity - id: posting-rule-entity - id: transaction-definition-entity - id: account-definition-entity --- The Accounting Service serves as the backbone for managing the organization's financial transactions, ensuring precision, transparency, and compliance with financial best practices. It is built on a robust accounting engine capable of double-entry bookkeeping, a method that provides accurate and reliable tracking of all assets and liabilities. This capability enables the organization to maintain a clear and comprehensive view of its financial health, fostering informed decision-making. **Merchant Account Aggregates:**

The service creates and manages aggregates for each merchant account, handling multiple balance accounts such as:

- MerchantDebt - ClientFunds - PSPReceivable - Escrow - Caps - Revenue **Transaction Management:**

For every payment action, fee, or remittance, the service records transactions using specific transaction types:

- CHARGE - FEE_ADDED - REFUND - CHARGEBACK - TOPUP - RESERVE_REMITTANCE - RESERVE_CANCEL - REMIT_RESERVED - REMITTANCE - REVERSE_REMITTANCE - CAPS_REMITTANCE - REVERSE_CAPS_REMITTANCE - ADJUSTMENT_DEBIT - ADJUSTMENT_CREDIT - SCHEME_FEE **Refund Management:**

During a successful authorization for a refund, the service reserves the corresponding amount. The reservation is held until the refund is confirmed, after which it is released. By managing these complex operations with a high degree of accuracy, the Accounting Service provides the tools necessary for businesses to monitor and control their financial operations while maintaining compliance with industry standards.

## Entity Relationships This section shows the relationships between all entities in the AccountingAndTreasury domain. ### Entity Overview The AccountingAndTreasury domain contains 7 key entities organized into two categories: ### Core Entities - **MerchantAccount** - Individual account records with IBAN, BIC, and currency details - **Platform** - Payment platform configurations with account holder associations ### Configuration Entities - **ChartOfAccounts** - High-level account structure definitions - **AccountDefinition** - Individual account types within charts (e.g., MerchantDebt, PSPReceivable) - **BookKeepingConfig** - Configuration linking charts to transaction processing rules - **TransactionDefinition** - Specific transaction types (CHARGE, REFUND, etc.) - **PostingRule** - Double-entry bookkeeping rules linking transactions to accounts ### Database Foreign Key Relationships The entities are connected through the following database relationships: ```mermaid erDiagram CHART_OF_ACCOUNTS ||--o{ ACCOUNT_DEFINITION : contains CHART_OF_ACCOUNTS ||--o{ BOOKKEEPING_CONFIG : references BOOKKEEPING_CONFIG ||--o{ TRANSACTION_DEFINITION : contains TRANSACTION_DEFINITION ||--o{ POSTING_RULE : defines ACCOUNT_DEFINITION ||--o{ POSTING_RULE : defines CHART_OF_ACCOUNTS { int id PK string name string description } ACCOUNT_DEFINITION { long id PK string name int type int chart_of_accounts_fk FK } BOOKKEEPING_CONFIG { int id PK string name int chart_of_accounts_fk FK } TRANSACTION_DEFINITION { int id PK string name int bookkeeping_config_fk FK } POSTING_RULE { int id PK string sign int account_definition_fk FK int transaction_definition_fk FK } PLATFORM { string platform_id PK string platform_name int version string account_holder_id } MERCHANT_ACCOUNT { uuid id PK uuid owner_id string currency decimal delay string country string iban string bic } ``` ### Key Relationships Summary - **AccountDefinition** → belongs to **ChartOfAccounts** (via CHART_OF_ACCOUNTS_FK) - **BookKeepingConfig** → references **ChartOfAccounts** (via CHART_OF_ACCOUNTS_FK) - **TransactionDefinition** → belongs to **BookKeepingConfig** (via BOOKKEEPING_CONFIG_FK) - **PostingRule** → references **AccountDefinition** (via ACCOUNT_DEFINITION_FK) - **PostingRule** → references **TransactionDefinition** (via TRANSACTION_DEFINITION_FK) - **Platform** → associated with account holders (via account_holder_id) --- name: Collecting Balance id: collecting-balance version: 1.0.0 summary: No summary badges: - content: Java backgroundColor: blue textColor: white - content: Collecting backgroundColor: green textColor: white owners: - easy-collecting receives: - id: TransactionPostedEvent - id: GetEligibleTransactions sends: - version: 1.x.x id: accountDeposit.created.event.v1 - version: 1.x.x id: merchantAccountTopup.created.event.v1 - version: 1.x.x id: merchantBalance.updated.event.v1 - version: 1.x.x id: merchantLedger.transactionPosted.event.v1 --- The Balance Service is responsible for managing and maintaining the daily balances and transaction data. It plays a critical role in tracking and reconciling financial activities to ensure accuracy and reliability in the system's overall financial management. **Manages balances for multiple account types, including:** - MerchantDebt - ClientFunds - PSPReceivable - Escrow - Caps - Revenue - Diff - Cost --- name: Collecting Refund Authorization id: collecting-refundauth version: 1.0.0 summary: No summary badges: - content: Java backgroundColor: blue textColor: white - content: Collecting backgroundColor: green textColor: white owners: - easy-collecting sends: - version: 1.x.x id: refundAuthorization.accepted.event.v1 - version: 1.x.x id: refundAuthorization.canceled.event.v1 - version: 1.x.x id: refundAuthorization.confirmed.event.v1 - version: 1.x.x id: refundAuthorization.expired.event.v1 - version: 1.x.x id: refundAuthorization.pending.event.v1 - id: ReservationCommand receives: - version: 1.x.x id: payment.refund.initiated.event.v1 - version: 2.x.x id: payment.refund.initiated.event.v2 - version: 1.x.x id: payment.refund.feeAdded.event.v1 - version: 1.x.x id: transactionFee.calculated.event.v1 - version: 1.x.x id: refundAuthorization.create.request.v1 - version: 1.x.x id: refundAuthorization.cancel.request.v1 - version: 1.x.x id: refundAuthorization.confirm.request.v1 --- The RefundAuthorisation Service is responsible for orchestrating the refund authorization process. It ensures that refunds are handled efficiently and that all necessary conditions are met before finalizing any refund action. **Initial Workflow:** - The service listens for Refund and Refund Fee events. - It interacts with the Accounting Service to attempt creating a reservation. **Event Handling:** - If the reservation is successfully created (balance is sufficient), it produces an Authorised event. - If the reservation cannot be created (insufficient balance), it produces a Pending event. **Pending State Handling:** - Refunds in the Pending state have a maximum lifespan of 120 days. - If no further action occurs within this period, the service produces an Expired event. **Cancel Requests:** - While in the Pending state, the service listens for Cancel requests. - Upon receiving such a request, it produces a Cancelled event. **Authorisation Confirmation:** - After authorisation, the service waits for a Confirmation Request. - Upon receiving confirmation, it produces a Confirmed event. This service plays a critical role in ensuring that refund transactions are processed securely and transparently while accommodating various scenarios like insufficient balance, cancellation, or expiry. --- name: Collecting Settlement id: collecting-settlement version: 1.0.0 summary: No summary badges: - content: Java backgroundColor: blue textColor: white - content: Collecting backgroundColor: green textColor: white owners: - easy-collecting sends: - id: GetEligibleTransactions - version: 2.x.x id: settlement.created.event.v2 - version: 1.x.x id: settlement.transactions.added.event.v1 - version: 2.x.x id: settlement.confirmed.event.v2 - version: 1.x.x id: settlement.cancelled.event.v1 - version: 1.x.x id: settlementConfiguration.assigned.event.v1 --- The Settlement Service is a critical component responsible for managing the settlement process for APM transactions and all fees. It ensures that eligible transactions are correctly ordered and processed based on the remittance delays defined by the Payment Method Provider. **Transaction Ordering:** - Identifies APM transactions and APM/Card fees eligible for settlement based on the remittance delay. - Groups eligible transactions by currency, creating one order file per currency. **File Generation and Upload:** - Generates XML files containing the ordered transactions for all merchants. - Uploads the order files to the designated SFTP server for further processing by CAPS. **Remittance Report Processing:** - Handles RemittanceReports received from CAPS via SFTP. - Processes these reports through a dedicated batch job, ensuring accurate reconciliation of remittances. --- name: Common Pricing Service id: cps version: 1.0.0 summary: Single source of truth for price lists used by Signup and Techopt owners: - easy-optin sends: [] receives: - version: 1.x.x id: priceList.updated.event.v1 --- ## Overview CPS (Common Pricing Service) is the single source of truth for price lists used by Signup and Techopt. CPS listenes on priceList.updated.event.v1 events and makes the information about price lists available to signup and techopt via REST endpoints. It's also used for setting default price lists for countries and managing campaign codes. CPS is part of Signup 2.0 and replaces Signup's old Pricing Service. ## Node Graph --- name: CRM id: crm version: 1.0.0 summary: Main CRM used in ECOM (SAP) owners: - easy-sap sends: [] receives: - version: 1.x.x id: accountDeposit.created.event.v1 - version: 1.x.x id: merchant.account.created.event.v1 - version: 2.x.x id: merchant.account.created.event.v2 - version: 3.x.x id: merchant.account.created.event.v3 - version: 1.x.x id: merchant.account.deactivated.event.v1 - version: 1.x.x id: merchant.account.reactivated.event.v1 - version: 1.x.x id: merchant.account.settlementConfiguration.updated.event.v1 - version: 1.x.x id: merchant.apiKeys.created.event.v1 - version: 1.x.x id: merchant.approved.event.v1 - version: 2.x.x id: merchant.approved.event.v2 - version: 1.x.x id: merchant.approved.event.v3 - version: 1.x.x id: merchant.billingDetails.updated.event.v1 - version: 1.x.x id: merchant.contactPerson.updated.event.v1 - version: 1.x.x id: merchant.created.event.v1 - version: 1.x.x id: merchant.updated.event.v1 - version: 1.x.x id: merchantAccountPaymentMethod.arvato.changed.event.v1 - version: 1.x.x id: merchantAccountPaymentMethod.arvato.created.event.v1 - version: 1.x.x id: merchantAccountPaymentMethod.arvato.created.event.v2 - version: 1.x.x id: merchantAccountPaymentMethod.baxId.created.event.v1 - version: 1.x.x id: merchantAccountPaymentMethod.card.changed.event.v1 - version: 1.x.x id: merchantAccountPaymentMethod.created.event.v1 - version: 1.x.x id: merchantAccountPaymentMethod.dankort.configured.event.v1 - version: 1.x.x id: merchantAccountPaymentMethod.DankortTofId.created.event.v1 - version: 1.x.x id: merchantAccountPaymentMethod.DankortTofId.created.event.v2 - version: 1.x.x id: merchantAccountPaymentMethod.disabled.event.v1 - version: 1.x.x id: merchantAccountPaymentMethod.enabled.event.v1 - version: 1.x.x id: merchantAccountPaymentMethod.internal.event.v1 - version: 1.x.x id: merchantAccountPaymentMethod.steps.created.event.v1 - version: 1.x.x id: merchantApplication.approved.event.v1 - version: 2.x.x id: merchantApplication.approved.event.v2 - version: 1.x.x id: merchantApplication.created.event.v1 - version: 2.x.x id: merchantApplication.created.event.v2 - version: 1.x.x id: merchantApplication.rejected.event.v1 - version: 2.x.x id: merchantApplication.rejected.event.v2 - version: 1.x.x id: merchantApplication.riskscored.event.v1 - version: 2.x.x id: merchantApplication.riskscored.event.v2 - version: 3.x.x id: merchantApplication.riskscored.event.v3 - version: 1.x.x id: partner.allowedPriceLists.updated.event.v1 - version: 1.x.x id: partner.apiKeys.live.created.event.v1 - version: 1.x.x id: partner.apiKeys.test.created.event.v1 - version: 1.x.x id: partner.company.updated.event.v1 - version: 1.x.x id: partner.contactPerson.updated.event.v1 - version: 1.x.x id: partner.created.event.v1 - version: 1.x.x id: partner.crmPartnerId.updated.event.v1 - version: 1.x.x id: partner.defaultPermissions.updated.event.v1 - version: 1.x.x id: partner.merchantAccountPermissions.live.updated.event.v1 - version: 1.x.x id: partner.merchantAccountPermissions.test.updated.event.v1 - version: 1.x.x id: user.addedToMerchant.event.v1 - version: 1.x.x id: user.addedToPartner.event.v1 - version: 1.x.x id: user.created.event.v1 - version: 1.x.x id: user.removedFromMerchant.event.v1 --- ## Overview CRM (SAP) is the main customer managment system used in ECOM. Onboarding domain interacts with CRM's API as follows: - retrieving list of all documents related to a given merchant - downloading content of specifc document - uploading new documents provided by merchant during the onboarding process - updating merchant documents status (approved/rejected etc) - providing comments to merchant documents Additionally Onboarding domain sends 4 types of events to CRM: - Merchant Application Created - Merchant Application Risk Scored - Merchant Application Approved - Merchant Application Rejected See dedicated event pages for details. CRM is not the responsibility of Onboarding domain (Optin team). CRM is managed by a dedicated team. ## Node Graph --- name: EMO id: emo version: 1.0.0 summary: Easy Merchant Onboarding (deprecated) badges: - content: Java backgroundColor: blue textColor: white owners: - easy-optin sends: - version: 1.x.x id: merchantApplication.approved.event.v1 - version: 2.x.x id: merchantApplication.approved.event.v2 - version: 1.x.x id: merchantApplication.created.event.v1 - version: 1.x.x id: merchantApplication.rejected.event.v1 receives: [] --- ## Overview EMO is a workflow system handling due dilligence in merchant onboarding flow. EMO runs on Oracle Fusion Platform. In 2025 it was replaced by CMP (Case Managment Platform) which is functionally 1-1 equivalent. ## Node graph --- name: EventArchive id: eventarchive version: 1.0.0 summary: No summary badges: - content: Java backgroundColor: blue textColor: white owners: - easy-optin sends: [] receives: - version: 1.x.x id: accountDeposit.created.event.v1 - version: 1.x.x id: merchant.account.created.event.v1 - version: 2.x.x id: merchant.account.created.event.v2 - version: 3.x.x id: merchant.account.created.event.v3 - version: 1.x.x id: merchant.account.deactivated.event.v1 - version: 1.x.x id: merchant.account.reactivated.event.v1 - version: 1.x.x id: merchant.apiKeys.created.event.v1 - version: 1.x.x id: merchant.approved.event.v1 - version: 2.x.x id: merchant.approved.event.v2 - version: 1.x.x id: merchant.billingDetails.updated.event.v1 - version: 1.x.x id: merchant.contactPerson.updated.event.v1 - version: 1.x.x id: merchant.created.event.v1 - version: 1.x.x id: merchant.updated.event.v1 - version: 1.x.x id: merchant.surcharge.enabled.event.v1 - version: 1.x.x id: merchant.surcharge.disabled.event.v1 - version: 1.x.x id: merchantAccountPaymentMethod.arvato.changed.event.v1 - version: 1.x.x id: merchantAccountPaymentMethod.arvato.created.event.v1 - version: 1.x.x id: merchantAccountPaymentMethod.arvato.created.event.v2 - version: 1.x.x id: merchantAccountPaymentMethod.baxId.created.event.v1 - version: 1.x.x id: merchantAccountPaymentMethod.card.changed.event.v1 - version: 1.x.x id: merchantAccountPaymentMethod.dankort.configured.event.v1 - version: 1.x.x id: merchantAccountPaymentMethod.DankortTofId.created.event.v1 - version: 1.x.x id: merchantAccountPaymentMethod.DankortTofId.created.event.v2 - version: 1.x.x id: merchantAccountPaymentMethod.disabled.event.v1 - version: 1.x.x id: merchantAccountPaymentMethod.enabled.event.v1 - version: 1.x.x id: merchantAccountPaymentMethod.internal.event.v1 - version: 1.x.x id: merchantAccountPaymentMethod.steps.created.event.v1 - version: 1.x.x id: merchantApplication.approved.event.v1 - version: 2.x.x id: merchantApplication.approved.event.v2 - version: 1.x.x id: merchantApplication.created.event.v1 - version: 2.x.x id: merchantApplication.created.event.v2 - version: 1.x.x id: merchantApplication.rejected.event.v1 - version: 2.x.x id: merchantApplication.rejected.event.v2 - version: 1.x.x id: merchantApplication.riskscored.event.v1 - version: 2.x.x id: merchantApplication.riskscored.event.v2 - version: 3.x.x id: merchantApplication.riskscored.event.v3 - version: 1.x.x id: merchantDomain.verification.completed.event.v1 - version: 1.x.x id: merchantDomain.verification.failed.event.v1 - version: 1.x.x id: merchantDomain.verification.initiated.event.v1 - version: 1.x.x id: merchantBalance.updated.event.v1 - version: 1.x.x id: merchantLedger.transactionPosted.event.v1 - version: 1.x.x id: merchantPrice.updated.event.v1 - version: 1.x.x id: notification.onboarding.webhook.attempt.log.message.v1 - version: 1.x.x id: notification.payment.webhook.attempt.log.message.v1 - version: 1.x.x id: partner.allowedPriceLists.updated.event.v1 - version: 1.x.x id: partner.apiKeys.live.created.event.v1 - version: 1.x.x id: partner.apiKeys.test.created.event.v1 - version: 1.x.x id: partner.company.updated.event.v1 - version: 1.x.x id: partner.contactPerson.updated.event.v1 - version: 1.x.x id: partner.created.event.v1 - version: 1.x.x id: partner.crmPartnerId.updated.event.v1 - version: 1.x.x id: partner.defaultPermissions.updated.event.v1 - version: 1.x.x id: partner.merchantAccountPermissions.live.updated.event.v1 - version: 1.x.x id: partner.merchantAccountPermissions.test.updated.event.v1 - version: 1.x.x id: payment.a2a.initialized.event.v1 - version: 1.x.x id: payment.a2a.refund.declined.event.v1 - version: 1.x.x id: payment.cancel.created.event.v1 - version: 1.x.x id: payment.cancel.failed.event.v1 - version: 1.x.x id: payment.charge.created.event.v1 - version: 2.x.x id: payment.charge.created.event.v2 - version: 1.x.x id: payment.charge.failed.event.v1 - version: 2.x.x id: payment.charge.failed.event.v2 - version: 1.x.x id: payment.charge.feeAdded.event.v1 - version: 1.x.x id: payment.charge.request.v1 - version: 1.x.x id: payment.charging.internal.event.v1 - version: 1.x.x id: payment.checkout.completed.event.v1 - version: 1.x.x id: payment.consumer.refunded.event.v1 - version: 1.x.x id: payment.created.event.v1 - version: 1.x.x id: payment.internal.event.v1 - version: 1.x.x id: payment.orderItems.updated.event.v1 - version: 1.x.x id: payment.paymentMethod.verification.created.event.v1 - version: 1.x.x id: payment.paymentMethod.verification.failed.event.v1 - version: 1.x.x id: payment.pendingRefund.cancel.request.v1 - version: 1.x.x id: payment.pendingRefund.cancelled.event.v1 - version: 1.x.x id: payment.referenceUpdated.event.v1 - version: 1.x.x id: payment.refund.cancel.initiated.event.v1 - version: 1.x.x id: payment.refund.completed.event.v1 - version: 1.x.x id: payment.refund.consumerRefunded.event.v1 - version: 1.x.x id: payment.refund.failed.event.v1 - version: 1.x.x id: payment.refund.feeAdded.event.v1 - version: 1.x.x id: payment.refund.initiated.event.v1 - version: 2.x.x id: payment.refund.initiated.event.v2 - version: 1.x.x id: payment.reservation.created.event.v1 - version: 1.x.x id: payment.reservation.failed.event.v1 - version: 1.x.x id: payment.shippingaddress.verified.event.v1 - version: 1.x.x id: payment.subscription.initiated.event.v1 - version: 1.x.x id: priceList.updated.event.v1 - version: 1.x.x id: refundAuthorization.accepted.event.v1 - version: 1.x.x id: refundAuthorization.canceled.event.v1 - version: 1.x.x id: refundAuthorization.confirmed.event.v1 - version: 1.x.x id: refundAuthorization.expired.event.v1 - version: 1.x.x id: refundAuthorization.pending.event.v1 - version: 1.x.x id: settlement.cancelled.event.v1 - version: 1.x.x id: settlement.confirmed.event.v1 - version: 2.x.x id: settlement.confirmed.event.v2 - version: 1.x.x id: settlement.created.event.v1 - version: 2.x.x id: settlement.created.event.v2 - version: 1.x.x id: settlement.transactions.added.event.v1 - version: 1.x.x id: settlementConfiguration.assigned.event.v1 - version: 1.x.x id: subscription.bulk.charge.initiated.v1 - version: 1.x.x id: subscription.bulk.verification.initiated.v1 - version: 1.x.x id: subscription.created.event.v1 - version: 1.x.x id: subscription.updated.event.v1 - version: 1.x.x id: transactionFee.calculated.event.v1 - version: 1.x.x id: user.addedToMerchant.event.v1 - version: 1.x.x id: user.addedToPartner.event.v1 - version: 1.x.x id: user.created.event.v1 - version: 1.x.x id: user.removedFromMerchant.event.v1 --- Sample description of the service --- name: MMS id: mms version: 1.0.0 summary: No summary badges: - content: C# backgroundColor: blue textColor: white owners: - easy-checkout sends: - version: 1.x.x id: merchant.account.created.event.v1 - version: 2.x.x id: merchant.account.created.event.v2 - version: 1.x.x id: merchant.account.deactivated.event.v1 - version: 1.x.x id: merchant.account.reactivated.event.v1 - version: 1.x.x id: merchant.apiKeys.live.revoke.created.event.v1 - version: 1.x.x id: merchant.apiKeys.test.revoke.created.event.v1 - version: 1.x.x id: merchant.apiKeys.create.failed.event.v1 - version: 1.x.x id: merchant.apiKeys.created.event.v1 - version: 1.x.x id: merchant.apiKeys.created.event.v2 - version: 1.x.x id: merchant.apiKeys.live.revoke.failed.event.v1 - version: 1.x.x id: merchant.apiKeys.test.revoke.failed.event.v1 - version: 1.x.x id: merchant.approved.event.v1 - version: 2.x.x id: merchant.approved.event.v2 - version: 1.x.x id: merchant.billingDetails.updated.event.v1 - version: 1.x.x id: merchant.contactPerson.updated.event.v1 - version: 1.x.x id: merchant.created.event.v1 - version: 1.x.x id: merchant.updated.event.v1 - version: 1.x.x id: partner.allowedPriceLists.updated.event.v1 - version: 1.x.x id: partner.apiKeys.live.created.event.v1 - version: 1.x.x id: partner.apiKeys.test.created.event.v1 - version: 1.x.x id: partner.company.updated.event.v1 - version: 1.x.x id: partner.contactPerson.updated.event.v1 - version: 1.x.x id: partner.created.event.v1 - version: 1.x.x id: partner.crmPartnerId.updated.event.v1 - version: 1.x.x id: partner.defaultPermissions.updated.event.v1 - version: 1.x.x id: partner.merchantAccountPermissions.live.updated.event.v1 - version: 1.x.x id: partner.merchantAccountPermissions.test.updated.event.v1 - version: 1.x.x id: merchant.deactivated.event.v1 - version: 1.x.x id: merchant.reactivated.event.v1 - version: 1.x.x id: merchant.surcharge.enabled.event.v1 - version: 1.x.x id: merchant.surcharge.disabled.event.v1 - version: 1.x.x id: merchant.virtualCard.enabled.event.v1 - version: 1.x.x id: merchant.virtualCard.disabled.event.v1 receives: - version: 1.x.x id: merchant.account.settlementConfiguration.update.request.v1 - version: 1.x.x id: merchant.approved.event.v1 - version: 2.x.x id: merchant.approved.event.v2 - version: 1.x.x id: merchant.updated.event.v1 - version: 1.x.x id: merchantApplication.approved.event.v1 - version: 2.x.x id: merchantApplication.approved.event.v2 - version: 2.x.x id: merchantApplication.riskscored.event.v3 - version: 1.x.x id: partner.allowedPriceLists.updated.event.v1 - version: 1.x.x id: merchant.surcharge.enable.request.v1 - version: 1.x.x id: merchant.surcharge.disable.request.v1 --- Sample description of the service --- name: Notification id: notification version: 1.0.0 summary: No summary badges: - content: C# backgroundColor: blue textColor: white owners: - easy-checkout sends: - version: 1.x.x id: notification.payment.webhook.attempt.log.message.v1 receives: - version: 1.x.x id: notification.onboarding.webhook.attempt.log.message.v1 - version: 1.x.x id: payment.cancel.created.event.v1 - version: 1.x.x id: payment.cancel.failed.event.v1 - version: 1.x.x id: payment.charge.created.event.v1 - version: 1.x.x id: payment.charge.failed.event.v1 - version: 1.x.x id: payment.charge.feeAdded.event.v1 - version: 1.x.x id: payment.created.event.v1 - version: 1.x.x id: payment.pendingRefund.cancelled.event.v1 - version: 1.x.x id: payment.referenceUpdated.event.v1 - version: 1.x.x id: payment.refund.completed.event.v1 - version: 1.x.x id: payment.refund.consumerRefunded.event.v1 - version: 1.x.x id: payment.refund.failed.event.v1 - version: 1.x.x id: payment.refund.feeAdded.event.v1 - version: 1.x.x id: payment.refund.initiated.event.v1 - version: 1.x.x id: payment.reservation.failed.event.v1 --- Sample description of the service --- name: Portal Merchants id: portal-merchants version: 1.0.0 summary: No summary badges: - content: Java backgroundColor: blue textColor: white owners: - easy-portal receives: - id: merchant.account.created.event.v1 version: 1.x.x - id: merchant.account.created.event.v2 version: 2.x.x - id: merchant.account.created.event.v3 version: 3.x.x - id: merchant.account.deactivated.event.v1 version: 1.x.x - id: merchant.account.reactivated.event.v1 version: 1.x.x - id: merchant.account.settlementConfiguration.update.request.v1 version: 1.x.x - id: merchant.account.settlementConfiguration.updated.event.v1 version: 1.x.x - id: merchant.apiKeys.live.revoke.created.event.v1 version: 1.x.x - id: merchant.apiKeys.test.revoke.created.event.v1 version: 1.x.x - id: merchant.apiKeys.create.failed.event.v1 version: 1.x.x - id: merchant.apiKeys.created.event.v1 version: 1.x.x - id: merchant.apiKeys.created.event.v2 version: 1.x.x - id: merchant.apiKeys.live.revoke.failed.event.v1 version: 1.x.x - id: merchant.apiKeys.test.revoke.failed.event.v1 version: 1.x.x - id: merchant.approved.event.v1 version: 1.x.x - id: merchant.approved.event.v2 version: 2.x.x - id: merchant.approved.event.v3 version: 1.x.x - id: merchant.billingDetails.updated.event.v1 version: 1.x.x - id: merchant.contactPerson.updated.event.v1 version: 1.x.x - id: merchant.created.event.v1 version: 1.x.x - id: merchant.updated.event.v1 version: 1.x.x - id: merchant.surcharge.enabled.event.v1 version: 1.x.x - id: merchant.surcharge.disabled.event.v1 version: 1.x.x - id: merchantAccountPaymentMethod.arvato.changed.event.v1 version: 1.x.x - id: merchantAccountPaymentMethod.arvato.created.event.v1 version: 1.x.x - id: merchantAccountPaymentMethod.arvato.created.event.v2 version: 1.x.x - id: merchantAccountPaymentMethod.baxId.created.event.v1 version: 1.x.x - id: merchantAccountPaymentMethod.card.changed.event.v1 version: 1.x.x - id: merchantAccountPaymentMethod.created.event.v1 version: 1.x.x - id: merchantAccountPaymentMethod.dankort.configured.event.v1 version: 1.x.x - id: merchantAccountPaymentMethod.DankortTofId.created.event.v1 version: 1.x.x - id: merchantAccountPaymentMethod.DankortTofId.created.event.v2 version: 1.x.x - id: merchantAccountPaymentMethod.disabled.event.v1 version: 1.x.x - id: merchantAccountPaymentMethod.enabled.event.v1 version: 1.x.x - id: merchantAccountPaymentMethod.internal.event.v1 version: 1.x.x - id: merchantAccountPaymentMethod.steps.created.event.v1 version: 1.x.x - id: merchantApplication.approved.event.v1 version: 1.x.x - id: merchantApplication.approved.event.v2 version: 2.x.x - id: merchantApplication.created.event.v1 version: 1.x.x - id: merchantApplication.created.event.v2 version: 2.x.x - id: merchantApplication.rejected.event.v1 version: 1.x.x - id: merchantApplication.rejected.event.v2 version: 2.x.x - id: merchantApplication.riskscored.event.v1 version: 1.x.x - id: merchantApplication.riskscored.event.v2 version: 2.x.x - id: merchantApplication.riskscored.event.v3 version: 3.x.x - id: merchantLedger.transactionPosted.event.v1 version: 1.x.x - id: partner.allowedPriceLists.updated.event.v1 version: 1.x.x - id: partner.apiKeys.live.created.event.v1 version: 1.x.x - id: partner.apiKeys.test.created.event.v1 version: 1.x.x - id: partner.company.updated.event.v1 version: 1.x.x - id: partner.contactPerson.updated.event.v1 version: 1.x.x - id: partner.created.event.v1 version: 1.x.x - id: partner.crmPartnerId.updated.event.v1 version: 1.x.x - id: partner.defaultPermissions.updated.event.v1 version: 1.x.x - id: partner.merchantAccountPermissions.live.updated.event.v1 version: 1.x.x - id: partner.merchantAccountPermissions.test.updated.event.v1 version: 1.x.x - id: settlementConfiguration.assigned.event.v1 version: 1.x.x - id: signupProcess.signupFailed.event.v1 version: 1.x.x - id: signupProcess.signupInitialized.event.v1 version: 1.x.x - id: signupProcess.signupOrderInserted.event.v2 version: 1.x.x - id: signupProcess.signupSigned.event.v1 version: 1.x.x - id: user.addedToMerchant.event.v1 version: 1.x.x - id: user.addedToPartner.event.v1 version: 1.x.x - id: user.created.event.v1 version: 1.x.x - id: user.removedFromMerchant.event.v1 version: 1.x.x sends: - id: merchant.create.request.v2 version: 2.x.x - id: merchant.apiKeys.live.revoke.request.v1 version: 1.x.x - id: merchant.apiKeys.test.revoke.request.v1 version: 1.x.x - id : merchant.apiKeys.create.request.v1 version: 1.x.x - id: merchant.surcharge.enable.request.v1 version: 1.x.x - id: merchant.surcharge.disable.request.v1 version: 1.x.x --- Merchant Service in Easy Merchant Portal is responsible for Merchant and Partner Enrollment, Management and Administration --- name: Portal Payments id: portal-payments version: 1.0.0 summary: No summary badges: - content: Java backgroundColor: blue textColor: white owners: - easy-portal receives: - id: payment.a2a.initialized.event.v1 version: 1.x.x - id: payment.a2a.refund.declined.event.v1 version: 1.x.x - id: payment.cancel.created.event.v1 version: 1.x.x - id: payment.cancel.failed.event.v1 version: 1.x.x - id: payment.charge.created.event.v1 version: 1.x.x - id: payment.charge.created.event.v2 version: 2.x.x - id: payment.charge.failed.event.v1 version: 1.x.x - id: payment.charge.failed.event.v2 version: 2.x.x - id: payment.charge.feeAdded.event.v1 version: 1.x.x - id: payment.charge.request.v1 version: 1.x.x - id: payment.charging.internal.event.v1 version: 1.x.x - id: payment.checkout.completed.event.v1 version: 1.x.x - id: payment.consumer.refunded.event.v1 version: 1.x.x - id: payment.created.event.v1 version: 1.x.x - id: payment.internal.event.v1 version: 1.x.x - id: payment.orderItems.updated.event.v1 version: 1.x.x - id: payment.paymentMethod.verification.created.event.v1 version: 1.x.x - id: payment.paymentMethod.verification.failed.event.v1 version: 1.x.x - id: payment.pendingRefund.cancel.request.v1 version: 1.x.x - id: payment.pendingRefund.cancelled.event.v1 version: 1.x.x - id: payment.referenceUpdated.event.v1 version: 1.x.x - id: payment.refund.cancel.initiated.event.v1 version: 1.x.x - id: payment.refund.completed.event.v1 version: 1.x.x - id: payment.refund.consumerRefunded.event.v1 version: 1.x.x - id: payment.refund.failed.event.v1 version: 1.x.x - id: payment.refund.feeAdded.event.v1 version: 1.x.x - id: payment.refund.initiated.event.v1 version: 1.x.x - id: payment.refund.initiated.event.v2 version: 2.x.x - id: payment.reservation.created.event.v1 version: 1.x.x - id: payment.reservation.failed.event.v1 version: 1.x.x - id: payment.sale.created.event.v1 version: 1.x.x - id: payment.sale.failed.event.v1 version: 1.x.x - id: payment.shippingaddress.verified.event.v1 version: 1.x.x - id: payment.subscription.initiated.event.v1 version: 1.x.x - id: settlement.cancelled.event.v1 version: 1.x.x - id: settlement.confirmed.event.v1 version: 1.x.x - id: settlement.confirmed.event.v2 version: 2.x.x - id: settlement.created.event.v1 version: 1.x.x - id: settlement.created.event.v2 version: 2.x.x - id: settlement.transactions.added.event.v1 version: 1.x.x - id: subscription.created.event.v1 version: 1.x.x - id: subscription.updated.event.v1 version: 1.x.x - id: transactionFee.calculated.event.v1 version: 1.x.x sends: - id: payment.charge.request.v1 version: 1.x.x - id: payment.pendingRefund.cancel.request.v1 version: 1.x.x --- Payment Service in Easy Merchant Portal is responsible for collecting payment, settlement, subscription events, processing these events which are transactions made by Merchants. Payment Service makes Payment data, Settlement data available for Easy Portal Merchant Service to present that on Easy Merchant Portal. Payment Service creates Payout Reports and Payment Reports which are then used by Easy Portal Merchant Service to make it downloadable for Merchants. --- name: Pricing id: pricing version: 1.0.0 summary: No summary badges: - content: C# backgroundColor: blue textColor: white owners: - easy-processing sends: - version: 1.x.x id: transactionFee.calculated.event.v1 receives: - version: 3.x.x id: merchant.account.created.event.v3 - version: 1.x.x id: merchant.approved.event.v1 - version: 2.x.x id: merchant.approved.event.v2 - version: 1.x.x id: merchant.created.event.v1 - version: 1.x.x id: merchantPrice.updated.event.v1 - version: 1.x.x id: partner.created.event.v1 - version: 1.x.x id: payment.cancel.created.event.v1 - version: 1.x.x id: payment.cancel.failed.event.v1 - version: 1.x.x id: payment.charge.created.event.v1 - version: 2.x.x id: payment.charge.created.event.v2 - version: 1.x.x id: payment.charge.failed.event.v1 - version: 2.x.x id: payment.charge.failed.event.v2 - version: 1.x.x id: payment.refund.completed.event.v1 - version: 1.x.x id: payment.refund.failed.event.v1 - version: 1.x.x id: payment.refund.initiated.event.v1 - version: 2.x.x id: payment.refund.initiated.event.v2 - version: 1.x.x id: payment.reservation.created.event.v1 - version: 1.x.x id: payment.reservation.failed.event.v1 - version: 1.x.x id: priceList.updated.event.v1 - version: 1.x.x id: settlement.created.event.v1 --- Sample description of the service --- name: Processing id: processing version: 1.0.0 summary: No summary badges: - content: C# backgroundColor: blue textColor: white owners: - easy-processing sends: - version: 1.x.x id: payment.a2a.initialized.event.v1 - version: 1.x.x id: payment.a2a.refund.declined.event.v1 - version: 1.x.x id: payment.cancel.created.event.v1 - version: 1.x.x id: payment.cancel.failed.event.v1 - version: 1.x.x id: payment.charge.created.event.v1 - version: 2.x.x id: payment.charge.created.event.v2 - version: 1.x.x id: payment.charge.failed.event.v1 - version: 2.x.x id: payment.charge.failed.event.v2 - version: 1.x.x id: payment.charge.feeAdded.event.v1 - version: 1.x.x id: payment.charging.internal.event.v1 - version: 1.x.x id: payment.checkout.completed.event.v1 - version: 1.x.x id: payment.consumer.refunded.event.v1 - version: 1.x.x id: payment.internal.event.v1 - version: 1.x.x id: payment.orderItems.updated.event.v1 - version: 1.x.x id: payment.paymentMethod.verification.created.event.v1 - version: 1.x.x id: payment.paymentMethod.verification.failed.event.v1 - version: 1.x.x id: payment.pendingRefund.cancel.request.v1 - version: 1.x.x id: payment.pendingRefund.cancelled.event.v1 - version: 1.x.x id: payment.referenceUpdated.event.v1 - version: 1.x.x id: payment.refund.cancel.initiated.event.v1 - version: 1.x.x id: payment.refund.completed.event.v1 - version: 1.x.x id: payment.refund.consumerRefunded.event.v1 - version: 1.x.x id: payment.refund.failed.event.v1 - version: 1.x.x id: payment.refund.feeAdded.event.v1 - version: 1.x.x id: payment.refund.initiated.event.v1 - version: 2.x.x id: payment.refund.initiated.event.v2 - version: 1.x.x id: payment.reservation.created.event.v1 - version: 1.x.x id: payment.reservation.failed.event.v1 - version: 1.x.x id: payment.shippingaddress.verified.event.v1 - version: 1.x.x id: payment.subscription.initiated.event.v1 receives: - version: 1.x.x id: merchant.account.created.event.v1 - version: 2.x.x id: merchant.account.created.event.v2 - version: 3.x.x id: merchant.account.created.event.v3 - version: 1.x.x id: merchant.apiKeys.live.revoke.created.event.v1 - version: 1.x.x id: merchant.apiKeys.test.revoke.created.event.v1 - version: 1.x.x id: merchant.apiKeys.create.failed.event.v1 - version: 1.x.x id: merchant.apiKeys.created.event.v1 - version: 1.x.x id: merchant.apiKeys.created.event.v2 - version: 1.x.x id: merchant.apiKeys.test.revoke.failed.event.v1 - version: 1.x.x id: merchant.approved.event.v1 - version: 2.x.x id: merchant.approved.event.v2 - version: 1.x.x id: merchant.approved.event.v3 - version: 1.x.x id: merchant.created.event.v1 - version: 1.x.x id: merchant.updated.event.v1 - version: 1.x.x id: merchant.surcharge.enabled.event.v1 - version: 1.x.x id: merchant.surcharge.disabled.event.v1 - version: 1.x.x id: merchant.deactivated.event.v1 - version: 1.x.x id: merchant.reactivated.event.v1 - version: 1.x.x id: merchant.virtualCard.enabled.event.v1 - version: 1.x.x id: merchant.virtualCard.disabled.event.v1 - version: 1.x.x id: merchantAccountPaymentMethod.arvato.changed.event.v1 - version: 1.x.x id: merchantAccountPaymentMethod.arvato.created.event.v2 - version: 1.x.x id: merchantAccountPaymentMethod.baxId.created.event.v1 - version: 1.x.x id: merchantAccountPaymentMethod.card.changed.event.v1 - version: 1.x.x id: merchantAccountPaymentMethod.dankort.configured.event.v1 - version: 1.x.x id: merchantAccountPaymentMethod.enabled.event.v1 - version: 1.x.x id: partner.allowedPriceLists.updated.event.v1 - version: 1.x.x id: partner.apiKeys.live.created.event.v1 - version: 1.x.x id: partner.apiKeys.test.created.event.v1 - version: 1.x.x id: partner.company.updated.event.v1 - version: 1.x.x id: partner.contactPerson.updated.event.v1 - version: 1.x.x id: partner.created.event.v1 - version: 1.x.x id: partner.crmPartnerId.updated.event.v1 - version: 1.x.x id: partner.defaultPermissions.updated.event.v1 - version: 1.x.x id: partner.merchantAccountPermissions.live.updated.event.v1 - version: 1.x.x id: partner.merchantAccountPermissions.test.updated.event.v1 - version: 1.x.x id: payment.a2a.initialized.event.v1 - version: 1.x.x id: payment.a2a.refund.declined.event.v1 - version: 1.x.x id: payment.cancel.created.event.v1 - version: 1.x.x id: payment.cancel.failed.event.v1 - version: 1.x.x id: payment.charge.created.event.v1 - version: 2.x.x id: payment.charge.created.event.v2 - version: 1.x.x id: payment.charge.failed.event.v1 - version: 2.x.x id: payment.charge.failed.event.v2 - version: 1.x.x id: payment.charge.request.v1 - version: 1.x.x id: payment.charging.internal.event.v1 - version: 1.x.x id: payment.checkout.completed.event.v1 - version: 1.x.x id: payment.consumer.refunded.event.v1 - version: 1.x.x id: payment.created.event.v1 - version: 1.x.x id: payment.pendingRefund.cancel.request.v1 - version: 1.x.x id: payment.refund.cancel.initiated.event.v1 - version: 1.x.x id: payment.refund.completed.event.v1 - version: 1.x.x id: payment.refund.feeAdded.event.v1 - version: 1.x.x id: payment.refund.initiated.event.v1 - version: 2.x.x id: payment.refund.initiated.event.v2 - version: 1.x.x id: payment.reservation.created.event.v1 - version: 1.x.x id: payment.reservation.failed.event.v1 - version: 1.x.x id: payment.shippingaddress.verified.event.v1 - version: 1.x.x id: payment.subscription.initiated.event.v1 - version: 1.x.x id: refundAuthorization.accepted.event.v1 - version: 1.x.x id: refundAuthorization.canceled.event.v1 - version: 1.x.x id: refundAuthorization.confirmed.event.v1 - version: 1.x.x id: refundAuthorization.expired.event.v1 - version: 1.x.x id: refundAuthorization.pending.event.v1 - version: 1.x.x id: subscription.bulk.charge.initiated.v1 - version: 1.x.x id: subscription.bulk.verification.initiated.v1 - version: 1.x.x id: transactionFee.calculated.event.v1 --- Sample description of the service --- name: Relay APM Processing id: relay-apm-processing version: 2.0.0 summary: No summary owners: - relay-apm receives: - id: relay.payment.authorize.request.v2 version: 2.0.0 from: - id: grpc name: gRPC - id: https name: HTTPS - id: relay.payment.capture.request.v2 version: 2.0.0 from: - id: grpc name: gRPC - id: https name: HTTPS - id: relay.payment.charge.request.v2 version: 2.0.0 from: - id: grpc name: gRPC - id: https name: HTTPS - id: relay.payment.cancel.request.v2 version: 2.0.0 from: - id: grpc name: gRPC - id: https name: HTTPS - id: relay.payment.refund.request.v2 version: 2.0.0 from: - id: grpc name: gRPC - id: https name: HTTPS - id: relay.payment.getsummary.query.v2 version: 2.0.0 from: - id: grpc name: gRPC - id: https name: HTTPS - id: relay.payment.getoperationssummary.query.v2 version: 2.0.0 from: - id: grpc name: gRPC - id: https name: HTTPS --- Relay Processing. More details to be added --- ## API Documentation The API documentation for the `Relay APM Processing` is available in the `api.yaml` file. This file describes the gRPC methods for the service. You can find the detailed API documentation here: gRPC contracts repo --- name: Relay Enrollment id: relay-enrollment version: 2.0.0 summary: No summary owners: - relay-apm sends: - id: relay.merchant.get.query.v2 version: 2.0.0 to: - id: grpc name: gRPC receives: - id: relay.enrollment.enroll.request.v2 version: 2.0.0 from: - id: grpc name: gRPC - id: https name: HTTPS - id: relay.enrollment.activate.request.v2 version: 2.0.0 from: - id: grpc name: gRPC - id: https name: HTTPS - id: relay.enrollment.deactivate.request.v2 version: 2.0.0 from: - id: grpc name: gRPC - id: https name: HTTPS - id: relay.enrollment.terminate.request.v2 version: 2.0.0 from: - id: grpc name: gRPC - id: https name: HTTPS - id: relay.enrollment.update.request.v2 version: 2.0.0 from: - id: grpc name: gRPC - id: https name: HTTPS - id: relay.enrollment.get.query.v2 version: 2.0.0 from: - id: grpc name: gRPC - id: https name: HTTPS --- Relay Enrollment. More details to be added --- name: Relay Merchant id: relay-merchant version: 2.0.0 summary: No summary owners: - relay-apm sends: [] receives: - id: relay.merchant.create.request.v2 version: 2.0.0 from: - id: grpc name: gRPC - id: https name: HTTPS - id: relay.merchant.update.request.v2 version: 2.0.0 from: - id: grpc name: gRPC - id: https name: HTTPS - id: relay.merchant.deactivate.request.v2 version: 2.0.0 from: - id: grpc name: gRPC - id: https name: HTTPS - id: relay.merchant.activate.request.v2 version: 2.0.0 from: - id: grpc name: gRPC - id: https name: HTTPS - id: relay.merchant.get.query.v2 version: 2.0.0 from: - id: grpc name: gRPC --- Relay Merchants. More details to be added --- name: Relay Notification id: relay-notification version: 2.0.0 summary: No summary owners: - relay-apm sends: - id: relay.merchant.activated.event version: 0.0.0 to: - id: https name: HTTPS - id: relay.merchant.deactivated.event version: 0.0.0 to: - id: https name: HTTPS - id: relay.merchant.created.event version: 0.0.0 to: - id: https name: HTTPS - id: relay.merchant.updated.event version: 0.0.0 to: - id: https name: HTTPS - id: relay.enrollment.activated.event version: 0.0.0 to: - id: https name: HTTPS - id: relay.enrollment.deactivated.event version: 0.0.0 to: - id: https name: HTTPS - id: relay.enrollment.pending.event version: 0.0.0 to: - id: https name: HTTPS - id: relay.enrollment.noncompliant.event version: 0.0.0 to: - id: https name: HTTPS - id: relay.enrollment.terminated.event version: 0.0.0 to: - id: https name: HTTPS - id: relay.payment.authorize.completed.event version: 0.0.0 to: - id: https name: HTTPS - id: relay.payment.authorize.failed.event version: 0.0.0 to: - id: https name: HTTPS - id: relay.payment.cancel.completed.event version: 0.0.0 to: - id: https name: HTTPS - id: relay.payment.cancel.failed.event version: 0.0.0 to: - id: https name: HTTPS - id: relay.payment.capture.completed.event version: 0.0.0 to: - id: https name: HTTPS - id: relay.payment.capture.failed.event version: 0.0.0 to: - id: https name: HTTPS - id: relay.payment.charge.completed.event version: 0.0.0 to: - id: https name: HTTPS - id: relay.payment.charge.failed.event version: 0.0.0 to: - id: https name: HTTPS - id: relay.payment.refund.completed.event version: 0.0.0 to: - id: https name: HTTPS - id: relay.payment.refund.failed.event version: 0.0.0 to: - id: https name: HTTPS - id: relay.dispute.opened.event version: 0.0.0 to: - id: https name: HTTPS - id: relay.dispute.responserequired.event version: 0.0.0 to: - id: https name: HTTPS - id: relay.dispute.closed.event version: 0.0.0 to: - id: https name: HTTPS receives: - id: relay.notificationconfiguration.create.request.v2 version: 2.0.0 from: - id: grpc name: gRPC - id: https name: HTTPS - id: relay.notificationconfiguration.delete.request.v2 version: 2.0.0 from: - id: grpc name: gRPC - id: https name: HTTPS - id: relay.notificationconfiguration.update.request.v2 version: 2.0.0 from: - id: grpc name: gRPC - id: https name: HTTPS - id: relay.notificationconfiguration.get.query.v2 version: 2.0.0 from: - id: grpc name: gRPC - id: https name: HTTPS --- Relay Notification. More details to be added --- id: ShopifyAdminPanel name: ShopifyAdminPanel version: 1.0.0 summary: | Shop Platform admin panel page where merchant can modify Nexi Checkout payment owners: - easy-connect sends: - id: payment.charge.request.v1 - id: payment.cancel.request.v1 - id: payment.refund.request.v1 --- ## Overview Sends payment api call to allow Merchant to pay charge, cancel and refund payment. --- id: ShopifyCheckoutPage name: ShopifyCheckoutPage version: 1.0.0 summary: | Shop Platform checkout page where customer can select Nexi Checkout as a payment method and depending on integration type he will be see iframe or be redirected to a Checkout Terminal page owners: - easy-connect sends: - id: payment.created.event.v1 - id: payment.referenceUpdated.event.v1 --- ## Overview Sends payment create api call and allow Customer to pay for an order. For Hosted: - Customer puts items into Cart - Goes to Checkout Page and selects Nexi Checkout as a payment method - Clicks "Order" - Customer is redirected to app /pay endpoint where payment request is created and sent - Customer is redirected to Checkout Terminal page - Customer makes payment process - After payment complete Customer is redirected back to a /return endpoint where payment is confirmed - Cart is converted to an Shop Order - Customer is redirected back to Shop Platform --- id: ShopifyWebhookEndpoint name: ShopifyWebhookEndpoint version: 1.0.0 summary: | Endpoint where all the Webhooks from Checkout are sent owners: - easy-connect receives: - id: payment.checkout.completed.event.v1 - id: payment.reservation.created.event.v2 - id: payment.charge.created.event.v2 - id: payment.cancel.created.event.v1 - id: payment.refund.completed.event.v1 - id: payment.refund.failed.event.v1 --- ## Overview Endpoint to receive webhooks from Checkout. --- id: ShopwareAdmin name: ShopwareAdmin version: 2.0.0 summary: | Shop Platform admin panel page where merchant can modify Nexi Checkout payment owners: - easy-connect sends: - id: payment.charge.request.v1 - id: payment.cancel.request.v1 - id: payment.refund.request.v1 --- ## Overview Sends payment api call to allow Merchant to pay charge, cancel and refund payment. --- id: ShopwareCheckoutPage name: ShopwareCheckoutPage version: 2.0.0 summary: | Shop Platform checkout page where customer can select Nexi Checkout as a payment method and depending on integration type he will be see iframe or be redirected to a Checkout Terminal page owners: - easy-connect sends: - id: payment.created.event.v1 - id: payment.referenceUpdated.event.v1 --- ## Overview Sends payment create api call and allow Customer to pay for an order. For Hosted: - Customer puts items into Cart - Goes to Checkout Page and selects Nexi Checkout Hosted as a payment method - Clicks "Submit Order" - Cart is converted to an Shop Order - Customer is redirected to Checkout Terminal page - Customer makes payment process - After payment complete Customer is redirected back to a Shop Platform For Embedded: - Customer puts items into Cart - Goes to Checkout Page and selects Nexi Checkout Embedded as a payment method - Iframe with payment options is displayed to Customer - Customer clicks Pay button in Checkout Terminal - Cart is converted to an Shop Order - Request to UpdateReference is sent - Customer finishes payment process in an iframe - After payment complete Customer is redirected to thank you page --- id: ShopwareWebhookEndpoint name: ShopwareWebhookEndpoint version: 2.0.0 summary: | Endpoint where all Webhooks from Checkout are sent owners: - easy-connect receives: - id: payment.checkout.completed.event.v1 - id: payment.reservation.created.event.v2 - id: payment.charge.created.event.v2 - id: payment.cancel.created.event.v1 - id: payment.refund.completed.event.v1 --- ## Overview Endpoint to receive webhooks from Checkout. --- name: Signup id: signup version: 1.0.0 summary: Merchant data collection for onboarding badges: - content: Java backgroundColor: blue textColor: white owners: - easy-optin sends: - version: 1.x.x id: merchantApplication.create.request.v1 - version: 1.x.x id: signupProcess.signupFailed.event.v1 - version: 1.x.x id: signupProcess.signupInitialized.event.v1 - version: 1.x.x id: signupProcess.signupOrderInserted.event.v2 - version: 1.x.x id: signupProcess.signupSigned.event.v1 receives: - version: 1.x.x id: merchant.created.event.v1 - version: 2.x.x id: merchant.approved.event.v2 - version: 1.x.x id: merchant.approved.event.v3 - version: 2.x.x id: merchantApplication.approved.event.v2 - version: 2.x.x id: merchantApplication.created.event.v2 - version: 2.x.x id: merchantApplication.rejected.event.v2 --- ## Overview Signup is a system used for: - collecting information from merchant required for signing a contract, - doing basic data validations against registries (pre-screening) - e-signing initial contract by merchant which is a prerequisite to performing due dilligence checks in CMP. From a black box perspective Signup provides 2 input interfaces: API and UI. ![Signup Component Diagram](/catalog-images/onboarding/signup/onboarding_signup.png) Signup's **API** is used for: - creating a Signup process - retrieving Signup process status - updating Signup process by merchant support - updating Signup process data Signup's API is used by Merchant Portal, Partner Portal and CRM to facilitate self-service or assisted onboardings. Techopt also uses the API to perform merchant support activities. Signup's **UI** is used solely by merchant. It provides a multi page form that collects information about: - company - owners - webshop - financial performance - products merchant is interested in - authorized signatories After all required data is collected merchant signs the contract using ESign (nordics) or Docusign (dach). The signatory is retrieved from ID Rights. Next Signup calls CMP's API to create a new CMP case. Operationally, data does not move from Signup to CMP using an event. The Signup to CMP handoff is modeled as **merchantApplication.create.request.v1**. This is a direct API call/command to CMP, not an event on a broker. CMP later emits merchant application events that Signup can consume to follow the onboarding result. Signup consumes events from: - MMS - merchant.#.events.# - **merchant.created.event.v1** - used to register a merchant number / uuid mapping - **merchant.approved.event.v1/v2** - used to mark signup process as LIVE - CMP - merchantApplication.#.event.# - **merchantApplication.approved.event.v2** - used to change signup process status to APPROVED - **merchantApplication.created.event.v2** - used to trigger sending a signed contract to CRM - before that it will fail - **merchantApplication.rejected.event.v2** - used to change signup process status to REJECTED Signup produces events related to merchant's progress in filling out the Signup form. Signup's events are consumed by Merchant Portal for performing Hubspot updates. See links for event details. Technical overview of Signup Events (since 2023): https://nexigroup-netsnordics.atlassian.net/wiki/spaces/MSECOMM/pages/227021466/Signup+Events+Overview Technical details about Signup: https://nexigroup-netsnordics.atlassian.net/wiki/spaces/MSECOMM/pages/226945638/Solution+Outline+for+Signup+detachment+on+Azure ## Node graph --- name: Subscription id: subscription version: 1.0.0 summary: No summary badges: - content: C# backgroundColor: blue textColor: white owners: - easy-checkout sends: - version: 1.x.x id: subscription.bulk.charge.initiated.v1 - version: 1.x.x id: subscription.bulk.verification.initiated.v1 - version: 1.x.x id: subscription.created.event.v1 - version: 1.x.x id: subscription.updated.event.v1 --- Sample description of the service --- # id of your domain, used for slugs and references in EventCatalog. id: AccountingAndTreasury # Display name of the domain, rendered in EventCatalog name: AccountingAndTreasury # Version of the domain version: 0.0.1 # Short summary of your domain summary: | Domain that handles financial operations including reconciliations, settlements, and payouts. Ensures financial accuracy and compliance across systems. # Optional services. Groups services into this domain. services: - id: collecting-accounting version: 1.0.0 - id: collecting-balance version: 1.0.0 - id: collecting-refundauth version: 1.0.0 - id: collecting-settlement version: 1.0.0 # Optional badges, rendered to UI by EventCatalog badges: - content: Collecting backgroundColor: green textColor: white owners: - easy-collecting --- The AccountingAndTreasury domain is responsible for managing financial integrity across the platform. It encompasses core financial operations such as reconciliations, settlements, and payouts, ensuring that all monetary transactions are accurately tracked, matched, and executed. This domain acts as the backbone for financial compliance, auditability, and cash flow management. It integrates with internal and external financial systems to reconcile incoming and outgoing transactions, settle collected funds, and initiate timely payouts to merchants(Easy) or platforms(xPay). The domain's focus is on maintaining transactional accuracy, safeguarding financial data consistency, and supporting end-to-end treasury operations critical to business trust and financial transparency. ## External Overview ![External Overview](/catalog-images/accounting-and-treasury/CollectingExternalOverview.jpg) ## Collecting workflow (payment, reconciliation, settlement and payout) ```mermaid sequenceDiagram actor MMS actor C&P actor PSP as Payment Service Provider actor AC as Collecting Accounting actor BL as Collecting Balance actor RA as Collecting Refund Authorization actor S as Collecting Settlement actor Bank actor P as Portal actor CAPS MMS->>AC: Create Merchant AC->>CAPS: Create Merchant C&P->>AC: Create Merchant Account opt Settlement Configuration MMS->>AC: Update Settlement configuration AC->>P: settlementConfiguration.assigned.event end opt Charge C&P->>AC: Charge AC->>BL: transactionPosted(Charge) end opt Refund C&P->>+RA: Refund authorization request alt Merchant has insufficient balance RA-->>C&P: Pending refund else Merchant has sufficient balance RA->>AC: Reserve refund amount RA-->>-C&P: Authorized refund C&P->>+RA: Refund confirm reques RA->>AC: PostTransactionCommand(Refund) AC->>BL: transactionPosted(Refund) RA-->>-C&P: Refund confirmed end end PSP->>+AC: Reconciliation material Note over PSP,AC: Reconciliation material File AC->>AC: Create Reconciliation alt MatchableTransactions AC->>BL: TransactionAddedEvent else Chargeback transaction AC->>BL: transactionPosted(Chargeback) AC->>P: merchantLedger.transactionPosted.event else NonMatchableTransactions AC->>BL: TransactionsNonMatchableEvent end AC->>-AC: CompleteReconciliationCommand Bank->>+AC: Camt054 Note over Bank,AC: Camt054 File alt Scheme settlement AC->>-AC: Settle Reconciliation else Topup AC->>BL: transactionPosted(Topup) AC->>P: accountDeposit.created.event end S->>BL: Fetch eligible transactions S->>+S: Create Remittance Order S->>CAPS: Send Remittance Order Note over S,CAPS: Remittance Order File S->>-S: RemittanceOrderFinalizeCommand CAPS->>+S: Remittance Report Note over CAPS,S: Remittance Report File S->>S: Create Remittance S->>P: settlement.created.event S->>BL: RemittanceAddTransactions opt Adjustment S->>AC: PostTransactionCommand(Adjustment) AC->>BL: transactionPosted(Adjustment) AC->>P: merchantLedger.transactionPosted.event end opt Chargeback S->>AC: PostTransactionCommand(Chargeback) AC->>BL: transactionPosted(Chargeback) AC->>P: merchantLedger.transactionPosted.event end S->>P: settlement.transactions.added.event S->>AC: RemittanceOrderConfirmCommand AC->>BL: transactionPosted(Remittance) S->>-S: RemittanceConfirm S->>P: settlement.confirmed.event ``` --- # id of your domain, used for slugs and references in EventCatalog. id: CardLifecycleManagement # Display name of the domain, rendered in EventCatalog name: CardLifecycleManagement # Version of the domain version: 0.0.1 # Short summary of your domain summary: | Domain that contains card lifecycle management related information # Optional services. Groups services into this domain. services: - id: EMO version: 1.0.0 # Optional badges, rendered to UI by EventCatalog badges: - content: New domain backgroundColor: blue textColor: blue --- ## Overview Domain that contains all services that are related to the card lifecycle management domain within FakeCompany. --- # id of your domain, used for slugs and references in EventCatalog. id: Checkout # Display name of the domain, rendered in EventCatalog name: Checkout # Version of the domain version: 0.0.1 # Short summary of your domain summary: | Domain that contains checkout related information # Optional services. Groups services into this domain. services: - id: checkout version: 1.0.0 # Optional badges, rendered to UI by EventCatalog badges: - content: New domain backgroundColor: blue textColor: blue --- ## Overview Domain that contains all services that are related to the checkout domain within FakeCompany. --- # id of your domain, used for slugs and references in EventCatalog. id: DataAnalytics # Display name of the domain, rendered in EventCatalog name: DataAnalytics # Version of the domain version: 0.0.1 # Short summary of your domain summary: | Domain that contains data analytics related information # Optional services. Groups services into this domain. services: - id: EMO version: 1.0.0 # Optional badges, rendered to UI by EventCatalog badges: - content: New domain backgroundColor: blue textColor: blue --- ## Overview Domain --- # id of your domain, used for slugs and references in EventCatalog. id: DevPortal # Display name of the domain, rendered in EventCatalog name: DevPortal # Version of the domain version: 0.0.1 # Short summary of your domain summary: | Domain that contains developer portal related information # Optional services. Groups services into this domain. services: - id: EMO version: 1.0.0 # Optional badges, rendered to UI by EventCatalog badges: - content: New domain backgroundColor: blue textColor: blue --- ## Overview Domain that contains all services that are related to the developer portal domain within FakeCompany. --- id: eCommIntegrations name: eCommIntegrations version: 0.0.1 summary: | Domain that contains merchant integration related information owners: - easy-connect domains: - id: ShopwarePlugin - id: ShopifyApp --- ## Overview Domain that contains all services that are related to the merchant integration domain within Nexi Checkout. --- # id of your domain, used for slugs and references in EventCatalog. id: FraudAndRiskManagement # Display name of the domain, rendered in EventCatalog name: FraudAndRiskManagement # Version of the domain version: 0.0.1 # Short summary of your domain summary: | Domain that contains fraud and risk management related information # Optional services. Groups services into this domain. services: - id: aml version: 1.0.0 # Optional badges, rendered to UI by EventCatalog badges: - content: New domain backgroundColor: blue textColor: blue --- ## Overview Domain that contains all services that are related to the fraud and risk management domain within FakeCompany. --- # id of your domain, used for slugs and references in EventCatalog. id: InternalBackoffice # Display name of the domain, rendered in EventCatalog name: InternalBackoffice # Version of the domain version: 0.0.1 # Short summary of your domain summary: | Domain that contains internal backoffice related information # Optional services. Groups services into this domain. services: - id: mms version: 1.0.0 - id: eventarchive version: 1.0.0 - id: backoffice version: 1.0.0 # Optional badges, rendered to UI by EventCatalog badges: - content: New domain backgroundColor: blue textColor: blue --- ## Overview Domain that contains all services that are related to the internal backoffice domain within FakeCompany. --- # id of your domain, used for slugs and references in EventCatalog. id: MerchantBackoffice # Display name of the domain, rendered in EventCatalog name: MerchantBackoffice # Version of the domain version: 0.0.1 # Short summary of your domain summary: | Domain that contains merchant backoffice related information # Optional services. Groups services into this domain. services: - id: portal-merchants version: 1.0.0 - id: portal-payments version: 1.0.0 # Optional badges, rendered to UI by EventCatalog badges: - content: New domain backgroundColor: blue textColor: blue --- ## Overview Domain that contains all services that are related to the merchant backoffice domain within FakeCompany. --- # id of your domain, used for slugs and references in EventCatalog. id: MerchantIntegration # Display name of the domain, rendered in EventCatalog name: MerchantIntegration # Version of the domain version: 0.0.1 # Short summary of your domain summary: | Domain that contains merchant integration related information # Optional services. Groups services into this domain. services: - id: EMO version: 1.0.0 # Optional badges, rendered to UI by EventCatalog badges: - content: New domain backgroundColor: blue textColor: blue --- ## Overview Domain that contains all services that are related to the merchant integration domain within FakeCompany. --- # id of your domain, used for slugs and references in EventCatalog. id: Onboarding # Display name of the domain, rendered in EventCatalog name: Onboarding # Version of the domain version: 1.0.0 # Short summary of your domain summary: | Domain that handles - merchant data acquisition - merchant due dilligence - merchant activation # Optional services. Groups services into this domain. services: - id: cmp version: 1.0.0 - id: crm version: 1.0.0 - id: emo version: 1.0.0 - id: signup version: 1.0.0 # Optional badges, rendered to UI by EventCatalog badges: - content: Onboarding backgroundColor: blue textColor: blue --- ## Overview ![Onboarding Diagram](/catalog-images/onboarding/onboarding_flow_diagram.png) The Merchant Onboarding process can be divided into 3 distinct phases: - **data acquisition** - includes gathering information from merchant that's required to sign a contract - **due dilligence** - includes activites related to screening a merchant, checking against official registries, performing aml/kyc checks, gathering required documents etc - **activation** - performed after succesfull due dilligence decision, includes enabling products merchant signed the contract for The Onboarding domain supports all phases of the Merchant Onboarding process as follows. ## Data acquisition ![Acquisition Diagram](/catalog-images/onboarding/onboarding_acquisition.png) Merchant can initiate an onboarding process in 2 ways: - self-service - through Merchant Portal, - assisted - Nexi employee / Partner initates onboarding on merchant's behalf through Partner Portal or CRM When an onboarding process is initiated a request for onboarding is created in **Signup**. The merchant receives info about pending onboarding process and can proceed to fill out all missing information with the Signup form. When all data is provided, a draft contract is signed and a case is created in **CMP**. ## Due dilligence ![Due dilligence Diagram](/catalog-images/onboarding/onboarding_duedilligence.png) **CMP** system provides a workflow for performing all necessary regulatory and risk background checks for a merchant application. This includes AML and KYC. All checks are attempted to be performed automatically. This involves calling multiple external systems hosted both in public and internal networks. Sometimes due to low data quality / errors in external systems onboarding agents need to handle validations manually using UI. It also happens that onboarding agents reach out directly to merchants via email requesting required info and documents. Merchant receives a link to Form Service that provides UI for submitting the requested data. The merchant application can end as: - approved - rejected - closed When case is approved then activation steps are performed and events are send. ## Activation ![Activation Diagram](/catalog-images/onboarding/onboarding_activation.png) When merchant application is approved, **CMP** performs activation tasks. For ECOM onboarding this consists of: - sending messages to payment method providers / partners / merchants - calling external systems (e.g. documents API) - sending events consumed by CRM (SAP) and Checkout domain (MMS) For other onboarding products the activation tasks might differ. E.g. in TMO CAPS is updated directly as next action after approval. ## Componet diagram ![Component Diagram](/catalog-images/onboarding/onboarding_component_diagram.png) Please visit the following page for more details: https://nexigroup-netsnordics.atlassian.net/wiki/spaces/MSECOMM/pages/449183751/CMP+Technical+Overview ## Sequence diagrams Please check the following page for sequence diagram examples: https://nexigroup-netsnordics.atlassian.net/wiki/spaces/MSECOMM/pages/449183751/CMP+Technical+Overview#5.-Actors ## Node diagram --- # id of your domain, used for slugs and references in EventCatalog. id: PartnerPortal # Display name of the domain, rendered in EventCatalog name: PartnerPortal # Version of the domain version: 0.0.1 # Short summary of your domain summary: | Domain that contains partner portal related information # Optional services. Groups services into this domain. services: - id: EMO version: 1.0.0 # Optional badges, rendered to UI by EventCatalog badges: - content: New domain backgroundColor: blue textColor: blue --- ## Overview Domain that contains all services that are related to the partner portal domain within FakeCompany. --- # id of your domain, used for slugs and references in EventCatalog. id: PaymentMethods # Display name of the domain, rendered in EventCatalog name: PaymentMethods # Version of the domain version: 0.0.1 # Short summary of your domain summary: | Domain that contains payment methods related information # Optional services. Groups services into this domain. services: - id: EMO version: 1.0.0 # Optional badges, rendered to UI by EventCatalog badges: - content: New domain backgroundColor: blue textColor: blue --- ## Overview Domain that contains all services that are related to the payment methods domain within FakeCompany. --- # id of your domain, used for slugs and references in EventCatalog. id: PaymentProcessing # Display name of the domain, rendered in EventCatalog name: PaymentProcessing # Version of the domain version: 1.0.0 # Short summary of your domain summary: | Domain that contains payment processing related information # Optional services. Groups services into this domain. services: - id: notification version: 1.0.0 - id: pricing version: 1.0.0 - id: processing version: 1.0.0 - id: subscription version: 1.0.0 # Optional badges, rendered to UI by EventCatalog badges: - content: PaymentProcessing backgroundColor: blue textColor: blue --- ## Overview Domain that contains all services that are related to the payment processing domain within FakeCompany. --- # id of your domain, used for slugs and references in EventCatalog. id: relay # Display name of the domain, rendered in EventCatalog name: Relay # Version of the domain version: 2.0.0 # Short summary of your domain summary: | Domain that contains the Relay services available group wide # Optional services. Groups services into this domain. services: - id: relay-notification version: 2.0.0 - id: relay-merchant version: 2.0.0 - id: relay-apm-processing version: 2.0.0 - id: relay-enrollment version: 2.0.0 # Optional badges, rendered to UI by EventCatalog badges: - content: Relay backgroundColor: blue textColor: blue --- ## Overview Relay is meant to serve as a payment methods hub at group level ## Bounded Context ## Components Diagram ```mermaid graph TD PSP[PSP] Notifications[Notifications] Merchant[Merchant] Enrollment[Enrollment] Processing[Processing] APM[APM] PSP -->|gRPC| Merchant PSP -->|gRPC| Notifications PSP -->|gRPC| Enrollment PSP -->|gRPC| Processing Notifications -->|HTTPS| PSP Enrollment -->|specific protocol| APM Processing -->|specific protocol| APM Enrollment -->|GET| Merchant ``` ## Enroll Merchant (sequence diagram) ```mermaid sequenceDiagram participant PSP participant RelayMerchant participant RelayEnrollment participant APM participant RelayNotification PSP->>RelayMerchant: Create Merchant RelayMerchant-->>PSP: Returns Merchant ID PSP->>RelayEnrollment: Enroll Merchant RelayEnrollment-->>RelayMerchant: Get Merchant Details RelayEnrollment->>APM: Onboard Merchant APM-->>RelayEnrollment: Returns Onboarding Status RelayEnrollment-->>PSP: Returns Payment Method Configuration ID RelayEnrollment-->>RelayNotification: Emit Event RelayNotification->>PSP: Send Webhook ``` ## Flows ### Payment Flow Documented flow when a payment is executed with Relay --- id: ShopifyApp name: ShopifyApp version: 0.0.1 summary: | Domain that contains Shopify app related information owners: - easy-connect services: - id: ShopifyAdminPanel - id: ShopifyCheckoutPage - id: ShopifyWebhookEndpoint --- ## Overview Ecommerce domain contains all ecommerce related information for Shopware Plugin. --- id: ShopwarePlugin name: ShopwarePlugin version: 0.0.1 summary: | Domain that contains Shopware plugin related information owners: - easy-connect services: - id: ShopwareAdmin - id: ShopwareCheckoutPage - id: ShopwareWebhookEndpoint --- ## Overview Ecommerce domain contains all ecommerce related information for Shopware Plugin. --- # id of your domain, used for slugs and references in EventCatalog. id: VAS # Display name of the domain, rendered in EventCatalog name: VAS # Version of the domain version: 0.0.1 # Short summary of your domain summary: | Domain that contains value-added services related information # Optional services. Groups services into this domain. services: - id: EMO version: 1.0.0 # Optional badges, rendered to UI by EventCatalog badges: - content: New domain backgroundColor: blue textColor: blue --- ## Overview Domain that contains all services that are related to the value-added services domain within FakeCompany. --- id: easy-checkout name: Checkout summary: Easy Checkout team responsible for the Checkout service area. members: - shakil-ahmad - adam-landstrom - ammar-zainee - gurunn-gotteberg - dogukan-demir - piotr-leszczynski - blazej-gerlowski - marcin-knapik - asger-hansen - dariusz-gawron - mateusz-grabowski --- ## Overview Team information sourced from the Easy Checkout & Processing Confluence page, updated March 17. ## Members | Name | Role | Location | | --- | --- | --- | | Shakil Ahmad | Team Manager | Oslo, Norway | | Adam Landstrom | Product Manager | Copenhagen, Denmark | | Ammar Zainee | System Architect | Oslo, Norway | | Gurunn Gotteberg | Business Analyst | Copenhagen, Denmark | | Dogukan Demir | BE Developer | Copenhagen, Denmark | | Piotr Leszczynski | FE Developer | Katowice, Poland | | Blazej Gerlowski | BE Developer | Katowice, Poland | | Marcin Knapik | Cloud Engineer | Katowice, Poland | | Asger Hansen | FE Developer | Copenhagen, Denmark | | Dariusz Gawron | BE Developer | Katowice, Poland | | Mateusz Grabowski | FE Developer | Katowice, Poland | --- id: easy-collecting name: The Relay Collecting Team summary: The Relay Collecting Team members: [] --- The Relay Collecting Team --- id: easy-connect name: Easy Connect summary: Easy Connect / Integrations team area. members: [] --- ## Overview Team area sourced from the Easy Connect (Integrations) Confluence page, published February 8, 2023. ## Related Topics - Integration Services team - R09 - Integration & APIs - Network Tools - External/Internal SPOC for Easy Integration Testing - Data Sources & Acquisition --- id: easy-optin name: Signup Team summary: Team responsible for Signup and related onboarding collection services. members: - jakub-polomsky - michal-grodecki - marcin-grzywacz - michal-lukasz-kubica - piotr-stepaniak - przemyslaw-trabuc - przemyslaw-zawadzki - mateusz-janiak - filip-pietryga - szymon-wasiak - panoreja-buklevska --- ## Overview Team information sourced from the Signup Team Confluence page, updated November 22, 2023. ## Roles | Role | Name | Backup / substitute | Contact point for | | --- | --- | --- | --- | | Development Manager | Jakub Polomsky | | | | Product Owner | | | | | Technical Product Owner | Michal Grodecki | | | | Site Reliability Engineer | Marcin Grzywacz | | Back End Developer | | Quality Assurance Engineer | Michal Lukasz Kubica | | | | Architect | Piotr Stepaniak | | Site Reliability Engineer | | Front End Developer | Przemyslaw Trabuc | | | | Back End Developer | Przemyslaw Zawadzki | | | | Front End Developer | Mateusz Janiak | | | | Back End Developer | Filip Pietryga | | | | Back End Developer | Szymon Wasiak | | | | Scrum Master | Panoreja Buklevska (Nora) | Michal Grodecki | | --- id: easy-portal name: Easy Portal summary: Easy Portal team area. members: [] --- ## Overview Team area sourced from the Easy Portal Confluence page, published June 29, 2022. ## Related Topics - Easy Portal cloud-based solution transformation - Easy Portal 2025 achievements - Easy Portal 2026 executive overview - Portal metrics - Portal exit plan - Portal on-call guards --- id: easy-processing name: Processing summary: Easy Processing team responsible for the Processing service area. members: - shakil-ahmad - adam-landstrom - gurunn-gotteberg - alexander-wichmann - ammar-zainee - sebastian-gandso - ahmed-zaher - eleni-anna-markou - ivan-petrov - ivona-jovanovic - krzysztof-gwozdz - krzysztof-klein - abdulrashid-masab-mohammed - weronika-ziemianek --- ## Overview Team information sourced from the Easy Checkout & Processing Confluence page, updated March 17. ## Members | Name | Role | Location | | --- | --- | --- | | Shakil Ahmad | Team Manager | Oslo, Norway | | Adam Landstrom | Product Manager | Copenhagen, Denmark | | Gurunn Gotteberg | Business Analyst | Copenhagen, Denmark | | Alexander Wichmann | BE Developer | Copenhagen, Denmark | | Ammar Zainee | System Architect | Oslo, Norway | | Sebastian Gandso | Cloud Engineer | Copenhagen, Denmark | | Ahmed Zaher | BE Developer | Copenhagen, Denmark | | Eleni-Anna Markou | BE Developer | Copenhagen, Denmark | | Ivan Petrov | BE Developer | Oslo, Norway | | Ivona Jovanovic | BE Developer | Copenhagen, Denmark | | Krzysztof Gwozdz | BE Developer | Katowice, Poland | | Krzysztof Klein | BE Developer | Katowice, Poland | | Abdulrashid Mas'Ab Mohammed | BE Developer | Copenhagen, Denmark | | Weronika Ziemianek | BE Developer | Katowice, Poland | --- id: easy-sap name: The SAP Team summary: The SAP Team members: [] --- The SAP Team --- id: Merchant Integration Team name: Merchant Integration Team summary: Placeholder owner entry for Merchant Integration resources. --- ## Overview This entry resolves existing owner references in the catalog. The richer team profile should be populated from the relevant Confluence team page when available. --- id: Merchant Onboarding Team name: Merchant Onboarding Team summary: Placeholder owner entry for Merchant Onboarding resources. --- ## Overview This entry resolves existing owner references in the catalog. The richer team profile should be populated from the relevant Confluence team page when available. --- id: relay-apm name: The Relay APM Team summary: The Relay APM Team members: [] --- The Relay APM Team --- id: abdulrashid-masab-mohammed name: Abdulrashid Mas'Ab Mohammed role: BE Developer associatedTeams: - easy-processing --- Team member sourced from the Easy Checkout & Processing Confluence page. --- id: adam-landstrom name: Adam Landstrom role: Product Manager associatedTeams: - easy-checkout - easy-processing --- Team member sourced from the Easy Checkout & Processing Confluence page. --- id: ahmed-zaher name: Ahmed Zaher role: BE Developer associatedTeams: - easy-processing --- Team member sourced from the Easy Checkout & Processing Confluence page. --- id: alexander-wichmann name: Alexander Wichmann role: BE Developer associatedTeams: - easy-processing --- Team member sourced from the Easy Checkout & Processing Confluence page. --- id: ammar-zainee name: Ammar Zainee role: System Architect associatedTeams: - easy-checkout - easy-processing --- Team member sourced from the Easy Checkout & Processing Confluence page. --- id: asger-hansen name: Asger Hansen role: FE Developer associatedTeams: - easy-checkout --- Team member sourced from the Easy Checkout & Processing Confluence page. --- id: blazej-gerlowski name: Blazej Gerlowski role: BE Developer associatedTeams: - easy-checkout --- Team member sourced from the Easy Checkout & Processing Confluence page. --- id: dariusz-gawron name: Dariusz Gawron role: BE Developer associatedTeams: - easy-checkout --- Team member sourced from the Easy Checkout & Processing Confluence page. --- id: dogukan-demir name: Dogukan Demir role: BE Developer associatedTeams: - easy-checkout --- Team member sourced from the Easy Checkout & Processing Confluence page. --- id: eleni-anna-markou name: Eleni-Anna Markou role: BE Developer associatedTeams: - easy-processing --- Team member sourced from the Easy Checkout & Processing Confluence page. --- id: filip-pietryga name: Filip Pietryga role: Back End Developer associatedTeams: - easy-optin --- Team member sourced from the Signup Team Confluence page. --- id: gurunn-gotteberg name: Gurunn Gotteberg role: Business Analyst associatedTeams: - easy-checkout - easy-processing --- Team member sourced from the Easy Checkout & Processing Confluence page. --- id: ivan-petrov name: Ivan Petrov role: BE Developer associatedTeams: - easy-processing --- Team member sourced from the Easy Checkout & Processing Confluence page. --- id: ivona-jovanovic name: Ivona Jovanovic role: BE Developer associatedTeams: - easy-processing --- Team member sourced from the Easy Checkout & Processing Confluence page. --- id: jakub-polomsky name: Jakub Polomsky role: Development Manager associatedTeams: - easy-optin --- Team member sourced from the Signup Team Confluence page. --- id: krzysztof-gwozdz name: Krzysztof Gwozdz role: BE Developer associatedTeams: - easy-processing --- Team member sourced from the Easy Checkout & Processing Confluence page. --- id: krzysztof-klein name: Krzysztof Klein role: BE Developer associatedTeams: - easy-processing --- Team member sourced from the Easy Checkout & Processing Confluence page. --- id: marcin-grzywacz name: Marcin Grzywacz role: Site Reliability Engineer associatedTeams: - easy-optin --- Team member sourced from the Signup Team Confluence page. --- id: marcin-knapik name: Marcin Knapik role: Cloud Engineer associatedTeams: - easy-checkout --- Team member sourced from the Easy Checkout & Processing Confluence page. --- id: mateusz-grabowski name: Mateusz Grabowski role: FE Developer associatedTeams: - easy-checkout --- Team member sourced from the Easy Checkout & Processing Confluence page. --- id: mateusz-janiak name: Mateusz Janiak role: Front End Developer associatedTeams: - easy-optin --- Team member sourced from the Signup Team Confluence page. --- id: michal-grodecki name: Michal Grodecki role: Technical Product Owner associatedTeams: - easy-optin --- Team member sourced from the Signup Team Confluence page. --- id: michal-lukasz-kubica name: Michal Lukasz Kubica role: Quality Assurance Engineer associatedTeams: - easy-optin --- Team member sourced from the Signup Team Confluence page. --- id: panoreja-buklevska name: Panoreja Buklevska role: Scrum Master associatedTeams: - easy-optin --- Team member sourced from the Signup Team Confluence page. --- id: piotr-leszczynski name: Piotr Leszczynski role: FE Developer associatedTeams: - easy-checkout --- Team member sourced from the Easy Checkout & Processing Confluence page. --- id: piotr-stepaniak name: Piotr Stepaniak role: Architect associatedTeams: - easy-optin --- Team member sourced from the Signup Team Confluence page. --- id: przemyslaw-trabuc name: Przemyslaw Trabuc role: Front End Developer associatedTeams: - easy-optin --- Team member sourced from the Signup Team Confluence page. --- id: przemyslaw-zawadzki name: Przemyslaw Zawadzki role: Back End Developer associatedTeams: - easy-optin --- Team member sourced from the Signup Team Confluence page. --- id: sebastian-gandso name: Sebastian Gandso role: Cloud Engineer associatedTeams: - easy-processing --- Team member sourced from the Easy Checkout & Processing Confluence page. --- id: shakil-ahmad name: Shakil Ahmad role: Team Manager associatedTeams: - easy-checkout - easy-processing --- Team member sourced from the Easy Checkout & Processing Confluence page. --- id: szymon-wasiak name: Szymon Wasiak role: Back End Developer associatedTeams: - easy-optin --- Team member sourced from the Signup Team Confluence page. --- id: weronika-ziemianek name: Weronika Ziemianek role: BE Developer associatedTeams: - easy-processing --- Team member sourced from the Easy Checkout & Processing Confluence page. --- name: AccountDefinition id: account-definition-entity version: 1.0.0 summary: Defines individual account types within a chart of accounts schemaPath: "./schema.json" badges: - content: Java backgroundColor: blue textColor: white - content: Configuration backgroundColor: green textColor: white owners: - easy-collecting x-relationships: - id: chart-of-accounts-entity relationship: belongsTo description: Belongs to a specific chart of accounts - id: posting-rule-entity relationship: referencedBy description: Referenced by posting rules for transaction processing - id: merchant-account-entity relationship: usedBy description: Used by merchant accounts for account type definitions - id: AddAccountDefinitionCommand relationship: createdBy description: Created by AddAccountDefinitionCommand - id: AccountDefinitionAddedEvent relationship: emits description: Emits AccountDefinitionAddedEvent when added to merchant account properties: - name: id type: long description: Unique identifier for the account definition (primary key) required: true example: 15652 - name: name type: string description: Descriptive name of the account definition required: true example: "MerchantDebt" - name: type type: integer description: Integer code representing the account category (1xxx=Assets, 2xxx=Liabilities, etc.) required: true example: 250800 - name: chart_of_accounts_fk type: long description: Foreign key reference to the parent chart of accounts required: false example: 15655 --- # AccountDefinition Entity The AccountDefinition entity defines individual account types within a chart of accounts. Each definition specifies the account's name, type, and relationship to the parent chart of accounts. ## Properties ## Schema ## Account Types Account definitions are categorized by integer type codes that correspond to standard accounting categories: - **Type 1xxx**: Asset accounts (resources owned by the business) - **Type 2xxx**: Liability accounts (debts and obligations) - **Type 3xxx**: Equity accounts (owner's equity and retained earnings) - **Type 4xxx**: Revenue accounts (income from business operations) - **Type 5xxx**: Expense accounts (costs incurred in operations) ## Usage in System AccountDefinitions are used by: - **PostingRules**: Reference specific account definitions for transaction postings - **MerchantAccount**: Use definitions to create and manage account balances - **ChartOfAccounts**: Organize and group related account definitions ## Validation Rules - Account definition names must be unique within a chart of accounts - Type must be a valid integer representing the account category - Must be associated with a valid chart of accounts - Cannot be deleted if referenced by active posting rules ## Raw Schema:./schema.json { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "title": "AccountDefinition", "description": "Defines individual account types within a chart of accounts", "properties": { "id": { "type": "integer", "description": "Unique identifier for the account definition (primary key)", "example": 15652 }, "name": { "type": "string", "description": "Descriptive name of the account definition", "example": "MerchantDebt" }, "type": { "type": "integer", "description": "Integer code representing the account category (1xxx=Assets, 2xxx=Liabilities, etc.)", "example": 250800 }, "chart_of_accounts_fk": { "type": "integer", "description": "Foreign key reference to the parent chart of accounts", "example": 15655 } }, "required": ["id", "name", "type"], "additionalProperties": false } --- name: BookKeepingConfig id: bookkeeping-config-entity version: 1.0.0 summary: Configuration entity that defines bookkeeping rules and transaction definitions for accounting operations schemaPath: "./schema.json" badges: - content: Java backgroundColor: blue textColor: white - content: Configuration backgroundColor: green textColor: white owners: - easy-collecting x-relationships: - id: chart-of-accounts-entity relationship: references description: References chart of accounts for account structure validation - id: transaction-definition-entity relationship: contains description: Contains multiple transaction definitions for different operation types - id: merchant-account-entity relationship: configures description: Configures how merchant accounts process transactions - id: CreateAccountCommand relationship: usedBy description: Used by CreateAccountCommand to configure new merchant accounts - id: AccountCreatedEvent relationship: appliedIn description: Applied in AccountCreatedEvent to establish account configuration properties: - name: id type: integer description: Unique identifier for the bookkeeping configuration (auto-generated primary key) required: true example: 15656 - name: name type: string description: Descriptive name of the configuration required: true example: "easy/merchant" - name: chart_of_accounts_fk type: integer description: Foreign key reference to the chart of accounts required: false example: 15655 --- # BookKeepingConfig Entity The BookKeepingConfig entity defines the configuration and rules for bookkeeping operations within the accounting system. It establishes the relationship between transaction types and their corresponding posting rules, ensuring consistent financial recording across all operations. ## Properties ## Schema ## Configuration Structure The bookkeeping configuration organizes financial rules through: - **Transaction Definitions**: Specific transaction types and their processing rules - **Posting Rules**: Instructions for how transactions affect different accounts - **Account Mappings**: Relationships between transaction types and target accounts - **Validation Rules**: Business rules that must be satisfied for transaction processing ## Supported Transaction Types Common transaction types managed by bookkeeping configurations include: - **CHARGE**: Customer payment transactions - **REFUND**: Money returned to customers - **FEE_ADDED**: Additional fees applied to transactions - **CHARGEBACK**: Disputed transaction reversals - **TOPUP**: Account balance increases - **REMITTANCE**: Settlement payments to merchants - **ADJUSTMENT_CREDIT/DEBIT**: Manual balance adjustments - **SCHEME_FEE**: Payment scheme processing fees ## Integration Points The BookKeepingConfig is used by: - **AccountingConfigService**: To retrieve posting rules for transaction processing - **MerchantAccount Aggregate**: To validate and process financial transactions - **Admin Backend**: For configuration management and updates - **Transaction Processing**: To determine correct account postings ## Validation and Compliance - Ensures double-entry bookkeeping principles are maintained - Validates that all transaction types have corresponding posting rules - Enforces business rules specific to different merchant types or regions - Supports currency-specific configurations ## Configuration Management - Managed through the admin backend interface - Supports versioning and change tracking - Allows for environment-specific configurations - Enables real-time updates without service restarts ## Raw Schema:./schema.json { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "title": "BookKeepingConfig", "description": "Configuration entity that defines bookkeeping rules and transaction definitions for accounting operations", "properties": { "id": { "type": "integer", "description": "Unique identifier for the bookkeeping configuration (auto-generated primary key)", "example": 15656 }, "name": { "type": "string", "description": "Descriptive name of the configuration", "example": "easy/merchant" }, "chart_of_accounts_fk": { "type": "integer", "description": "Foreign key reference to the chart of accounts", "example": 15655 } }, "required": ["id", "name"], "additionalProperties": false } --- name: ChartOfAccounts id: chart-of-accounts-entity version: 1.0.0 summary: Defines the structure and organization of accounts used in the accounting system schemaPath: "./schema.json" badges: - content: Java backgroundColor: blue textColor: white - content: Configuration backgroundColor: green textColor: white owners: - easy-collecting x-relationships: - id: merchant-account-entity relationship: usedBy description: Used by merchant accounts to define available account types - id: bookkeeping-config-entity relationship: referencedBy description: Referenced by bookkeeping configurations for account validation - id: account-definition-entity relationship: contains description: Contains multiple account definitions for different account types - id: posting-rule-entity relationship: providesAccountsFor description: Provides account definitions that are referenced by posting rules - id: CreateAccountCommand relationship: usedBy description: Used by CreateAccountCommand to validate account structure - id: AccountCreatedEvent relationship: appliedIn description: Applied in AccountCreatedEvent to establish account structure properties: - name: id type: integer description: Unique identifier for the chart of accounts (auto-generated primary key) required: true example: 15655 - name: name type: string description: Descriptive name of the chart of accounts required: true example: "easy/merchant" - name: description type: string description: Optional description providing additional context required: false example: "Collecting merchant sub-ledger" --- # ChartOfAccounts Entity The ChartOfAccounts entity defines the organizational structure of accounts used within the accounting system. It serves as a blueprint for creating and managing different types of accounts across various ledgers and sub-ledgers. ## Properties ## Schema ## Account Organization The chart of accounts organizes financial accounts into different categories based on accounting principles: - **Asset Accounts** (1xxx): Resources owned by the business - **Liability Accounts** (2xxx): Debts and obligations owed by the business - **Equity Accounts** (3xxx): Owner's equity and retained earnings - **Revenue Accounts** (4xxx): Income generated from business operations - **Expense Accounts** (5xxx): Costs incurred in business operations ## Usage in Accounting Service The ChartOfAccounts is used by the MerchantAccount aggregate to: - Define available account types for new merchant accounts - Validate account creation requests - Ensure consistent account structure across different merchants - Support account definition updates and modifications ## Configuration Management Charts of accounts are typically configured in the admin backend and referenced by: - Ledger hierarchies - Sub-ledger configurations - Bookkeeping configurations - Transaction definitions ## Validation Rules - Account IDs must be unique within a chart - Account types must follow the standard numbering convention - Names must be descriptive and non-empty - Each account must have a valid type classification ## Raw Schema:./schema.json { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "title": "ChartOfAccounts", "description": "Defines the structure and organization of accounts used in the accounting system", "properties": { "id": { "type": "integer", "description": "Unique identifier for the chart of accounts (auto-generated primary key)", "example": 15655 }, "name": { "type": "string", "description": "Descriptive name of the chart of accounts", "example": "easy/merchant" }, "description": { "type": "string", "description": "Optional description providing additional context", "example": "Collecting merchant sub-ledger" } }, "required": ["id", "name"], "additionalProperties": false } --- name: MerchantAccount id: merchant-account-entity version: 1.0.0 summary: Represents a merchant account aggregate that manages financial transactions and balances for a specific merchant schemaPath: "./schema.json" badges: - content: Java backgroundColor: blue textColor: white - content: Aggregate backgroundColor: orange textColor: white - content: Event Sourced backgroundColor: purple textColor: white owners: - easy-collecting x-relationships: - id: chart-of-accounts-entity relationship: uses description: Uses chart of accounts to define available account types - id: bookkeeping-config-entity relationship: configuredBy description: Configured by bookkeeping configuration for transaction processing - id: transaction-definition-entity relationship: processes description: Processes transactions according to transaction definitions - id: posting-rule-entity relationship: appliesRules description: Applies posting rules for double-entry bookkeeping - id: platform-entity relationship: associatedWith description: Associated with platforms for payment processing - id: CreateAccountCommand relationship: createdBy description: Created by CreateAccountCommand - id: AccountCreatedEvent relationship: emits description: Emits AccountCreatedEvent when created - id: AddAccountDefinitionCommand relationship: modifiedBy description: Modified by AddAccountDefinitionCommand to add account definitions - id: AccountDefinitionAddedEvent relationship: emits description: Emits AccountDefinitionAddedEvent when account definition is added - id: PostTransactionCommand relationship: processedBy description: Processes transactions via PostTransactionCommand - id: TransactionPostedEvent relationship: emits description: Emits TransactionPostedEvent when transaction is posted - id: ReservationCommand relationship: processedBy description: Processes amount reservations via ReservationCommand - id: AmountReservedEvent relationship: emits description: Emits AmountReservedEvent when amount is reserved - id: ReleaseReservationCommand relationship: processedBy description: Processes reservation releases via ReleaseReservationCommand - id: ReservationReleasedEvent relationship: emits description: Emits ReservationReleasedEvent when reservation is released - id: UpdateLedgerIdCommand relationship: modifiedBy description: Modified by UpdateLedgerIdCommand to update ledger references - id: LedgerIdUpdatedEvent relationship: emits description: Emits LedgerIdUpdatedEvent when ledger ID is updated properties: - name: id type: uuid description: Unique identifier for the account (UUID format) required: true example: "550e8400-e29b-41d4-a716-446655440000" - name: owner_id type: uuid description: Foreign key reference to the account owner required: true example: "660e8400-e29b-41d4-a716-446655440001" - name: currency type: string description: The currency in which the account operates (ISO 4217, 3 characters) required: true example: "EUR" - name: delay type: decimal description: Delay configuration for the account (numeric 2,0) required: true example: 2 - name: country type: string description: Country code where the account operates (ISO 3166, 3 characters) required: true example: "NOR" - name: iban type: string description: International Bank Account Number (max 34 characters) required: true example: "NO9386011117947" - name: bic type: string description: Bank Identifier Code (max 34 characters) required: true example: "DNBANOKKXXX" --- # MerchantAccount Entity The MerchantAccount entity represents an aggregate that manages all financial transactions and balance accounts for a specific merchant. It implements event sourcing and command handling patterns to ensure data consistency and auditability. Merchant may have multiple merchantAccounts, one per currency. ## Properties ## Schema ## Managed Account Types The MerchantAccount aggregate manages multiple types of balance accounts: - **MerchantDebt**: Tracks outstanding debt to the merchant - **ClientFunds**: Manages client funds held in custody - **PSPReceivable**: Tracks amounts receivable from Payment Service Providers - **Escrow**: Manages escrowed funds - **Caps**: Handles transaction caps and limits - **Revenue**: Tracks revenue generated ## Supported Operations - Account creation and management - Transaction posting with double-entry bookkeeping - Amount reservation and release - Balance notifications and triggers - Pending refund eligibility tracking and authorization - Ledger updates and account definition management ## Event Sourcing The MerchantAccount aggregate uses event sourcing to maintain its state through a series of events: - AccountCreatedEvent - AccountDefinitionAddedEvent - LedgerIdUpdatedEvent - TransactionPostedEvent - AmountReservedEvent - ReservationReleasedEvent - UpdateEligiblePendingRefundsArmedEvent - RemovePendingRefundEvent - ScheduleAuthorizeForEligibleRefundsEvent - BalanceUpdatedEvent ## Business Rules - Maintains double-entry bookkeeping principles - Enforces sufficient balance checks for liability accounts - Supports currency validation - Implements transaction type validation - Manages remittance order dates and due dates - Enables automatic refund authorization based on available balance - Tracks eligible pending refunds using FIFO approach ## Raw Schema:./schema.json { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "title": "MerchantAccount", "description": "Represents a merchant account aggregate that manages financial transactions and balances for a specific merchant", "properties": { "id": { "type": "string", "format": "uuid", "description": "Unique identifier for the account (UUID format)", "example": "550e8400-e29b-41d4-a716-446655440000" }, "owner_id": { "type": "string", "format": "uuid", "description": "Foreign key reference to the account owner", "example": "660e8400-e29b-41d4-a716-446655440001" }, "currency": { "type": "string", "pattern": "^[A-Z]{3}$", "description": "The currency in which the account operates (ISO 4217, 3 characters)", "example": "NOK" }, "delay": { "type": "integer", "description": "Delay configuration for the account", "example": 2 }, "country": { "type": "string", "pattern": "^[A-Z]{3}$", "description": "Country code where the account operates (ISO 3166, 3 characters)", "example": "NOR" }, "iban": { "type": "string", "maxLength": 34, "description": "International Bank Account Number (max 34 characters)", "example": "NO9386011117947" }, "bic": { "type": "string", "maxLength": 34, "description": "Bank Identifier Code (max 34 characters)", "example": "DNBANOKKXXX" } }, "required": ["id", "owner_id", "currency", "delay", "country", "iban", "bic"], "additionalProperties": false } --- name: Platform id: platform-entity version: 1.0.0 summary: Platform entity representing different payment platforms in the collecting system schemaPath: "./schema.json" badges: - content: Entity backgroundColor: purple textColor: white - content: Domain Model backgroundColor: orange textColor: white - content: Java backgroundColor: blue textColor: white owners: - easy-collecting x-entities: - id: merchant-account-entity x-commands: - id: PlatformCreateCommand x-events: - id: PlatformCreatedEvent properties: - name: platform_id type: string description: Unique identifier for the platform (primary key) required: true example: "o7km365nhsqp5glqbi746bj0l0u9ihc3" - name: platform_name type: string description: Name of the payment platform required: true example: "EASY" - name: version type: integer description: Version number of the platform configuration required: false example: 0 - name: account_holder_id type: string description: Identifier of the account holder associated with this platform required: true example: "5861813801100" --- # Platform Entity The Platform entity represents different payment platforms supported by the collecting system such as EASY, XPAY, NPG, and PAYTRAIL. ## Properties ## Schema ## Overview The Platform entity is a core domain model that encapsulates information about different payment platforms. It contains platform-specific configuration and behavior that drives how transactions are processed, fees are calculated, and payouts are handled. ## Supported Platforms - **EASY**: Easy payment platform - **XPAY**: XPAY payment gateway - **NPG**: Next Payment Gateway - **PAYTRAIL**: Paytrail payment service ## Business Rules - Platform configurations determine transaction processing behavior - Each platform may have specific fee structures and settlement rules - Platform settings affect merchant account configurations and operations ## Raw Schema:./schema.json { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "title": "Platform", "description": "Platform entity representing different payment platforms in the collecting system", "properties": { "platform_id": { "type": "string", "description": "Unique identifier for the platform (primary key)", "example": "o7km365nhsqp5glqbi746bj0l0u9ihc3" }, "platform_name": { "type": "string", "description": "Name of the payment platform", "example": "EASY" }, "version": { "type": "integer", "description": "Version number of the platform configuration", "example": 1 }, "account_holder_id": { "type": "string", "description": "Identifier of the account holder associated with this platform", "example": "5861813801100" } }, "required": ["platform_id", "platform_name", "account_holder_id"], "additionalProperties": false } --- name: PostingRule id: posting-rule-entity version: 1.0.0 summary: Defines the rules for posting transactions to specific accounts with appropriate signs (debit/credit) schemaPath: "./schema.json" badges: - content: Java backgroundColor: blue textColor: white - content: Business Rule backgroundColor: red textColor: white owners: - easy-collecting x-relationships: - id: transaction-definition-entity relationship: belongsTo description: Belongs to a specific transaction definition - id: chart-of-accounts-entity relationship: references description: References account definitions from chart of accounts - id: merchant-account-entity relationship: appliedBy description: Applied by merchant accounts during transaction processing - id: account-definition-entity relationship: references description: References specific account definitions for transaction postings - id: PostTransactionCommand relationship: appliedBy description: Applied during transaction posting via PostTransactionCommand - id: TransactionPostedEvent relationship: usedIn description: Used to determine account postings in TransactionPostedEvent properties: - name: id type: integer description: Unique identifier for the posting rule (auto-generated primary key) required: true example: 15827 - name: sign type: string description: Indicates whether the posting is POSITIVE (debit) or NEGATIVE (credit) required: false example: "NEGATIVE" - name: account_definition_fk type: integer description: Foreign key reference to the target account definition required: false example: 15652 - name: transaction_definition_fk type: integer description: Foreign key reference to the parent transaction definition required: false example: 15825 --- # PostingRule Entity The PostingRule entity defines the specific rules for how financial transactions are posted to accounts within the double-entry bookkeeping system. Each posting rule specifies which account should be affected and whether the posting should be a debit (positive) or credit (negative) entry. ## Properties ## Schema ## Double-Entry Bookkeeping PostingRules enforce the fundamental principle of double-entry bookkeeping where: - Every transaction affects at least two accounts - Total debits must equal total credits - Account balances are maintained accurately through proper sign application ## Sign Convention The sign attribute determines the impact on account balances: - **POSITIVE**: Increases asset and expense accounts, decreases liability, equity, and revenue accounts - **NEGATIVE**: Decreases asset and expense accounts, increases liability, equity, and revenue accounts ## Account Type Interactions Different account types respond differently to positive and negative postings: ### Asset Accounts (1xxx) - Positive postings increase the asset value - Negative postings decrease the asset value ### Liability Accounts (2xxx) - Positive postings decrease the liability (payment toward debt) - Negative postings increase the liability (new debt) ### Revenue Accounts (4xxx) - Positive postings decrease revenue (reversals) - Negative postings increase revenue (new income) ### Expense Accounts (5xxx) - Positive postings increase expenses - Negative postings decrease expenses (reversals) ## Usage in Transaction Processing When a transaction is processed: 1. The system retrieves all posting rules for the transaction type 2. For each rule, it applies the specified amount with the appropriate sign 3. The posting is made to the target account specified in the rule 4. Balance validation ensures the transaction maintains accounting equation balance ## Business Examples ### Charge Transaction - **Rule 1**: Post NEGATIVE to MerchantDebt (increases liability) - **Rule 2**: Post POSITIVE to PSPReceivable (increases asset) ### Refund Transaction - **Rule 1**: Post POSITIVE to MerchantDebt (decreases liability) - **Rule 2**: Post NEGATIVE to PSPReceivable (decreases asset) ## Validation Rules - Each posting rule must reference a valid account definition - Sign must be either POSITIVE or NEGATIVE - Rules must be associated with a valid transaction definition - Account types must be compatible with the intended posting direction ## Raw Schema:./schema.json { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "title": "PostingRule", "description": "Defines the rules for posting transactions to specific accounts with appropriate signs (debit/credit)", "properties": { "id": { "type": "integer", "description": "Unique identifier for the posting rule (auto-generated primary key)", "example": 15827 }, "sign": { "type": "string", "enum": ["POSITIVE", "NEGATIVE"], "description": "Indicates whether the posting is POSITIVE (debit) or NEGATIVE (credit)", "example": "NEGATIVE" }, "account_definition_fk": { "type": "integer", "description": "Foreign key reference to the target account definition", "example": 15652 }, "transaction_definition_fk": { "type": "integer", "description": "Foreign key reference to the parent transaction definition", "example": 15825 } }, "required": ["id"], "additionalProperties": false } --- name: TransactionDefinition id: transaction-definition-entity version: 1.0.0 summary: Defines the structure and posting rules for specific transaction types in the accounting system schemaPath: "./schema.json" badges: - content: Java backgroundColor: blue textColor: white - content: Configuration backgroundColor: green textColor: white owners: - easy-collecting x-relationships: - id: bookkeeping-config-entity relationship: belongsTo description: Belongs to a specific bookkeeping configuration - id: posting-rule-entity relationship: contains description: Contains multiple posting rules that define account impacts - id: merchant-account-entity relationship: processedBy description: Processed by merchant accounts during transaction handling - id: PostTransactionCommand relationship: usedBy description: Used by PostTransactionCommand to determine posting rules - id: TransactionPostedEvent relationship: appliedIn description: Applied in TransactionPostedEvent to execute account postings properties: - name: id type: integer description: Unique identifier for the transaction definition (auto-generated primary key) required: true example: 15825 - name: name type: string description: Name of the transaction type (e.g., "CHARGE", "REFUND", "FEE_ADDED") required: true example: "CHARGE" - name: bookkeeping_config_fk type: integer description: Foreign key reference to the parent bookkeeping configuration required: false example: 15656 --- # TransactionDefinition Entity The TransactionDefinition entity defines the structure and behavior of specific transaction types within the accounting system. Each transaction definition contains the posting rules that determine how transactions of that type affect various accounts in the double-entry bookkeeping system. ## Properties ## Schema ## Transaction Type Categories Transaction definitions cover various categories of financial operations: ### Payment Operations - **CHARGE**: Customer payment processing - **REFUND**: Return of funds to customers - **FEE_ADDED**: Additional fees applied to transactions ### Risk Management - **CHARGEBACK**: Disputed transaction reversals - **CHARGEBACK_CREDIT**: Credits for resolved chargebacks ### Settlement Operations - **REMITTANCE**: Settlement payments to merchants - **RESERVE_REMITTANCE**: Holding funds before settlement - **REVERSE_REMITTANCE**: Reversal of settlement payments ### Account Management - **TOPUP**: Manual account balance increases - **ADJUSTMENT_CREDIT**: Positive balance adjustments - **ADJUSTMENT_DEBIT**: Negative balance adjustments ### Operational Fees - **SCHEME_FEE**: Payment network processing fees - **CAPS_REMITTANCE**: Capacity-based settlements ## Posting Rules Integration Each transaction definition contains multiple posting rules that: - Define which accounts are affected by the transaction - Specify whether each posting is a debit (POSITIVE) or credit (NEGATIVE) - Ensure the transaction maintains double-entry bookkeeping principles - Support complex multi-account transactions ## Usage in Transaction Processing When processing a transaction: 1. The system identifies the transaction type 2. Retrieves the corresponding transaction definition 3. Applies all associated posting rules 4. Validates that debits equal credits 5. Updates account balances accordingly ## Configuration Management Transaction definitions are: - Configured through the admin backend - Associated with specific bookkeeping configurations - Validated for completeness and accuracy - Versioned to support changes over time ## Validation Rules - Transaction name must be unique within a bookkeeping configuration - Must have at least one posting rule defined - Posting rules must balance (total debits = total credits) - All referenced accounts must exist in the associated chart of accounts ## Business Impact Proper transaction definition configuration ensures: - Accurate financial reporting - Compliance with accounting standards - Consistent transaction processing - Auditability of all financial operations ## Raw Schema:./schema.json { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "title": "TransactionDefinition", "description": "Defines the structure and posting rules for specific transaction types in the accounting system", "properties": { "id": { "type": "integer", "description": "Unique identifier for the transaction definition (auto-generated primary key)", "example": 15825 }, "name": { "type": "string", "enum": ["CHARGE", "REFUND", "FEE_ADDED", "CHARGEBACK", "CHARGEBACK_CREDIT", "REMITTANCE", "RESERVE_REMITTANCE", "REVERSE_REMITTANCE", "TOPUP", "ADJUSTMENT_CREDIT", "ADJUSTMENT_DEBIT", "SCHEME_FEE", "CAPS_REMITTANCE"], "description": "Name of the transaction type", "example": "CHARGE" }, "bookkeeping_config_fk": { "type": "integer", "description": "Foreign key reference to the parent bookkeeping configuration", "example": 15656 } }, "required": ["id", "name"], "additionalProperties": false } --- # id of your channel, used for slugs and references in EventCatalog. id: grpc # Display name of the Channel, rendered in EventCatalog name: gRPC # Version of the Channel version: 1.70.1 # Short summary of your Channel summary: | gRPC (gRPC Remote Procedure Call) is a modern, high-performance framework that enables remote procedure calls using HTTP/2 and Protocol Buffers. # Optional owners, references teams or users owners: - relay-apm protocols: - gRPC x-tags: - RPC - Protobuf --- ### Overview gRPC (gRPC Remote Procedure Call) is an open-source, high-performance, language-agnostic framework for remote procedure calls (RPC). It was developed by Google and is based on Protocol Buffers (protobufs) for efficient serialization. --- # id of your channel, used for slugs and references in EventCatalog. id: https # Display name of the Channel, rendered in EventCatalog name: HTTPS # Version of the Channel version: 1.2.0 # Short summary of your Channel summary: | Hypertext Transfer Protocol Secure is an extension of the Hypertext Transfer Protocol. protocols: - http x-tags: - REST --- ### Overview Hypertext Transfer Protocol Secure is an extension of the Hypertext Transfer Protocol. It uses encryption for secure communication over a computer network, and is widely used on the Internet. In HTTPS, the communication protocol is encrypted using Transport Layer Security or, formerly, Secure Sockets Layer. --- id: add-payment-method name: add-payment-method version: 1.0.0 summary: add-payment-method steps: [] --- ​ --- id: create-partner name: create-partner version: 1.0.0 summary: create-partner steps: [] --- ​ --- id: create-payment-method-in-live name: create-payment-method-in-live version: 1.0.0 summary: create-payment-method-in-live steps: [] --- ​ --- id: create-payment-methods-in-live2 name: create-payment-methods-in-live2 version: 1.0.0 summary: create-payment-methods-in-live2 steps: [] --- ​ --- id: create-payment-methods-in-test name: create-payment-methods-in-test version: 1.0.0 summary: create-payment-methods-in-test steps: [] --- ​ --- id: create-user-v3 name: create-user-v3 version: 1.0.0 summary: create-user-v3 steps: [] --- ​ --- id: deactivate-merchant name: deactivate-merchant version: 1.0.0 summary: deactivate-merchant steps: [] --- ​ --- id: deactivate-merchant-account name: deactivate-merchant-account version: 1.0.0 summary: deactivate-merchant-account steps: [] --- ​ --- id: disable-payment-method-in-live name: disable-payment-method-in-live version: 1.0.0 summary: disable-payment-method-in-live steps: [] --- ​ --- id: edit-configuration-in-live name: edit-configuration-in-live version: 1.0.0 summary: edit-configuration-in-live steps: [] --- ​ --- id: manually-add-payment-method name: manually-add-payment-method version: 1.0.0 summary: manually-add-payment-method steps: [] --- ​ --- id: merchant-activation-relay name: merchant-activation-relay version: 1.0.0 summary: merchant-activation-relay steps: [] --- ```mermaid sequenceDiagram participant EMO participant CRM participant Signup participant MMS participant Portal participant Processing participant Relay Portal->>MMS: Create Merchant MMS->>Portal: Merchant Created MMS->>Signup: Merchant Created MMS->>EMO: CreateCase EMO->>CRM: Merchant Application Created EMO->>Signup: Merchant Application Created CRM->>MMS: Fetch merchant data? Signup-->>CRM: Upload document EMO->>CRM: Merchant Application Approved EMO->>CRM: Risk score EMO->>MMS: Merchant Application Approved MMS->>Portal: Merchant Application Approved CRM->>Relay: Merchant Onboarding Relay->>Processing: Relay Mechant notification Processing->>Processing: Store Relay MerchantId CRM->>CRM: Merchant Master Data Change (stakeholder data) CRM->>Relay: Merchant Master Data CRM->>CRM: AML data CRM->>Relay: AML ``` --- id: merchant-migration-caps name: merchant-migration-caps version: 1.0.0 summary: merchant-migration-caps steps: [] --- ​ --- id: merchant-onboarding-caps name: merchant-onboarding-caps version: 1.0.0 summary: merchant-onboarding-caps steps: [] --- ​ --- id: partner-signup-merchant-v2 name: partner-signup-merchant-v2 version: 1.0.0 summary: partner-signup-merchant-v2 steps: [] --- ​ --- id: payment name: payment version: 1.0.0 summary: payment steps: [] --- ​ --- id: PaymentFlow name: Payment Flow for Platforms version: 1.0.0 summary: Business flow for processing payments in Relay steps: - id: "platform_place_payment" title: Platform places payment next_step: "charge_payment_request" - id: "charge_payment_request" title: Charge Payment message: id: ChargePayment version: 0.0.1 next_step: "payment_initiated" - id: "payment_initiated" title: Payment Initiated message: id: PaymentInitiated version: 0.0.1 next_steps: - "payment_processed" - "payment_failed" - id: "payment_processed" title: Payment Processed message: id: PaymentProcessed version: 0.0.1 next_steps: - id: "apm_executed" label: Execute with APM - id: "send_platform_notification" label: Notify Platform - id: "payment_failed" title: Payment Failed type: node next_steps: - id: "failure_notification" label: Notify Platform - id: "retry_payment" label: Retry payment - id: "apm_executed" title: Payment Executed with APM message: id: apmExecutedPayment version: 1.0.1 next_step: "payment_redirect" - id: "payment_redirect" title: Payment Redirect type: node next_step: "payment_complete" - id: "send_platform_notification" title: Platform Notified type: node next_step: "payment_complete" - id: "failure_notification" title: Platform Notified type: node - id: "retry_payment" title: Retry Payment type: node next_step: "payment_initiated" - id: "payment_complete" title: Payment Complete message: id: PaymentComplete version: 0.0.2 next_step: "payment_completed" - id: "payment_completed" title: Payment Completed type: node --- ### Flow of feature --- id: paymentrefund name: paymentrefund version: 1.0.0 summary: paymentrefund steps: [] --- ​ --- id: paymentv2 name: paymentv2 version: 1.0.0 summary: paymentv2 steps: [] --- ​ --- id: paypal-onboarding name: paypal-onboarding version: 1.0.0 summary: paypal-onboarding steps: [] --- ​ --- id: portal-add-account-flow name: portal-add-account-flow version: 1.0.0 summary: portal-add-account-flow steps: [] --- ​ --- id: portal-pay-method-onboarding name: portal-pay-method-onboarding version: 1.0.0 summary: portal-pay-method-onboarding steps: [] --- ​ --- id: portal-signup-flow name: portal-signup-flow version: 1.0.0 summary: portal-signup-flow steps: [] --- ​ --- id: price-list-update name: price-list-update version: 1.0.0 summary: price-list-update steps: [] --- ​ --- id: settlement name: settlement version: 1.0.0 summary: settlement steps: [] --- ​ --- id: settlement-config-reg name: settlement-config-reg version: 1.0.0 summary: settlement-config-reg steps: [] --- ​ --- id: signup-link name: signup-link version: 1.0.0 summary: signup-link steps: [] --- ​ --- id: signup-v3-again name: signup-v3-again version: 1.0.0 summary: signup-v3-again steps: [] --- ​ --- id: subscription name: subscription version: 1.0.0 summary: subscription steps: [] --- ​ --- id: transaction-fee-change name: transaction-fee-change version: 1.0.0 summary: transaction-fee-change steps: [] --- ​ --- id: update-payment-method name: update-payment-method version: 1.0.0 summary: update-payment-method steps: [] --- ​ --- dictionary: - id: Shop Platform name: Shop Platform summary: "Shopify, Shopware, Magento, Prestashop etc." icon: Warehouse - id: Customer name: Customer summary: "Person who is creating order in Shop Platform and who is doing a payment" icon: Warehouse - id: Shop Order name: Shop Order summary: "An Order related with payment created in Shop Platform." description: | Order that shop admin can see in shop platform administration panel. It looks and behaves different in each Shop Platform. icon: ListOrdered - id: Cart name: Cart summary: "Entity that customer creates before creating the Shop Order" description: | Cart is converted into Shop Order at some point of the process, this process is controlled in 100% by a Shop Platform and not by Connect Team icon: Package - id: Hosted name: Hosted summary: "Type of integration between Shop Platform and Checkout" description: | One of the integration types specified in Checkout api https://developer.nexigroup.com/nexi-checkout/en-EU/api/payment-v1/#v1-payments-post-body-checkout-integrationtype where payment is done outside of the Shop Platform in page hosted by checkout and customer is redirected back to Shop Platform after payment icon: Package - id: Embedded name: Embedded summary: "Type of integration between Shop Platform and Checkout" description: | One of the integration types specified in Checkout api https://developer.nexigroup.com/nexi-checkout/en-EU/api/payment-v1/#v1-payments-post-body-checkout-integrationtype where payment terminal is displayed in Shop Platform with the iframe and customer never leaves Shop Platform icon: Package - id: Shop Webhook name: Shop Webhook summary: "Webhook send by Shop Platform" icon: PackageX - id: Webhook name: Webhook summary: "Webhook send by Checkout" icon: PackageX ---