Stop bad payments

Bad payments stop
before they leave.

Every payment screened before funds move. Sanctions, address taint, behavior, all checked in under 100 ms. One fail, the payment stops cold.

Compliance screen
0x7f3a…8c2d
Ethereum
CLEAR
0x3a1f…9e4b
Polygon
CLEAR
0xd4e2…1a7f
Arbitrum
SANCTIONED
Screen latency 47 ms
< 100 ms
Pre-screen latency
2
Screen phases
10
Chains covered
100 %
Fail-closed rate

Two checks. One pass.

A pre-flight check decides if funds move. A post-flight check anchors the decision in the log. Same data feeds both.

01 / 04

Pre-execution screening

Counterparty address, sanctions list, and taint score are evaluated in under one hundred milliseconds. The result is pass or block, returned before funds leave the wallet.

Cross-chain taint data

The screening dataset is unified across all ten supported chains. An address sanctioned on Ethereum is sanctioned when the same agent tries it on Arbitrum, Base, or Solana.

Post-execution audit

Once the transaction lands on-chain, a post-execution audit record is written to the activity log. The record cites every data source consulted during the screen, immutable from that point forward.

If in doubt, block.

No fall-through. If the feed is down, if a lookup times out, the payment does not move. Default to block. Only safe answer.

02 / 04

The four sub-screens run in series inside the same evaluation. The address lookup, the sanctions list comparison, the taint score calculation, and the audit record write each have their own latency budget. The total still finishes under one hundred milliseconds.

If any sub-screen fails, the transaction is blocked. There is no retry that swallows the failure. The block is recorded with the underlying reason and surfaced back through the API so the developer can decide what to show the operator.

Pre-screen latency
per transaction
Address lookup
< 30 ms
Sanction list check
< 40 ms
Taint score evaluation
< 20 ms
Audit record write
< 10 ms
Total pre-screen < 100 ms

No extra call. Just safer.

You never call a screen endpoint. Every payment runs the screen inline and returns the result with the receipt.

03 / 04

The payment response carries the compliance block. It surfaces the pre-screen verdict, the post-screen verdict, and the list of data sources consulted. Both screens must clear for the transaction to settle.

payment_compliance.py
result = oris.payments.send(
    to="0x...",
    amount=25.00,
    chain="base",
)

print(result.compliance)
# {
#   "pre_screen": "clear",
#   "post_screen": "clear",
#   "sources": ["chainalysis", "trm", "internal"],
# }

Three stages. One verdict.

Pre-flight screen, settlement, post-flight audit. Same order every time. The pipeline never gets skipped.

04 / 04
01

Pre-execution screen

The screen decides whether funds may move. Pass results in transaction submission. Block results in an immediate API rejection with the reason recorded.

02

Transaction execution

The transaction is settled only if the pre-screen cleared. The on-chain receipt is captured and tied to the screening result for traceability.

03

Post-execution audit

The full screening record is stored in the activity log with all data sources cited. The audit row is queryable by agent, by counterparty, by date.

Stop a bad payment
before it happens.

Screening ships with every payment. Pick up an API key and the next call runs the full pipeline.