> ## Documentation Index
> Fetch the complete documentation index at: https://docs.corsa.finance/llms.txt
> Use this file to discover all available pages before exploring further.

# Notabene Travel Rule Integration for Transfer Data and Alerts

> Connect your Notabene account to Corsa to see Travel Rule counterparty data on transactions and raise alerts on flagged or rejected transfers.

Connect your [Notabene](https://notabene.id/) account to Corsa to bring Travel Rule data into the platform. Corsa attaches originator, beneficiary, and counterparty VASP information to the matching transaction, and can raise alerts when Notabene flags or rejects a transfer.

Notabene remains your system of record for Travel Rule messaging. Corsa reads from Notabene — it does not create, send, or update Travel Rule messages.

## How It Works

1. **Secure Connection** - Add your Notabene OAuth credentials and entity DID in Corsa. Credentials are encrypted and stored securely.
2. **Webhook Sync** - Notabene notifies Corsa whenever a transfer is created or its status changes. Corsa then fetches the full transfer from the Notabene API.
3. **Transaction Matching** - Corsa links each transfer to the matching transaction using the Notabene transfer ID or the transfer `ref`.
4. **Travel Rule Data** - Corsa attaches the originator, beneficiary, counterparty VASPs, transfer type, and current status to that transaction.
5. **Alerts** - Optional settings raise a Travel Rule alert when Notabene flags or rejects a transfer.
6. **Scheduled Sync** - Corsa also polls Notabene on a schedule, so transfers still arrive if a webhook is missed.

## What Gets Synced

### Travel Rule Data on Transactions

When a transfer is matched, Corsa attaches the Travel Rule details to the transaction:

* Originator name and account, and the originating VASP.
* Beneficiary name and account, and the beneficiary VASP.
* Intermediary VASPs and agents, when Notabene provides them.
* Transfer type and current Travel Rule status.
* The policy evaluations that produced the current outcome.
* The Notabene transfer ID, stored on the transaction's integrations.

Travel Rule data is clearly attributed to Notabene so analysts can tell it apart from transaction data you ingested yourself.

### Alerts

When enabled, Corsa creates a Travel Rule alert on the matching transaction:

| Alert field  | Value                                                                   |
| ------------ | ----------------------------------------------------------------------- |
| Category     | `TRAVEL_RULE`                                                           |
| Sub-category | `FLAGGED` or `REJECTED`                                                 |
| Vendor       | `NOTABENE`                                                              |
| Priority     | Configurable per outcome                                                |
| Description  | The triggering policy name and description, when Notabene provides them |
| Link         | Opens the transfer in Notabene                                          |

Each alert is linked to the matching transaction, so analysts can open the transaction, review the counterparty data, and escalate to a case from the same place.

<Note>Corsa creates at most one alert per transfer per outcome. A transfer that is flagged and later rejected produces one alert of each type, not one per status change.</Note>

## Transaction Matching

Travel Rule data only appears once Corsa can tell which transaction a transfer belongs to. A transfer matches if **either** of the following is true:

| Corsa Transaction Field           | Matches Against              |
| --------------------------------- | ---------------------------- |
| `integrations.notabeneTransferId` | The Notabene transfer ID.    |
| `referenceId`                     | The Notabene transfer `ref`. |

**To ensure matching**, set the Notabene transfer `ref` to the same value your Corsa transaction uses as `referenceId` — normally your own internal transaction identifier. If you already know the Notabene transfer ID when you ingest the transaction, you can set `integrations.notabeneTransferId` directly instead.

Order does not matter. If the transfer reaches Notabene before the transaction exists in Corsa, Corsa links it as soon as the transaction is ingested, and the other way round.

<Warning>Do not use the Corsa internal transaction UUID as the Notabene `ref`. The `ref` is shared with the counterparty VASP, and Corsa does not accept an internal UUID as a link.</Warning>

<Note>Alerts require a matched transaction. If a flagged or rejected transfer arrives before the Corsa transaction exists, Corsa keeps it unmatched and retries. When the matching transaction is ingested later, Corsa links the transfer, attaches Travel Rule data, and creates the alert at that point (if the alert setting is enabled).</Note>

## Status Mapping

Corsa stores the Notabene status on the transaction and uses it to decide whether an alert is raised.

| Notabene Status      | Alert Raised    |
| -------------------- | --------------- |
| `FLAGGED`            | Flag alert      |
| `FLAGGED-SETTLEMENT` | Flag alert      |
| `REJECTED`           | Rejection alert |
| `FROZEN`             | Rejection alert |
| `REVERT-REQUESTED`   | Rejection alert |
| `AUTHORIZED`         | None            |
| `SETTLED`            | None            |
| `CLEARED`            | None            |

Statuses update as Notabene progresses a transfer, so a transfer that is authorized and later frozen updates in Corsa without any action from you.

## Prerequisites

* A Notabene account with access to **Settings → API Credentials** and permission to configure webhooks.
* Your Notabene VASP DID, in the form `did:ethr:0x...` or `did:web:...`. You can read it from the dashboard URL — it is the path segment after `/dashboard/`. Corsa's setup form labels this **Entity DID**.
* Owner access to the Corsa application.

## Setting Up the Notabene Integration

### Step 1: Get Your Credentials from Notabene

1. Log in to your Notabene dashboard.
2. Go to **Settings → API Credentials** and copy the **Client ID** and **Client Secret**.
3. Find your **VASP DID** in the Notabene dashboard URL. Open any page in the dashboard — the DID is the path segment immediately after `/dashboard/`. For example, in `.../dashboard/did:web:your-entity.sandbox.notabene.id:il/transactions`, the DID is `did:web:your-entity.sandbox.notabene.id:il`.
4. Note whether you are working in sandbox or production.

<Warning>Notabene shows the client secret only when the credentials are generated. Copy it before leaving the screen — if you lose it, you will need to generate new credentials.</Warning>

### Step 2: Configure Polling

1. Log in to Corsa.
2. Go to **Developers Hub → Integrations**.
3. Click **Configure** on the Notabene card.

In **Polling Configuration**, set the **Polling Interval** — how often Corsa checks Notabene for newly created transfers. The default is **10 minutes**.

Webhooks deliver transfers and status changes in real time, so polling is a backstop that picks up anything a webhook did not deliver.

### Step 3: Configure Alert Settings

In **Alert Settings**, choose which Notabene outcomes create a Corsa alert:

* **Create alerts for flagged transfers** - Raises an alert when Notabene flags a transfer for review. Enabled by default with Medium priority.
* **Create alerts for rejected transfers** - Raises an alert when a transfer is rejected, frozen, or a revert is requested. Disabled by default, with High priority when enabled.

You can change these settings at any time without repeating the rest of the setup.

### Step 4: Authentication

In **Authentication**, provide the values you collected in Step 1:

* **Client ID** and **Client Secret** from Notabene.
* **Entity DID** — your Notabene VASP DID.
* **Environment** — Sandbox, EU Production, or US Production.

Save the integration.

<Note>Credentials are encrypted and stored securely. When you edit the integration later, leave the credential fields empty to keep the existing values.</Note>

<Warning>The integration remains in **pending setup** until you finish Step 6. Until then Corsa has no signing secret to verify webhook signatures with, so Notabene deliveries are rejected.</Warning>

### Step 5: Create the Webhook in Notabene

After you save, the Notabene integration card in Corsa shows the **Webhook URL** and the events to enable.

In your Notabene dashboard:

1. Navigate to **Webhooks → Create endpoint**.
2. Paste the **Webhook URL** from Corsa.
3. Enable these events: `notification.transferCreated`, `notification.transferStatusChanged`, `notification.transferAgentStatusChanged`, `tap.requirePresentationSatisfied`.
4. Save the endpoint.
5. Open the endpoint's **Advanced** tab and copy the signing secret, which begins with `whsec_`.

<Warning>Copy the signing secret before leaving the page. If you lose it, regenerate it in Notabene and repeat this step.</Warning>

### Step 6: Complete Setup in Corsa

1. Return to the Notabene integration in Corsa.
2. Open the **Complete Setup** step.
3. Paste the signing secret, including the `whsec_` prefix.
4. Save.

Corsa uses this secret to verify that incoming webhooks genuinely came from Notabene. The integration is now active.

### Step 7: Test the Integration

Create a test transfer in Notabene using a `ref` that matches an existing Corsa transaction `referenceId`. In Corsa, confirm that:

* The Travel Rule section appears on the matching transaction.
* Originator, beneficiary, and VASP details are populated.
* The transfer status matches Notabene.

## API Access

Use the Corsa API when you need to pre-link a transaction to a Notabene transfer or read the synced data.

| Purpose                                                                                | Endpoint                          |
| -------------------------------------------------------------------------------------- | --------------------------------- |
| Ingest a deposit with a matching `referenceId` or `integrations.notabeneTransferId`    | `POST /v1/operations/deposits`    |
| Ingest a withdrawal with a matching `referenceId` or `integrations.notabeneTransferId` | `POST /v1/operations/withdrawals` |
| Retrieve a transaction by Corsa ID or `referenceId`                                    | `GET /v1/transactions/{id}`       |

See the [Ingesting Operations guide](/api/ingesting-operations) for the full request format, and [Managing Transactions](/api/managing-transactions) for reading and updating transactions.

## Troubleshooting

| Issue                                  | Resolution                                                                                                                                                                                                          |
| -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| No Travel Rule data on a transaction   | Confirm the Notabene `ref` exactly matches the Corsa transaction `referenceId`, including case. A transfer with no `ref` and no matching transfer ID cannot be linked.                                              |
| No transfers arriving at all           | Confirm the webhook endpoint in Notabene is enabled, points at the Corsa webhook URL, and has all four events enabled.                                                                                              |
| Travel Rule data appears but no alerts | Confirm the relevant alert setting is enabled. Rejected transfers are disabled by default.                                                                                                                          |
| Alerts missing after a late match      | Confirm the transfer is linked on the transaction and the relevant alert setting is enabled. Alerts are created when the match succeeds — including when the Corsa transaction arrives after the Notabene transfer. |
| Setup will not complete                | The signing secret must be the full value from Notabene, including the `whsec_` prefix.                                                                                                                             |

***

Corsa offers native integrations with leading compliance, blockchain analytics, and custody providers. [See all integrations](/integrations) or [schedule a demo](https://calendly.com/michellelatzer/welcome-to-corsa) to see how Corsa fits into your stack.
