Skip to main content

Compliance Flow

Every payment on Thiqwave is screened before money moves. Compliance is not optional and cannot be bypassed. This page describes what runs, when, and how outcomes surface to you — at the product level your integration needs to care about.

What runs

For a typical payment, Thiqwave runs:

CheckApplies toWhen
KYB (Know-Your-Business)The participant (sender)At participant creation, before a transaction can move money
Sanctions / PEP / adverse mediaParticipants and beneficiariesDuring the compliance stage of the transaction
Wallet screening / KYTStablecoin legs and wallet beneficiariesBefore any stablecoin movement required by the corridor

The exact checks vary by corridor, currency, amount, counterparty type, and product — Thiqwave applies the right policy for the route.

How outcomes surface

Compliance results drive the transaction state (see Transaction lifecycle):

OutcomeTransaction stateWebhook
PassedCOMPLIANCE_APPROVED → continuescounterparty.kyb_approved (KYB leg)
FailedCOMPLIANCE_REJECTED — no money movescounterparty.kyb_rejected (KYB leg)
Needs a humanREQUIRES_MANUAL_REVIEW

A failed check is surfaced explicitly — never hidden as a generic "pending". Your integration should treat COMPLIANCE_REJECTED and REQUIRES_MANUAL_REVIEW as terminal-for-now and stop the flow.

TEST vs LIVE

  • On TEST, compliance providers are mocked: KYB approves instantly and no real screening runs. This lets you build and validate end-to-end without real checks.
  • On LIVE, real compliance vendors run. Timing and decisioning are theirs; the platform records the decision and provider reference in an auditable trail.

What we do not expose

To protect the integrity of the checks and your end-users' privacy, Thiqwave does not return:

  • Raw compliance vendor payloads or scores.
  • The internal rules that triggered a decision.
  • End-user PII beyond what your own participant/beneficiary records contain.

If a transaction is in REQUIRES_MANUAL_REVIEW, contact support@thiqwave.com (quote the correlation_id / transaction id) rather than retrying.

Next