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 immediately
  • threshold — transaction is large relative to session history; triggers step-up challenge
  • emergency_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.


Get Started

Book a demo →  |  Security →  |  Contact enterprise team →