Enterprise Deployment
Deploy Yebo as authorization infrastructure for your organization.
What Enterprise Gives You
| Feature | Self-serve | Enterprise | |---------|-----------|-----------| | SDK + API access | ✓ | ✓ | | Passkey authentication | ✓ | ✓ | | CAR receipts | ✓ | ✓ | | Custom policy rules | — | ✓ | | Authorization sessions with budgets | — | ✓ | | Per-agent DID registry | — | ✓ | | Audit export (CSV / NDJSON) | — | ✓ | | Webhook delivery | — | ✓ | | Partner receipt views | — | ✓ | | Auditor views for regulators | — | ✓ | | Key rotation controls | — | ✓ | | On-premise gateway | — | ✓ | | SLA + dedicated support | — | ✓ |
Architecture
Your Application
│
▼
Yebo Enterprise Gateway ←──→ Your Policy Backend (optional)
│ (custom rules, limits, tiers)
├── Passkey Auth (WebAuthn)
├── AP2 Mandate Engine
├── PAI Authority Proof
├── Sentinel (12 invariants)
├── Execution Adapters (Stripe, ACH, custom)
├── CAR Receipt Builder
└── Audit Ledger
│
▼
Your Payment Processor / ERP / Workflow
The gateway is stateless between requests. All state lives in the KV store and append-only audit ledger.
Deployment Options
Cloud (Hosted)
Point your SDK at https://gateway.yebo.dev. No infrastructure to manage.
const yebo = new Yebo({
gateway: "https://gateway.yebo.dev",
apiKey: "ent_your_enterprise_key",
})
On-Premise / Self-Hosted
Deploy the gateway in your own infrastructure:
# Using Docker
docker run -p 8787:8787 \
-e YEBO_RP_ID=your-domain.com \
-e YEBO_RP_ORIGIN=https://your-domain.com \
-e POLICY_BACKEND_URL=https://your-policy.internal \
-e STRIPE_SECRET_KEY=sk_live_... \
yeboai/gateway:latest
The gateway requires:
| Variable | Description |
|----------|-------------|
| YEBO_RP_ID | Your domain (e.g. acme.com) — must match passkey enrollment domain |
| YEBO_RP_ORIGIN | Full origin (e.g. https://acme.com) |
| POLICY_BACKEND_URL | URL of your policy service (optional — gateway allows all if absent) |
| STRIPE_SECRET_KEY | For real payment execution |
| NODE_ENV | Set to production |
| DATA_DIR | Persistent storage directory (default: .yebo-data) |
| PORT | Listen port (default: 8787) |
Policy Rules
Define custom authorization rules for your organization. The gateway calls your policy backend before every execution:
{
"rules": [
{
"capability": "payment",
"max_amount": 10000,
"require_tier": "silver",
"action": "allow"
},
{
"capability": "payment",
"amount_range": [10000, 50000],
"require_tier": "gold",
"action": "challenge"
},
{
"capability": "payment",
"min_amount": 50000,
"action": "block"
},
{
"capability": "approval",
"require_tier": "standard",
"action": "allow"
}
]
}
Your policy backend receives:
{
"identity_id": "did:yebo:user-abc",
"capability": "payment",
"amount": 5000,
"merchant": "vendor-corp",
"mandate_id": "AP2-7c9c0a4d..."
}
And must return:
{
"allowed": true,
"reason": "within_limit",
"policy_id": "pol-enterprise-v2"
}
Authorization Sessions
Issue a session that allows an agent or employee to execute multiple actions under a single approval:
const session = await yebo.createAuthorizationSession({
identity_id: "did:yebo:employee-jane",
cumulative_budget_limit: 50000, // $50K total session budget
single_transaction_limit: 10000, // $10K per transaction
expires_at: "2024-01-16T18:00:00Z",
capabilities: ["payment", "procurement"],
metadata: {
department: "finance",
cost_center: "CC-2024",
approver: "manager-bob",
}
})
Session modes trigger automatically:
instant— within limits, executes immediatelythreshold— transaction is large relative to session history; triggers step-up challengeemergency_stop— anomalous pattern detected; all further session actions blocked
Webhook Delivery
Receive real-time notifications when actions complete:
// Configure a webhook endpoint
await yebo.configureWebhook({
endpoint: "https://your-system.com/yebo/events",
events: [
"authorization_receipt_issued",
"sentinel_block",
"challenge_approved",
"dispute_created",
],
secret: "whsec_...", // your endpoint's signing secret
})
Webhook payloads are signed with HMAC-SHA256. Verify the X-Yebo-Signature header before processing:
const signature = req.headers["x-yebo-signature"]
const computed = crypto.createHmac("sha256", webhookSecret)
.update(req.rawBody)
.digest("hex")
if (signature !== `sha256=${computed}`) {
return res.status(401).send("Invalid signature")
}
Audit Export
Export the full audit ledger for compliance, forensics, or archiving:
// CSV export — for spreadsheet tools and BI systems
const csv = await yebo.exportAuditLedger("csv", {
from: "2024-01-01T00:00:00Z",
to: "2024-01-31T23:59:59Z",
mandate_id: "AP2-7c9c0a4d...", // optional — filter by mandate
})
// NDJSON export — for data pipelines and SIEM ingestion
const ndjson = await yebo.exportAuditLedger("ndjson", { from, to })
Or via REST:
GET /authorization-receipt/export?format=csv&from=2024-01-01&to=2024-01-31
GET /authorization-receipt/export?format=ndjson
Payment Partner Integration
Attach CAR receipts to every transaction for dispute resolution and fraud prevention:
// 1. Execute the payment through Yebo
const receipt = await yebo.authorize({
intent: "charge customer for order ORD-2024-0589",
amount: 248.50,
merchant: "your-platform",
asset: "USD",
session_token: customerSession,
})
// 2. Get the external reference (Stripe PaymentIntent ID)
const stripeId = receipt.external_reference // "pi_..."
// 3. Store the CAR alongside your transaction record
await db.transactions.insert({
order_id: "ORD-2024-0589",
stripe_id: stripeId,
yebo_mandate_id: receipt.mandate_id,
yebo_receipt: receipt, // store the full signed receipt
integrity_tier: receipt.integrity_tier,
})
// 4. On dispute: produce the CAR bundle as evidence
const bundle = await yebo.getAuthorizationReceiptBundle(receipt.mandate_id)
await fraudTeam.attachEvidence(disputeId, bundle)
The CAR proves cryptographically that the customer authorized the transaction with biometric authentication. Their integrity score, PAI, and Sentinel verification results are all included.
Auditor Access
Share a reduced-sensitivity view with external auditors or regulators — no identity DIDs, no PAI tokens, no internal metadata:
GET /authorization-receipt/:mandate_id/auditor
{
"receipt_id": "car-abc123...",
"mandate_id": "AP2-7c9c0a4d...",
"capability": "payment",
"merchant": "vendor-corp",
"asset": "USD",
"amount": 5000,
"authorization_status": "authorized",
"execution_status": "executed",
"settlement_status": "confirmed",
"timestamp": "2024-01-15T10:30:00.000Z",
"signature": "MEUCIQDx...",
"key_id": "skey-abc123"
}
The auditor can independently verify the signature using the public key from GET /authorization-receipt/keys. No Yebo account required for verification.
Dispute Management
// Open a dispute against a mandate
const dispute = await yebo.createDispute("AP2-7c9c0a4d...", {
reason: "Customer claims they did not authorize this transaction",
raised_by: "did:yebo:customer-abc",
external_reference: "pi_stripe_123",
})
console.log(dispute.dispute_id) // "disp-..."
console.log(dispute.status) // "open"
// Retrieve the dispute
const record = await yebo.getDispute(dispute.dispute_id)
A dispute link is automatically attached to the stored receipt (related_dispute_id), creating an auditable chain from the original authorization to the dispute.
Integrity Score in Enterprise Workflows
Use the integrity score to gate high-value actions:
const score = await yebo.getIntegrityScore("did:yebo:user-abc")
if (score.tier === "bronze") {
// Restrict: require additional verification
return res.status(403).json({ error: "Insufficient trust tier for this action" })
}
if (score.tier === "gold" || score.tier === "platinum") {
// Elevated permissions: allow high-value actions
proceed()
}
Integrity scores are calculated from the audit ledger — Sentinel violations lower the score; successful authorized actions raise it. Your application cannot manually set scores.
SLA
| Tier | Uptime | Support response | |------|--------|-----------------| | Enterprise Basic | 99.5% | 48h business hours | | Enterprise Pro | 99.9% | 4h any time | | Enterprise Critical | 99.99% | 1h + dedicated TAM |
Contact enterprise@yebo.dev to discuss your requirements.