Skip to content

You can track and respond to events in Ripple Custody domains using one of the following methods:

MethodTypeDescription
Events APIPullQuery events on-demand using the API. Available out of the box.
WebhooksPushReceive real-time HTTP callbacks when events occur. See Webhooks (UI) or Webhooks (API).
AMQP queuePushConsume events through an Advanced Message Queuing Protocol (AMQP) compatible message queue. Requires Ripple setup.

Events do not provide a detailed description of a state change, but are a starting point for requesting further information from the API.

For more information about querying events with the API, see Events in the API reference.

You can pull events with the API out of the box. For webhook setup, see Webhooks (UI) or Webhooks (API). For AMQP queue setup, contact Ripple support.

The different event types available are described below.

Genesis event

The genesis event is triggered upon successful completion of the system setup genesis operation. The event contains the following important public keys:

  • apiPublicKey: to be used to validate the data integrity at the API level.
  • messagingPublicKey: to be used by vaults to authenticate transaction processing requests.

The payload also includes the following blocks:

  • createdEntitiesReferences: a list of all entities created
  • genesis: the full genesis payload, execution time, and signature
Event typeEvent triggerFields in the payload
GenesisSucceededSuccessful completion of genesisapiPublicKey, messagingPublicKey, type

Payload example:

{
    "domainId": "5cd224fe-193e-8bce-c94c-c6c05245e2d1",
    "payload": {
        "apiPublicKey": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAET1BnSIvToEO6r5BMmaG+O3GL0/A7JilzCdmJ3trIWIsXDuv8jAcGizraMouqWIHTx2hi3rxoH7eABURbfSSryw==",
        "messagingPublicKey": "MCowBQYDK2VwAyEAUGkt+kcvAT4vh+XSEL5Azv4XjjN4e+RojV2gr+Bu0Uk=",
        "type": "GenesisSucceeded",
        "createdEntitiesReferences": {
          "domains": [
            {
              "id": "70fe2431-0c7e-4251-aa69-8c960a4303b5",
              "parentDomainId": null | "27aef9d4-c41f-496b-a84b-89a0982f230d"
            }
          ],
          "users": [
            {
              "domainId": "70fe2431-0c7e-4251-aa69-8c960a4303b5",
              "id": "b9e2a9ca-2eb5-4cc3-98b1-0e9d3ec09129"
            }
          ],
          "policies": [
            {
              "domainId": "70fe2431-0c7e-4251-aa69-8c960a4303b5",
              "id": "8e7a40d3-b255-4a0a-8b80-13596bf566ae"
            }
          ],
          "tickers": [
            {
              "id": "def26868-39e0-4ad3-8f02-22d388409544"
            }
          ],
          "systemProperties": [
            {
              "id": "STATE_REVIEW_AUTHORITY"
            }
          ]
        },
        "genesis": null | {
          "data": {
            "executedAt": "2019-08-24T14:15:10Z",
            "payload": {
              "rootDomainSetup": {
              },
              "cryptoSetup": {
              },
              "tickers": [
              ],
              "systemProperties": [
              ]
            }
          },
          "signature": "<SIGNATURE>",
        }
      },
    },
    "id": "d1553d40-fbd9-3e44-ac7b-8cd59fa20c77",
    "sequenceNumber": 1,
    "savedAt": "2021-11-26T12:16:23.027Z"
}

Intent events

The creation, update (due to an approval or rejection), execution, or closure (after final decision or expiry) of an intent triggers a corresponding event. The event exposes the id of the intent, which you can retrieve independently to view more details of the intent.

Event typeEvent triggerFields in the payload
IntentCreatedCreation of an intentid, type
IntentUpdatedUpdate of an intentid, type
IntentExecutedExecution of an approved intentid, type
IntentClosedClosure of an approved, rejected, or failed intentid, type

Payload examples:

{
    "domainId": "5cd224fe-193e-8bce-c94c-c6c05245e2d1",
    "payload": {
        "id": "6a9a5cc0-3536-46e2-b9b5-7533ee25a0eb",
        "type": "IntentCreated"
    },
    "id": "117d8e91-7dd8-3e5d-8e5e-1d11ac57e148",
    "sequenceNumber": 1989,
    "savedAt": "2022-01-10T17:27:09.902Z"
}

The following events typically follow an IntentClosed event, as the creation or update of an entity often follows intent closure.

Some entities, such as an account, transaction, or vault, need special processing steps after creation until they are fully operational. An Updated type event is triggered upon full creation of the entity.

Event typeEvent triggerFields in the payload
AccountCreatedCreation of an accountid, type
AccountUpdatedUpdate of an accountid, type
AddressCreatedCreation of an addressid, type, accountReference
BalancesUpdatedUpdate of an account's balancestype, tickerIds, accountReference
DomainCreatedCreation of a domainid, type, parentId
DomainUpdatedUpdate of a domainid, type
EndpointCreatedCreation of a endpointid, type
EndpointUpdatedUpdate of an endpointid, type
ManifestCreatedCreation of a manifestid, type, accountId
ManifestUpdatedManifest signed by the vaultid, type, accountId
PolicyCreatedCreation of a policyid, type
PolicyUpdatedUpdate of a policyid, type
TransferUpdatedQuarantine of a transfer releasedid, type
UserCreatedCreation of a userid, type
UserUpdatedUpdate of a userid, type
VaultCreatedCreation of a vaultid, type
VaultUpdatedUpdate of a vaultid, type

The payload format is the same for all of these events except ManifestCreated and ManifestUpdated, which contain an additional accountId field.

Payload examples:

{
    "domainId": "5cd224fe-193e-8bce-c94c-c6c05245e2d1",
    "payload": {
        "id": "f0048a50-3988-4e31-9cbf-c4b6582d338d",
        "type": "AccountCreated"
    },
    "id": "f2803e98-2980-3324-9c69-430dfc88b8bc",
    "sequenceNumber": 190,
    "savedAt": "2021-12-03T11:36:06.834Z"
}

Transaction events

The creation of a transaction, its first detection on the blockchain (that is, an outgoing transaction is broadcast, or an incoming transaction is captured), and any change of status (such as confirmation status) triggers a corresponding event. The event exposes the id of the transaction as well as the references to the accounts that are related to the transaction.

A single transaction may impact multiple accounts at once, for example if a Bitcoin transaction with multiple outputs targets more than one Ripple Custody account.

Event typeEvent triggerFields in the payload
TransactionCreatedCreation of a transactionid, accountReferences, type
TransactionDetectedDetection of a transactionid, accountReferences, type
TransactionUpdatedUpdate of a transactionid, accountReferences,type

Payload examples:

{
    "domainId": "5cd224fe-193e-8bce-c94c-c6c05245e2d1",
    "payload": {
        "id": "77cd7e83-f884-46cc-a557-997cae558fb9",
        "senderReferences": [
            {
                "id": "632d9607-f523-446c-99a3-ad78fdd438e2",
                "domainId": "5cd224fe-193e-8bce-c94c-c6c05245e2d1"
            }
        ],
        "type": "TransactionCreated"
    },
    "id": "6422fdfa-558c-346f-9a2e-da6f45210ece",
    "sequenceNumber": 692,
    "savedAt": "2021-12-14T16:59:53.521Z"
}

Compliance events

The system triggers compliance-related events when compliance configuration changes or when a transfer skips quarantine. These events provide audit visibility into compliance decisions.

Event typeEvent triggerFields in the payload
ComplianceConfigurationUpdatedAccount compliance configuration changedaccountReference, skipQuarantineFrom, revision, modifiedBy, type
QuarantineSkippedInternal transfer skipped quarantinetransferId, type
QuarantineAppliedIncoming transfer quarantined for compliance reviewtransferId, type

The system emits QuarantineSkipped events when an incoming transfer bypasses quarantine due to the account's skipQuarantineFrom configuration. This occurs only for transfers between internal Ripple Custody accounts. See Skip quarantine for internal transfers for more information.

Payload examples:

{
    "domainId": "b22cfc18-df37-49a1-b7e9-1b6c3f83b32b",
    "payload": {
        "accountReference": {
            "id": "d664a3f3-d5f0-44c1-9588-326b0f00aced",
            "domainId": "b22cfc18-df37-49a1-b7e9-1b6c3f83b32b"
        },
        "skipQuarantineFrom": "Instance",
        "revision": 3,
        "modifiedBy": {
            "id": "6ac20654-450e-29e4-65e2-1bdecb7db7c4",
            "domainId": "b22cfc18-df37-49a1-b7e9-1b6c3f83b32b"
        },
        "type": "ComplianceConfigurationUpdated"
    },
    "id": "91cb7c39-880c-32f9-9ad5-51d5e14193d7",
    "sequenceNumber": 366,
    "savedAt": "2026-03-23T10:47:46.344Z"
}