Webhooks

This document provides a guide to Fuse webhooks.

Fuse Webhooks Documentation

Configuring a webhook endpoint

A single URL for all webhooks can be configured in organisation settings in the Portal.
Webhook categories can be enabled/disabled from the settings
NOTE: Accounts, Payments, Transfers, Exchange Transfers are enabled by default

IP Addresses

Fuse webhooks are sent from the following IP addresses. These can be added to an allow list if required.

SandboxProduction
15.185.183.11216.62.35.28
157.241.63.9216.63.177.47
157.241.38.19516.63.180.53

Webhook retries

If posting a webhook returns a non-success status, then the webhook post is retried for up to 12 hours using an exponential backoff policy.

Fuse webhook structure

Headers

Fuse will send the following headers:

FieldTypeDescription
X-Fuse-TimestampISO-8601 TimestampTime that the webhook was sent to you. This will be in the following format: 2023-06-19T12:44:47Z.

Webhook body

Webhook bodies are encoded in JSON format with the following fields:

FieldTypeDescription
typestringType of event
event_idstringId of the event in UUID format
event_versionintegerThe webhook schema version
payloadObject (snake_case variant name)Payload of the event nested under the variant name

Webhook Categories

Fuse webhooks are organized into five main categories. You can configure which categories of webhooks your organisation receives.

Categories Overview

CategoryDescriptionEvent Types
AccountAccount lifecycle and updates2 events
PaymentLocal payment operations (inbound and outbound)5 events
TransferInternal transfers between accounts4 events
Exchange TransferCurrency exchange operations between accounts5 events
OnboardingCustomer onboarding status updates2 events

Account Webhooks

Account opened

Sent when a new account has been opened.

Schema

FieldTitleDescription
account_iduuidThe account identifier in the Fuse system.
account_typeOneOfThe type of account. Possible values are primary, payment or virtual.
account_namestringThe name set on the account.
customer_iduuidThe ID of the customer
external_idstringExternal ID set when the account request is made.
currencystringISO currency code showing the currency of the account.

Example

{
  "type": "account_opened",
  "event_id": "018c35aa-4279-83e7-a90f-4b2901246c51",
  "event_version": 1,
  "account_opened": {
    "account_id": "018c35aa-4279-83e7-a90f-4b2901246c51",
    "account_name": "Contractors Inc.",
    "customer_id": null,
    "external_id": "01H2ZZV055MFPM8FD9RCJWM6R0",
    "currency": "AED",
    "account_type": "payment"
  }
}

Account updated

Sent when an account has been updated.

Schema

FieldTitleDescription
account_iduuidThe account identifier in the Fuse system.
account_namestringThe name set on the account.
account_ownerstringThe owner name set on the account.
external_idstringExternal ID set when the account request is made

Example

{
  "type": "account_updated",
  "event_id": "018c35ab-98bf-4390-bd51-858e61a87859",
  "event_version": 3,
  "account_updated": {
    "account_id": "018c35aa-4279-83e7-a90f-4b2901246c51",
    "account_name": "Contractors Ltd.",
    "account_owner": "John Contractor",
    "external_id": "01H2ZZV055MFPM8FD9RCJWM6R0"
  }
}

Payment Webhooks

Outbound local payment created

A local payment has been initiated.

Schema

FieldTypeDescription
account_iduuidThe account identifier from where the outbound payment has been made.
transaction_iduuidThe fuse transaction identifier for the outbound transaction.
amount_with_feeintegerThe amount of the transaction in minor currency including the fee. E.g. 100 = 1.00.
instructed_amountintegerThe amount of the transaction as instructed without the fee in minor currency.
fee_amountintegerThe amount of fee incurred for the transaction in minor currency.
remitterRemitterDetailsThe details of the remitter of the payment.
beneficiaryBeneficiaryDetailsThe details of the beneficiary of the payment.
purposePurposeCodeThe purpose of the transaction. If this is unknown it is set to none.
currencystringISO currency code showing the currency of the payment.
external_referencestringThe reference as set by the customer when initiating the payment.
external_idstringExternal ID that was set on the create payment request. If nothing was set this will be none.
timestampISO8601 date timeThe timestamp of when the event took place.
fee_sourceFeeSourceAccountOptional fee source account details.

Example

{
  "type": "outbound_local_payment_created",
  "event_id": "018c35b3-def3-a3bb-792d-f79534562555",
  "event_version": 4,
  "outbound_local_payment_created": {
    "account_id": "018c355c-2413-16df-509f-40e71b142eb3",
    "transaction_id": "018c35b3-def2-e645-1d5b-86be6746537b",
    "instructed_amount": 51239,
    "amount_with_fee": 51239,
    "fee_amount": 0,
    "remitter": {
      "name": "Monday Inc.",
      "identifier": {
        "iban": "AE220910000000808720471"
      }
    },
    "beneficiary": {
      "name": "Fulan AlFulani",
      "identifier": {
        "iban": "AE120266712486572167372"
      }
    },
    "external_reference": "local*1701708016",
    "external_id": "01JDHZK7QKF0WWQG43WNFQ3YCX",
    "timestamp": "2023-12-04T16:40:29.683099191Z",
    "purpose": "goods_bought",
    "currency": "AED"
  }
}

Outbound local payment submitted

A local payment has been submitted for processing.

Schema

FieldTypeDescription
account_iduuidThe account identifier from where the outbound payment has been made.
transaction_iduuidThe fuse transaction identifier for the outbound transaction.
external_idstringExternal ID that was set on the create payment request. If nothing was set this will be none.
timestampISO8601 date timeThe timestamp of when the event took place.

Example

{
  "type": "outbound_local_payment_submitted",
  "event_id": "018c35b3-e005-fd7b-ea42-aec8c20e521f",
  "event_version": 6,
  "outbound_local_payment_submitted": {
    "account_id": "018c355c-2413-16df-509f-40e71b142eb3",
    "transaction_id": "018c35b3-def2-e645-1d5b-86be6746537b",
    "external_id": "01JDHZK7QKF0WWQG43WNFQ3YCX",
    "timestamp": "2023-12-04T16:40:29.957851510Z"
  }
}

Outbound local payment executed

The local payment has been successfully processed.

Schema

FieldTypeDescription
account_iduuidThe account identifier from where the outbound payment has been made.
transaction_iduuidThe fuse transaction identifier for the outbound transaction.
external_idstringExternal ID that was set on the create payment request. If nothing was set this will be none.
timestampISO8601 date timeThe timestamp of when the event took place.

Example

{
  "type": "outbound_local_payment_executed",
  "event_id": "018c35b4-030f-a403-dfe2-7c757e94f00b",
  "event_version": 7,
  "outbound_local_payment_executed": {
    "account_id": "018c355c-2413-16df-509f-40e71b142eb3",
    "transaction_id": "018c35b3-def2-e645-1d5b-86be6746537b",
    "external_id": "01JDHZK7QKF0WWQG43WNFQ3YCX",
    "timestamp": "2023-12-04T16:40:38.927642874Z"
  }
}

Outbound local payment failed

The local payment attempt was unsuccessful.

Schema

FieldTypeDescription
account_iduuidThe account identifier from where the outbound payment has been made.
transaction_iduuidThe fuse transaction identifier for the outbound transaction.
timestampISO8601 date timeThe timestamp of when the event took place.
external_idstringExternal ID that was set on the create payment request. If nothing was set this will be none.
failure_reasonOneOf (FailureReason)Cause of failure while processing payment.

Example

{
  "type": "outbound_local_payment_failed",
  "event_id": "018c35b9-fbdc-8081-969a-bc591888d2e6",
  "event_version": 12,
  "outbound_local_payment_failed": {
    "account_id": "018c0027-a9b0-1f65-54ea-fe723844940f",
    "transaction_id": "018c35b9-8f58-9b36-370d-b5e3f00705ff",
    "failure_reason": {
      "bank_error": "Manual failure in Portal"
    },
    "external_id": "01JDHZK7QKF0WWQG43WNFQ3YCX",
    "timestamp": "2023-12-04T16:47:10.300679370Z"
  }
}

Inbound local payment settled

An inbound local payment has settled into the account.

Schema

FieldTypeDescription
account_iduuidThe account identifier of where the inbound payment has been settled into.
transaction_iduuidThe fuse transaction identifier for the inbound transaction.
amount_with_feeintegerThe amount of the transaction in minor currency including the fee. E.g. 100 = 1.00.
instructed_amountintegerThe amount of the transaction as instructed without the fee in minor currency.
fee_amountintegerThe amount of fee incurred for the transaction in minor currency.
remitterRemitterDetailsThe details of the remitter of the payment.
beneficiaryBeneficiaryDetailsThe details of the beneficiary of the payment.
purposePurposeCodeThe purpose of the transaction. If this is unknown it is set to none.
currencystringISO currency code showing the currency of the payment.
external_referencestringThe reference as set by the customer when initiating the payment.
timestampISO8601 date timeThe timestamp of when the event took place.
fee_sourceFeeSourceAccountOptional fee source account details.

Example

{
  "type": "inbound_local_payment_settled",
  "event_id": "018c35bc-9019-34b2-5210-ff9900d349bd",
  "event_version": 40,
  "inbound_local_payment_settled": {
    "account_id": "018bfd91-ea86-a787-9d72-754cddfbc294",
    "transaction_id": "018c35bc-9086-638d-0e9a-f1f46ea6146a",
    "instructed_amount": 100000000,
    "amount_with_fee": 100000000,
    "fee_amount": 0,
    "remitter": {
      "name": "Topup",
      "identifier": {
        "iban": "AE080070000000785666509"
      }
    },
    "beneficiary": {
      "name": "AED Merchant Account",
      "identifier": {
        "iban": "AE460266386228195554412"
      }
    },
    "external_reference": "funding*1701708590",
    "timestamp": "2023-12-04T16:49:59.325104057Z",
    "purpose": "none",
    "currency": "AED"
  }
}

Transfer Webhooks

Internal transfer created

An internal transfer between two accounts has been initiated.

Schema

FieldTypeDescription
account_iduuidThe account identifier from where the transfer will be made from.
transaction_iduuidThe fuse transaction identifier for the outbound transaction.
amountintegerThe amount of the transaction in minor currency. E.g. 100 = 1.00.
to_account_iduuidThe account identifier for the transfer destination.
referencestringThe reference as set by the customer when initiating the payment.
external_idstringExternal ID that was set on the create internal transfer request. If nothing was set this will be none.
timestampISO8601 date timeThe timestamp of when the event took place.

Example

{
  "type": "internal_transfer_created",
  "event_id": "018c35ad-e939-11e1-b8ac-0896580ef2f6",
  "event_version": 38,
  "internal_transfer_created": {
    "account_id": "018bfd91-ea86-a787-9d72-754cddfbc294",
    "transaction_id": "018c35ad-e939-eea5-d179-495d3fe1a783",
    "amount": 1000000,
    "to_account_id": "018c355c-2413-16df-509f-40e71b142eb3",
    "reference": "transfer-1701707629",
    "external_id": "01JDHZK7QKF0WWQG43WNFQ3YCX",
    "timestamp": "2023-12-04T16:33:59.155913761Z"
  }
}

Inbound internal transfer settled

An internal transfer to the account has been completed and settled.

Schema

FieldTypeDescription
account_iduuidThe account identifier of where the inbound transfer is settling into.
from_account_iduuidThe account identifier for the transfer source.
transaction_iduuidThe fuse transaction identifier for the outbound transaction.
timestampISO8601 date timeThe timestamp of when the event took place.
amountintegerThe amount of the transaction in minor currency. E.g. 100 = 1.00.
referencestringThe reference as set by the customer when initiating the payment.
external_idstringExternal ID that was set on the create internal transfer request. If nothing was set this will be none.

Example

{
  "type": "inbound_internal_transfer_settled",
  "event_id": "018c35ad-e9ab-ae02-28a0-ebc9d3b70a89",
  "event_version": 3,
  "inbound_internal_transfer_settled": {
    "account_id": "018c355c-2413-16df-509f-40e71b142eb3",
    "from_account_id": "018bfd91-ea86-a787-9d72-754cddfbc294",
    "transaction_id": "018c35ad-e9ab-ae02-28a0-ebc9d3b70a89",
    "amount": 1000000,
    "timestamp": "2023-12-04T16:33:59.211640Z",
    "reference": "transfer-1701707629",
    "external_id": "01JDHZK7QKF0WWQG43WNFQ3YCX"
  }
}

Internal transfer settled

A transfer from the account has been completed.

Schema

FieldTypeDescription
account_iduuidThe account identifier of where the transfer is settling from.
transaction_iduuidThe fuse transaction identifier for the outbound transaction.
external_idstringExternal ID that was set on the create internal transfer request. If nothing was set this will be none.
timestampISO8601 date timeThe timestamp of when the event took place.

Example

{
  "type": "internal_transfer_settled",
  "event_id": "018c35ad-ea8e-031c-55ec-86af02893c79",
  "event_version": 39,
  "internal_transfer_settled": {
    "account_id": "018bfd91-ea86-a787-9d72-754cddfbc294",
    "transaction_id": "018c35ad-e939-eea5-d179-495d3fe1a783",
    "external_id": "01JDHZK7QKF0WWQG43WNFQ3YCX",
    "timestamp": "2023-12-04T16:33:59.211640Z"
  }
}

Internal transfer failed

An attempted internal transfer between two accounts was unsuccessful.

Schema

FieldTypeDescription
account_iduuidThe account identifier of where the transfer is settling from.
transaction_iduuidThe fuse transaction identifier for the outbound transaction.
timestampISO8601 date timeThe timestamp of when the event took place.
failure_reasonOneOf (FailureReason)Cause of failure while processing transfer.
external_idstringExternal ID that was set on the create internal transfer request. If nothing was set this will be none.

Example

{
  "type": "internal_transfer_failed",
  "event_id": "697cc542-aa22-4ee3-a278-949d59f24b15",
  "event_version": 44,
  "internal_transfer_failed": {
    "account_id": "018bfd91-ea86-a787-9d72-754cddfbc294",
    "transaction_id": "018c35ad-e939-eea5-d179-495d3fe1a783",
    "timestamp": "2023-12-04T16:33:59.211640Z",
    "failure_reason": {
      "bank_error": "Manual failure in Portal"
    },
    "external_id": "01JDHZK7QKF0WWQG43WNFQ3YCX"
  }
}

Exchange Transfer Webhooks

Outbound exchange transfer created

Currency exchange from one currency to another.

Schema

FieldTypeDescription
account_iduuidThe account identifier of where the exchange is settling from.
counterpart_account_iduuidThe account identifier of where the exchange is settling to.
transaction_iduuidThe fuse transaction identifier for the outbound exchange.
currencystringThe source currency of the exchange.
amountintegerThe amount of the source transaction in minor currency. E.g. 100 = 1.00.
counterpart_currencystringThe destination currency of the exchange
counterpart_amountintegerThe amount of the destination transaction in minor currency.
external_referencestringThe reference as set by the customer when initiating the exchange.
timestampISO8601 date timeThe timestamp of when the event took place.
ratedecimalThe exchange rate used to do the conversion.

Example

{
  "type": "outbound_exchange_transfer_created",
  "event_id": "019482b0-57d7-765c-bd23-2235f5d5aaab",
  "event_version": 29,
  "outbound_exchange_transfer_created": {
    "account_id": "01917542-1b7a-7c0c-a39b-17c96d0c7b53",
    "counterpart_account_id": "019342ec-af92-7470-9af9-7543cc6daf71",
    "transaction_id": "019482b0-57d7-765c-bd23-2235f5d5aaab",
    "amount": 10000,
    "counterpart_amount": 36615,
    "external_reference": "reference-123",
    "timestamp": "2024-10-10T07:49:42.487717774Z",
    "currency": "USD",
    "counterpart_currency": "AED",
    "rate": 3.6615
  }
}

Outbound exchange transfer submitted

An exchange transfer has been submitted for processing.

Schema

FieldTypeDescription
account_iduuidThe account identifier from where the outbound exchange has been made.
transaction_iduuidThe fuse transaction identifier for the outbound exchange.
timestampISO8601 date timeThe timestamp of when the event took place.

Example

{
  "type": "outbound_exchange_transfer_submitted",
  "event_id": "019482b0-871d-7d54-8346-a066ecc69221",
  "event_version": 30,
  "outbound_exchange_transfer_submitted": {
    "account_id": "01917542-1b7a-7c0c-a39b-17c96d0c7b53",
    "transaction_id": "019482b0-57d7-765c-bd23-2235f5d5aaab",
    "timestamp": "2024-10-10T07:49:54.649511283Z"
  }
}

Outbound exchange transfer executed

The outbound exchange transfer has been completed.

Schema

FieldTypeDescription
account_iduuidThe account identifier from where the outbound exchange has been made.
transaction_iduuidThe fuse transaction identifier for the outbound exchange.
timestampISO8601 date timeThe timestamp of when the event took place.

Example

{
  "type": "outbound_exchange_transfer_executed",
  "event_id": "019482b0-871d-7d54-8346-a066ecc69221",
  "event_version": 31,
  "outbound_exchange_transfer_executed": {
    "account_id": "01917542-1b7a-7c0c-a39b-17c96d0c7b53",
    "transaction_id": "019482b0-57d7-765c-bd23-2235f5d5aaab",
    "timestamp": "2024-10-10T07:49:54.649511283Z"
  }
}

Inbound exchange transfer settled

The inbound exchange transfer has settled into the destination account.

Schema

FieldTypeDescription
account_iduuidThe account identifier of where the exchange is settling into.
counterpart_account_iduuidThe account identifier of where the exchange is settling from.
transaction_iduuidThe fuse transaction identifier for the outbound exchange.
currencystringThe currency of the inbound exchange.
amountintegerThe amount of the inbound transaction in minor currency. E.g. 100 = 1.00.
counterpart_currencystringThe destination currency of the counterpart exchange
counterpart_amountintegerThe amount of the counterpart transaction in minor currency.
external_referencestringThe reference as set by the customer when initiating the exchange.
timestampISO8601 date timeThe timestamp of when the event took place.
ratedecimalThe exchange rate used to do the conversion.

Example

{
  "type": "inbound_exchange_transfer_settled",
  "event_id": "019482b0-8772-7a46-8792-73d9990dabd1",
  "event_version": 20,
  "inbound_exchange_transfer_settled": {
    "account_id": "019342ec-af92-7470-9af9-7543cc6daf71",
    "counterpart_account_id": "01917542-1b7a-7c0c-a39b-17c96d0c7b53",
    "transaction_id": "019482b0-873e-7f40-9ffe-1e3e298cbb10",
    "amount": 36615,
    "counterpart_amount": 10000,
    "external_reference": "reference-123",
    "timestamp": "2024-10-10T07:49:54.747094304Z",
    "currency": "AED",
    "counterpart_currency": "USD",
    "rate": 3.6615
  }
}

Outbound exchange transfer failed

The exchange transfer failed.

Schema

FieldTypeDescription
account_iduuidThe account identifier of where the transfer is settling from.
transaction_iduuidThe fuse transaction identifier for the outbound transaction.
timestampISO8601 date timeThe timestamp of when the event took place.
failure_reasonOneOf (FailureReason)Cause of failure while processing transfer.

Example

{
  "type": "outbound_exchange_transfer_failed",
  "event_id": "019482c7-c58d-7240-9850-9c76883b54cf",
  "event_version": 35,
  "outbound_exchange_transfer_failed": {
    "account_id": "01917542-1b7a-7c0c-a39b-17c96d0c7b53",
    "transaction_id": "019482c7-b534-7e55-a2f8-37ddb441866f",
    "failure_reason": {
      "bank_error": "Manual failure in Portal"
    },
    "timestamp": "2024-10-10T08:15:17.983389023Z"
  }
}

Onboarding Webhooks

Onboarding completed

Customer onboarding has been successfully completed.

Schema

FieldTypeDescription
customer_iduuidThe unique identifier for the customer.
currencystringISO currency code for the customer's primary currency.

Example

{
  "type": "onboarding_completed",
  "event_id": "018c35aa-4279-83e7-a90f-4b2901246c51",
  "event_version": 0,
  "onboarding_completed": {
    "customer_id": "018c35aa-4279-83e7-a90f-4b2901246c51",
    "currency": "AED"
  }
}

Onboarding failed

Customer onboarding process has failed.

Schema

FieldTypeDescription
customer_iduuidThe unique identifier for the customer.
currencystringISO currency code for the customer's primary currency.
failure_reasonOnboardingErrorThe reason why the onboarding process failed.

OnboardingError Schema

FieldTypeDescription
msgstringHuman-readable error message describing the failure
codeErrorCodeMachine-readable error code for categorizing the failure type

ErrorCode Values

CodeDescription
missing_documentRequired document is missing
missing_currency_dataCustomer does not have the currency specific data
no_shareholdersBusiness customer does not have shareholders
insufficient_majority_ownershipInsufficient majority ownership percentage
shareholder_not_onboardedShareholder is not onboarded to the specified currency
business_registration_date_missingBusiness registration date is missing
individual_missing_proof_of_address_documentIndividual does not have proof of address document
business_missing_proof_of_address_documentBusiness does not have proof of address document

Example

{
  "type": "onboarding_failed",
  "event_id": "018c35aa-4279-83e7-a90f-4b2901246c51",
  "event_version": 0,
  "onboarding_failed": {
    "customer_id": "018c35aa-4279-83e7-a90f-4b2901246c51",
    "currency": "AED",
    "failure_reason": {
      "msg": "Individual `018c35aa-4279-83e7-a90f-4b2901246c51` does not have document `passport`",
      "code": "missing_document"
    }
  }
}