Jump to main content

How ndStill works

A control plane that lets AI agents spend from your accounts, inside strict guardrails.

The bank accounts are yours. Your AI agents are capped delegates allowed to spend from them: each payment is checked, unusual ones come to you, and everything lands in a permanent log. ndStill stands between agents and bank and applies your rules to each action.

No way around it
The gateway checks every limit on the server. An agent has no path past them.
You keep the final say
Risky or unclear actions pause until a person approves. ndStill never holds your funds.
Two rails
Each org picks one at creation: Increase (US), or India, which has no banking partner live yet.

Reading the gate strip

In the console, each transfer carries a strip of nine blocks: one per check, in the order they run. This one passed five checks and is held at the sixth, caps and limits.

  • Passed
  • Held here
  • Blocked here
  • Not reached

The nine checks are listed under transfer checks.

Bank rail → accounts → agents

#

ndStill is a single chain of layers. Spending moves down it; oversight moves up. People often mix up “connection” and “account”. The layers below keep them apart:

  1. Owner (you)the person

    The verified person or business. Owns the bank relationship and the funds, and approves risky transfers.

  2. Bank connectionthe rail

    One rail per org, US or India. It gives access to your bank; it is not money by itself.

  3. Org accounts (1..N)the balance

    Real bank accounts on that rail. Balances are read live from the rail, and spending comes out of them.

  4. Agentsspend within caps

    AI agents allowed to spend from your accounts, up to the caps you set. They have caps, not balances.

Key terms

#
Org
Your workspace. Contains accounts, agents, policies and members. Its single rail is fixed at creation.
Connection
Encrypted rail credentials for your org. There is one per org, managed under Bank connection.
Account
A real bank account agents spend from: an Increase account in the US, or an India corporate or virtual account. Each org has at least one.
Agent
An AI agent registered with an API key. It spends from org accounts up to its caps and holds no funds.
Policy
The rules for one agent: per-transfer limit, approval threshold, window caps, MCC allow/block, anomaly settings.
Account access
The accounts an agent may draw on, plus a default. Leave it empty to allow every org account.
Guardrail
A check the server runs on each transfer. Pass → it sends; fail → it is held or refused.
Approval
A held transfer waiting on a person to approve or reject. It plays the role an “OTP” would.
Beneficiary
A saved payee. On the India rail, you must add one before paying that recipient.
Audit log
A tamper-proof, add-only history of every action that matters.
Kill switch
Freeze one agent or all of them at once. A frozen agent can’t move money.
API key
The credential, scoped to one agent, that it sends to ndStill over MCP or HTTP.

Two ways to add a real account

#

Every account is a real bank account, and ndStill never holds the funds. The rail decides how you add one:

US · IncreaseSandbox key today
ndStill uses Increase’s API to open a new real account (POST /accounts) with its own account and routing number (/account_numbers). Set up a separate “agent ops” account, put a set amount in it, and let agents spend only from there.
India
Register a corporate account you already hold; that works today. Per-agent virtual account numbers, payouts and balances need a banking partner, and none is wired yet, so those calls return an error. Funds always stay at the bank.
On either rail, your org owns the account and the bank holds it. Agents get limited, capped access and nothing more.

Agents spend within caps

#

An agent has no wallet and no balance. It’s an identity made of an API key, a policy (its caps), and an access list (the accounts it may use). Funds stay at the bank; ndStill keeps the agent inside its limits.

Caps (policy)
Per-transfer limit, approval threshold, daily/weekly/monthly caps, MCC allow/block, anomaly settings.
Account access
Pick certain accounts (say, just “Procurement”), or allow every org account. One is set as its default.
Identity
A unique agent id and a scoped API key. Each call is checked against the key and the access list.
Freeze
Freeze one agent, or all, in one step. While frozen, each of its transfers is blocked.

What a transfer goes through

#

Each transfer request passes these checks one after another. Any of them can stop it. Pick an example to see how a transfer looks at each check.

  1. API keyPassedIs the key valid for this agent?
  2. Go-live / KYCPassedIs KYC done and the bank linked?
  3. Agent activePassedIs the agent, or the whole org, frozen?
  4. Source accountPassedWhich account pays, and may this agent use it?
  5. BeneficiaryPassedIndia rail: is the recipient a saved beneficiary?
  6. Caps and limitsHeldHard cap → per-transfer limit → confidence floor → approval threshold.
  7. Unusual activityNot reachedA burst of transfers or a sudden large amount → held.
  8. Period capsNot reachedWould it go past the daily, weekly or monthly cap?
  9. Send on the railNot reachedSent on the rail from the source account. India payouts need a banking partner first.
Sent
Every check passes. ndStill sends it on the rail (an Increase transfer in the US; India payouts need a partner first) and the account is debited. Returns SUCCESS.
Held
A rule fires. Nothing is sent. Returns PENDING_APPROVAL, and the transfer waits in your Approvals inbox.

Each guardrail explained

#
Per-transaction limit
Largest amount one transfer may be. Above it → held.
Approval threshold
Transfers at or above this amount always wait for a person.
Window limits
Rolling daily, weekly and monthly spend caps for each agent.
LLM confidence floor
The agent sends a confidence score; under the floor → held.
Anomaly (velocity)
Many transfers in a short time → held automatically.
Anomaly (spike)
An amount well above the agent's recent average → held.
MCC allow/block
Card only: the merchant categories an agent may pay.
Hard platform cap
A platform ceiling no policy can raise. The final safety net.

Set every threshold per agent, on the agent’s caps in the console. The defaults start strict.

Approvals

#

Held transfers wait in Approvals, each with the reason it was held. Approve sends it; reject cancels it for good. Agents can’t answer an OTP, so this human decision takes that place, and ndStill asks for it only when the stakes are high.

US (Increase) and India compared

#
US (Increase) and India rails compared
FeatureUS · IncreaseIndia
Accounts
US · Increase: Real accounts, opened on request
India: Register a held account; VANs need a partner
Real accounts, opened on requestRegister a held account; VANs need a partner
Per-agent spend controls
US · Increase: Applied by ndStill
India: Applied by ndStill
Applied by ndStillApplied by ndStill
Payouts
US · Increase: ACH / wire / book transfer
India: NEFT / RTGS / IMPS (once a partner is live)
ACH / wire / book transferNEFT / RTGS / IMPS (once a partner is live)
Cards
US · Increase: Single-use virtual cards
India: Not offered; transfers only
Single-use virtual cardsNot offered; transfers only
Payee registration
US · Increase: Optional
India: Required
OptionalRequired
Encryption
US · Increase: AES-256-GCM at rest
India: AES-256 + RSA envelope (scaffolding)
AES-256-GCM at restAES-256 + RSA envelope (scaffolding)

Virtual account numbers per agent

#

The India rail is built to give each agent a Virtual Account Number: its own account identifier under your corporate account, so each payment traces to one agent. Creating VANs errors until a banking partner is wired; the design is below.

One per agent
A separate account number for each agent or team, so matching and reconciling payments is simple.
Caps still apply
The gateway checks each agent's caps and limits, exactly as on the US rail, with no way around them.

Worth knowing

  • A VAN is a label, not a separate pot of money: each one points to your single corporate account, so the balance stays in one visible place.
  • Payouts leave from that corporate account; ndStill tags each with its agent and keeps every agent within its caps.

Cards and merchant categories

#

On Increase, you can give an agent single-use virtual cards backed by an org account. When the card is used, Increase asks ndStill in real time: ndStill checks the card limit and the agent’s MCC allow/block policy, approves or declines, and logs the charge with its category for spend reporting. Cards exist on the US rail only; India uses transfers.

Where the money goes

#
  1. You fund an account
  2. Agent spends, within caps
    ndStill checks caps
  3. Recipient gets paid

You put a set amount into a real account. Agents ask to pay; ndStill checks each request against that agent’s caps and sends the allowed ones on the rail from that account. Funds never pass through ndStill.

Audit log and kill switch

#
Audit log
Add-only, enforced in the database (UPDATE/DELETE blocked). Search it, filter by date, export CSV.
Kill switch
Freeze one agent or every agent at once, as soon as something seems off.
Anomaly monitor
Bursts and sudden large amounts are held for review, using per-agent thresholds.

API and MCP

#

Agents call ndStill through the MCP server (Cursor / Claude Desktop) or plain HTTP. Each call sends the agent’s API key in the X-API-Key header.

Create a transfer

curl -X POST "$NDSTILL_GATEWAY_URL/v1/transfers" \
  -H "X-API-Key: $NDSTILL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "agent_id": "procurement-bot",
    "recipient_account_id": "acct_x",
    "amount_in_cents": 4000,
    "llm_confidence_score": 0.86,
    "source_account_id": "<optional org account>"
  }'
Response
{ "status": "SUCCESS" }            // executed on the rail
{ "status": "PENDING_APPROVAL" }   // held for a human

To try a transfer without moving money, add "simulate": true (or call ndstill_simulate_transfer). Every check runs, nothing is sent and no transfer is saved; the response gives would_status and a trace of the checks.

MCP tools
ndstill_transfer, ndstill_simulate_transfer, ndstill_list_accounts, ndstill_create_wallet, ndstill_list_transfers, and tools for policies and cards.
Keys
Create keys on the API keys page. Each key belongs to exactly one agent in one org.

Two markets first, more to follow

#

ndStill starts with the US (Increase) and India rails, and the core does not depend on any one rail. Your agent code and guardrails stay the same as new markets are added, so an integration you write now keeps working in each new country.

More markets
After the US and India: the UK, the EU and more of Asia, one banking partner at a time, on the same API.
More rails and methods
Extra bank partners, local payment networks and account types as each market is added.
More agent abilities
Recurring payments, multi-step workflows and marketplace connectors, all under the same controls.
Integrate once
Build against ndStill one time, then add countries without new work for each rail.

Let agents spend from your accounts, with limits you set.

Read the setup guide