MATCH NETWORK ONLINE · 34 INTEGRATED APPLICATIONS · $5.08M MATCHED TO DATE · 128.9K INVESTOR ACCOUNTS · AVG MATCH RATE 12.16% · SETTLEMENT BATCH SB-18442 · 4.8K CONTRIBUTIONS / HOUR
Developers

One receipt is the whole integration.

Emit a receipt when a user action settles. The protocol reads the account's own Future Rate, applies any campaign you have funded, and allocates on the next batch. You never take custody of anything.

Integrations
34
Accounts
128.9K
Batches settled
18,442
Install
npm install @investor-tech/sdk
# or
pnpm add @investor-tech/sdk
The only required call
1import { investor } from "@/lib/investor";
2
3// Emit one receipt per settled user action. The protocol derives the
4// contribution, applies your campaign, and allocates on the next batch.
5export async function onTradeSettled(trade: SettledTrade) {
6 await investor.receipts.submit({
7 account: trade.account,
8 activity: "trade.completed",
9 notional: trade.notionalUsd,
10 reference: trade.txHash,
11 settledAt: trade.settledAt,
12 });
13}
01

Why integrate.

Retention, not rebates

A matched contribution becomes a position the user keeps. It does not evaporate when the campaign ends.

One integration, whole network

The same receipt that funds a contribution makes your application visible in the Match Network directory.

You never hold the account

You fund and read. Custody, withdrawal and recipe selection stay with the account holder.

Attribution you can audit

Every dollar of match reconciles to the contribution it produced and the account that still holds it.

02

What happens after you call it.

Your responsibility ends at the receipt. Everything after it is protocol work.

Transaction lifecycle
  1. User action
    A trade, a close, a settlement, a routed swap.
  2. Receipt emitted
    The application submits a signed receipt with the notional.
  3. Future Split derived
    The account's own rate decides the contribution. The app cannot set it.
  4. Match released
    If a funded campaign applies, escrow releases the match.
  5. Batch settled
    Contributions across the network settle every four hours.
  6. Recipe allocated
    Stock-token exposure lands in the account contract.
Contract architecture
Application layer
Integrated applicationInvestor SDKFuture Split preview

Emits a receipt for each settled user action.

Coordination layer
Campaign RegistryMatch EscrowReceipt Verifier

Holds advertised rates, funded budgets and receipt validation.

Settlement layer
Batch SettlementRecipe RouterCorporate Action Oracle

Batches contributions and executes allocation into the recipe.

Account layer
Investor AccountPosition ledgerWithdrawal authority

Owned by the wallet. The only contract that can move holdings out.

03

Two more calls, if you want them.

Client
Show the contribution before confirm
1import { useFutureSplit } from "@investor-tech/sdk/react";
2
3export function TradeFooter({ notional }: { notional: number }) {
4 // Reads the connected account's own Future Rate. Never set it yourself.
5 const { rate, contribution, match, recipe } = useFutureSplit({ notional });
6
7 return (
8 <dl className="split-preview">
9 <dt>Future Split</dt>
10 <dd>{contribution.formatted}</dd>
11 <dt>{match.application} match</dt>
12 <dd>{match.formatted}</dd>
13 <dt>Destination</dt>
14 <dd>{recipe.name}</dd>
15 </dl>
16 );
17}
Server
Fund and publish a match campaign
1import { investor } from "@/lib/investor";
2
3await investor.campaigns.publish({
4 name: "September Future Match",
5 kind: "contribution-match",
6 trigger: "trade.completed",
7 rate: 0.2, // 20% of the user's Future Split
8 cap: { amount: 5, period: "day" },
9 budget: 100_000,
10 window: { start: "2026-09-01", end: "2026-09-30" },
11 retentionCheckpointDays: 30,
12 funding: "escrow",
13});
Settled event shape
ContributionEvent
1type ContributionEvent = {
2 account: `0x${string}`;
3 application: string;
4 activity: "trade.completed" | "position.closed" | "swap.routed" | "payment.settled";
5 notional: number; // USD value of the user action
6 contribution: number; // Future Split derived from the account's own rate
7 match: number; // Paid from Match Escrow, zero when no campaign applies
8 recipe: "2040" | "2050" | "2060";
9 batch: string; // Settlement batch identifier
10 settledAt: string; // ISO 8601
11};
04

Documentation.

Service levels
Median settlement2m 14s
Batch window4 hours
Receipt verification99.98%
SDK version2.4.1
Breaking changesMajor versions only
SandboxSame settlement cycle