Technical Reference

Navige Technical Reference

Navige sits between your AI agent and the actions it takes, evaluating every call against your rules before it's allowed to execute. Connect through MCP for native tool interception, or call the generic enforcement endpoint directly from any language. Every decision is logged to an append-only audit trail; any organisation can also turn on blockchain anchoring, free, for independently verifiable proof the log hasn't been altered.

API Base URL
https://api.navige.ai
Auth Header
Authorization: Bearer nv_your_key

Quick Start

Two ways to connect. MCP-speaking agents (Claude Desktop, Cursor, Cline, Continue, and any other MCP-compatible client) point at Navige as a native MCP server — see the MCP section below. Anything else calls POST /enforce directly with a virtual key — see the setup guide's Direct REST tab for curl, Python, and Node examples.

Authentication

All authenticated endpoints take a virtual key, minted per agent from your dashboard's Agents page (shown once). Pass it as a bearer token:

http
Authorization: Bearer nv_your_key_here

An MCP client that can't set custom headers can pass the same key as a query parameter instead: ?api_key=nv_your_key_here.

Sign in to the dashboard itself with your email and password — each organisation supports multiple team members with owner, admin, and viewer roles, not a single shared credential. A virtual key is scoped to one agent and carries that agent's activity; it's shown once at creation and can't be retrieved again, only revoked and replaced.

MCP — Claude Desktop and other MCP clients

Connect any MCP-compatible agent by adding Navige as an MCP server in your config. Every tool call passes through Navige's governance pipeline before it executes.

json — claude_desktop_config.json
{
  "mcpServers": {
    "navige": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://api.navige.ai/mcp?api_key=nv_xxx"]
    }
  }
}

Governance Pipeline

Every call through MCP or /enforce runs the same pipeline, in order. The first check that stops the call returns its decision immediately — nothing later in the list runs.

1
Authentication
Virtual key validated against a Redis-cached lookup. Agent, organisation, and plan resolved.
401 if invalid
2
Kill-switch check
Checks for an active kill switch on this agent, tool, MCP server, or credential. A switch flipped from the dashboard takes effect on the very next call — no redeploy, no cache to wait out.
BLOCKED
3
Usage limit check
Monthly call count checked against plan limit. Free = 5K, Starter = 100K, Growth = 1M, Business = 5M, Enterprise = unlimited.
Denied
4
Policy evaluation
A blast-radius rate limit — a hard cap on calls per agent and per tool in a rolling window — is enforced first, regardless of policy, catching a runaway or compromised agent no single-call rule would flag. Then your rules are evaluated by deterministic code — no model in the decision path — and the same call against the same rules always produces the same decision. If nothing matches, financial and destructive actions default to requiring approval rather than silently passing through.
Denied
5
Approval (if the matched rule requires it)
A pending approval is created and a notification sent — Slack, email, or a signed generic webhook — with one-click Approve/Deny links, no login required to decide. The call holds open for up to 5 minutes waiting on a decision; a caller with a shorter timeout can pass wait: false and poll GET /enforce/status/:approvalId instead.
PENDING
6
Log + allow
The decision is written to the append-only audit trail, with PII masking and secret redaction already applied, before the response reaches the caller. On MCP, an allowed call is forwarded to the real tool; on /enforce, the caller performs the real action itself after seeing the decision.
ALLOWED

Caching

To keep the pipeline fast, Navige caches two things in Redis:

Important: Changing a policy, adding a kill switch, or editing a rule invalidates its cache immediately — you're never evaluated against a stale policy for longer than it takes the write to complete.

PII & Compliance

Before any call's arguments are written to the audit trail, Navige redacts what shouldn't be stored raw — the original, unredacted values are still what your policy rules evaluate against; only what gets persisted is masked:

Every redaction is counted, not just applied silently — each audit entry records how many PII matches and secrets it redacted, feeding directly into compliance reports rather than being recomputed against data that was never stored raw.

Blockchain Anchoring

Blockchain anchoring is optional, off by default, and free on every plan — turning it on doesn't require an upgrade. Once an organisation turns it on, Navige hashes each batch of audit-log entries together with the hash of the previous batch, and records the result on the Polygon Mainnet via a smart contract at 0xd2544fc3164ac0eBfb6B7A2c193800F9651Fc46F.

Because each batch's hash includes the one before it, the batches form a chain: altering or removing any past batch changes its hash, which breaks every hash computed after it. This creates an independently verifiable tamper-evident record. The audit trail itself is also append-only at the database level — direct edits or deletes are blocked outright — so if any logged entry in a batch were somehow altered, recomputing that batch's hash would not match what's on-chain, and neither would any batch anchored after it.

Anchor records are stored alongside your audit logs. Use the Blockchain tab in your dashboard to see every anchor with a direct Polygonscan link, or use the public verifier below — no login required, and nothing in it needs to trust Navige's word for anything.

Each batch is hashed as a Merkle tree, not one flat hash — a single record can be proven against the anchor's root without exposing anything else in that batch. That's what makes a signed decision receipt independently verifiable on its own. Completeness — proving nothing was deleted before a batch was ever hashed, which no hash over the batch alone can show — is checked separately: a running total of every action anchored so far is compared against a live recount on every verification.

Try it: navige.ai/verify-anchor.html — paste any anchor id (yours are listed in Settings → Blockchain anchoring) and get a real pass/fail on both the data-integrity and completeness checks, plus the actual Polygon transaction once broadcast.

Viewing your anchors

Every anchor — batch hash, Polygon transaction hash, and a pre-computed Polygonscan link — is listed in your dashboard's Blockchain tab. This is a dashboard feature, not a separate API-key-authed endpoint on the gateway; the shape below is what that view returns:

json — anchor record
{
  "id": "uuid",
  "hash": "0xabc123...",
  "prev_hash": "0x999888...",
  "hash_scheme": "merkle",
  "batch_from": "2026-07-22T13:00:00.000Z",
  "batch_to": "2026-07-22T14:00:00.000Z",
  "action_count": 142,
  "cumulative_count": 4187,
  "status": "confirmed",
  "tx_hash": "0xdef456...",
  "polygonscan_url": "https://polygonscan.com/tx/0xdef456...",
  "created_at": "2026-07-22T14:00:00.000Z"
}

How to verify a batch or a single decision independently

Easiest path: the public verifier for a whole batch, or fetch GET https://api.navige.ai/api/receipts/:actionId for a single decision — a signed, portable JSON object (decision, the exact policy version that matched it, and a proof against the anchor covering it) verifiable completely offline against the public key at GET /.well-known/navige-signing-key. No login, and no ongoing trust in Navige's API required after that one key fetch.

To recompute by hand instead: check the anchor's hash_scheme. For "flat" (anchors created before 8 Sep 2026):

  1. Export your audit log for the batch's time window, and note the hash of the anchor immediately before it — that's your prevHash (null for an organisation's first anchor)
  2. Recompute: ethers.keccak256(ethers.toUtf8Bytes(JSON.stringify({ prevHash, batch }))), where batch is each record's id, occurredAt, decision, requestHash, in the same order the batch was built
  3. Compare the result to hash above, then open polygonscan_urlMore details → Input data to confirm the same value is on-chain

For "merkle" (current anchors), the root is computed over a binary Merkle tree of the same per-record leaves with prevHash as an extra leaf at index 0 — GET /api/blockchain/verify/:anchorId/record/:actionId returns the proof path for one record rather than requiring you to reconstruct the whole tree by hand.

Salesforce & Agentforce

Two separate pieces, both live: automatic discovery of every Agentforce and Einstein Bot agent in a connected org, and — new — a real-time enforcement package for the ones you specifically want governed.

Discovery is self-serve from the dashboard — Settings → Salesforce. Create a Connected App (or External Client App) in your own Salesforce org, set its callback URL to https://app.navige.ai/api/platforms/salesforce/callback, and paste in your instance URL and Consumer Key/Secret. From there it's a real OAuth flow (Authorization Code + PKCE) that records every agent found, plus its CRM system access, in your Registry — no code deployed into Salesforce for this part, and no CLI required. Salesforce Connected Apps are scoped to the org that creates them, which is why this needs your own org's app credentials rather than a single "click to connect" button. It's inventory only: Agentforce runs entirely inside Salesforce's own runtime, so this never shows a live conversation trace, only that an agent exists and what it can reach.

Real-time enforcement is a small, installable Salesforce package (Apex classes, a permission set, a platform event) your admin deploys with the Salesforce CLI. It adds an Invocable Action — Navige: Check Before Acting — that any Flow or Agentforce Topic Action can call right before a real step executes, getting back the same allow / deny / approval decision every other integration gets. Because Salesforce Apex callouts cap out around 120 seconds and an approval can take up to 5 minutes, the package always calls with wait: false and polls for the outcome via a Queueable job, publishing a platform event once Navige reports a final decision.

Worth being precise about: real-time enforcement is opt-in per action — a Salesforce admin wires the Invocable Action into each Flow or Topic they want governed. It isn't automatic coverage of every Agentforce agent the moment a Salesforce org connects.

Full setup instructions, the package source, and a verification checklist are in the salesforce/ directory of the Navige repository.

AWS Bedrock

Covers both AWS agent products — Bedrock Agents Classic and Bedrock AgentCore — since new AWS accounts increasingly land on AgentCore while existing Classic agents keep running unaffected.

Discovery is self-serve from the dashboard — Settings → AWS. AWS has no OAuth consent screen for third-party access, so this uses the same cross-account IAM role pattern Datadog, PagerDuty, and Snyk all use: generate setup instructions to get a stable per-org External ID and ready-to-paste trust-policy JSON, create the IAM role it describes in your own AWS account, paste back its Role ARN. Navige calls sts:AssumeRole to get short-lived, read-only credentials — nothing long-lived ever leaves your account. One connection discovers agents across both products: Classic's ListAgents and AgentCore's independently-listable Agent Runtimes and Harnesses.

Real-time enforcement differs by product. For Classic, a small reusable Lambda module gates a Bedrock Agent Action Group before it executes — Lambda's 15-minute timeout comfortably covers /enforce's approval hold, so no polling loop is needed. For AgentCore, there's no code to deploy at all: an AgentCore Gateway can expose tools over MCP, and pointing a Gateway Target directly at https://api.navige.ai/mcp — the same endpoint Claude Desktop and Cursor already use — means every tool call routed through that gateway flows through Navige's existing governance, with only AWS-side configuration required.

Worth being precise about: Navige's MCP endpoint only lists tools that already exist in your Registry — a brand-new tool name an AgentCore agent hasn't called before won't auto-register itself the way the generic REST connector does. Discover or register the tool first, then it's callable and governed through the gateway.

Full setup instructions and the Lambda package source are in the aws/ directory of the Navige repository.

Plan Limits

PlanPriceCalls/moAgentsRetention
Free$05,00017 days
Starter$29/mo100,000330 days
Growth$249/mo1,000,0001090 days
Business$649/mo5,000,000Unlimited1 year
EnterpriseCustomCustomUnlimitedCustom

Limits are enforced at the intercept point. When a limit is exceeded, the API returns HTTP 429 with a clear error message. Usage resets on the 1st of each calendar month.

Ready to connect?
Follow the interactive setup guide for your exact stack.
Open Setup Guide →