Transaction categories
Every transaction has atransaction_category that determines how rules and analytics treat it:
Transaction details
Thetransaction_details object carries the financial data:
Subject and counterparty
Each transaction has a subject (required) and an optional counterparty. Both use the same party model:
When
vendor_data matches an existing user or business, Didit automatically links the transaction to that entity’s profile, enabling cross-session rule evaluation and velocity checks.
In the response, both parties come back in the parties array with roles APPLICANT and COUNTERPARTY.
Payment methods
Attach apayment_method to each party to describe the instrument on that side:
On
travelRule transactions, a counterparty payment method with payment_method_type: "unhosted_wallet" declares the destination as a self-hosted wallet and routes the transfer straight to the ownership-proof flow - see Declared self-hosted wallets.
For crypto transactions, include wallet addresses in account_id and set currency_kind to crypto so blockchain screening can run automatically. Direction controls which wallet is screened: inbound pre-transfer screening uses the sender wallet in counterparty.payment_method.account_id; outbound screening uses the destination wallet in counterparty.payment_method.account_id. If you send a blockchain hash in transaction_details.payment_reference_id, inbound transaction screening requires your service deposit address in subject.payment_method.account_id, while outbound transaction screening requires the destination wallet in counterparty.payment_method.account_id.
Crypto screening override
Useinclude_crypto_screening at the top level of the request to override the default configured in Transactions > Settings in the Console:
Device context
Include device information on the subject party to power device intelligence rules:
Device context enables rules like multi-accounting detection (same fingerprint across different subjects) and location-based risk scoring.
Custom properties
Add any additional key-value pairs in thecustom_properties object. Rules can reference these fields in their conditions — useful for passing business-specific context like product category, merchant ID, or channel.
custom_values.<key> — for example, the payload above matches custom_values.product_category eq "electronics". In the Console rule builder, keys seen on recently ingested transactions appear in the condition field selector under Custom Properties, and Enter custom property in the same group lets you type any key manually (case-sensitive). See Rules & scoring for details.
Example request
Response
The API returns the created transaction with its initial evaluation results:
See the API Reference for the full request and response schema, and the dedicated response schema reference for an annotated payload walkthrough.
Idempotency
txn_id is unique per application. Re-submitting the same txn_id returns the existing transaction rather than creating a duplicate — effectively idempotent for retries. Always generate txn_id on your side (e.g. your own transaction DB ID, UUID, or deterministic hash).
Historical backfill
Passtxn_date in the past to ingest historical transactions. Rules still evaluate by default — use the console CSV import with dry-ingest mode if you want to skip rule evaluation during bulk historical loads. See integration guide.
Next steps
Rules & scoring
How submitted transactions are evaluated against rules.
Response schema
Full annotated response payload.
Crypto screening
Automatic wallet and transaction screening for crypto transactions.
Travel rule
Attach travel rule compliance data to virtual asset transfers.
IP enrichment
IP-derived context available to rules.
API reference
Full request schema for the Create Transaction endpoint.