# Protocols

## Overview

Travel Rule protocols define how Virtual Asset Service Providers (VASPs) securely exchange originator and beneficiary information required under global Travel Rule regulations. While multiple protocols exist, each with different architectures and technical requirements, Ospree provides a protocol-agnostic integration layer that allows customers to interact with multiple protocols through a single, unified API and console.

This approach reduces integration complexity, future-proofs compliance, and ensures interoperability across counterparties and jurisdictions.

### Travel Rule Protocol (TRP)&#x20;

What is TRP? The Travel Rule Protocol (TRP) is an open, decentralized protocol designed to enable VASPs to exchange Travel Rule data directly with one another. It focuses on minimizing centralized dependencies by allowing parties to discover endpoints and exchange information in a peer-to-peer manner. TRP is maintained by the OpenVASP initiative and is commonly adopted by infrastructure-focused and protocol-native ecosystems.

\
**Technical Overview (High Level)**

* Peer-to-peer data exchange between VASPs
* Endpoint discovery using standardized identifiers - Secure transmission of Travel Rule payloads
* No central directory or operator dependency

\
**How Ospree Helps with TRP Integration - Ospree abstracts TRP complexity by:**

* Handling TRP message formatting and lifecycle management
* Abstracting mTLS and protocol-specific requirements
* Managing counterparty discovery and protocol routing
* Providing unified monitoring, logging, and audit trails
* Allowing customers to interact with TRP via Ospree’s API and Console without building protocol-specific logic

**TRP Workflows Using Ospree Travel Rule API:**

When interacting with counterparties through TRP, a [travel address](https://gitlab.com/OpenVASP/travel-rule-protocol/-/blob/master/core/specification.md?ref_type=heads#travel-address) is used to resolve the transfer request to the correct counterparty VASP.&#x20;

* **Transfer Request** - for initiating a transfer request through TRP, use [Create Transfer](/ospree-api/travel-rule/api-endpoints/create-transfer.md) endpoint, specifying `"trp"` as the protocol and passing the travel address received from the counterparty. \
  \
  The example below assumes that the originator\_account and beneficiary\_account already exists. Refer to [Create Transfer](/ospree-api/travel-rule/api-endpoints/create-transfer.md) page for more details.&#x20;

```json
curl -X POST https://sandbox.ospree.io/api/v2/travelrule/transfers

-h 'Content-Type: application/json' \
-h 'Accept: application/json' \
-h 'Authorization: ••••••' \
-d '{
    "amount": 1.21,
    "dti": "4H95J0R2X",
    "protocol": "trp",
    "reference_id": "reference-transfer-01",
    "travel_address": "ta3J3bcpjsAEtGt9M5Q7GkD166VE22iDX6odePdJee1aBb5dX",
    "originator_address": "3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy",
    "originator_account_reference_id": "random-ref-id-101",
    "beneficiary_address": "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa",
    "beneficiary_account_reference_id": "random-ref-id-102"
}' 
```

* **Transfer Inquiry Resolution** - for approving or rejecting an incoming TRP transfer request, use [Action Transfer](/ospree-api/travel-rule/api-endpoints/action-transfer.md) endpoint.&#x20;

Approve transfer example:

```json
curl -X PATCH https://sandbox.ospree.io/api/v2/travelrule/transfers/{transfer_id}/accept

-h 'Content-Type: application/json' \
-h 'Accept: application/json' \
-h 'Authorization: ••••••' 
```

Reject transfer example:

```json
curl -X PATCH https://sandbox.ospree.io/api/v2/travelrule/transfers/{transfer_id}/reject

-h 'Content-Type: application/json' \
-h 'Accept: application/json' \
-h 'Authorization: ••••••' \
-d '{
  "reject_error": "REJECTED",
  "message": "Rejected without reason",
  "retry": false
}'
```

* **Transfer Confirmation** - for confirming or canceling the crypto transfer, use [Action Transfer](/ospree-api/travel-rule/api-endpoints/action-transfer.md) endpoint.

Confirm transfer example:

```json
curl -X PATCH https://sandbox.ospree.io/api/v2/travelrule/transfers/{transfer_id}/complete
-h 'Content-Type: application/json' \
-h 'Accept: application/json' \
-h 'Authorization: ••••••' 
-d '{
  "transaction_hash": "80003fee6bcbb2726b4d6466d690fce6caaa03771aada747eb0651637514b893"
}'
```

Cancel transfer example:

```json
curl -X PATCH https://sandbox.ospree.io/api/v2/travelrule/transfers/{transfer_id}/cancel

-h 'Content-Type: application/json' \
-h 'Accept: application/json' \
-h 'Authorization: ••••••'
```

\
**References**&#x20;

* <https://www.openvasp.org/trp>
* <https://gitlab.com/OpenVASP/travel-rule-protocol>

### TRISA&#x20;

What is TRISA? The Travel Rule Information Sharing Alliance (TRISA) is a framework and protocol designed to enable compliant and secure information sharing between VASPs. TRISA emphasizes identity verification, mutual authentication, and trust frameworks to support regulated financial institutions. TRISA is commonly adopted by regulated entities seeking strong identity assurances and structured governance.

\
**Technical Overview (High Level)**

* Mutual TLS (mTLS) for secure communications
* Certificate-based identity verification
* Defined trust framework and governance model
* Structured message exchange for Travel Rule data

\
**How Ospree Helps with TRISA Integration - Ospree simplifies TRISA adoption by:**

* Managing certificate handling and identity verification flows
* Abstracting mTLS and protocol-specific requirements
* Unifying TRISA interactions with other Travel Rule protocols
* Providing centralized reporting, auditability, and operational visibility
* Customers integrate once with Ospree and gain TRISA support without building or maintaining protocol-specific infrastructure.

**TRISA Workflows Using Ospree Travel Rule API:**

* **Transfer Request** - for initiating a transfer request through TRISA, use [Create Transfer](/ospree-api/travel-rule/api-endpoints/create-transfer.md) endpoint, specifying `"trisa"` as the protocol.&#x20;

```json
curl -X POST https://sandbox.ospree.io/api/v2/travelrule/transfers

-h 'Content-Type: application/json' \
-h 'Accept: application/json' \
-h 'Authorization: ••••••' \
-d '{
    "amount": 1.21,
    "dti": "4H95J0R2X",
    "protocol": "trisa",
    "reference_id": "reference-transfer-01",
    "beneficiary_vasp_id": "MLESJF",
    "originator_address": "3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy",
    "originator_account_reference_id": "random-ref-id-101",
    "beneficiary_address": "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa",
    "beneficiary_account_reference_id": "random-ref-id-102"
}' 
```

* **Transfer Accepted** - for accepting an incoming TRISA transfer request, use [Action Transfer](/ospree-api/travel-rule/api-endpoints/action-transfer.md) endpoint.&#x20;

```json
curl -X PATCH https://sandbox.ospree.io/api/v2/travelrule/transfers/{transfer_id}/accept

-h 'Content-Type: application/json' \
-h 'Accept: application/json' \
-h 'Authorization: ••••••' 
```

* **Transfer Completed**  - for completing the crypto transfer, use [Action Transfer](/ospree-api/travel-rule/api-endpoints/action-transfer.md) endpoint.

```json
curl -X PATCH https://sandbox.ospree.io/api/v2/travelrule/transfers/{transfer_id}/complete
-h 'Content-Type: application/json' \
-h 'Accept: application/json' \
-h 'Authorization: ••••••' 
-d '{
  "transaction_hash": "80003fee6bcbb2726b4d6466d690fce6caaa03771aada747eb0651637514b893"
}'
```

* **Transfer Repairs Requested** - for requesting repairs to the transfer, use [Action Transfer](/ospree-api/travel-rule/api-endpoints/action-transfer.md) endpoint.

```json
curl -X PATCH https://sandbox.ospree.io/api/v2/travelrule/transfers/{transfer_id}/reject

-h 'Content-Type: application/json' \
-h 'Accept: application/json' \
-h 'Authorization: ••••••' \
-d '{
  "reject_error": "UNKNOWN_WALLET_ADDRESS",
  "message": "The provided wallet address was not detected in our system. Please provide the correct wallet address.",
  "retry": true
}'
```

* **Transfer Rejected** - for rejecting the transfer, use [Action Transfer](/ospree-api/travel-rule/api-endpoints/action-transfer.md) endpoint.

```json
curl -X PATCH https://sandbox.ospree.io/api/v2/travelrule/transfers/{transfer_id}/reject

-h 'Content-Type: application/json' \
-h 'Accept: application/json' \
-h 'Authorization: ••••••' \
-d '{
  "reject_error": "REJECTED",
  "message": "Rejected without reason",
  "retry": false
}'
```

\
**References**

* <https://travelrule.io/&#x20>;
* <https://github.com/trisacrypto/trisa>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.ospree.io/ospree-api/travel-rule/protocols.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
