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
npm install @investor-tech/sdk# orpnpm add @investor-tech/sdk1import { investor } from "@/lib/investor";23// Emit one receipt per settled user action. The protocol derives the4// 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}Why integrate.
A matched contribution becomes a position the user keeps. It does not evaporate when the campaign ends.
The same receipt that funds a contribution makes your application visible in the Match Network directory.
You fund and read. Custody, withdrawal and recipe selection stay with the account holder.
Every dollar of match reconciles to the contribution it produced and the account that still holds it.
What happens after you call it.
Your responsibility ends at the receipt. Everything after it is protocol work.
A trade, a close, a settlement, a routed swap.
- User actionA trade, a close, a settlement, a routed swap.
- Receipt emittedThe application submits a signed receipt with the notional.
- Future Split derivedThe account's own rate decides the contribution. The app cannot set it.
- Match releasedIf a funded campaign applies, escrow releases the match.
- Batch settledContributions across the network settle every four hours.
- Recipe allocatedStock-token exposure lands in the account contract.
Emits a receipt for each settled user action.
Holds advertised rates, funded budgets and receipt validation.
Batches contributions and executes allocation into the recipe.
Owned by the wallet. The only contract that can move holdings out.
Two more calls, if you want them.
1import { useFutureSplit } from "@investor-tech/sdk/react";23export 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 });67 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}1import { investor } from "@/lib/investor";23await 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 Split8 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});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 action6 contribution: number; // Future Split derived from the account's own rate7 match: number; // Paid from Match Escrow, zero when no campaign applies8 recipe: "2040" | "2050" | "2060";9 batch: string; // Settlement batch identifier10 settledAt: string; // ISO 860111};Documentation.
Start here. What the protocol does, and where to find the rest.
The account, the layers, the settlement cycle and the security assumptions.
How a share of principal becomes a contribution, plus Feeback and Win Sweep.
Campaigns, Match Escrow, retention checkpoints and slashing.
Install the SDK, emit receipts, fund a campaign, verify settlement.