KYA Platform Documentation

Complete developer documentation for the Know Your Agent (KYA) and Know Your Developer (KYD) Platform

Welcome to the KYA Platform

The Know Your Agent (KYA) Platform provides enterprise-grade identity verification and trust management for AI agents and developers. Build confidence in your AI systems with our comprehensive verification infrastructure.

Quick Integration

Get started in minutes with our simple REST API and comprehensive SDKs

Enterprise Security

Bank-grade security with OAuth 2.0, MFA, and end-to-end encryption

Fully Managed

We handle the complexity so you can focus on building great AI products

Why Choose KYA Platform?

For AI Developers

  • Establish trust for your AI agents without complex infrastructure
  • Get verified credentials that users and enterprises recognize
  • Track agent performance and trust metrics in real-time
  • Seamless integration with existing AI frameworks

For Enterprises

  • Verify AI agents before deployment in production
  • Maintain compliance with AI governance requirements
  • Centralized management for all AI agent interactions
  • Detailed audit trails and compliance reporting

Core Concepts

AI Agents

Any autonomous AI system that performs tasks, makes decisions, or interacts with users.

Chatbots
Assistants
Automation

Trust Scores

Dynamic scoring system (0-100) that evaluates agent reliability, security, and performance.

Real-time
Multi-factor
Transparent

Verification Levels

Progressive verification system from basic registration to full enterprise compliance.

Unverified
Basic
Verified
Premium

Blockchain-Secured Records

All verifications are secured on blockchain for immutability and decentralization.

100% Web2 Friendly: No wallet, no crypto, no gas fees. We handle all blockchain complexity behind our simple API.

PDLSS Permission Boundaries

Every agent registered on AstraSync has PDLSS boundaries that define what it can do, when, how much, where, and whether it can spawn sub-agents. Counterparties use these boundaries to make informed access decisions.

P
Purpose

Action categories the agent is allowed to perform.

{
  categories: ['read_data', 'write_data', 'execute_action'],
  allowedActions: ['search', 'create_report'],
  deniedActions: ['delete_account']
}

D
Duration

Time windows and session limits.

{
  maxSessionDuration: 3600,        // 1 hour max
  ttl: 1800,                       // 30 min token lifetime
  allowedDays: [1, 2, 3, 4, 5],   // Weekdays only
  allowedHours: { start: 9, end: 17 },
  timezone: 'America/New_York'
}

L
Limits

Transaction thresholds with approval tiers.

{
  autonomousThreshold: 100,    // Under $100: auto-approved
  stepUpThreshold: 1000,       // $100-$1000: requires MFA
  approvalThreshold: 10000,    // Over $1000: manual approval
  maxTransactionsPerHour: 50,
  currency: 'USD'
}

S
Scope

Resources, jurisdictions, and counterparty rules.

{
  jurisdictions: ['US', 'AU'],
  resources: ['/api/data/*'],
  unverifiedCounterpartyPolicy: 'deny',
  minCounterpartyTrustScore: 60
}

S
Self-Instantiation

Rules for sub-agent spawning.

{
  allowed: true,
  maxSubAgents: 3,
  maxDepth: 2,
  inheritPermissions: true,
  requireApproval: true
}

Complete Example: Customer Support Agent

A real-world PDLSS configuration combining all five dimensions:

{
  purpose: {
    categories: ['read_data', 'write_data'],
    allowedActions: ['search', 'create_ticket', 'update_ticket'],
    deniedActions: ['delete_account', 'export_all_data']
  },
  duration: {
    maxSessionDuration: 3600,
    ttl: 1800,
    allowedDays: [1, 2, 3, 4, 5],
    allowedHours: { start: 9, end: 17 },
    timezone: 'America/New_York'
  },
  limits: {
    autonomousThreshold: 100,
    stepUpThreshold: 1000,
    approvalThreshold: 10000,
    maxTransactionsPerHour: 50,
    currency: 'USD'
  },
  scope: {
    jurisdictions: ['US', 'AU'],
    resources: ['/api/support/*', '/api/tickets/*'],
    unverifiedCounterpartyPolicy: 'deny',
    minCounterpartyTrustScore: 60
  },
  selfInstantiation: {
    allowed: true,
    maxSubAgents: 3,
    maxDepth: 2,
    inheritPermissions: true,
    requireApproval: true
  }
}

Quick Start

Four steps to register your first AI agent on the KYA Platform.

Step 1

Create Account

Sign up with email or use OAuth for instant access. Enable MFA for enhanced security.

Step 2

Set Up Developer Profile

Create your Know Your Developer (KYD) profile with basic details to get started. Optional identity verification earns additional trust score points.

Step 3

Generate Credentials

Create an API key or crypto key pair from your dashboard for programmatic access via the SDKs or REST API.

Step 4

Register Agent

Register your first AI agent from the web UI, SDK, CLI, or REST API.

POST /api/agents/register
{ "name": "My Agent" }

API Overview

RESTful Architecture

GET

Read Operations

Fetch agents, users, verification status

POST

Create Operations

Register agents, initiate verifications

PUT

Update Operations

Modify agent details, update settings

DELETE

Delete Operations

Remove agents, revoke access

Key Endpoints

POST /api/agents/registerRegister an agent
GET /api/agents/:astraIdPublic agent lookup
POST /api/agents/verify-accessAgent verification (Handshake)
POST /api/auth/loginAuthentication
GET /api/healthService health check

Agent listing restricted to dashboard

The GET /api/agents endpoint is only available via the web dashboard (JWT auth). API key and SDK callers cannot list agents. This prevents agent ID enumeration — an API key holder could otherwise discover sibling agent IDs and inspect their PDLSS boundaries or impersonate them. To view your agents, use the dashboard at /agents.

Interactive API Documentation

Live

Explore our complete API reference with live testing capabilities. Try out endpoints directly in your browser with our Swagger UI.

Platform Features

Everything you need to manage AI agent identity and trust at scale.

Authentication & Security

  • OAuth 2.0 (Google & GitHub)
  • Multi-Factor Authentication
  • API Key Management
  • Role-Based Access Control

Verification Services

  • AI Agent Registration
  • Developer KYD Verification
  • PDLSS Permission Policies
  • Agent Handshake Protocol
  • Runtime Challenges
  • Trust Score Calculation

Analytics & Monitoring

  • Real-time Dashboards
  • Usage Analytics
  • Trust Trend Analysis
  • Audit Logging

Team Management

  • Multi-user Accounts
  • Team Permissions
  • Activity Tracking
  • Shared Resources

Integration Options

  • REST API
  • Verification Gateway SDK
  • Cross-Protocol Transport (HTTP, A2A, MCP)
  • Webhook Events
  • SDK Libraries

Data Management

  • Encrypted Storage
  • Data Export Tools
  • Backup & Recovery
  • GDPR Compliance

Integration Guide

Multiple ways to integrate KYA Platform into your workflow with our production-ready SDKs.

Python SDK

v2.0.0

Register and manage AI agents with API key auth, email+password, or secp256k1 crypto signing. Includes CLI and decorator support.

pip install astrasyncai

from astrasyncai import AstraSync

client = AstraSync(api_key="kya_your_api_key")
result = client.register(
    name="My AI Assistant",
    model={
        "model_name": "claude-opus-4.6",
        "model_provider": "anthropic",
        "model_type": "llm",
    },
)

print(f"Agent ID: {result['data']['agent']['kyaAgentId']}")
print(f"Trust Score: {result['data']['agent']['trustScore']}")

Node.js / TypeScript SDK

v2.0.0

TypeScript SDK with complete type definitions, 3 auth methods, and full model/framework/PDLSS registration support. Includes CLI.

npm install @astrasyncai/sdk

import { AstraSync } from '@astrasyncai/sdk';

const client = new AstraSync({
  apiKey: 'kya_your_api_key'
});

const result = await client.register({
  name: 'My AI Agent',
  model: {
    modelName: 'gpt-4o',
    modelProvider: 'openai',
    modelType: 'llm',
  },
});

console.log(`Agent ID: ${result.data.agent.kyaAgentId}`);

Framework & Model Metadata

Pass your agent's framework and model metadata during registration to improve its trust score. AstraSync works with any AI agent framework — just include the name and version:

// Node.js
await client.register({
  name: 'My Agent',
  model: { modelName: 'gpt-4o', modelProvider: 'openai', modelType: 'llm' },
  framework: { frameworkName: 'langchain', frameworkVersion: '0.3.0' },
});

# Python
client.register(
    name="My Agent",
    model={"model_name": "gpt-4o", "model_provider": "openai", "model_type": "llm"},
    framework={"framework_name": "crewai", "framework_version": "0.1.0"},
)

Providing model and framework metadata contributes to the Origin component of your agent's trust score (up to 5 points for platform+model data).

Direct REST API Integration

Use our RESTful API directly with any HTTP client for maximum flexibility.

curl -X POST https://astrasync.ai/api/agents/register \
  -H "Authorization: Bearer kya_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "My AI Agent",
    "description": "Handles customer inquiries",
    "model": {
      "modelName": "claude-opus-4.6",
      "modelProvider": "anthropic",
      "modelType": "llm"
    }
  }'

Verification Gateway SDK

The Verification Gateway SDK enables any service to verify incoming AI agent requests and enables agents to present their credentials across HTTP, A2A, and MCP protocols.

Counterparty-Side: Verifying Incoming Agents

Mount Express middleware to verify agents hitting your API. The middleware calls AstraSync's verify-access endpoint and populates req.agentVerification with the result.

import { createMiddleware } from '@astrasyncai/verification-gateway/express';

app.use(createMiddleware({
  apiBaseUrl: 'https://astrasync.ai',
  routes: [
    { pattern: '/api/public/*', method: '*', minAccessLevel: 'none' },
    { pattern: '/api/data/*', method: 'GET', minAccessLevel: 'read-only' },
    { pattern: '/api/data/*', method: '*', minAccessLevel: 'standard' },
    { pattern: '/api/admin/*', method: '*', minAccessLevel: 'internal' },
  ],
}));

After middleware runs, req.agentVerification contains:

  • .verified — whether the agent passed verification
  • .accessLevel — none, guidance, read-only, standard, full, internal
  • .agent — ASTRA ID, name, trust score
  • .pdlss — full permission boundaries
  • .tokenGuidance — recommended scopes, TTL, rate limits
  • .recommendation — grant, deny, or step_up_required

Enhanced Verification with Sessions

import { verify } from '@astrasyncai/verification-gateway';

const result = await verify(config, {
  credentials: { astraId: 'ASTRA-xxxxx' },
  purpose: 'financial_transaction',
  createSession: true,
  enableRuntimeChallenge: true,
});
// result.sessionId, result.runtimeChallenge, result.tokenGuidance

Recording a Decision

import { recordDecision } from '@astrasyncai/verification-gateway';

await recordDecision(config, {
  sessionId: result.sessionId,
  decision: 'granted',
  reason: 'Agent meets all requirements',
  tokenIssued: true,
});

Agent-Side: Presenting Credentials

Use AgentClient to automatically inject AstraSync credentials into outgoing requests across all supported protocols.

import { AgentClient } from '@astrasyncai/verification-gateway';

const client = new AgentClient({
  agentId: 'ASTRA-xxxxx',
  challengeUrl: 'https://my-agent.com/astrasync/challenge',
  pdlss: {
    purpose: { category: 'read_data' },
    duration: { maxSessionDuration: 3600 },
    scope: { jurisdiction: 'US' },
  },
});

// HTTP — headers auto-injected
const response = await client.fetch('https://counterparty.com/api/data');

// A2A — metadata.astrasync block auto-added
const task = client.prepareA2AMetadata({ id: 'task-1' });

// MCP — _meta.astrasync block auto-added
const params = client.prepareMcpMeta({ tool: 'search', query: '...' });

X-Astra-* Headers (HTTP Transport)

HeaderValueExample
X-Astra-IDAgent ASTRA IDASTRA-wEDhecjrlWEqPNQU4htX6g
X-Astra-VerifyVerify-access URLhttps://astrasync.ai/api/agents/verify-access
X-Astra-ChallengeChallenge endpointhttps://my-agent.com/astrasync/challenge
X-Astra-PurposePurpose category:actionread_data:search
X-Astra-DurationMax session seconds3600
X-Astra-ScopeJurisdictionUS

Challenge/Response Mechanism

Runtime challenges verify that the agent actually initiated the request (prevents MITM attacks). The flow works as follows:

Verification Gateway Endpoint is optional. Agents register an endpoint URL only if they want to be challenged at runtime. Agents registered without an endpoint still verify successfully, but the verify-access response surfaces runtimeChallengeSupported: false so counterparties can factor that into their decision. This is a trust signal, not a hard requirement.
  1. Agent registers pending counterparties before initiating contact
  2. Agent makes request to counterparty with AstraSync headers
  3. Counterparty calls verify-access with enableRuntimeChallenge: true
  4. AstraSync POSTs challenge to agent's /astrasync/challenge endpoint
  5. Agent's ChallengeHandler responds with pending counterparty list
  6. AstraSync validates (challengeId match, counterparty in list, timestamp fresh)

Setting Up the ChallengeHandler

import { ChallengeHandler } from '@astrasyncai/verification-gateway';

const handler = new ChallengeHandler({ agentId: 'ASTRA-xxxxx' });

// Before contacting a counterparty, register them as pending
handler.registerPending('counterparty-api-id');

// Mount the challenge endpoint
app.post('/astrasync/challenge', handler.expressMiddleware());

// After interaction is complete, clean up
handler.removePending('counterparty-api-id');

Challenge Payload (sent to agent)

{
  "challengeId": "uuid",
  "type": "pending_verification",
  "counterpartyId": "counterparty-api-id",
  "question": "List the counterparties currently in your pending interaction list",
  "issuedAt": "2026-02-24T10:00:00Z",
  "expiresAt": "2026-02-24T10:00:30Z"
}

Expected Response (from agent)

{
  "challengeId": "uuid",
  "acknowledged": true,
  "pendingCounterparties": ["counterparty-api-id", "other-service"],
  "respondedAt": "2026-02-24T10:00:01Z"
}

Endpoint Management

Endpoints are the inbound surfaces that agents interact with — APIs, MCP servers, websites, or agent-to-agent callbacks. AstraSync lets you register the endpoints you operate, attach a PDLSS policy to them, restrict who can call them, and see real-time activity with cross-account privacy baked in.

Three verification tiers

discovered

URL seen in verify-access traffic under your account but not formally registered yet. Auto-created when your SDK reports a new URL.

self_asserted

You've claimed the URL. Issues an ASTRAE-id. Proof of ownership is not yet enforced — first claim wins, scoped to your account.

verified

Future tier: DNS TXT or /.well-known/astrasync.json proof unlocks the endpoint trust score and cross-account recognition.

Register & Claim

Two paths produce a registered endpoint:

1. Direct registration

POST /api/endpoints
Authorization: Bearer <api-key>
Content-Type: application/json

{
  "counterpartyType": "api",
  "name": "Invoice API",
  "endpointUrl": "https://api.example.com",
  "trustScoreRequirement": 20
}

# → returns astraeId "ASTRAE-<22-char>"

2. Claim from the Discovered tab

Every authenticated verify-access call with a counterpartyUrl that doesn't match a registered row creates a discovered row owned by the caller (the SDK operator). These appear in the Discovered tab at /endpoints — click Claim to promote them to self_asserted without losing traffic history.

Proof-of-ownership is not yet enforced

Registration today is self-asserted. DNS/well-known proof lands in a follow-up release alongside endpoint trust scoring. Until then, the first account to claim a URL blocks subsequent claims with a conflict error.

PDLSS on Endpoints

Endpoint policies mirror agent PDLSS. When an agent calls an endpoint, the enforcement engine evaluates both boundaries — the agent's own and the endpoint's — and the intersection wins. The endpoint detail page at /endpoints/[id] exposes all five PDLSS dimensions:

Purpose (P)

Allowed purpose categories, allowed actions, denied actions.

Duration (D)

Max session duration, TTL, business hours, day-of-week, timezone.

Limits (L)

Autonomous / step-up / approval thresholds, tx rate caps, cumulative cap, ISO currency.

Scope (S)

Resource globs (allow + deny), resource types, jurisdictions, unverified-agent policy, min trust score, required certifications.

Self-instantiation (S)

Whether agents calling this endpoint may spawn sub-agents; max sub-agents, max depth, inherit permissions, require approval, allowed sub-agent purposes.

Allowlist (KYD/KYO)

Allowlist entries are keyed on the account owner, not individual agents. Every active agent owned by the whitelisted account is then permitted, subject to trust score and purpose filters. Two identifiers are accepted:

  • ASTRAD-* — KYD identifier for individual developers (sole traders).
  • ASTRAO-* — KYO identifier for organisations. Column exists today; organisation onboarding that issues ASTRAO-ids ships in a follow-up.
POST /api/endpoints/:id/allowlist
Authorization: Bearer <api-key>

{
  "allowedOwnerIdentifier": "ASTRAD-4l061o2x",
  "minTrustScore": 30,
  "allowedPurposes": ["read_data"]
}

Activity & Alerts

Every platform_events row now carries both owner_id (the calling agent's account) and counterparty_owner_id (the endpoint owner), so the same event powers activity views from either seat.

Agent-side (outbound)

/activityAgents tab. Each agent row shows a categorisation badge cluster:

  • Internal — endpoint owned by your account.
  • External — endpoint owned by another AstraSync account. Privacy-masked: only ASTRAE-id and type surface.
  • Unregistered — URL not claimed by any account.

Endpoint-side (inbound)

/activityEndpoints tab. Expand any registered endpoint to see callers categorised:

  • Internally governed — the calling agent is owned by your account.
  • Externally governed — different AstraSync owner. ASTRA-id only; all other fields masked.
  • Ungoverned — no AstraSync record. Source IP, User-Agent, Host, Referer, and Agent Card URL (when present) surface for forensics.

Alerts

Surfaced in the dashboard bell icon. Current codes:

  • sdk_unregistered_endpoint — warning fired when your SDK is operating on a URL still in discovered state. Nudge to claim it.
  • agent.ownership_mismatch_attempt — critical, fires on the legitimate agent owner's account when a foreign API key tries to use their ASTRA-id.

SDK Authentication

/api/agents/verify-access is authenticated — every call must identify the caller so attribution, rate limits, and the Discovered flow work correctly. Authenticate with an API key:

API key

Authorization: Bearer kya_<api-key>

SDK config: new ExpressMiddleware({ apiKey: process.env.ASTRASYNC_KEY, ... }). The Express and Next.js adapters auto-wire this.

Caller metadata forwarding

When the SDK runs inside a counterparty server, the backend otherwise sees the counterparty server's own IP/UA — useless for endpoint-owner forensics. The Express and Next.js adapters auto-forward the agent-side fingerprint:

{
  "callerMetadata": {
    "sourceIp": "203.0.113.42",           // First X-Forwarded-For hop or req.ip
    "userAgent": "Mozilla/5.0 (…)",
    "referer": "https://example.com/…",
    "host": "api.yourservice.com",
    "forwardedFor": "203.0.113.42, 10.0.0.1",
    "agentCardUrl": "https://agent.example.com/.well-known/agent-card.json"
  }
}

Local Guard

A free, local-only verification layer for AI agents. Define what your agent can and cannot do in a simple YAML policy file, and Local Guard enforces it — no account, no cloud connection, no telemetry. When you outgrow local mode, one command upgrades you to cloud-connected verification.

Step 1: Create Your Policy

All Local Guard adapters share the same PDLSS policy file. Create it once, then choose which adapter to run for your platform.

npm install @astrasyncai/verification-gateway

# Interactive wizard — creates local-policy.yaml
npx astrasync guard setup

The wizard asks plain-language questions about what your agent should be allowed to do and generates a local-policy.yaml file using the same PDLSS schema as the cloud — so upgrading later requires zero migration.

Step 2: Choose Your Adapter

Each adapter is a thin, platform-specific wrapper that intercepts agent actions and routes them through the shared PDLSS evaluation engine. The verification logic is identical across platforms — only the interception and enforcement mechanisms change.

Local Guard for OpenClaw CLI

Available

HTTP proxy that sits between OpenClaw (or other CLI agents like Claude Code) and their tool servers. Intercepts tool call JSON, evaluates against your PDLSS policy, then blocks or forwards.

# Start the CLI proxy (uses your local-policy.yaml)
npx astrasync guard start
OpenClaw
Claude Code
Any CLI agent

Local Guard for Cursor

Available

VS Code extension that hooks into file create/delete/save, terminal open, and command execution events. Download the .vsix from GitHub releases and install directly.

# Download .vsix from GitHub releases, then:
code --install-extension astrasync-local-guard-2.0.0.vsix
Cursor
VS Code

Local Guard for OpenClaw Browser

Available

Chrome extension for the OpenClaw browser agent. Intercepts web requests and navigation before they execute, with synchronous local evaluation for zero-latency blocking.

# Download extension from GitHub releases, then:
# Chrome → Extensions → Developer mode → Load unpacked
Chrome
Firefox

CLI Commands

astrasync guard setup

Interactive wizard to create your PDLSS policy file

astrasync guard start

Start the local guard proxy with your policy

astrasync guard status

Check guard status, mode, and recent activity

astrasync guard upgrade

Upgrade from free local mode to cloud-connected verification

Free vs Paid

Local Mode (Free)

Free forever
  • Local PDLSS policy evaluation (<1ms)
  • Interactive setup wizard
  • CLI, IDE, and browser platform support
  • JSONL audit trace (local file)
  • No account required, fully offline

Online / Hybrid Mode

Paid
  • Everything in Local Mode
  • ASTRA-ID and trust score for your agent
  • Cloud PDLSS boundaries with counterparty verification
  • Runtime challenge/response (proves agent identity)
  • Blockchain-secured audit trail
  • Git push / PR trigger for enterprise governance

Enterprise: Git Push Trigger

In hybrid mode, Local Guard runs locally during development but automatically switches to cloud verification when code is pushed to a remote repository or a PR is created. This creates a governance boundary: local guardrails for development, full AstraSync verification for anything that reaches the remote codebase.

# Install git hooks for your repo
npx astrasync guard install-hooks

# Hooks auto-trigger on:
# - git push (pre-push hook)
# - git commit to protected branches (pre-commit hook)
# - Block or warn mode configurable per branch

Blockchain Technology

Every verification is secured on the Skale blockchain for immutability and trust - without the complexity.

Powered by Skale Network

Zero Gas Fees

KYA Platform leverages Skale Network, an Ethereum-native modular blockchain network that provides instant finality and zero gas fees. This means enterprise-grade security without the traditional blockchain cost barriers.

Instant Finality

Transactions confirmed in under 1 second

Zero Gas Fees

No transaction costs for users or developers

EVM Compatible

Full Ethereum tooling and smart contract support

What We Handle For You

  • All wallet management and key storage
  • Gas fees and transaction costs (zero on Skale)
  • Smart contract deployment and maintenance
  • Network selection and optimization

Benefits You Receive

  • Immutable audit trail for all verifications
  • Decentralized trust without centralized control
  • Public verifiability and transparency
  • Zero blockchain knowledge required

Web2 Simplicity, Web3 Security: No cryptocurrency, no wallets, no gas fees for you. Just pay your subscription and we handle all the blockchain complexity. This is NOT a crypto product - it's enterprise verification powered by Skale's immutable ledger technology.

ERC-8004: On-Chain Agent Registry

ERC-8004 defines an on-chain Agent Registry where each agent is an ERC-721 token. AstraSync wraps ERC-8004 with KYA verification and PDLSS permission boundaries.

Agent Registration File

Each agent's agentURI (tokenURI) points to a spec-compliant JSON document describing the agent's services, trust frameworks, and identity. AstraSync's card generator produces this format automatically.

{
  "type": "https://eips.ethereum.org/EIPS/eip-8004#registration-v1",
  "name": "My Agent",
  "description": "An AI agent registered on-chain",
  "image": "https://example.com/avatar.png",
  "services": [
    { "name": "web", "endpoint": "https://api.example.com/agent" },
    { "name": "A2A", "endpoint": "https://api.example.com/a2a" },
    { "name": "MCP", "endpoint": "https://api.example.com/mcp" }
  ],
  "x402Support": false,
  "active": true,
  "registrations": [{
    "agentId": 42,
    "agentRegistry": "eip155:1187947933:0x8004A169...9a432"
  }],
  "supportedTrust": ["reputation", "astrasync-pdlss"],
  "astrasyncId": "ASTRA-abc123..."
}

Services

Agents declare their reachable endpoints via the services[] array:

web
Primary HTTPS endpoint
A2A
Google A2A protocol
MCP
Model Context Protocol
OASF
Open Agent Service Framework (+ skills/domains)
ENS
Ethereum Name Service
DID
Decentralized Identifier

Supported Trust Frameworks

The supportedTrust field declares which trust mechanisms the agent participates in:

reputation
On-chain reputation scores via Reputation Registry
crypto-economic
Trust backed by staked assets
tee-attestation
Trusted Execution Environment
astrasync-pdlss
Pre-execution PDLSS permission boundaries (AstraSync extension)

PDLSS + ERC-8004: Complete Trust Lifecycle

ERC-8004's reputation model is post-execution — trust scores update after agent actions. AstraSync's PDLSS framework provides pre-execution governance. Together they form a complete trust lifecycle:

1. Pre-execution (PDLSS)

Purpose, Duration, Limits, Scope, Self-instantiation boundaries

2. Execution

Agent operates within PDLSS boundaries

3. Post-execution (Reputation)

Counterparties submit on-chain feedback

For the full ERC-8004 specification details, see the dedicated ERC-8004 documentation.

Commerce Protocols

The agent commerce ecosystem is fragmenting fast — Google, OpenAI, Stripe, Coinbase, and others each ship their own protocol for how agents communicate, transact, and prove payments. AstraSync absorbs that fragmentation. Agents declare every protocol they support in a single registration flow, get a pre-formatted agent card they can hand out, and use one SDK to actually speak the protocols at runtime. Counterparties read the same card and use the same SDK to decide whether to accept the agent.

Tier 1 vs Tier 2 — the persistence boundary

We split the commerce ecosystem into two tiers based on lifecycle, because they need very different handling:

Persistent (registration-time)

Capabilities the agent declares once and carries forever. Stored on the agent card, surfaced to every counterparty at verify-access time, used to derive PDLSS boundaries automatically. All 10 protocols have persistent metadata.

Commerce: A2A, ACP, AP2, UCP, MPP, x402, ERC-8004. Payment Networks: VI, Agent Pay, TAP.

Session-based (runtime)

Short-lived cryptographic tokens that prove a specific transaction is authorised. They flow through the request pipeline, get verified by the gateway, and disappear. Payment Network protocols (VI, Agent Pay, TAP) have both: a persistent declaration at registration AND session tokens at runtime.

Examples: VI SD-JWT chains, Agent Pay / TAP RFC 9421 signatures, ACP HMAC webhooks, UCP checkout sessions.

Tier 1 declarations answer "what can this agent do, in principle?". Tier 2 tokens answer "is this specific transaction authorised, right now?". Counterparties get both signals through one SDK call.

What AstraSync does for you

Multi-protocol in one registration

Declare A2A + ACP + AP2 + MPP at once via a single checkbox grid. Shared fields (URLs, provider name) are entered once and applied across protocols. Per-protocol fields render in collapsible sections so the form stays manageable. No duplicate registrations, no drift between protocol-specific accounts.

Pre-formatted agent cards

Registration produces a portable JSON agent card that includes every declared protocol's metadata, the verification gateway endpoint, the runtime-challenge capability flag, PDLSS boundaries, and on-chain identity if you've registered one. Hand it out, embed it in your agent.json discovery file, attach it to outbound requests — counterparties parse it the same way every time.

One SDK, every transport

The verification gateway SDK abstracts HTTP, MCP, A2A, and the commerce protocol transports under one credential injection / extraction surface. Your agent calls gateway.fetch(); the SDK picks the right transport, attaches the right headers, handles RFC 9421 signing for Agent Pay / TAP, and parses x402 challenges — without your code knowing the details.

PDLSS pre-populates from declarations

When you declare AP2 with a $500 transaction cap, PDLSS auto-fills the autonomous and hard limit at $500 — your protocol declarations become your permission boundaries with no double entry. Multi-protocol agents get the most restrictive merge across protocols (lowest spend cap wins, jurisdictions union, currencies first-non-default).

For counterparties & merchants

The same verification gateway SDK that agents use is what counterparties use to interpret the declarations. One verify-access call returns:

  • Declared protocols as an array — you can route an ACP request differently from a UCP request without negotiating capabilities up front.
  • PDLSS boundaries already merged from every declared protocol — you see the maximum transaction value the agent is authorised for, the jurisdictions it's scoped to, the counterparties it's allowed to transact with.
  • Runtime trust signals like runtimeChallengeSupported (whether the agent has a verification endpoint mounted), trust score, and KYD status — useful for tier-based acceptance policies.
  • Recommendationgrant, step_up_required, or deny — and the reasons, so you can either trust the recommendation or apply your own logic on top.
import { CounterpartyClient } from '@astrasyncai/verification-gateway';

const client = new CounterpartyClient({ apiKey: process.env.ASTRASYNC_KEY });
const result = await client.verifyAccess({
  agentId: req.headers['x-astrasync-agent-id'],
  purpose: 'financial_transaction',
  transactionValue: 250,
  currency: 'USD',
});

// result.agent.protocols           → ['a2a', 'acp', 'mpp']
// result.agent.runtimeChallengeSupported → true
// result.pdlss.limits.approvalThreshold  → 500
// result.recommendation             → 'grant'

Commerce protocols (persistent registration)

Every protocol below is selectable in the registration UI and lands in the agent card as a top-level metadata block. PDLSS pre-population fires automatically based on the fields you fill in. ERC-8004 has its own dedicated section above. Payment Network protocols (VI, Agent Pay, TAP) are in the next section.

A2A — Agent2Agent Protocol (Linux Foundation, v1.0 GA)

Google & Linux Foundation's open standard for how agents talk to other agents. Defines an agent card schema (name, skills, transports, security) and the JSONRPC / gRPC / HTTP+JSON transport options. Most agents declare A2A as a baseline communication protocol and layer commerce protocols on top.

You declare: agent URL, version, skills (≥1), transport, optional provider info and security schemes. What you get: the verification gateway endpoint pre-fills the agent URL automatically when both target the same server.

ACP — Agentic Commerce Protocol

OpenAI & Stripe's commerce checkout protocol. A merchant exposes a product feed, a checkout endpoint, and a webhook URL; agents discover the products and trigger Stripe-backed checkout sessions on the merchant's behalf.

You declare: merchant ID, checkout endpoint, product feed URL, webhook URL, supported payment methods (card / Apple Pay / Google Pay / Stripe Link / bank transfer), fulfillment options. PDLSS pre-fill: purpose financial_transaction, checkout domain + merchant:<id> added to counterparties.

{
  "protocols": ["a2a", "acp"],
  "acp": {
    "merchantId": "merchant_abc123",
    "checkoutEndpoint": "https://api.shop.com/checkout",
    "productFeedUrl": "https://api.shop.com/feed",
    "webhookUrl": "https://api.shop.com/webhooks/orders",
    "supportedPaymentMethods": ["card", "apple_pay"],
    "fulfillmentOptions": ["shipping", "digital_delivery"]
  }
}

AP2 — Agent Payments Protocol

Google's decentralised payment authorisation protocol. Identity is via DID (Decentralised Identifier); authority is granted through mandates (intent / cart / payment) signed by a human supervisor. Agents declare the maximum transaction value they're authorised for, allowed currencies and regions, and whether human delegation is enabled.

You declare: agent DID, max transaction value, allowed currencies, allowed regions, mandate types, delegation flag. PDLSS pre-fill: max transaction value flows to both autonomous and hard limits (the protocol-authorised amount IS the autonomous ceiling); allowed regions to jurisdictions; currency from the first allowed currency; delegation enables self-instantiation.

{
  "protocols": ["a2a", "ap2"],
  "ap2": {
    "agentDid": "did:web:agent.example.com",
    "policyClaims": {
      "maxTransactionValue": 500,
      "allowedCurrencies": ["USD"],
      "allowedRegions": ["US", "GB"]
    },
    "delegationEnabled": true,
    "mandateTypes": ["intent", "cart"]
  }
}

UCP — Universal Commerce Protocol

Google & Shopify's capability-based commerce protocol. The agent points at a UCP manifest (/.well-known/ucp) listing the capabilities it supports (checkout, discount, fulfillment, identity linking, order management, token exchange) and the transports it speaks (A2A, MCP, REST, embedded).

You declare: manifest URL, version, capabilities, transports, custom extensions. PDLSS pre-fill: checkout / payment capabilities add financial_transaction purpose; fulfillment adds execute_action; manifest domain added to counterparties.

{
  "protocols": ["a2a", "ucp"],
  "ucp": {
    "manifestUrl": "https://shop.example.com/.well-known/ucp",
    "version": "1.0",
    "capabilities": [
      "dev.ucp.shopping.checkout",
      "dev.ucp.shopping.fulfillment"
    ],
    "transports": ["a2a", "rest"]
  }
}

MPP — Machine Payments Protocol

Stripe's machine-to-machine payment protocol over HTTP 402. The agent declares its accepted payment rails (card via Stripe / Visa SPTs, stablecoins via Tempo, Lightning), the spending limit it's authorised for, and the facilitator endpoint it talks to.

You declare: merchant ID, facilitator URL, payment methods, currency, spending limit. PDLSS pre-fill: spending limit flows to autonomous and hard limits; facilitator domain + merchant:<id> added to counterparties; currency mirrored to PDLSS.

{
  "protocols": ["a2a", "mpp"],
  "mpp": {
    "merchantId": "merchant_abc123",
    "facilitatorUrl": "https://mpp.example.com",
    "paymentMethods": ["card", "stablecoin"],
    "currency": "USD",
    "spendingLimit": 500
  }
}

x402 — HTTP 402 on-chain payments

Coinbase's HTTP 402 payment protocol for paying for web resources with on-chain stablecoins. Servers return 402 with payment requirements; the agent pays via a facilitator and retries with proof. Agents declare wallet, supported chains (Base, Polygon, Solana), supported tokens (USDC default), and the facilitator URL.

You declare: wallet address, supported chains, supported tokens, facilitator URL, spending limit. PDLSS pre-fill: spending limit flows to autonomous and hard limits; facilitator domain to counterparties; currency defaults to USDC if it appears in the supported-token list.

{
  "protocols": ["a2a", "x402"],
  "x402": {
    "walletAddress": "0x1234...",
    "supportedChains": ["base", "polygon"],
    "supportedTokens": ["USDC", "USDT"],
    "facilitatorUrl": "https://pay.coinbase.com",
    "spendingLimit": 100
  }
}

Payment Networks — VI, Agent Pay, TAP

These protocols have two lives: a persistent declaration at registration (public keys, merchant domains, execution modes — what the agent can do) and session-based attestation tokens at runtime (SD-JWT chains, RFC 9421 signatures — proof that a specific transaction is authorised). Both halves go through the same Verification Gateway SDK.

VI — Verifiable Intent

Mastercard & Google's 3-layer SD-JWT credential chain proving human authorisation for commerce transactions. Two modes: Immediate (user confirms each action, 2-layer chain) and Autonomous (agent delegated, 3-layer chain with constraint enforcement). VI's 8 constraint types (merchant allowlists, payment amounts, budgets, recurrence, line items) map directly to PDLSS boundaries.

You declare: execution mode, agent public key (JWK/PEM), key ID, credential provider, supported mandate types, payment amount constraints, budget limits. PDLSS pre-fill: Autonomous/Both mode enables self-instantiation; payment amount max flows to autonomous and hard limits; allowed merchants become counterparties; currency mirrored.

{
  "protocols": ["a2a", "vi", "agentpay"],
  "vi": {
    "executionMode": "Autonomous",
    "kid": "key-1",
    "supportedMandateTypes": ["checkout", "payment"],
    "defaultConstraints": {
      "paymentAmount": { "currency": "USD", "max": 10000 }
    }
  }
}

Agent Pay — Mastercard

Mastercard's payment execution protocol using RFC 9421 HTTP Message Signatures. Agents sign every request (browse and purchase tags) using ECDSA P-256 or RSA-PSS; the Mastercard Agent Registry holds the public key for verification. Agent Pay handles the payment rail; VI handles the authorisation chain — they are complementary.

You declare: agent public key, Mastercard Agent ID, signature algorithm, allowed merchant domains, DTVC formats, consumer ID&V method, token binding scope. PDLSS pre-fill: allowed merchant domains become counterparties; always financial_transaction purpose.

{
  "protocols": ["a2a", "vi", "agentpay"],
  "agentpay": {
    "mastercardAgentId": "mc-agent-12345",
    "signatureAlgorithm": "ecdsa-p256-sha256",
    "allowedMerchantDomains": ["store.example.com"],
    "tokenBindingScope": "per-transaction"
  }
}

TAP — Visa Trusted Agent Protocol

Visa's equivalent of Agent Pay, also using RFC 9421 HTTP Message Signatures. ~85% of the infrastructure is shared with Agent Pay — the only differences are the registry endpoint (Visa's JWKS at mcp.visa.com/.well-known/jwks) and the payment credential format (Intelligent Commerce tokens vs Agentic Tokens).

You declare: agent public key, Visa Agent ID, signature algorithm, allowed merchant domains, token type (agent-specific or PAR), passkey enrollment. PDLSS pre-fill: allowed merchant domains become counterparties.

{
  "protocols": ["a2a", "tap"],
  "tap": {
    "visaAgentId": "visa-agent-12345",
    "signatureAlgorithm": "rsa-pss-sha512",
    "allowedMerchantDomains": ["shop.example.com"],
    "tokenType": "agent-specific-token",
    "passkeyEnrolled": true
  }
}

Third-Party Credentials

Agents may arrive with existing credentials from external providers — a Mastercard L1 credential via VI, a DID from an AP2 Credential Provider, or a Visa agent token. AstraSync assigns an ASTRA-ID as the primary identity anchor but accepts and stores third-party credentials alongside it.

Supported formats: DID (Decentralized Identifier), Verifiable Credential (VC), SD-JWT, X.509 certificate. When an agent presents a third-party credential at runtime, the gateway resolves it to the ASTRA-ID and proceeds with normal verification.

Third-party credentials appear as an optional section in the registration form when any Payment Network protocol (VI, Agent Pay, TAP) is selected.

Session-based attestation tokens (runtime)

While agents declare their Payment Network capabilities at registration, the actual attestation tokens are short-lived and flow through the request pipeline during each transaction. They never get stored — the Verification Gateway SDK parses and validates them on every request against the agent's registered persistent metadata.

  • VI SD-JWT chains — 3-layer credential chain (Credential Provider → User → Agent) with selective disclosure. Verified against the agent's registered public key and constraint templates.
  • Agent Pay / TAP RFC 9421 signatures — HTTP Message Signatures on browse and purchase requests. Verified against Mastercard or Visa agent registries using the declared key ID and algorithm.
  • ACP HMAC webhooks — signed webhook payloads from Stripe-backed checkout sessions.
  • UCP checkout sessions — short-lived session tokens issued by a UCP merchant to authorise a single checkout flow.

Full cryptographic verification of these tokens (SD-JWT chain validation, RFC 9421 signature checking, constraint enforcement against PDLSS) ships with the Commerce Shield Lambda@Edge adapter. Today the SDK extracts and surfaces the tokens; verification is on the roadmap.