Skip to content

Webhook Reference

This reference describes the documented webhook payloads.

Payload version 1

Subscriptions

See the webhook overview for legacy subscription behavior.

  • Sale

Fields

Field Type Required Description
Request object Yes Request values included by the legacy sale event.
Request.Amount number No Transaction amount.
Request.CardDifferenceAmount number No Card difference amount supplied for the transaction.
Request.CurrencyCode string or null No ISO currency code.
Request.CustomerAddress string or null No Customer address, when supplied.
Request.CustomerCity string or null No Customer city, when supplied.
Request.CustomerCountry string or null No Customer country, when supplied.
Request.CustomerEmail string or null No Customer email address, when supplied.
Request.CustomerId integer No Existing customer identifier, when supplied.
Request.CustomerPhone string or null No Customer phone number, when supplied.
Request.CustomerState string or null No Customer state or region, when supplied.
Request.InvoiceNumber string or null No Business invoice number, when supplied.
Request.OrderReference string or null No Business order reference, when supplied.
Request.PaymentLinkId string or null No Payment Link identifier, when supplied.
Request.SURI string or null No Legacy SURI value, when supplied by the caller.
Request.SaveCustomer boolean No Whether the customer should be saved.
Request.SaveToken boolean No Whether the legacy flow requested token storage.
Request.Street string or null No Cardholder billing street.
Request.SurchargeAmount number No Surcharge amount supplied for the transaction.
Request.TaxAmount number No Tax amount supplied for the transaction.
Request.TipAmount number No Tip amount supplied for the transaction.
Request.TransactionType integer No Transaction type used by the payment request.
Request.UserTransactionNumber string or null No Client supplied transaction reference.
Request.ZipCode string or null No Cardholder ZIP or postal code.
Response object Yes Response values included by the legacy sale event.
Response.Msg array or null No Supporting response messages.
Response.ResponseCode integer No Numeric result code returned by payment processing.
Response.Verbiage string or null No Processing message returned to the caller.

Examples

API — webhook-v1-sale

{
  "Request": {
    "Amount": 10.0,
    "ZipCode": "33101",
    "Street": "100 Main Street",
    "UserTransactionNumber": "sale-000123",
    "TransactionType": 1,
    "SURI": "example-suri",
    "SurchargeAmount": 0.5,
    "CardDifferenceAmount": 0.0,
    "TaxAmount": 0.0,
    "TipAmount": 1.0,
    "SaveToken": false,
    "CurrencyCode": "USD",
    "SaveCustomer": false,
    "CustomerId": 0,
    "CustomerPhone": "5550100",
    "CustomerEmail": "customer@example.test",
    "CustomerCountry": "US",
    "CustomerState": "FL",
    "CustomerCity": "Miami",
    "CustomerAddress": "100 Main Street",
    "OrderReference": "order-123",
    "PaymentLinkId": "link-123",
    "InvoiceNumber": "invoice-123"
  },
  "Response": {
    "ResponseCode": 200,
    "Msg": [
      "APPROVED"
    ],
    "Verbiage": "APPROVED"
  }
}

Payload version 2

Events

Availability

Payload version 2 is documented in advance. Availability depends on activation for your integration. Contact Blackstone support before using it.

  • ClosePreauth: ClosePreauth endpoint; closes an existing preauthorization.
  • DoFullRefund: DoFullRefund endpoint; processes a full refund.
  • DoRefund: DoRefund endpoint; processes a partial refund.
  • DoReversal: DoReversal endpoint; reverses an eligible transaction.
  • DoVoid: DoVoid endpoint; voids an eligible transaction.
  • ForceRetailSale: ForceRetailSale endpoint; processes a force retail sale.
  • ProcessPreauth: ProcessPreauth endpoint; creates a card preauthorization.
  • ProcessPreauthWithToken: ProcessPreauthWithToken endpoint; creates a tokenized preauthorization.
  • RecurringSale: RecurringSale endpoint; processes a recurring card sale.
  • Sale: Sale endpoint; charges the supplied payment method.
  • SaleDebit: SaleDebit endpoint; processes a debit card sale.
  • SaleWithApplePay: SaleWithApplePay endpoint; processes an Apple Pay sale.
  • SaleWithGooglePay: SaleWithGooglePay endpoint; processes a Google Pay sale.
  • SaleWithToken: SaleWithToken endpoint; charges a stored payment token.

Fields

Field Type Required Description
EventId string Yes Stable identifier for this logical event.
EventType string (Sale, SaleWithToken, SaleDebit, SaleWithApplePay, SaleWithGooglePay, RecurringSale, ForceRetailSale, DoRefund, DoFullRefund, DoVoid, DoReversal, ProcessPreauth, ProcessPreauthWithToken, ClosePreauth) Yes Exact public payment endpoint that produced the event.
IsTest boolean Yes Whether the operation used the test environment.
MerchantId string Yes Merchant identifier associated with the authorized request.
OccurredAtUtc string Yes UTC time at which the event was produced.
Outcome string (Succeeded, Failed, Unknown) Yes Known operation outcome at the time of publication.
Request object Yes Safe request and business reference projection.
Request.AdditionalTip number or null No Additional tip amount used by the operation.
Request.Amount number or null No Transaction amount.
Request.CardDifferenceAmount number or null No Card difference amount used by the operation.
Request.CurrencyCode string or null No ISO currency code.
Request.CustomerAddress string or null No Customer address, when supplied.
Request.CustomerCity string or null No Customer city, when supplied.
Request.CustomerCountry string or null No Customer country, when supplied.
Request.CustomerEmail string or null No Customer email address, when supplied.
Request.CustomerId integer or null No Existing customer identifier, when supplied.
Request.CustomerPhone string or null No Customer phone number, when supplied.
Request.CustomerState string or null No Customer state or region, when supplied.
Request.InvoiceNumber string or null No Business invoice number, when supplied.
Request.OrderReference string or null No Business order reference, when supplied.
Request.OriginalServiceReferenceNumber string or null No Original service reference available to the endpoint.
Request.PaymentLinkId string or null No Payment Link identifier, when supplied.
Request.SaveCustomer boolean or null No Whether the operation requested customer storage.
Request.ServiceReferenceNumber string or null No Service reference supplied by the caller, when available.
Request.ServiceTransactionNumber string or null No Original transaction reference supplied to the endpoint.
Request.Street string or null No Cardholder billing street.
Request.SurchargeAmount number or null No Surcharge amount used by the operation.
Request.TaxAmount number or null No Tax amount used by the operation.
Request.TipAmount number or null No Tip amount used by the operation.
Request.TransactionType integer or null No Transaction type used by the payment endpoint.
Request.UserTransactionNumber string or null No Client supplied transaction reference.
Request.ZipCode string or null No Cardholder ZIP or postal code.
Response object Yes Safe response and operational result projection.
Response.AppliedSurchargeAmount number or null No Actual surcharge applied by the operation.
Response.AuthorizationNumber string or null No Authorization number returned for a successful operation.
Response.Balance string or null No Remaining balance returned by the operation, when available.
Response.CardType string or null No Card type returned by the processor, when available.
Response.CustomerId integer or null No Customer identifier returned by the operation, when available.
Response.ErrorCode string or null No Stable public code for a rejection before a processor response.
Response.LastFour string or null No Last four card digits returned by the processor, when available.
Response.Msg array or null No Supporting public response messages.
Response.RefundedAmount number or null No Amount refunded by a successful full refund operation.
Response.ResponseCode integer or null No Numeric result code, or null for a pre-API Portal rejection.
Response.ServiceReferenceNumber string or null No Service reference returned by the operation.
Response.Verbiage string or null No Processing message returned to the caller.
Response.avs string or null No Address verification response code.
Response.cv string or null No Card verification response code.
Response.displayMessage string or null No Public display message for the operation result.
Response.msoft_code string or null No Processor soft response code.
Response.phard_code string or null No Processor hard response code.
SchemaVersion integer Yes Webhook envelope schema version. v2 envelopes use value 2.
Source string (Api, Portal) Yes Originating application: Api or Portal.
Stage string (Validation, Processing, Completed) Yes Processing stage at which the event was emitted.

Examples

API — webhook-v2-refund

{
  "SchemaVersion": 2,
  "EventId": "00000000-0000-4000-8000-000000000002",
  "EventType": "DoFullRefund",
  "OccurredAtUtc": "2026-09-08T18:25:43.12Z",
  "MerchantId": "99554",
  "IsTest": false,
  "Source": "Api",
  "Stage": "Completed",
  "Outcome": "Succeeded",
  "Request": {
    "Amount": 4.0,
    "ZipCode": null,
    "Street": null,
    "UserTransactionNumber": "refund-000124",
    "ServiceTransactionNumber": "ABC123",
    "OriginalServiceReferenceNumber": "ABC123",
    "ServiceReferenceNumber": null,
    "TransactionType": null,
    "SurchargeAmount": null,
    "CardDifferenceAmount": null,
    "TaxAmount": null,
    "TipAmount": null,
    "AdditionalTip": null,
    "CurrencyCode": null,
    "SaveCustomer": null,
    "CustomerId": null,
    "CustomerPhone": null,
    "CustomerEmail": null,
    "CustomerCountry": null,
    "CustomerState": null,
    "CustomerCity": null,
    "CustomerAddress": null,
    "OrderReference": null,
    "PaymentLinkId": null,
    "InvoiceNumber": null
  },
  "Response": {
    "ResponseCode": 200,
    "Msg": [
      "APPROVED"
    ],
    "Verbiage": "APPROVED",
    "ServiceReferenceNumber": "REF456",
    "AuthorizationNumber": null,
    "CardType": null,
    "LastFour": null,
    "Balance": "6.00",
    "CustomerId": 0,
    "AppliedSurchargeAmount": null,
    "avs": null,
    "cv": null,
    "msoft_code": null,
    "phard_code": null,
    "displayMessage": "Refund approved",
    "RefundedAmount": 4.0,
    "ErrorCode": null
  }
}

API — webhook-v2-rejected

{
  "SchemaVersion": 2,
  "EventId": "00000000-0000-4000-8000-000000000003",
  "EventType": "Sale",
  "OccurredAtUtc": "2026-09-08T18:25:43.12Z",
  "MerchantId": "99554",
  "IsTest": false,
  "Source": "Api",
  "Stage": "Validation",
  "Outcome": "Failed",
  "Request": {
    "Amount": 0.0,
    "ZipCode": null,
    "Street": null,
    "UserTransactionNumber": "sale-rejected-000125",
    "ServiceTransactionNumber": null,
    "OriginalServiceReferenceNumber": null,
    "ServiceReferenceNumber": null,
    "TransactionType": 0,
    "SurchargeAmount": 0.0,
    "CardDifferenceAmount": 0.0,
    "TaxAmount": 0.0,
    "TipAmount": 0.0,
    "AdditionalTip": null,
    "CurrencyCode": null,
    "SaveCustomer": false,
    "CustomerId": 0,
    "CustomerPhone": null,
    "CustomerEmail": null,
    "CustomerCountry": null,
    "CustomerState": null,
    "CustomerCity": null,
    "CustomerAddress": null,
    "OrderReference": null,
    "PaymentLinkId": null,
    "InvoiceNumber": null
  },
  "Response": {
    "ResponseCode": 502,
    "Msg": [
      "INVALID AMOUNT"
    ],
    "Verbiage": "INVALID AMOUNT",
    "ServiceReferenceNumber": null,
    "AuthorizationNumber": null,
    "CardType": null,
    "LastFour": null,
    "Balance": null,
    "CustomerId": null,
    "AppliedSurchargeAmount": null,
    "avs": null,
    "cv": null,
    "msoft_code": null,
    "phard_code": null,
    "displayMessage": "Invalid amount",
    "RefundedAmount": null,
    "ErrorCode": null
  }
}

API — webhook-v2-sale

{
  "SchemaVersion": 2,
  "EventId": "00000000-0000-4000-8000-000000000001",
  "EventType": "Sale",
  "OccurredAtUtc": "2026-09-08T18:25:43.12Z",
  "MerchantId": "99554",
  "IsTest": false,
  "Source": "Api",
  "Stage": "Completed",
  "Outcome": "Succeeded",
  "Request": {
    "Amount": 10.0,
    "ZipCode": "33101",
    "Street": "100 Main Street",
    "UserTransactionNumber": "sale-000123",
    "ServiceTransactionNumber": null,
    "OriginalServiceReferenceNumber": null,
    "ServiceReferenceNumber": null,
    "TransactionType": 1,
    "SurchargeAmount": 0.5,
    "CardDifferenceAmount": 0.0,
    "TaxAmount": 0.0,
    "TipAmount": 1.0,
    "AdditionalTip": null,
    "CurrencyCode": "USD",
    "SaveCustomer": false,
    "CustomerId": 0,
    "CustomerPhone": "5550100",
    "CustomerEmail": "customer@example.test",
    "CustomerCountry": "US",
    "CustomerState": "FL",
    "CustomerCity": "Miami",
    "CustomerAddress": "100 Main Street",
    "OrderReference": "order-123",
    "PaymentLinkId": "link-123",
    "InvoiceNumber": "invoice-123"
  },
  "Response": {
    "ResponseCode": 200,
    "Msg": [
      "APPROVED"
    ],
    "Verbiage": "APPROVED",
    "ServiceReferenceNumber": "ABC123",
    "AuthorizationNumber": "123456",
    "CardType": "VISA",
    "LastFour": "1111",
    "Balance": "10.00",
    "CustomerId": 0,
    "AppliedSurchargeAmount": 0.5,
    "avs": "Y",
    "cv": "M",
    "msoft_code": "",
    "phard_code": "",
    "displayMessage": "Approved",
    "RefundedAmount": null,
    "ErrorCode": null
  }
}

API — webhook-v2-unknown

{
  "SchemaVersion": 2,
  "EventId": "00000000-0000-4000-8000-000000000004",
  "EventType": "Sale",
  "OccurredAtUtc": "2026-09-08T18:25:43.12Z",
  "MerchantId": "99554",
  "IsTest": false,
  "Source": "Api",
  "Stage": "Processing",
  "Outcome": "Unknown",
  "Request": {
    "Amount": 10.0,
    "ZipCode": null,
    "Street": null,
    "UserTransactionNumber": "sale-unknown-000126",
    "ServiceTransactionNumber": null,
    "OriginalServiceReferenceNumber": null,
    "ServiceReferenceNumber": null,
    "TransactionType": 0,
    "SurchargeAmount": 0.0,
    "CardDifferenceAmount": 0.0,
    "TaxAmount": 0.0,
    "TipAmount": 0.0,
    "AdditionalTip": null,
    "CurrencyCode": null,
    "SaveCustomer": false,
    "CustomerId": 0,
    "CustomerPhone": null,
    "CustomerEmail": null,
    "CustomerCountry": null,
    "CustomerState": null,
    "CustomerCity": null,
    "CustomerAddress": null,
    "OrderReference": null,
    "PaymentLinkId": null,
    "InvoiceNumber": null
  },
  "Response": {
    "ResponseCode": 205,
    "Msg": [
      "The payment outcome could not be confirmed."
    ],
    "Verbiage": "The payment outcome could not be confirmed.",
    "ServiceReferenceNumber": null,
    "AuthorizationNumber": null,
    "CardType": null,
    "LastFour": null,
    "Balance": null,
    "CustomerId": null,
    "AppliedSurchargeAmount": null,
    "avs": null,
    "cv": null,
    "msoft_code": null,
    "phard_code": null,
    "displayMessage": "The payment outcome could not be confirmed.",
    "RefundedAmount": null,
    "ErrorCode": null
  }
}

Portal — webhook-v2-portal-closepreauth

{
  "SchemaVersion": 2,
  "EventId": "example-portal-event-04",
  "EventType": "ClosePreauth",
  "OccurredAtUtc": "2026-01-01T12:00:00Z",
  "MerchantId": "101",
  "IsTest": true,
  "Source": "Portal",
  "Stage": "Validation",
  "Outcome": "Failed",
  "Request": {
    "Amount": 12.34,
    "ZipCode": null,
    "Street": null,
    "UserTransactionNumber": null,
    "ServiceTransactionNumber": "example-reference-001",
    "OriginalServiceReferenceNumber": "example-reference-001",
    "ServiceReferenceNumber": null,
    "TransactionType": null,
    "SurchargeAmount": null,
    "CardDifferenceAmount": null,
    "TaxAmount": null,
    "TipAmount": null,
    "AdditionalTip": null,
    "CurrencyCode": null,
    "SaveCustomer": null,
    "CustomerId": null,
    "CustomerPhone": null,
    "CustomerEmail": null,
    "CustomerCountry": null,
    "CustomerState": null,
    "CustomerCity": null,
    "CustomerAddress": null,
    "OrderReference": null,
    "PaymentLinkId": null,
    "InvoiceNumber": null
  },
  "Response": {
    "ResponseCode": null,
    "Msg": [
      "Invalid pre-auth transaction id."
    ],
    "Verbiage": "Invalid pre-auth transaction id.",
    "ServiceReferenceNumber": null,
    "AuthorizationNumber": null,
    "CardType": null,
    "LastFour": null,
    "Balance": null,
    "CustomerId": null,
    "AppliedSurchargeAmount": null,
    "avs": null,
    "cv": null,
    "msoft_code": null,
    "phard_code": null,
    "displayMessage": null,
    "RefundedAmount": null,
    "ErrorCode": "PORTAL_INVALID_PREAUTH_REFERENCE"
  }
}

Portal — webhook-v2-portal-dorefund

{
  "SchemaVersion": 2,
  "EventId": "example-portal-event-05",
  "EventType": "DoRefund",
  "OccurredAtUtc": "2026-01-01T12:00:00Z",
  "MerchantId": "101",
  "IsTest": true,
  "Source": "Portal",
  "Stage": "Validation",
  "Outcome": "Failed",
  "Request": {
    "Amount": 12.34,
    "ZipCode": null,
    "Street": null,
    "UserTransactionNumber": null,
    "ServiceTransactionNumber": "example-reference-001",
    "OriginalServiceReferenceNumber": "example-reference-001",
    "ServiceReferenceNumber": null,
    "TransactionType": null,
    "SurchargeAmount": null,
    "CardDifferenceAmount": null,
    "TaxAmount": null,
    "TipAmount": null,
    "AdditionalTip": null,
    "CurrencyCode": null,
    "SaveCustomer": null,
    "CustomerId": null,
    "CustomerPhone": null,
    "CustomerEmail": null,
    "CustomerCountry": null,
    "CustomerState": null,
    "CustomerCity": null,
    "CustomerAddress": null,
    "OrderReference": null,
    "PaymentLinkId": null,
    "InvoiceNumber": null
  },
  "Response": {
    "ResponseCode": null,
    "Msg": [
      "Cashier is not allowed to process refunds."
    ],
    "Verbiage": "Cashier is not allowed to process refunds.",
    "ServiceReferenceNumber": null,
    "AuthorizationNumber": null,
    "CardType": null,
    "LastFour": null,
    "Balance": null,
    "CustomerId": null,
    "AppliedSurchargeAmount": null,
    "avs": null,
    "cv": null,
    "msoft_code": null,
    "phard_code": null,
    "displayMessage": null,
    "RefundedAmount": null,
    "ErrorCode": "PORTAL_REFUND_NOT_ALLOWED"
  }
}

Portal — webhook-v2-portal-forceretailsale

{
  "SchemaVersion": 2,
  "EventId": "example-portal-event-03",
  "EventType": "ForceRetailSale",
  "OccurredAtUtc": "2026-01-01T12:00:00Z",
  "MerchantId": "101",
  "IsTest": true,
  "Source": "Portal",
  "Stage": "Validation",
  "Outcome": "Failed",
  "Request": {
    "Amount": 12.34,
    "ZipCode": null,
    "Street": null,
    "UserTransactionNumber": null,
    "ServiceTransactionNumber": null,
    "OriginalServiceReferenceNumber": null,
    "ServiceReferenceNumber": null,
    "TransactionType": null,
    "SurchargeAmount": null,
    "CardDifferenceAmount": null,
    "TaxAmount": null,
    "TipAmount": null,
    "AdditionalTip": null,
    "CurrencyCode": null,
    "SaveCustomer": null,
    "CustomerId": null,
    "CustomerPhone": null,
    "CustomerEmail": null,
    "CustomerCountry": null,
    "CustomerState": null,
    "CustomerCity": null,
    "CustomerAddress": null,
    "OrderReference": null,
    "PaymentLinkId": null,
    "InvoiceNumber": null
  },
  "Response": {
    "ResponseCode": null,
    "Msg": [
      "Invalid amount."
    ],
    "Verbiage": "Invalid amount.",
    "ServiceReferenceNumber": null,
    "AuthorizationNumber": null,
    "CardType": null,
    "LastFour": null,
    "Balance": null,
    "CustomerId": null,
    "AppliedSurchargeAmount": null,
    "avs": null,
    "cv": null,
    "msoft_code": null,
    "phard_code": null,
    "displayMessage": null,
    "RefundedAmount": null,
    "ErrorCode": "PORTAL_INVALID_AMOUNT"
  }
}

Portal — webhook-v2-portal-processpreauth

{
  "SchemaVersion": 2,
  "EventId": "example-portal-event-02",
  "EventType": "ProcessPreauth",
  "OccurredAtUtc": "2026-01-01T12:00:00Z",
  "MerchantId": "101",
  "IsTest": true,
  "Source": "Portal",
  "Stage": "Validation",
  "Outcome": "Failed",
  "Request": {
    "Amount": 12.34,
    "ZipCode": null,
    "Street": null,
    "UserTransactionNumber": null,
    "ServiceTransactionNumber": null,
    "OriginalServiceReferenceNumber": null,
    "ServiceReferenceNumber": null,
    "TransactionType": null,
    "SurchargeAmount": null,
    "CardDifferenceAmount": null,
    "TaxAmount": null,
    "TipAmount": null,
    "AdditionalTip": null,
    "CurrencyCode": null,
    "SaveCustomer": null,
    "CustomerId": null,
    "CustomerPhone": null,
    "CustomerEmail": null,
    "CustomerCountry": null,
    "CustomerState": null,
    "CustomerCity": null,
    "CustomerAddress": null,
    "OrderReference": null,
    "PaymentLinkId": null,
    "InvoiceNumber": null
  },
  "Response": {
    "ResponseCode": null,
    "Msg": [
      "Invalid amount."
    ],
    "Verbiage": "Invalid amount.",
    "ServiceReferenceNumber": null,
    "AuthorizationNumber": null,
    "CardType": null,
    "LastFour": null,
    "Balance": null,
    "CustomerId": null,
    "AppliedSurchargeAmount": null,
    "avs": null,
    "cv": null,
    "msoft_code": null,
    "phard_code": null,
    "displayMessage": null,
    "RefundedAmount": null,
    "ErrorCode": "PORTAL_INVALID_AMOUNT"
  }
}

Portal — webhook-v2-portal-sale

{
  "SchemaVersion": 2,
  "EventId": "example-portal-event-01",
  "EventType": "Sale",
  "OccurredAtUtc": "2026-01-01T12:00:00Z",
  "MerchantId": "101",
  "IsTest": true,
  "Source": "Portal",
  "Stage": "Validation",
  "Outcome": "Failed",
  "Request": {
    "Amount": 12.34,
    "ZipCode": null,
    "Street": null,
    "UserTransactionNumber": null,
    "ServiceTransactionNumber": null,
    "OriginalServiceReferenceNumber": null,
    "ServiceReferenceNumber": null,
    "TransactionType": null,
    "SurchargeAmount": null,
    "CardDifferenceAmount": null,
    "TaxAmount": null,
    "TipAmount": null,
    "AdditionalTip": null,
    "CurrencyCode": null,
    "SaveCustomer": null,
    "CustomerId": null,
    "CustomerPhone": null,
    "CustomerEmail": null,
    "CustomerCountry": null,
    "CustomerState": null,
    "CustomerCity": null,
    "CustomerAddress": null,
    "OrderReference": null,
    "PaymentLinkId": "11111111-2222-4333-8444-555555555555",
    "InvoiceNumber": "example-invoice-001"
  },
  "Response": {
    "ResponseCode": null,
    "Msg": [
      "Invalid amount."
    ],
    "Verbiage": "Invalid amount.",
    "ServiceReferenceNumber": null,
    "AuthorizationNumber": null,
    "CardType": null,
    "LastFour": null,
    "Balance": null,
    "CustomerId": null,
    "AppliedSurchargeAmount": null,
    "avs": null,
    "cv": null,
    "msoft_code": null,
    "phard_code": null,
    "displayMessage": null,
    "RefundedAmount": null,
    "ErrorCode": "PORTAL_INVALID_AMOUNT"
  }
}

Portal — webhook-v2-portal-salewithapplepay

{
  "SchemaVersion": 2,
  "EventId": "example-portal-event-07",
  "EventType": "SaleWithApplePay",
  "OccurredAtUtc": "2026-01-01T12:00:00Z",
  "MerchantId": "101",
  "IsTest": true,
  "Source": "Portal",
  "Stage": "Validation",
  "Outcome": "Failed",
  "Request": {
    "Amount": 12.34,
    "ZipCode": null,
    "Street": null,
    "UserTransactionNumber": null,
    "ServiceTransactionNumber": null,
    "OriginalServiceReferenceNumber": null,
    "ServiceReferenceNumber": null,
    "TransactionType": null,
    "SurchargeAmount": null,
    "CardDifferenceAmount": null,
    "TaxAmount": null,
    "TipAmount": null,
    "AdditionalTip": null,
    "CurrencyCode": null,
    "SaveCustomer": null,
    "CustomerId": null,
    "CustomerPhone": null,
    "CustomerEmail": null,
    "CustomerCountry": null,
    "CustomerState": null,
    "CustomerCity": null,
    "CustomerAddress": null,
    "OrderReference": null,
    "PaymentLinkId": null,
    "InvoiceNumber": null
  },
  "Response": {
    "ResponseCode": null,
    "Msg": [
      "Missing Apple Pay token."
    ],
    "Verbiage": "Missing Apple Pay token.",
    "ServiceReferenceNumber": null,
    "AuthorizationNumber": null,
    "CardType": null,
    "LastFour": null,
    "Balance": null,
    "CustomerId": null,
    "AppliedSurchargeAmount": null,
    "avs": null,
    "cv": null,
    "msoft_code": null,
    "phard_code": null,
    "displayMessage": null,
    "RefundedAmount": null,
    "ErrorCode": "PORTAL_WALLET_REQUIRED"
  }
}

Portal — webhook-v2-portal-salewithgooglepay

{
  "SchemaVersion": 2,
  "EventId": "example-portal-event-08",
  "EventType": "SaleWithGooglePay",
  "OccurredAtUtc": "2026-01-01T12:00:00Z",
  "MerchantId": "101",
  "IsTest": true,
  "Source": "Portal",
  "Stage": "Validation",
  "Outcome": "Failed",
  "Request": {
    "Amount": 12.34,
    "ZipCode": null,
    "Street": null,
    "UserTransactionNumber": null,
    "ServiceTransactionNumber": null,
    "OriginalServiceReferenceNumber": null,
    "ServiceReferenceNumber": null,
    "TransactionType": null,
    "SurchargeAmount": null,
    "CardDifferenceAmount": null,
    "TaxAmount": null,
    "TipAmount": null,
    "AdditionalTip": null,
    "CurrencyCode": null,
    "SaveCustomer": null,
    "CustomerId": null,
    "CustomerPhone": null,
    "CustomerEmail": null,
    "CustomerCountry": null,
    "CustomerState": null,
    "CustomerCity": null,
    "CustomerAddress": null,
    "OrderReference": null,
    "PaymentLinkId": null,
    "InvoiceNumber": null
  },
  "Response": {
    "ResponseCode": null,
    "Msg": [
      "Missing Google Pay token."
    ],
    "Verbiage": "Missing Google Pay token.",
    "ServiceReferenceNumber": null,
    "AuthorizationNumber": null,
    "CardType": null,
    "LastFour": null,
    "Balance": null,
    "CustomerId": null,
    "AppliedSurchargeAmount": null,
    "avs": null,
    "cv": null,
    "msoft_code": null,
    "phard_code": null,
    "displayMessage": null,
    "RefundedAmount": null,
    "ErrorCode": "PORTAL_WALLET_REQUIRED"
  }
}

Portal — webhook-v2-portal-salewithtoken

{
  "SchemaVersion": 2,
  "EventId": "example-portal-event-06",
  "EventType": "SaleWithToken",
  "OccurredAtUtc": "2026-01-01T12:00:00Z",
  "MerchantId": "101",
  "IsTest": true,
  "Source": "Portal",
  "Stage": "Validation",
  "Outcome": "Failed",
  "Request": {
    "Amount": 12.34,
    "ZipCode": null,
    "Street": null,
    "UserTransactionNumber": null,
    "ServiceTransactionNumber": null,
    "OriginalServiceReferenceNumber": null,
    "ServiceReferenceNumber": null,
    "TransactionType": null,
    "SurchargeAmount": null,
    "CardDifferenceAmount": null,
    "TaxAmount": null,
    "TipAmount": null,
    "AdditionalTip": null,
    "CurrencyCode": null,
    "SaveCustomer": null,
    "CustomerId": null,
    "CustomerPhone": null,
    "CustomerEmail": null,
    "CustomerCountry": null,
    "CustomerState": null,
    "CustomerCity": null,
    "CustomerAddress": null,
    "OrderReference": null,
    "PaymentLinkId": null,
    "InvoiceNumber": "example-invoice-001"
  },
  "Response": {
    "ResponseCode": null,
    "Msg": [
      "Invalid amount."
    ],
    "Verbiage": "Invalid amount.",
    "ServiceReferenceNumber": null,
    "AuthorizationNumber": null,
    "CardType": null,
    "LastFour": null,
    "Balance": null,
    "CustomerId": null,
    "AppliedSurchargeAmount": null,
    "avs": null,
    "cv": null,
    "msoft_code": null,
    "phard_code": null,
    "displayMessage": null,
    "RefundedAmount": null,
    "ErrorCode": "PORTAL_INVALID_AMOUNT"
  }
}