Skip to main content

Organizations & Tenancy

How tenants, users, and data isolation work.

C
Written by Catalin Fetean
Updated over 3 weeks ago

Audience: Admins, Compliance, Developers
Outcomes: Secure cross-org workflows; proper enforcement of sensitive actions

Partner relationships (lifecycle & effects)

  • Invite partner (Admin/Owner) with target org name + admin email.

  • Partner accepts → Active; either side can revoke (suspends new cross-org actions).

  • Effects:

    • Contract pickers show only linked partners.

    • Disputes between linked partners can be adjudicated.

Anti-patterns

  • Creating contracts against unlinked orgs (blocked).

  • Sharing accounts across orgs (violates audit requirements).

KYC & compliance gates

Gated actions (examples)

  • Contract creation/activation

  • Escrow release

  • Large-value payments or refunds

Enforcement middleware

const enforceKyc = (action: string) => async (req, res, next) => { const result = await kycService.enforceKycForAction(req.user.id, action); if (!result.allowed) return res.status(403).json({ requiresKyc: true, message: result.reason }); next(); };

Statuses

  • unverified → pending → verified (or failed / needs_more_info).

  • UI clearly blocks gated actions and links to Settings → Compliance.

Edge cases

  • Revoked partner link: existing orders continue per contract; no new cross-org actions.

  • KYC failure locks only gated actions; read access remains per role.

QA checklist

  • Attempt gated action while unverified ⇒ 403 + { requiresKyc: true }.

  • Verified user performs same action ⇒ 200 and audit log entry.

  • Revoking partner link hides partner in contract selectors immediately.

Did this answer your question?