DEV Community

Lars
Lars

Posted on • Originally published at moltrust.ch

MT Travel Developer Guide: Verify AI Booking Agents with W3C Delegation Chains

Your AI booked Business Class. You approved Economy. Without a delegation chain, every booking agent's mandate is just a prompt — not a cryptographic constraint.

MT Travel is a booking verification API for autonomous travel agents. It issues and verifies TravelAgentCredentials — W3C Verifiable Credentials (VCs) signed with Ed25519 — with delegation chains that bind each level of travel authority to enforceable constraints. 6 REST endpoints, 3 MCP tools, free during Early Access.

What Is a TravelAgentCredential

A TravelAgentCredential is a W3C VC that authorizes an AI booking agent to make travel reservations on behalf of a company or individual. It contains the agent's DID, the principal's DID, spend limits, allowed segments (flight, hotel, car rental), cabin class restrictions, and an optional delegation chain.

{
  "type": ["VerifiableCredential", "AuthorizedAgentCredential", "TravelAgentCredential"],
  "credentialSubject": {
    "id": "did:moltrust:booking-agent-001",
    "principalDID": "did:moltrust:acme-corp",
    "authorization": {
      "spendLimit": 5000,
      "currency": "USDC",
      "segments": ["flight", "hotel", "car_rental"],
      "cabinClass": "economy",
      "hotelMaxStarRating": 3
    },
    "delegationChain": [
      { "from": "did:moltrust:acme-corp", "to": "did:moltrust:travel-agency", "spendLimit": 10000 },
      { "from": "did:moltrust:travel-agency", "to": "did:moltrust:booking-agent-001", "spendLimit": 5000 }
    ]
  }
}
Enter fullscreen mode Exit fullscreen mode

The Delegation Chain

The delegation chain models real-world travel authority:

Company (Principal) — total budget: $10,000
  └─ Travel Agency (Delegatee) — spend limit: $5,000/trip
       └─ Booking Platform (Sub-Delegatee) — cabin: economy, hotel: 3-star max
Enter fullscreen mode Exit fullscreen mode

Each delegate's spend limit must be ≤ its delegator's limit. Constraints can only be narrowed — never widened. If the booking platform tries to book Business Class when the chain says economy, the request is rejected.

Verify a Booking: One POST Request

import requests

receipt = requests.post(
    "https://api.moltrust.ch/guard/travel/verify",
    json={
        "vc": travel_agent_credential,
        "booking": {
            "segment": "flight",
            "amount": 850,
            "currency": "USDC",
            "cabinClass": "economy",
            "merchant": "united.com"
        }
    }
).json()

print(receipt["result"])     # "approved", "review", or "rejected"
print(receipt["guardScore"]) # 0-100 trust score
print(receipt["receiptId"])  # Unique receipt ID for audit trail
Enter fullscreen mode Exit fullscreen mode

Trust scores below 20 are rejected. Scores 20-49 are flagged for review. 50+ approved.

The 10-Step Verify Pipeline

  1. VC Signature — Ed25519 signature verification
  2. Expiry CheckvalidUntil must be in the future
  3. DID Resolution — Agent and principal DIDs must resolve
  4. Segment Authorization — Requested segment must be allowed
  5. Spend Limit — Amount within credential's limit
  6. Currency Match — Booking currency matches credential
  7. Daily Cap — Daily transaction limit not exceeded
  8. Trust Score — MolTrust reputation evaluation
  9. Delegation Chain — Every link validated, constraints narrow monotonically
  10. Traveler Manifest — Booking matches specified travelers

Issue a TravelAgentCredential

vc = requests.post(
    "https://api.moltrust.ch/guard/vc/travel-agent/issue",
    json={
        "agentDID": "did:moltrust:booking-agent-001",
        "principalDID": "did:moltrust:acme-corp",
        "spendLimit": 5000,
        "currency": "USDC",
        "segments": ["flight", "hotel", "car_rental"],
        "cabinClass": "economy",
        "hotelMaxStarRating": 3,
        "travelers": ["alice@acme.com"],
        "delegationChain": [
            { "from": "did:moltrust:acme-corp", "to": "did:moltrust:travel-agency", "spendLimit": 10000 },
            { "from": "did:moltrust:travel-agency", "to": "did:moltrust:booking-agent-001", "spendLimit": 5000 }
        ],
        "validDays": 90
    }
).json()
Enter fullscreen mode Exit fullscreen mode

$5 USDC via x402 on Base L2 — free during Early Access.

The 6 Endpoints

Endpoint Method Auth Cost
/travel/info GET Public Free
/travel/schema GET Public Free
/travel/verify POST EA free Free (EA)
/vc/travel-agent/issue POST EA free Free (EA)
/travel/receipt/:id GET Public Free
/travel/trip/:tripId GET Public Free

All endpoints prefixed with /guard/: api.moltrust.ch/guard/travel/...

MCP Integration

3 MCP tools in the moltrust-mcp-server package (36 tools total, v0.8.0):

pip install moltrust-mcp-server
claude mcp add moltrust -- uvx moltrust-mcp-server
Enter fullscreen mode Exit fullscreen mode
  • mt_travel_info — service info and schema
  • mt_travel_verify — verify agent booking
  • mt_travel_issue_vc — issue TravelAgentCredential

Use Cases

Corporate Travel Policy Enforcement: A company issues a TravelAgentCredential with economy-only cabin class, 3-star hotel max, and a $5,000 spend limit. Every reservation is verified against these constraints. Business Class bookings are rejected at the delegation chain step.

Multi-Level Agency Delegation: A travel management company receives authority from a corporate client and delegates to an AI booking platform. The chain ensures the platform can never exceed the agency's limits.

Trip-Level Aggregation: Multi-leg trips (flight + hotel + car) generate receipts under one tripId. The trip endpoint returns all receipts with aggregated spend totals.


Developer guide: moltrust.ch/blog/travel-developer-guide.html
Travel info: api.moltrust.ch/guard/travel/info

Part of MolTrust v0.8.0 — W3C Verifiable Credentials for autonomous agents. Free during Early Access.

Top comments (0)