The CryptoSwift Travel Rule standard data model
Simplicity and ease of integration are key reasons why CryptoSwift developed its own open-source messaging standard, STRIP, for handling and delivering Travel Rule data. STRIP’s primary objective is to provide a simple, straightforward, JSON-based standard for transmitting Travel Rule information. It is fully compatible with major regulations, including FATF Recommendation #16 and the MiCA Transfer of Funds Regulation. It maps directly to the data model documented on this page.
Many existing standards are either not fully compliant with the latest regulations or are overly complex, making integration a significant challenge for VASPs. STRIP addresses these issues by offering a streamlined solution.
The data model
The transaction object is used in transaction API responses and transaction webhook notifications. The example below is a representative full response. Optional and enrichment fields can be null or omitted when they are not applicable or not available.
The object is not the same as a Create Transaction request:
- CryptoSwift generates fields such as
id,status, converted fiat amounts, wallet confirmation data, VASP entity IDs, warnings, risk scores, and Rule Engine results. - Create and update requests accept only the writable fields defined by their API schemas.
blockchainInfo.destinationis required when creating a transaction and cannot be changed through the Update Transaction endpoint.
For a MiCA TFR and FATF Recommendation 16 compliant request example, see Outgoing transactions. For the current request and response schemas, see the Transactions API Reference.
{
"id": "52fbe5a5-47dc-497d-9652-964d870dcbc3",
"status": "CONFIRMED",
"statusReasoning": "Beneficiary details verified",
"direction": "OUTGOING",
"createdAt": "2026-07-30T09:15:00.000Z",
"asset": "ETH",
"amount": 3.16,
"amountUsd": 10112.25,
"amountEur": 8734.58,
"metadata": "withdrawal-98421",
"blockchainInfo": {
"blockchain": "Ethereum",
"transactionHash": "6146ccf6a66d994f7c363db875e31ca35581450a4bf6d3be6cc9ac79233a69d0",
"origin": "0xb794f5ea0ba39494ce839613fffba74279579268",
"destination": "0x71C7656EC7ab88b098defB751B7401B5f6d8976F",
"destinationType": "CUSTODIAL",
"isDestinationConfirmed": true,
"destinationWalletId": 7069
},
"vaspInfo": {
"originatorVaspEntityId": "e050d3d0-965c-5e2c-8739-fb771e6d4284",
"originatorVaspName": "xCryptoCoins",
"originatorVaspEmail": "support@xCryptoCoins.domain",
"beneficiaryVaspEntityId": "08e6e0b8-63df-51e1-9575-2e54efcbb4ea",
"beneficiaryVaspName": "SwiftCryptoExchange",
"beneficiaryVaspEmail": "info@SwiftCryptoExchange.domain",
"beneficiaryVaspExtraInfo": "Tel +372 1234 5678"
},
"originator": {
"type": "NATURAL",
"name": "Marwin Hillar",
"accountNumber": "04143282398",
"address": "Alexanderplatz 25, Berlin",
"country": "Germany",
"nationalIdentificatorType": "IDC",
"nationalIdentificator": "DE123456789",
"customerNumber": "A5433634",
"dateOfBirth": "1991",
"placeOfBirth": "Germany"
},
"beneficiary": {
"type": "NATURAL",
"name": "Hanne Nikol",
"accountNumber": "AB54234232",
"country": "Estonia",
"nationalIdentificatorType": "IDC",
"nationalIdentificator": "EE11234566"
},
"travelRuleMessageSource": "CryptoSwift",
"warnings": [
{
"code": "VASP_POSSIBLY_MISMATCH",
"message": "The identified beneficiary VASP is different from the provided VASP",
"details": "Provided beneficiary VASP name differs from the identified VASP"
}
],
"riskScore": {
"originatorRiskScore": 12,
"originatorRiskSeverity": "low",
"beneficiaryRiskScore": 21,
"beneficiaryRiskSeverity": "low",
"sanctions": {
"originatorWallet": {
"isSanctioned": false,
"details": []
},
"beneficiaryWallet": {
"isSanctioned": false,
"details": []
}
}
},
"ruleEngine": {
"decision": "PROCEED",
"ruleEngineId": "6292e827-ce05-4cae-a3c8-43e1fb073e1e",
"ruleId": "bcaab652-2fc8-434f-afe3-47a339e55b95",
"ruleName": "Proceed with low-risk transfers",
"conditions": {
"all": [
{
"field": "amount",
"operator": "LT",
"value": 5000,
"currency": "EUR"
}
],
"any": []
},
"ruleEngineVersion": 2,
"scope": "OUTGOING",
"waitForSeconds": null,
"onTimeoutDecision": null
}
}
For payload examples and integration steps, see Outgoing transactions and Incoming transactions.
Data fields
Note: The message standard (STRIP) is still under development and updates to the data model are possible.
CryptoSwift will keep these possible changes non-breaking for existing customers.
Visit the STRIP Gitlab repository for the full specification.
| Field | Description | ||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
id | The UUID (specified by RFC4122) generated by the CryptoSwift API. Used to find/modify individual transactions after they are created | ||||||||||||||||||||
| Enum: Important Status Constraints:
| ||||||||||||||||||||
statusReasoning | Free text explanation for the latest status update. statusReasoning is strictly required and cannot be empty when a message status is updated to DECLINED or CANCELLED. | ||||||||||||||||||||
direction | Enum: "INCOMING" "OUTGOING" - Transaction direction. When adding a transaction via the CryptoSwift API, the default value is "OUTGOING" when the field is not provided with the request. | ||||||||||||||||||||
asset | The asset symbol that was used for the transaction (BTC, ETH or other) | ||||||||||||||||||||
createdAt | Transaction creation date and time in ISO 8601 format. CryptoSwift sets it to the current time when it is not provided during creation. | ||||||||||||||||||||
amount | Amount of asset transferred | ||||||||||||||||||||
amountUsd | Read-only converted transaction amount in USD. Can be null. | ||||||||||||||||||||
amountEur | Read-only converted transaction amount in EUR. Can be null. | ||||||||||||||||||||
metadata | Optional string for your own reference data. Can be null and has a maximum length of 1,000 characters. | ||||||||||||||||||||
blockchainInfo | Blockchain information related to the transaction (transaction hash, origin and destination wallet addresses)
| ||||||||||||||||||||
vaspInfo | The originator and beneficiary VASP information. Beneficiary VASP data helps identify the destination VASP and deliver the Travel Rule transaction message. Originator VASP data is added automatically by the CryptoSwift API when creating a new transaction.
| ||||||||||||||||||||
originator | The transaction originator information
| ||||||||||||||||||||
beneficiary | The transaction beneficiary information
| ||||||||||||||||||||
travelRuleMessageSource | Read-only originating network of the Travel Rule message. CryptoSwift integrates with multiple messaging networks, and this value identifies which network supplied the message. | ||||||||||||||||||||
warnings | Read-only array of descriptive warnings when applicable.
| ||||||||||||||||||||
riskScore | Read-only Travel Rule risk scoring and sanctions screening results when available.
| ||||||||||||||||||||
ruleEngine | Read-only Rule Engine evaluation result. Can be null when evaluation is unavailable.
|
For incoming transactions, CryptoSwift withholds participant PII until the destination wallet is confirmed. Before confirmation, the originator and beneficiary objects can contain only their type fields. See Confirming wallets and PII visibility.