Your AI spends money before your customer does.

tack reverses the order. Prepaid wallets, a turn that refuses when the balance is empty, and one number per customer you can invoice on. Agencies run it one project per client. You write the tools and the screens.

For teams that have to charge early.

Join the waitlist → Request the security pack two API calls to a live tenant
In production at synoveoAI-native SaaS for lodging: every property is a tenant minuitagency: AI builds for clients, one project per client

AI broke billing in arrears.

Every answer costs real money the instant it is generated — before anyone has paid for it, and with no invoice to hide behind. Five beliefs follow from that. Everything below them is what they forced.

The beliefWhat it forcedWhat it buys you
Never spend money you haven't collectedPrepaid wallet checked before the turn, not after; refusals cost 0 and write their audit rowYou stop financing your customers' usage out of your own cash, and a runaway loop can't hand you a bill you can't pay
A turn is the unit, not a token countOne metered turn per exchange, rolled up per tenant, priced per classOne number per customer you can put on an invoice — the spread is your margin
Proof beats assuranceUsage row and wallet debit committed in one transaction; every turn reconstructible from its span treeYou end a billing dispute with a record instead of an apology
A customer is a boundary, not a columnorg → project → tenant from migration 0001 — every row, cache key, queue job and traceYour client never appears inside another client's data, and you can demonstrate it in their security review
Access is earned, never assumedClearance computed in the engine, failing closed, before context is injectedYour AI cannot be talked into revealing what the person talking to it hadn't earned

We didn't choose these. We hit all five in production, in this order, before tack existed.

When a customer disputes a bill, show them the turn.

A ship's log is the record that holds up afterwards. tack keeps one for your AI: every turn writes both books, usage and money, committed in one transaction. Both or neither.

usage_ledgerwallet_ledger org_01J9 / dentalintake-prod / ten_04QF balance 3,418.00 u
entries marked ⎣ txn commit in the same database transaction: both or neither. A refused turn writes its audit row and costs 0.

Two API calls between a signup and their AI answering.

01

Create a tenant

From your own signup code. Idempotent: retries can't fork a customer.

POST /v1/tenants { "external_ref": "cus_9f2k" }
02

Submit a turn

Stream the reply over plain SSE. Tools call back into your codebase, signed.

POST /v1/turns { "tenant": "ten_04qf", "message": "Book me Tuesday" }
03

Bill in turns

Usage rolls up per tenant. Price your product per turn: the spread is your margin.

GET /v1/usage?group=tenant → invoice your customers on it

Pick your anxiety. It has a table.

Enforced in the schema and the type system, not asserted in comments.

IDGuaranteeMechanism
MTR-01A turn that can't pay never runsPrepaid wallet checked before every turn; hard cap; the usage row and the wallet debit commit in one transaction. Refusals cost 0 and are audited.
ISO-01Tenants cannot see each otherorg → project → tenant from migration 0001. Every row, Redis key, queue job and trace carries the tuple; a foreign tenant id is a 404.
CLR-01Access fails closedYour backend asserts what a user earned; tack computes min(ceiling, earned) once per turn. Unknown rung → ladder floor.
TOOL-01A broken tool degrades a turn, never kills itPer-tool timeout resolves to an error envelope; the model works around it. Repeated failure raises tool_degraded: failure is routed, not accidental.
AUD-01Every AI decision is reconstructibleSpan tree per turn, tool inputs/results, clearance verdict, cost by trace id. Cost is read from the ledger, never recomputed.

Boring technology, arranged carefully. No exotic databases, no bespoke protocols: parts your team already knows how to operate.

Yours
your appscreens, auth, business logic · untouched
your toolsHTTPS callbacks living in your codebase
The wire
https · sse · webhooksplain protocols, signed both ways · no SDK required
The engine
tack-serverAPI keys · org / project / tenant · durable turn queue
@tack/runtimethe turn loop · pre-emit guards · transcript memory
@tack/registrytool contracts · clearance · confirmation gates
@tack/retrievalhybrid search · access control per leg, before fusion
@tack/ledgermetering · wallets · the atomic debit
@tack/gatewaymodel calls · managed keys · circuit breakers
The substrate
postgresthe money and the memory · fails closed
redisqueues and brakes · fails open, counted and alerted
frontier modelsmanaged keys · you never hold a provider key

Prompt injection is assumed, not hoped away. Controls map to MITRE ATLAS; the adversarial suite replays these classes, against the money path and across tenants, as a release gate.

ATLASTechniqueControl
AML.T0051LLM Prompt InjectionInjected instructions can only ask for what the turn could already see: context is clearance-gated before injection, retrieval is tenant-keyed before ranking, a pre-emit guard screens output. Denial by structural absence.
AML.T0054LLM JailbreakGuardrails are semantic judges, not regex lists, running pre-emit inside the stream. Abuse ceilings brake repeat probing.
AML.T0057LLM Data LeakageYour sensitivity vocabulary maps to retrieval floors; the reserved never class is structurally unretrievable; redacted fields are stripped before model, storage, webhooks.
AML.T0086Exfiltration via Agent Tool InvocationTools are clearance-gated per turn; tenant identity and the verdict ride the signed server envelope, never the model-visible schema.
AML.T0034Cost HarvestingPrepaid wallets, hard caps, fair-use envelopes, per-tenant kill switch. The bill cannot be weaponized.
AML.T0029Denial of AI ServicePer-tenant concurrency slots, fair scheduling: a hot tenant deepens its own queue, never a neighbor's.

You can build a wallet in a weekend. You cannot walk into your client's security review and defend a threat model you don't have: mapped controls, a DPA, a versioned sub-processor list, per-turn reconstructible audit. tack's exist today and go out by reply.

Request the security pack →

Gateways proxy calls, and the good ones now do spend caps and per-customer reporting. A cap bounds your cost after the money is gone: it does not hold your customer's balance, and it will not refuse the turn at the gate with a zero-cost audited row. Frameworks structure code. Billing platforms meter events you define. Running the turn and committing the usage row with the wallet debit — in one transaction — is the part nobody else does. A wallet could be bolted onto any of them. Tenancy in the schema from the first migration, and clearance computed inside the engine, cannot.

Runs the turnKeeps the booksIsolates tenantsUnit you can bill on
Model gatewaysproxies callsspend caps, after the factcost attribution onlytokens
Agent frameworksin your code
Usage-billing platformsmeters your eventsyou define it
Build it yourself≈ 6 months≈ 6 monthsif you get it righteventually
tackthe productatomic ledger + walletby constructionthe turn

The six months you don't spend.

Every AI SaaS rebuilds the same subsystems before it can send its first invoice. None of them are your product. They are runway burned before go-to-market.

SubsystemBuild yourself¹On tack
Metering + usage ledger4 wkincluded
Prepaid wallets, top-ups, billing reconciliation5 wkincluded
Tenant isolation: rows, caches, queues3 wkincluded
Permissions for AI: clearance, channel ceilings3 wkincluded
Tool safety: timeouts, confirmations, idempotency3 wkincluded
Audit trail + trace explorer3 wkincluded
Cost control: caps, kill switches, fair-use envelopes2 wkincluded
Runway spent before your first invoice≈ 6 monthsday one

1 Typical single-engineer estimates for a production-grade version, not a demo. Your mileage varies; the total doesn't shrink much.

Built for our own products first.

tack wasn't built to be sold: it was extracted from a SaaS that needed all of it in production. The strongest proof it generalizes came next — an agency running client builds on it.

minuit
Agency · one engine, every client

Ships AI features for client products on one engine: a project per client, tenants per their customers, wallets keeping every client's spend separate and capped. The client invoices on turns; the agency keeps the spread and carries no on-call for the engine.

client builds · isolated projects · one console
synoveo
AI-native SaaS · customer zero

Guest-facing and back-office AI for lodging businesses. Every property is a tenant; every reply, booking action and escalation runs as a metered turn with a full audit trail.

in production · thousands of turns/mo · the engine's origin

Money only leaves after money has arrived.

The wallet is checked before the turn; the usage row and the debit commit together. Usage rolls up per tenant, so you know what a customer costs before you price them.

Two things, priced separately. Every paid plan pays the same $0.06 standard turn: volume never buys a discount. Metered has no monthly fee and prices the turn at 2× instead: zero fixed cost until a plan pays for itself.

Project: one product you ship, with its own keys, tools, knowledge and clearance. Tenant: one of your customers inside it, isolated, with its own usage line. Metered is one product serving up to 25 customers.

Metered
$0/month
  • Standard turn$0.12
  • Projects1
  • Tenants25
Join the waitlist
Launch
$249/month
  • Standard turn$0.06
  • Projects1
  • Tenants100
Join the waitlist
Scale
$899/month
  • Standard turn$0.06
  • Projects5
  • Tenants1,000
Join the waitlist
Business
from$2,999/month
  • Standard turn$0.06
  • Projects
  • Tenants
Talk to us

Start on Metered with no fee at all — you pay only on turns you are already billing your own customers for. Launch pays for itself past roughly 4,150 standard turns a month. Extra projects are $99 each per month.

Self-host is for teams who want to own the runtime: your infrastructure, your keys, your continuity plan, the same engine. Annual, with a real number on the first call.

Turn classShapeMeteredOn a plan¹
Lightfast model, no tool loop$0.016$0.008
Standardtool loop + guards$0.12$0.06
Heavyagentic, long context$0.60$0.30

1 The same unit price on every paid plan — Launch, Scale and Business differ in what they include, never in what a turn costs. Turns are prepaid to a wallet and drawn down as they run; nothing is invoiced in arrears. The price buys the run itself: the wallet gate, clearance, guards, tool contracts, and the audited ledger row each turn commits with. A fair-use envelope bounds each class. Rates are reviewed quarterly, any class change gets 30 days' notice, and balances you have already bought are honoured at the price you bought them. No free tier, 14-day money-back. tack never spends money it hasn't collected.

The questions serious buyers ask.

Which models run my turns?
Frontier reasoning and embedding models on managed keys. You configure a class per function (light / standard / heavy), never a provider. Model routing is tack's job; your prices don't move when providers reprice.
Can I bring my own API key?
Not on the hosted plans. Managed keys are how the hard caps, margin and audit trail stay true: a key outside the meter would make every guarantee optional. If your own contracts require your keys — an existing provider commitment, negotiated data terms, a residency obligation, or a continuity plan your client's contract demands — that is what Self-host is for: annual licence, your keys permitted, an engine identical to the hosted one. It has a real number, and you get it on the first call.
What happens when a wallet runs out?
Turns refuse at the gate: cost 0, audit row written, a typed refusal envelope to your app, webhook fired at the threshold before it happens. Optional auto-reload tops up from Stripe. Nothing silently serves unbilled.
Am I locked in?
Your tools live in your codebase; the interface is plain HTTPS + SSE. Transcripts, knowledge and usage export via API. If you leave, you take your data and your business logic — what stays is the engine you no longer need.
Are you SOC 2 or ISO 27001 certified?
Not yet — tack is pre-launch, and a certification claim we can't evidence would be worth less than a straight answer. What exists today is the guarantee table and threat model above, an append-only audit trail per turn, tenant isolation enforced in code rather than convention, and a DPA plus sub-processor list on request. If your procurement needs a certification date, ask when you join the waitlist and you'll get the real one, not a marketing one.
What do I hand my client's security review?
The security pack: the full threat model mapped to MITRE ATLAS, the DPA, the versioned sub-processor list, and the disclosure policy. Every turn already carries a reconstructible audit trail, so “show me what the AI did” has a literal answer. Pick blocked by a security review in the waitlist form and the pack goes out by reply — before any call, before any signature.
Where does inference actually run, and who are the sub-processors?
Model routing is tack's job, but which providers process your customers' data is yours to disclose downstream — so it's published, versioned, and never changed silently. You get the current sub-processor list, the regions inference runs in, and advance notice before a class is re-routed, so your own DPA stays accurate.
Where does my customers' data live?
Isolated per tenant, retention windows you configure, erasure cascade on tenant deletion (money rows anonymize: financial records survive, attribution doesn't). You are the controller, tack is the processor; DPA available.
What does tack add to latency?
Turns are model-dominated: measured production p50 ≈ 4.5s is the model call itself. Engine overhead (queue, gates, ledger) is 2–10% of the turn. Tool callbacks add your endpoint's latency, bounded by per-tool timeouts.
What if tack is down?
Turn submission is durable: queued work survives restarts; results deliver at-least-once via signed webhooks with idempotent event ids. Status page + incident history public from day one, reported per turn class — “tack is up” and “the heavy class is servable” are different facts, and only the second one matters to you.
Why is there no free tier?
Because a free tier optimizes the engine for tenants who will never pay. But there is no barrier either: Metered has no monthly fee, so you pay only on turns you are already billing your own customers for. You pay — just never before you have collected. That is the whole product in one sentence, and it would be strange to contradict it at the door. 14-day money-back on the plans.

Set your course. The books keep themselves.

Create a tenant. Submit a turn. Everything else was already running.

Pre-launch. The prices above are the real prices; keys go out to the waitlist first. Blocked by a security review? Say so: the threat model, DPA and sub-processor list go out by reply. We only use your email to notify you — see the privacy policy.