On this page · Overview
01 / Getting Started
Overview
FLINT evaluates agent transaction requests submitted to its verification surfaces before settlement and records the result as signed evidence. Each request can draw on Principal Identity, Agent Identity, Wallet Provenance, Authorization Scope, Environment Identity, and Cross-Merchant Reputation.
FLINT is an authority-verification and evidence layer. It is not a wallet, payment rail, custody provider, universal bot detector, or guarantee that every upstream claim is true.
02 / Getting Started
Quick Start
Step 1
Submit agent payment request
Step 2
Run FLINT verification
Step 3
Receive transaction decision
Step 4
Export verification record
03 / Getting Started
Run the Demo
Use the live demo to submit an agent payment request, watch the KYA layers evaluate the transaction, and export the signed verification record.
04 / Core Concepts
KYA: Know Your Agent
KYA means Know Your Agent: verifying that a non-human actor is known, authorized, and in scope before it can move money.
05 / Core Concepts
FLINT Agent Passport
A FLINT Agent Passport binds an agent to a controller, wallet, and mandate. It is the portable identity and authorization artifact for non-human actors.
The agent passport is the foundation of the Cross-Domain Agent Passport™ (CDAP), the neutral credential architecture for carrying platform attestations across trust domains.
06 / Core Concepts
Verification Layers
Principal Identity
Confirms the controller or principal associated with the agent request.
Agent Identity
Verifies the non-human actor presenting the payment request.
Wallet Provenance
Screens wallet context, funding signals, and payment instrument history.
Authorization Scope
Checks amount, counterparty, action, and time window against declared authority.
Environment Identity
Assesses runtime continuity and environment signals for the agent session.
Cross-Merchant Reputation
Uses network history to identify trusted, unknown, or abusive behavior.
07 / Core Concepts
Transaction Decisions
Every verified request resolves to exactly 1 of 4 verdicts. STEP-UP and BLOCK are not the same finding: STEP-UP means FLINT does not yet have enough verifiable evidence to decide, and it comes with a remediation menu the agent can act on. BLOCK means affirmative risk or fraud signals were found, such as a sanctions or blocklist match, tampering, a revoked or frozen passport, or a mandate violation.
Payment may proceed within controls.
Not enough verifiable evidence yet. The response includes a remediation menu; completed cures attach to the agent and carry forward automatically.
Routed to a human; the signals conflict enough to warrant a look.
Affirmative risk or fraud signals were found. Stop before money moves.
08 / Core Concepts
Cold-Start Behavior & Cures
A cold-start agent, 1 that FLINT has not seen before, with no passport, no declared authorization scope, and no principal attestation, receives STEP-UP rather than BLOCK. STEP-UP is not a rejection: the response carries a machine-readable menu of cures the agent can complete on its own, and completed cures attach to the agent and carry forward automatically to future verifications. The 3 cures FLINT offers a cold-start agent are:
mint_passport
Mint and claim a free Agent Passport. Identity and reputation then accrue to the passport-agent pairing for the life of the pairing, not just this request.
declare_authorization_scope
Declare the amount, counterparty, action, and timing boundaries the agent is authorized to use for this request.
attach_principal_attestation
Attach verifiable evidence of the principal who authorized or controls the agent, such as a claimed passport controller.
Reputation accrues to the passport-agent pairing for the life of the pairing, so a cure completed once keeps paying off on every later verification. Headless or server-side callers are not treated as suspicious by default; environment signals only weigh against a request when a browser context was claimed and the runtime does not match it.
BLOCK is reserved for something categorically different from a cold start: affirmative risk or fraud signals, such as a sanctions or blocklist match, tampering, a revoked or frozen passport, or a mandate violation. An agent with no history and no red flags gets STEP-UP, not BLOCK.
Example STEP-UP response shape
{
"verdict": "step_up",
"score": 60,
"advisory": "This agent has not yet established a verifiable identity or authorization for this request. Complete any of the listed cures to continue; completed cures attach to this agent and carry forward automatically.",
"cures": [
{ "type": "mint_passport" },
{ "type": "declare_authorization_scope" },
{ "type": "attach_principal_attestation" }
]
}09 / Specification
Verification Record
A verification record is the signed artifact showing that FLINT evaluated an agent transaction request. It preserves what FLINT checked, observed, and decided at verification time, together with labeled timestamps and attribution.
The signature proves record authenticity and integrity. It does not independently prove that every upstream representation was factually true, that a downstream payment settled, or that a counterparty will accept the record as dispositive evidence.
10 / Specification
Record Schema
passport_id is additive: set to the Agent Passport id when 1 was present in the request context at verify time (free verify, x402 metered verify, or x401), and an honest null when the request was anonymous or the supplied id did not validate. It is never guessed or inferred from any other field on the request.
{
"record_version": "1.2",
"record_type": "agent_transaction_verification",
"issuer": "flint",
"framework": "KYA",
"passport_id": "kya_01J9EXAMPLE0000000000000",
"transaction": {
"timing_mode": "authorization",
"chain": "eip155:8453",
"token": {
"symbol": "USDC",
"issuer": "circle"
},
"amount_display": "847.00",
"direction": "credit_to_merchant"
},
"agent_claim": {
"agent_id": "agt_skyline_88af3c12",
"runtime_hint": "coinbase_agent_kit",
"wallet_type": "smart_account_erc4337"
},
"authorization": {
"authority_bound": true,
"authority_evidence_basis": "purchase_authorization",
"purchase_authorization_id": "kya_pa_01J9EXAMPLE"
},
"verdict": {
"decision": "allow",
"confidence": 0.2,
"model_version": "flint-verifier-v1.0.0-sandbox"
}
}11 / Specification
Decision States
| State | Record value | Meaning |
|---|---|---|
| ALLOW | allow | Payment may proceed within controls. |
| STEP-UP | step_up | Not enough verifiable evidence yet; a remediation menu accompanies the record. |
| REVIEW | review | Routed to human review. |
| BLOCK | block | Affirmative risk or fraud signals were found; payment should not execute. |
12 / Specification
Decision Model
The decision model converts verification signals into a bounded trust score and a four-state verdict. The score starts at a neutral 50, applies positive and negative signals, clamps to 0-100, and maps to ALLOW, STEP-UP, REVIEW, or BLOCK.
This table is an illustrative public decision model for docs and partner review. Production policy may vary by partner, rail, mandate, and risk configuration.
80-100
ALLOW
Payment may proceed within controls.
60-79
STEP-UP
An additional check is required before the payment clears.
40-59
REVIEW
Routed to a human; the signals conflict enough to warrant a look.
0-39
BLOCK
Affirmative risk or fraud signals were found. Stop before money moves.
| Rule example | Weight | Signal |
|---|---|---|
| principal_attested_by_known_issuer | +20 | Principal attested by a known issuer or enrolled controller |
| principal_attestation_fresh | +10 | Principal attestation is fresh |
| agent_known_named | +15 | Agent is known-named in FLINT context |
| wallet_screening_clean | +15 | Wallet screening returns clean |
| amount_in_scope | +10 | Requested payment is within declared transaction scope |
| scope_window_active | +5 | Payment falls inside the active authorization window |
| counterparty_on_allowlist | +5 | Counterparty is included in the agent mandate |
| environment_identity_clean | +10 | Runtime continuity signals are consistent with prior observations |
| principal_attestation_stale | -10 | Principal attestation is stale |
| agent_cold_start | -10 | Agent has limited prior FLINT context |
| no_authorization_scope_declared | -15 | No authorization scope was declared for the request |
| high_value_transaction | -20 | High-value payment requires enhanced review |
| no_principal_attestation | -25 | No verifiable principal identity is present |
| environment_identity_suspicious | -30 | Runtime continuity signals are inconsistent or suspicious |
| wallet_screening_flagged | -35 | Wallet screening returns a material risk signal |
| amount_exceeds_per_tx_cap | -40 | Requested payment exceeds the authorized limit |
13 / Specification
Passport Crediting
When a request presents a passport_id, FLINT resolves the passport, verifies its hybrid signature (ES256 plus ML-DSA-65), and checks its lifecycle: stamped, and not revoked, frozen, or expired. For wallet payments, identity and principal attestation credit is applied only when the verified payer wallet matches the wallet bound to the passport.
An authenticated off-chain integration can instead present an owner-issued, short-lived, single-use purchase authorization bound to a specific merchant, action, currency, amount, and time window. A valid transaction-bound authorization can establish authority without pretending that the Passport wallet paid the off-chain transaction.
When a verified Passport has an EVM wallet, FLINT may add a factual Ethereum mainnet history baseline for that Passport-bound identity wallet. The record labels it passport_bound_wallet andidentity_wallet_not_shopify_payer. It is evidence only: observed or empty history does not create a clean, fraud, sanctions, or authorization judgment and does not change the verdict.
A stolen passport_id confers nothing. FLINT grants credit only after the applicable wallet match or transaction-bound authorization check succeeds.
14 / Specification
Scope Evidence Basis
Every record that carries a declared or resolved authorization scope also carries a scope evidence basis, so a counterparty reading the record can tell how that scope was established:
purchase_authorization
Transaction bound. The Passport owner issued a short-lived, single-use authorization for the specific merchant, action, currency, and amount presented by the integration.
passport_mandate
Asserted. The scope comes from the passport's mandate as declared, without independent on-chain or transactional corroboration. On its own, passport_mandate evidence cannot lift a verdict past STEP-UP.
wallet_corroborated
Corroborated. The declared scope is independently confirmed against verified wallet-level or transaction evidence rather than resting on the mandate's word alone.
A counterparty should read passport_mandate as the principal's declared standing scope,wallet_corroborated as scope confirmed against wallet or transaction evidence, andpurchase_authorization as owner-issued authority bound to the specific off-chain action. The evidence-basis field makes those proof levels explicit.
15 / Specification
MITRE F3 Labels
FLINT uses MITRE F3 as an additive labeling vocabulary. Verification records are interpretable as MITRE F3 sightings; this does not imply MITRE endorsement or certification.
Detected today
These chips render only after the technique id validates against FLINT's bundled F3 data.
16 / Specification
Passport Mandate
A mandate defines permitted actions, payment limits, counterparties, wallet bindings, and validity windows. FLINT uses the mandate to determine whether a payment request is inside authorized scope.
17 / Specification
Sentinel: agent takeover protection
Sentinel turns an Agent Passport into a portable anti-fraud tool. It watches the agent's own permission set, its mandate, and alerts you out of band the moment that authority is escalated, with a one-tap kill switch to stop the agent everywhere FLINT is checked.
Every change to a passport's mandate is attributed and written to an append-only ledger.
A classifier flags escalations: a raised spend cap or newly added permissions.
On escalation, the bound owner gets an out-of-band alert (Telegram or email), on a channel the compromised agent does not control.
The owner can Freeze the passport, a reversible kill switch that makes verification return a hard block in /api/verify and /api/x402/verify. Unfreeze restores it. Revoke is also owner-reversible and always two-step.
States
Sentinel catches takeover that escalates an agent's authority, and Freeze blocks the agent wherever FLINT is checked. It does not stop spending that stays within the agent's existing mandate, and it does not stop spending that never routes through FLINT. It is one layer of a defense in depth: the passport is identity, Sentinel is the takeover alarm and kill switch, and enforcement at the wallet or runtime is the hard backstop.
18 / Specification
Post-Quantum Signing
FLINT verification records are hybrid-signed. The primary signature is unchanged ES256 (ECDSA P-256) over the RFC 8785 canonical payload, carried as a compact JWS. A parallel post-quantum signature, ML-DSA-65 (NIST FIPS 204), is computed over the same canonical bytes and travels with the record as additive sibling fields (pq_signature, pq_kid, pq_alg) inside a versioned envelope (envelope_version: "hybrid-v0"). Because the signature travels with the record rather than in transport headers, it survives export, storage, paste-to-verify, and partner forwarding.
Existing ES256-only consumers ignore the new fields and validate the unchanged JWS exactly as before; PQC-aware consumers verify both signatures. The ML-DSA-65 public key is published in the JWKS using the draft IETF JOSE PQC AKP key type and is marked experimental. This is crypto-agile and versioned: FLINT is hybrid / PQC-ready, not standards-compliant, until the JOSE PQC RFCs ratify, and a draft change to the algorithm id or JWK type is configuration rather than a re-architecture.
19 / Specification
JSON Examples
POST /api/verify
Content-Type: application/json
{
"nonce": "8b2ef62d-6ec0-4ac8-a5e4-e6d4ec447bcf",
"timestamp": "2026-08-19T19:00:00.000Z",
"timing_mode": "authorization",
"transaction": {
"chain": "eip155:8453",
"token": { "symbol": "USDC", "issuer": "circle" },
"amount_display": "847.00",
"direction": "credit_to_merchant"
},
"agent_claim": {
"agent_id": "agt_skyline_88af3c12",
"principal_hint": "registered_controller"
},
"declared_scope": {
"max_amount_per_tx_display": "1000.00"
}
}20 / Governance
Versioning
Public records include explicit record and framework versions. Clients should store the version with the verification record and treat unknown major versions as incompatible until reviewed.
21 / Governance
Trust Boundaries
FLINT verifies authority and emits evidence. Payment rails, wallet providers, compliance engines, and agent frameworks remain separate trust domains. A verification record is not custody or settlement.
22 / Governance
Data Minimization
FLINT records use proxy identifiers and verification outcomes where possible. The goal is to preserve evidence of authorization without exposing unnecessary personal, wallet, or operational data to every counterparty.
23 / Governance
Auditability
The signed verification record gives teams a stable artifact for dispute defense, fraud review, controls testing, and audit support. Decoded data is not verified data; signature validation is required before treating a record as authentic.
24 / Developer Reference
Integration Surfaces
Integrators should use the live HTTP and MCP surfaces below. FLINT does not currently publish an npm client package. The OpenAPI document is the source of truth for exact HTTP request and response fields.
POST /api/verify
Submit a verification request and receive the decision plus signed-record output.
GET /api/records/:id
Retrieve a verification record by id.
POST /api/outcomes
Report an observed transaction outcome for calibration and trust-graph evidence.
GET /records/schema
Read the published JSON Schema for signed verification records.
POST /mcp
Call FLINT tools from an MCP-capable agent runtime.
Records and mutual acknowledgment
The published record JSON Schema defines the signed verification record versions. After completion, POST /api/records/:id/acknowledge records a counterparty acknowledgment beside the signed verification record. When both sides acknowledge the transaction, those acknowledgments form the mutual receipt both parties can retain with the record.
STEP-UP remediation options
STEP-UP is not a dead end. The response offers machine-readable options that an agent can satisfy, then the completed cure carries forward to future verifications.
present_passport
Present an existing passport so the next check can use its durable identity and reputation context.
mint_passport
Mint and claim a free Agent Passport so identity and reputation carry forward automatically.
principal_reauthorization
Ask the principal to issue fresh authority for the requested action.
single_use_token
Provide authority scoped to this transaction without granting broader standing access.
reduce_amount
Lower the requested amount and submit the changed transaction for a fresh decision.
staged_amounts
Divide the transaction into smaller stages that can be evaluated separately.
escrow_route
Route the transaction through an escrow arrangement before either side releases value.
mutual_acknowledgment_precommit
Have both sides commit to acknowledging the completed transaction before execution.
Agents can also call the FLINT MCP tools when their runtime discovers tools dynamically. Human readers can use the MCP setup guide for client configuration and troubleshooting.
25 / Developer Reference
API Preview
Each request needs a fresh replay-protection nonce and an ISO-8601 timestamp inside the accepted server window. See /openapi.json for the complete contract and response shapes.
POST /api/verify
Content-Type: application/json
{
"nonce": "8b2ef62d-6ec0-4ac8-a5e4-e6d4ec447bcf",
"timestamp": "2026-08-19T19:00:00.000Z",
"timing_mode": "authorization",
"transaction": {
"chain": "eip155:8453",
"token": { "symbol": "USDC", "issuer": "circle" },
"amount_display": "847.00",
"direction": "credit_to_merchant"
},
"agent_claim": {
"agent_id": "agt_skyline_88af3c12",
"principal_hint": "registered_controller"
},
"declared_scope": {
"max_amount_per_tx_display": "1000.00"
}
}26 / Developer Reference
Event Delivery
FLINT does not currently deliver a public flint.verification.completed outbound webhook. Integrators receive the verification result in the API response, retrieve records through the Records API, and submit observed outcomes with POST /api/outcomes.
Payment-provider or commerce-platform webhooks remain inside the integrator's system unless a separate FLINT integration explicitly documents them.
27 / Developer Reference
Error Codes
invalid_json
The request body is not valid JSON.
missing_or_invalid_nonce
The nonce is missing, too short, or not a string.
missing_timestamp
An ISO-8601 request timestamp is required.
timestamp_out_of_window
The request timestamp falls outside the replay-protection window.
missing_transaction
The required transaction amount is missing.
duplicate_nonce
The nonce was already used inside the 24-hour replay window.
rate_limited
The verification rate limit was exceeded.
signing_unavailable
FLINT could not issue the signed record.
28 / Developer Reference
Changelog
August 19, 2026
Documentation refreshed to record version 1.2. Added transaction-bound purchase authorization, Passport-bound identity-wallet labeling, live integration surfaces, actual API errors, and section-level copy controls.
August 16, 2026
Passport crediting: passport resolution now runs a hybrid signature and lifecycle check, identity and principal crediting is gated on a wallet match, and records carry a scope evidence basis. Ships in rules v1.3.0.
August 16, 2026
STEP-UP calibration + first-touch copy: a cold-start clean agent now receives STEP-UP with a remediation menu instead of BLOCK; BLOCK now requires affirmative risk or fraud signals; headless or server-side callers no longer read as suspicious by default.
August 2026
Verification records gain an additive passport_id field: the Agent Passport present at verify time, honest null when no passport was in the request.
May 2026
Spec v0.1 published for FLINT MVP documentation.