Data Model

Rose works from five datasets. Entities, transactions and alerts are required. Instrument links and device links are optional.

Upload them in this order, since each one refers to data uploaded before it:

  1. Entities: first. Everything else refers to them by entity_id.
  2. Instrument links and device links (optional): after entities. Each link names the entity that holds the account or card, or uses the device.
  3. Transactions: after entities. Each transaction names its sender, receiver or both by entity_id.
  4. Alerts: last, after all other data. An alert must reference entities and transactions that have already been uploaded, and an alert sent with trigger_execution: true starts its investigation right away, so data uploaded after it may not be included.

The sections below are ordered for reference, not upload order.

Alerts

Suspicious transaction activity alerts requiring investigation.

FieldKeyData TypeRequiredMax LengthDescription
Alert IDalert_idstringYes36Unique identifier for each alert in your system
Entity ID Listentity_id_listarray[string]Yes-List of associated Entity IDs that must map to previously submitted entities
Flagged Transaction ID Listflagged_transaction_id_listarray[string]Yes-Array of Transaction IDs flagged by this alert (must map to submitted transactions)
Alert Sourcesourcestring enum valueYes-TM (Transaction Monitoring) or BM (Blockchain Monitoring)
Alert TitletitlestringYes-Alert title displayed in Rose UI for reference
Alert DescriptiondescriptionstringNo-Free-form description for Rose analysis
Statusstatusstring enum valueYes-OPEN or CLOSED (Rose only analyzes OPEN alerts)
Created Atcreated_atstringYes-ISO8601 datetime when alert was created
Rule Titlerule_titlestringYes-Title of the rule that triggered the alert
Disposition Statusdisposition_statusstring enum valueNo-UNDER_INVESTIGATION, PENDING_INFO, ESCALATED, MONITORING, SUSPICIOUS_CONFIRMED, STR_FILED, CLOSED, CLEARED, NON_REFERRAL, REOPENED
Disposition Notesdisposition_notesstringNo-Free text for disposition narratives and notes
Dispositioned Atdispositioned_atstringNo-ISO8601 datetime when disposition was set
Dispositioned Bydispositioned_bystringNo-Email address of team member who changed disposition
Start Datestart_datestringNo-ISO8601 datetime of first flagged transaction
End Dateend_datestringNo-ISO8601 datetime of last flagged transaction
Reference IDs'reference_idsarray[string]No-Send multiple reference ids for that alert for mapping
Alert Sub Typealert_subtypestringNo-Alert subtype classification (e.g., DIRECT, INDIRECT)
Crypto Transferred Value Percentagecrypto_transferred_value_percentagefloatNo-Percentage of crypto transferred value associated with the alert (0-100)

Entities API Data Model

Entities (Main Model)

Individual persons and business entities involved in transactions.

FieldKeyData TypeRequiredMax LengthDescription
Entity IDentity_idstringYes36Unique identifier for each entity in your system
Typetypestring enum valueYes-INDIVIDUAL or BUSINESS
Date of BirthdobstringNo-ISO8601 date format YYYY-MM-DD
Corporate Tax IDcorporate_tax_idstringNo-Corporate identifier (EIN, FEIN, BN, UTR, CRN, etc.)
Corporate Tax ID Typecorporate_tax_id_typestringNo-Type of tax ID (EIN, FEIN, BN, UTR, CRN, Steuernummer, etc.)
Emailsemailsarray[string]No-List of email addresses
Gendergenderstring enum valueNo-MALE or FEMALE
OccupationoccupationstringNo-Individual's occupation
NamenamestringNo-Legal name of entity
Account Holder Nameaccount_holder_namestringNo-Name of person associated with business account
IP Addressesip_addressesarray[string]No-IPv4 or IPv6 addresses
Phone Numbersphone_numbersarray[string]No-Phone numbers in E.164 format
Registered Atregistered_atstringNo-ISO8601 datetime when entity registered
Mailing Street Addressmailing_street_addressstringNo-Street address
Mailing Citymailing_citystringNo-City/locality
Mailing Statemailing_statestringNo-State/province/region
Mailing Postal Codemailing_postal_codestringNo-Postal/zip code
Mailing Countrymailing_countrystringNo-ISO 3166 alpha-2 country code
WebsitewebsitestringNo-Business website URL
Verification Tierverification_tierstringNo64KYC/verification tier level
Purpose of Accountpurpose_of_accountarray[string]No-Purpose or intended use of the account
IndustryindustrystringNo-Business industry classification
Source of Fundssource_of_fundsarray[string]No-Origin of account holder's funds
Source of Wealthsource_of_wealtharray[string]No-Origin of account holder's overall wealth
Employment Statusemployment_statusstringNo-Employment status (e.g. "employed", "self_employed", "retired")
Nationalitynationalityarray[string]No-ISO 3166 Alpha-2 country codes. Multiple nationalities supported
Citizenshipcitizenshiparray[string]No-ISO 3166 Alpha-2 country codes. Multiple citizenships supported
Tagstagsarray[string]No-Free-text labels/tags/flags
Estimated Monthly Depositsestimated_monthly_depositsMonetaryRangeNo-Expected monthly deposit volume range (see MonetaryRange)
Estimated Monthly Withdrawalsestimated_monthly_withdrawalsMonetaryRangeNo-Expected monthly withdrawal volume range (see MonetaryRange)
Estimated Trades Per Monthestimated_trades_per_monthBaseRangeNo-Expected trades per month (see BaseRange)
Net Worthnet_worthMonetaryRangeNo-Declared net worth range (see MonetaryRange)
Annual Incomeannual_incomeMonetaryRangeNo-Declared annual income range (see MonetaryRange)
UBOuboUBODataNo-Ultimate Beneficial Owner data (see UBOData)
Blockchain Intelblockchain_intelarray[BlockchainIntel]No-Customer-supplied KYT Data (see BlockchainIntel)

MonetaryRange

Used for monetary estimates (deposits, withdrawals, income, net worth).

FieldKeyData TypeRequiredMax
Length
Description
Lower Boundlower_boundintegerNo*
Lower bound of the range
Upper Boundupper_boundintegerNo*
Upper bound of the range
CurrencycurrencyintegerYes
Currency ID from Axle's supported currencies

*At least one of lower_bound or upper_bound must be provided.


BaseRange

Used for count-based estimates (e.g. trades per month)

FieldKeyData TypeRequiredMax
Length
Description
Lower Boundlower_boundintegerNo*
Lower bound of the range
Upper Boundupper_boundintegerNo*
Upper bound of the range

*At least one of lower_bound or upper_bound must be provided.


UBOData

FieldKeyData TypeRequiredMax
Length
Description
Individual UBOsindividualarray[IndividualUBO]No*
Array of individual person UBOs
Corporate UBOscorporatearray[CorporateUBO]No*
Array of corporate entity UBOs

*At least one of individual or corporate must contain entries.


IndividualUBO

FieldKeyData TypeRequiredMax
Length
Description
IDidintegerYes
Client-provided unique ID within this payload
First Namefirst_namestringYes256First/given name
Middle Namemiddle_namestringNo256Middle name
Last Namelast_namestringYes
Last name
DOBdobstringNo10ISO8601 date format YYYY-MM-DD
EmailemailstringNo
Email address
PhonephonestringNo
Phone number in E.164 format
Nationalitynationalityarray[string]No
ISO 3166 Alpha-2 country codes
Citizenshipcitizenshiparray[string]No
ISO 3166 Alpha-2 country codes
Country of Birthcountry_of_birthstringNo
ISO 3166 Alpha-2 country code
City of Birthcity_of_birthstringNo
City of birth
Tax Residencytax_residencyarray[string]No
ISO 3166 Alpha-2 country codes
Ownership Percentageownership_percentagefloatNo
Ownership stake (0-100)
RolerolestringNo
Job title / role
ControllercontrollerboolNo
Has control of corporation (CEO, CFO, owner or equivalent)
Street Addressstreet_addressstringNo
Street address
CitycitystringNo256City
StatestatestringNo256State or province
Postal Codepostal_codestringNo32Postal/ZIP code
CountrycountrystringNo
ISO 3166 Alpha-2 country code

CorporateUBO

FieldKeyData TypeRequiredMax
Length
Description
IDidintegerYes
Client-provided unique ID within this payload
Entity Nameentity_namestringYes256Legal entity name
Formation Countryformation_countrystringNo
ISO 3166 Alpha-2 code
Formation Dateformation_datestringNo10Date of formation (YYYY-MM-DD)
Ownership Percentageownership_percentagefloatNo
Ownership stake (0-100)
Street Addressstreet_addressstringNo
Street address
CitycitystringNo256City
StatestatestringNo256State or province
Postal Codepostal_codestringNo32Postal/ZIP code
CountrycountrystringNo
ISO 3166 Alpha-2 country code
Childrenchildrenarray[UBOChild]No
Child UBOs relationship

UBOChild


FieldKeyData TypeRequiredMax
Length
Description
IDidintegerYes
References another UBO's id in the same payload
Relative Ownershiprelative_ownershipfloatNo
Ownership percentage the child has of this corporate UBO (0-100)

Transaction API Data Model

Transaction (Main Model)

FieldKeyData TypeRequiredMax LengthDescription
Transaction IDtransaction_idstringYes255Unique identifier in your system
TypetypeTransaction Types(ENUM)No-Transaction type (see Transaction Types below)
SubtypesubtypeTransaction Subtypes(ENUM)No-Transaction subtype (see Transaction Subtypes below)
Event Timeevent_timestringYes-ISO8601 datetime (YYYY-MM-DDTHH:MM:SS or YYYY-MM-DDTHH:MM:SSZ)
AmountamountstringYes-Transaction value as decimal string (e.g., "1234.56")
Amount Currencyamount_currencystring enum valueYes-Currency enum for amount (e.g., "USD" - see currency endpoints)
SendersenderTransactionSenderNo-Transaction sender details (see TransactionSender model)
ReceiverreceiverTransactionReceiverNo-Transaction receiver details (see TransactionReceiver model)
BalancebalancestringNo-Account balance after transaction as decimal string
BlockchainblockchainBlockchainDetailsNo-Blockchain transaction details (see BlockchainDetails model)
StatusstatusTransactionStatusNo-Current Status of the Transaction
DescriptordescriptorstringNo-Additional description of the transaction
Tagstagsarray[string]No-Free-form tags associated with the
transaction

TransactionSender

FieldKeyData TypeRequiredMax LengthDescription
Entity IDentity_idstringNo*-Unique entity identifier (must map to submitted entity)
NamenamestringNo*-Entity name (mutually exclusive with entity_id)
Blockchain Addressesblockchain_addressesarray[string]No-Associated blockchain addresses
Asset Outasset_outCurrencyAmountNo-Asset going out from sender (see CurrencyAmount model)
Blockchain Intelblockchain_intelarray[BlockchainIntel]No-Customer-supplied KYT Data (see BlockchainIntel)

*Either entity_id or name can be provided, but not both

TransactionReceiver

FieldKeyData TypeRequiredMax LengthDescription
Entity IDentity_idstringNo*-Unique entity identifier (must map to submitted entity)
NamenamestringNo*-Entity name (mutually exclusive with entity_id)
Blockchain Addressesblockchain_addressesarray[string]No-Associated blockchain addresses
Asset Inasset_inCurrencyAmountNo-Asset coming in to receiver (see CurrencyAmount model)
Blockchain Intelblockchain_intelarray[BlockchainIntel]No-Customer-supplied KYT Data

*Either entity_id or name can be provided, but not both

CurrencyAmount

FieldKeyData TypeRequiredMax LengthDescription
AmountamountstringYes-Amount value as decimal string (e.g., "123.456")
Currency IDcurrency_idintegerNo*-Currency identifier
Currency Typecurrency_typestring enum valueNo*-Type of currency: FIAT or CRYPTO

*Both currency_id and currency_type must be provided together or both omitted

BlockchainDetails

FieldKeyData TypeRequiredMax LengthDescription
Transaction Hashtransaction_hashstringNo-Transaction hash on the blockchain
Chain IDchain_idintegerNo-Blockchain network identifier (see chain endpoints)

Transaction Types

String Enum ValueDescription
DEPOSITAll funding operations
WITHDRAWALAll cash-out operations
PAYMENTAll payment operations
TRANSFERAll transfer operations
TRADEAll trading operations
FEEAll fee operations
CREDITAll credit operations
INTERESTAll interest/reward operations
LOANAll loan operations
REMITTANCEAll remittance operations
INTERNALAll internal operations
CHARGEBACKAll chargeback operations
OTHERAll other/unspecified operations
TRANSACTIONGeneric transaction type

Transaction Subtypes

String Enum ValueDescription
TRADEAll trading operations
MARGINMargin trading operations
PTL-SALEPrivate token launch sales
EARN_ALLOCATIONEarning program allocations
EARN_REWARDEarning program rewards
STAKINGAll staking operations
REWARDGeneric rewards and dividends
ROLLOVERInvestment rollovers
DEPOSIT_BANKTraditional bank deposits
DEPOSIT_CRYPTOAll cryptocurrency deposits
DEPOSIT_FIATFiat currency deposits
DEPOSIT_PROCESSORPayment processor deposits
ACCOUNT_DEPOSITAccount funding operations
VAULT_DEPOSITVault/savings deposits
WITHDRAWAL_BANKTraditional bank withdrawals
WITHDRAWAL_CRYPTOAll cryptocurrency withdrawals
WITHDRAWAL_FIATFiat currency withdrawals
WITHDRAWAL_PROCESSORPayment processor withdrawals
CASH_WITHDRAWALATM/cash withdrawals
VAULT_WITHDRAWALVault/savings withdrawals
E_TRANSFER_SENTElectronic transfer sent
E_TRANSFER_RECEIVEDElectronic transfer received
INTERNAL_TRANSFERInternal account transfers
BALANCE_TRANSFERBalance transfers between accounts
P2P_TRANSFERPerson-to-person transfers
WIRE_TRANSFERWire transfers
ACH_TRANSFERACH batch-based transfers
RTP_TRANSFERReal-Time Payments transfers
CHECK_TRANSFERPhysical check transfers
CARD_PURCHASECard-based purchases
BILL_PAYMENTBill payment transactions
LOAN_REPAYMENTLoan repayment transactions
CRYPTO_PAYMENTCryptocurrency payment transactions
CARD_SETTLEMENTCard settlement operations
SERVICE_FEEService fees
SUBSCRIPTION_FEESubscription fees
CASHBACKCashback rewards
CREDIT_TRANSACTIONCredit transactions
PROMOTIONAL_CREDITPromotional credits
INTEREST_EARNEDInterest earned
INTEREST_CHARGEDInterest charged
TRAVEL_EXPENSETravel-related expenses
SETTLEDSettlement operations
PREPAID_CARD_LOADPrepaid Card Load

Transaction Status

Status
PENDING
PROCESSING
AUTHORIZED
COMPLETED
FAILED
DECLINED
CANCELLED
REFUNDED
PARTIALLY_REFUNDED
REVERSED
ON_HOLD
EXPIRED
SCHEDULED
IN_TRANSIT
AWAITING_CONFIRMATION
PARTIALLY_COMPLETED
QUEUED
SUSPENDED
DISPUTED
WRITTEN_OFF
ATTEMPTED
UNKNOWN
CAPTURED
SETTLEMENT_ERROR

Instrument Links API Data Model

Optional. Upload after entities via POST /api/v1/transaction-monitoring/instrument-links, up to 1,000 links per request.

Instrument Link (Main Model)

One entity's link to one bank account or card. If an entity unlinks an account and links it again, send each as a separate link with its own link_source_id. A link is matched on link_source_id when given, otherwise on the instrument and the entity, so sending the same link again updates it. Datetimes without a timezone are read as UTC.

FieldKeyData TypeRequiredMax LengthDescription
Entity Source IDentity_source_idstringYes255The entity_id of the entity holding the instrument. An entity not uploaded yet is accepted and reported back
Instrument Kindinstrument_kindstring enum valueYes-BANK_ACCOUNT or CARD. Required even when instrument is omitted
Link Source IDlink_source_idstringCond.255Your id for this link. Required when instrument is omitted
InstrumentinstrumentInstrumentCond.-The account or card. Omit it for a link whose token you don't have. Required when link_source_id is omitted
Link Rolelink_rolestringNo64Owner, joint owner, authorized user, in your own words
First Seen Atfirst_seen_atstringNo-ISO8601 datetime the entity linked the instrument
Last Seen Atlast_seen_atstringNo-ISO8601 datetime the entity last used the instrument, e.g. its most recent payment
Source Removedsource_removedbooleanNo-true when the link has been removed. Leaving a link out of an upload does not remove it
Source Removed Atsource_removed_atstringNo-ISO8601 datetime the entity unlinked the instrument
Source Deleted Atsource_deleted_atstringNo-ISO8601 datetime your system deleted its record of the link (as opposed to the entity unlinking it)
Source Statussource_statusstringNo64Per-link status in your own words, e.g. USABLE / UNUSABLE for a card
Token Kindtoken_kindstring enum valueNo-Bank accounts only (rejected on cards): which token instrument.instrument_value holds. See Token Kind below
Observed Inobserved_instring enum valueNo-LINK for a link the entity made, PAYMENTS for one you inferred from its payments
AttributesattributesobjectNo-Any other detail about the link
Source As Ofsource_as_ofstringNo-ISO8601 datetime of the extract this came from

Instrument

The real bank account or card a link points at. The fields must match the link's instrument_kind: bank-account fields are rejected on a CARD link and card fields on a BANK_ACCOUNT link.

FieldKeyData TypeRequiredMax LengthDescription
Instrument Valueinstrument_valuestringYes255Token identifying the account or card. The same value across entities means the same real account or card
Last 4last4stringNo4Last four digits, either kind
Routing Numberrouting_numberstringNo32Bank accounts only
Institution IDinstitution_idstringNo64Bank accounts only
Account Typeaccount_typestringNo64Bank accounts only
Account Subtypeaccount_subtypestringNo64Bank accounts only
Is Jointis_jointbooleanNo-Bank accounts only
Card Brandcard_brandstringNo64Cards only
Card Typecard_typestringNo64Cards only
Card BINcard_binstringNo8Cards only
Card Networkcard_networkstringNo64Cards only
Source Statussource_statusstringNo64Your status for the account or card as a whole
AttributesattributesobjectNo-Any other detail about the account or card

Token Kind

If you have both tokens, send the persistent one. Rose recognizes relinks of the same account through it.

String Enum ValueDescription
ACCOUNT_TOKENA token issued per link; relinking the same account produces a new one
PERSISTENT_ACCOUNT_TOKENA token that stays the same across relinks of the same account

Observed In

String Enum ValueDescription
LINKThe entity linked the instrument
PAYMENTSYou saw the instrument in the entity's payments

Device Links API Data Model

Optional. Upload after entities via POST /api/v1/transaction-monitoring/device-links, up to 1,000 links per request.

Device Link (Main Model)

One entity's use of one device. Devices are matched across entities on device_external_id: two entities sending the same value are using the same physical device. Sending the same entity and device again updates it. Datetimes without a timezone are read as UTC.

FieldKeyData TypeRequiredMax LengthDescription
Entity Source IDentity_source_idstringYes255The entity_id of the entity using the device. An entity not uploaded yet is accepted and reported back
Device External IDdevice_external_idstringYes255Your id for the device. The same value across entities means the same physical device
PlatformplatformstringNo64iOS, Free text, e.g. iOS, Android, web
ManufacturermanufacturerstringNo128Device manufacturer
ModelmodelstringNo128Device model
OS Nameos_namestringNo64Operating system
OS Versionos_versionstringNo64Operating system version
App Storeapp_storestringNo64Store the app was installed from
First Seen Atfirst_seen_atstringNo-ISO8601 datetime the entity first used the device
Last Seen Atlast_seen_atstringNo-ISO8601 datetime the entity last used the device
App Versionapp_versionstringNo64App version on the device at last use
AttributesattributesobjectNo-Any other detail about this entity's use of the device
Source As Ofsource_as_ofstringNo-ISO8601 datetime of the extract this came from

Blockchain Intel (shared)

BlockchainIntel

FieldKeyTypeRequiredDescription
Vendorvendorstring enum valueYesData provider identifier. Accepted: chainalysis_kyt
Vendor Versionvendor_versionstringYesProvider API version. E.g. v2 or v1
Fetched Atfetched_atstringYesISO8601 datetime when the intel was retrieved from the provider
DatadataobjectYesVendor-specific structured payload. Shape defined per vendor × vendor_version pair. Refer Blockchain->Data

data shape by context:

Attached tovendorAccepted versionsdata shape
Transaction sender/receiverchainalysis_kytv2Transfer direct exposure — see "Transaction transfer exposure"
Entitychainalysis_kytv1, v2KYT user details — see "Entity KYT user details (v2 / v1)"

BlockchainIntel -> Data

Transaction transfer exposure (chainalysis_kyt · v2)

Used when blockchain_intel is attached to a transaction sender/receiver. data = the KYT direct-exposure response from GET /api/kyt/v2/transfers/{externalId}/exposures.

No result: send "direct": null to signal the lookup ran but returned nothing.

FieldKeyTypeRequiredDescription
Direct Namedirect.namestringNoIdentified counterparty name (e.g. Binance, Tornado Cash). Null if unknown
Direct Category IDdirect.categoryIdintegerNoChainalysis numeric category ID

Entity KYT user details v2 (chainalysis_kyt · v2)

Used when blockchain_intel is attached to an entity. data = the KYT user-details response from GET /api/kyt/v2/users/{externalUserId}.

FieldKeyData TypeRequiredDescription
User IDuserIdstringNoChainalysis KYT user identifier
Risk ScoreriskScorestring (enum)NoSEVERE / HIGH / MEDIUM / LOW. Null if the user has no activity
Score Updated DatescoreUpdatedDatestringNoISO8601 datetime when Chainalysis last updated the risk score
Created AtcreatedAtstringNoISO8601 datetime when the user was created in KYT
Last ActivitylastActivitystringNoISO8601 datetime timestamp of the user's most recent activity
Exposure DetailsexposureDetailsarray[KYTExposureDetail]NoPer-category exposure breakdown (see KYTExposureDetail)
PropertiespropertiesobjectNo{ "active": boolean, "country": string } (ISO 3166-1 alpha-2). v2 only

Entity KYT user details v1 (chainalysis_kyt · v1)

Used when blockchain_intel is attached to an entity with vendor_version: "v1". data = the response from GET /api/kyt/v1/users/USERID. Same as v2 except: legacy score, creationDate instead of createdAt, and no properties.

FieldKeyData TypeRequiredDescription
User IDuserIdstringNoChainalysis KYT user identifier
Risk ScoreriskScorestring (enum)NoSEVERE / HIGH / MEDIUM / LOW. Null if no activity
Score (legacy)scorestring (enum)Nored / amber / green. Legacy risk color, superseded by riskScore. v1 only
Score Updated DatescoreUpdatedDatestringNoISO8601 datetime when the risk score was last updated
Creation DatecreationDatestringNoISO8601 datetime when the user was created in KYT (v1's equivalent of createdAt)
Last ActivitylastActivitystringNoISO8601 datetime of the user's most recent activity
Exposure DetailsexposureDetailsarray[KYTExposureDetail]NoPer-category exposure breakdown (see KYTExposureDetail)

KYTExposureDetail

One entry per exposure category in exposureDetails (entity KYT user details, v1 and v2).

FieldKeyData TypeRequiredDescription
ClusterclusterobjectNo{ "name": string, "categoryId": integer, "category": string }. category (name string) is v1 only
Sent Direct ExposuresentDirectExposurefloatNoUSD value of direct exposure from funds sent
Sent Indirect ExposuresentIndirectExposurefloatNoUSD value of indirect exposure from funds sent
Received Direct ExposurereceivedDirectExposurefloatNoUSD value of direct exposure from funds received
Received Indirect ExposurereceivedIndirectExposurefloatNoUSD value of indirect exposure from funds received