openapi: 3.0.3 info: title: LucidLayer API version: 1.0.0 description: | LucidLayer API — the verifiable AI execution layer. Blockchain-anchored infrastructure giving AI assets (models, agents, tools, compute, datasets) provable identity, cryptographic receipts, and reputation backed by real traffic data. **Open-source and self-hostable.** Run your own instance with `docker compose up` or `npm start` (port 3001). The SDK defaults to `http://localhost:3001` — no cloud account required. This OpenAPI spec is the source of truth for all backend routes and is used to generate SDK clients via [Speakeasy](https://speakeasy.com). ## Version Strategy | Prefix | Status | Description | |--------|--------|-------------| | `/v1/*` | **Stable** | Core API — passports, receipts, epochs, payouts, inference, agent deployment. Production-ready and covered by semver guarantees. | | `/v2/*` | **Stable** | Cross-chain and reputation APIs — EVM multi-chain, ERC-8004, pluggable reputation. Production-ready. | | `/api/agents/*` | **Deprecated** | Legacy agent MMR orchestration. Retained for SDK backward compatibility only. Migrate to `/v1/agents/*` (AgentDeploy, AgentMirror). Will be removed in a future major version. | | `/health/*` | **Stable** | System health probes — not versioned (infrastructure endpoints). | ### Migration Path (legacy `/api/agents/*` to `/v1/agents/*`) 1. Replace `init_agent` + `process_agent_epoch` with `lucid_deploy_agent` (one-click deployment). 2. Replace `generate_agent_proof` with `lucid_get_agent_proof` / `lucid_get_agent_run_proof` (AgentMirror). 3. Replace `get_agent_stats` / `get_agent_history` with `lucid_get_agent_receipts` + `lucid_get_agent_epoch`. 4. All legacy operationIds will be removed when the next major version ships. ## Route Groups - `/v1/*` — Passports, Match, Run, Receipts, Epochs, Payouts, Compute - `/v1/agents/*` — Agent Deployment, Wallet, Revenue, Mirror (receipts/proofs) - `/v1/a2a/*` — A2A Protocol (Agent-to-Agent) - `/v1/config/*` — Payment configuration and grants - `/v2/chains/*` — Cross-chain status and routing - `/v2/agents/*` — ERC-8004 agent registration and reputation - `/v2/reputation/*` — Pluggable reputation scoring, cross-chain aggregation - `/v2/payouts/*` — On-chain payout execution - `/health/*` — System health and dependency checks - `/api/agents/*` — Legacy agent MMR orchestration (deprecated) servers: - url: http://localhost:3001 description: Local / self-hosted (default for open-source users) x-speakeasy-server-id: local - url: https://{host}:{port} description: Self-hosted instance (custom host and port) x-speakeasy-server-id: self-hosted variables: host: default: localhost description: Hostname or IP of your Lucid instance port: default: "3001" description: Port your Lucid instance listens on - url: https://api.lucid.foundation description: Managed cloud (Raijin Labs hosted) x-speakeasy-server-id: cloud security: - BearerAuth: [] - {} # Speakeasy MCP tool generation configuration x-speakeasy-mcp: scope-mapping: - pattern: "^(get|list|search)" scopes: [read] - pattern: "^(verify|check)" scopes: [read] - pattern: "^(create|update|trigger|submit|commit|retry|run|calculate|init|process|plan|accomplish|execute|validate|release|dispute|open|resolve|appeal|sponsor|estimate|link|unlink|install|uninstall|configure|prove|register|generate)" scopes: [write] - pattern: "^(delete)" scopes: [write, destructive] x-speakeasy-retries: strategy: backoff backoff: initialInterval: 500 maxInterval: 60000 maxElapsedTime: 300000 exponent: 1.5 statusCodes: - "408" - "429" - "5XX" retryConnectionErrors: true x-speakeasy-errors: statusCodes: - "4XX" - "5XX" tags: - name: Passports description: AI asset identity — create, list, update, delete model/compute/tool/dataset/agent passports - name: Match description: Policy-based compute matching and route planning - name: Run description: OpenAI-compatible inference (chat completions) and model listing - name: Receipts description: Cryptographic receipts — create, verify, and generate MMR inclusion proofs - name: Epochs description: Epoch lifecycle — creation, finalization, on-chain anchoring, and retry - name: Payouts description: Revenue split calculation and payout execution (basis-point math) - name: Compute description: Compute node heartbeat registration and health monitoring - name: Health description: System health — liveness, readiness, and per-dependency status checks - name: Agents description: "DEPRECATED: Legacy agent MMR orchestration (use AgentDeploy, AgentMirror instead)" - name: Shares description: Share token launch and revenue airdrop for fractional AI asset ownership - name: Escrow description: Cross-chain escrow lifecycle — create, release, dispute, and query - name: Disputes description: Escrow dispute resolution — open, submit evidence, resolve, appeal - name: Paymaster description: ERC-4337 gas sponsorship — sponsor transactions, estimate fees, check rates - name: Identity description: Cross-chain identity bridging — CAIP-10 linking, resolution, and chain discovery - name: TBA description: ERC-6551 Token Bound Accounts — create and query agent wallets - name: Modules description: ERC-7579 module management — install, uninstall, and configure policy/payout modules - name: zkML description: Zero-knowledge ML — prove inference, verify proofs, register models on-chain - name: Payments description: x402 payment configuration — pricing, facilitators, grants, and subscription - name: AgentDeploy description: Agent deployment lifecycle — deploy, status, logs, scale, terminate across 6 targets - name: AgentWallet description: Agent PDA wallet — balance, send, policy limits, and transaction history - name: AgentRevenue description: Agent revenue pools — earnings tracking, airdrop triggers, and pool queries - name: A2A description: Google A2A protocol — agent cards, task submission, and task lifecycle - name: Reputation description: Pluggable reputation scoring — algorithms, compute scores, and composite aggregation - name: CrossChain description: EVM multi-chain operations — chain status, ERC-8004 registration, cross-chain reputation and payouts - name: AgentMirror description: Read-only agent proof endpoints — receipts, epochs, and MMR proofs (admin auth required) - name: Memory description: Agent memory — episodic, semantic, procedural, entity, trust-weighted, temporal types with hash-chain provenance - name: Anchoring description: DePIN anchoring control plane — query, verify, and trace artifact anchor records - name: AgentLaunch description: Agent activation — launch via image or base runtime, blue-green rollout, promotion, and rollback - name: Webhooks description: Deployment webhook receivers — normalizes provider-specific callbacks into deployment events paths: # =========================================================================== # Passports # =========================================================================== /v1/passports: post: tags: [Passports] operationId: lucid_create_passport summary: Create a passport description: | Register a new AI asset passport (model, compute, tool, dataset, or agent) with metadata validated against the appropriate JSON schema. Returns the created passport with its generated passport_id. x-speakeasy-mcp: name: lucid_create_passport description: Create a new passport (model/compute/tool/dataset/agent). requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreatePassportRequest' example: type: model owner: "7xK9mQ2vNbPfYkRd3JhEzV1LnWqA8tUcGp4SyDfH5Bo" name: "mistral-7b-instruct" description: "Mistral 7B Instruct fine-tuned for chat" version: "1.0.0" tags: ["llm", "chat", "instruct"] metadata: schema_version: "1.0" model_passport_id: "ppt_model_7xK9mQ2v" format: "safetensors" runtime_recommended: "vllm" context_length: 32768 hf: repo_id: "mistralai/Mistral-7B-Instruct-v0.3" responses: '201': description: Created content: application/json: schema: $ref: '#/components/schemas/CreatePassportResponse' example: success: true passport_id: "ppt_model_7xK9mQ2v" passport: passport_id: "ppt_model_7xK9mQ2v" type: "model" owner: "7xK9mQ2vNbPfYkRd3JhEzV1LnWqA8tUcGp4SyDfH5Bo" name: "mistral-7b-instruct" status: "active" created_at: 1710288000 updated_at: 1710288000 '400': {$ref: '#/components/responses/BadRequest'} '422': {$ref: '#/components/responses/UnprocessableEntity'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.passports.create({ type: "model", owner: "7xK9mQ2vNbPfYkRd3JhEzV1LnWqA8tUcGp4SyDfH5Bo", metadata: { "schema_version": "1.0", "model_passport_id": "ppt_model_7xK9mQ2v", "format": "safetensors", "runtime_recommended": "vllm", "context_length": 32768, "hf": { "repo_id": "mistralai/Mistral-7B-Instruct-v0.3", }, }, name: "mistral-7b-instruct", description: "Mistral 7B Instruct fine-tuned for chat", version: "1.0.0", tags: [ "llm", "chat", "instruct", ], }); console.log(result); } run(); get: tags: [Passports] operationId: lucid_list_passports summary: List passports description: | Retrieve a paginated list of passports with optional filtering by type, owner, status, and tags. Supports free-text search across name, description, and tags. Defaults to page 1, 20 results per page. x-speakeasy-pagination: type: offsetLimit inputs: - name: page in: parameters type: page - name: per_page in: parameters type: limit outputs: results: $.passports x-speakeasy-mcp: name: lucid_list_passports description: List passports with filtering, sorting, and pagination. parameters: - in: query name: type description: Filter by passport type (model, compute, tool, dataset, agent) schema: oneOf: - $ref: '#/components/schemas/PassportType' - type: array items: {$ref: '#/components/schemas/PassportType'} - in: query name: owner description: Filter by owner wallet address (Solana base58 or EVM 0x) schema: {type: string} - in: query name: status description: Filter by passport status (active, deprecated, revoked) schema: oneOf: - $ref: '#/components/schemas/PassportStatus' - type: array items: {$ref: '#/components/schemas/PassportStatus'} - in: query name: tags description: Comma-separated schema: {type: string} - in: query name: tag_match description: Tag matching mode - all (every tag must match) or any (at least one) schema: {type: string, enum: [all, any]} - in: query name: search description: Free-text search across name, description, and tags schema: {type: string} - in: query name: page description: Page number for pagination (starts at 1) schema: {type: integer, minimum: 1} - in: query name: per_page description: Number of results per page (1-100) schema: {type: integer, minimum: 1, maximum: 100} - in: query name: sort_by description: Sort field (created_at, updated_at, or name) schema: {type: string, enum: [created_at, updated_at, name]} - in: query name: sort_order description: Sort direction (asc or desc) schema: {type: string, enum: [asc, desc]} responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ListPassportsResponse' example: success: true passports: - passport_id: "ppt_model_7xK9mQ2v" type: "model" owner: "7xK9mQ2vNbPfYkRd3JhEzV1LnWqA8tUcGp4SyDfH5Bo" name: "mistral-7b-instruct" status: "active" created_at: 1710288000 updated_at: 1710288000 - passport_id: "ppt_agent_Qm3kR8wZ" type: "agent" owner: "3fPnY7vUxKdNqB4JhMzRtD9wLcA2SgE6Hp8XkTuVm5Gj" name: "trading-agent-v2" status: "active" created_at: 1710374400 updated_at: 1710374400 pagination: total: 42 page: 1 per_page: 20 total_pages: 3 '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.passports.list(); for await (const page of result) { console.log(page); } } run(); /v1/passports/{passport_id}: get: tags: [Passports] operationId: lucid_get_passport summary: Get a passport description: | Retrieve a single passport by its passport_id, including all metadata, on-chain sync status, DePIN storage CIDs, and NFT mint addresses. x-speakeasy-mcp: name: lucid_get_passport description: Retrieve a passport by its passport_id. parameters: - in: path name: passport_id description: Unique passport identifier (e.g. ppt_model_7xK9mQ2v) required: true schema: {type: string} responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/GetPassportResponse' '404': {$ref: '#/components/responses/NotFound'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.passports.get({ passportId: "", }); console.log(result); } run(); patch: tags: [Passports] operationId: lucid_update_passport summary: Update a passport description: | Update mutable fields on an existing passport (metadata, name, description, version, tags, status). Requires the X-Owner-Address header for ownership verification if configured. x-speakeasy-mcp: name: lucid_update_passport description: Update an existing passport by passport_id. parameters: - in: path name: passport_id description: Unique passport identifier to update required: true schema: {type: string} - in: header name: X-Owner-Address description: Owner wallet address for ownership verification required: false schema: {type: string} requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdatePassportRequest' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/GetPassportResponse' '400': {$ref: '#/components/responses/BadRequest'} '403': {$ref: '#/components/responses/Forbidden'} '404': {$ref: '#/components/responses/NotFound'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.passports.update({ passportId: "", body: {}, }); console.log(result); } run(); delete: tags: [Passports] operationId: lucid_delete_passport summary: Delete a passport (soft delete) description: | Soft-delete a passport by setting its status to revoked. The passport record is retained for audit purposes. Requires X-Owner-Address header for ownership verification. x-speakeasy-mcp: name: lucid_delete_passport description: Soft-delete a passport by passport_id. parameters: - in: path name: passport_id description: Unique passport identifier to delete (soft delete) required: true schema: {type: string} - in: header name: X-Owner-Address description: Owner wallet address for ownership verification required: false schema: {type: string} responses: '200': description: OK content: application/json: schema: type: object required: [success, deleted] properties: success: {type: boolean} deleted: {type: boolean} '403': {$ref: '#/components/responses/Forbidden'} '404': {$ref: '#/components/responses/NotFound'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.passports.delete({ passportId: "", }); console.log(result); } run(); /v1/passports/{passport_id}/sync: post: tags: [Passports] operationId: lucid_trigger_passport_sync summary: Trigger on-chain sync for a passport description: | Initiate an on-chain sync for a passport, writing its metadata hash to the Solana lucid_passports program. Returns the PDA address and transaction signature on success. x-speakeasy-mcp: name: lucid_trigger_passport_sync description: Trigger on-chain sync for a passport. parameters: - in: path name: passport_id description: Unique passport identifier to sync on-chain required: true schema: {type: string} responses: '200': description: OK content: application/json: schema: type: object required: [success] properties: success: {type: boolean} on_chain_pda: {type: string, nullable: true} on_chain_tx: {type: string, nullable: true} '404': {$ref: '#/components/responses/NotFound'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.passports.sync({ passportId: "", }); console.log(result); } run(); /v1/passports/pending-sync: get: tags: [Passports] operationId: lucid_list_passports_pending_sync summary: Get passports pending sync description: | List all passports that have been created or updated off-chain but not yet synced to on-chain state. Useful for monitoring the sync backlog. x-speakeasy-mcp: name: lucid_list_passports_pending_sync description: List passports that are pending on-chain sync. responses: '200': description: OK content: application/json: schema: type: object required: [success, count, passports] properties: success: {type: boolean} count: {type: integer} passports: type: array items: {$ref: '#/components/schemas/Passport'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.passports.listPendingSync(); console.log(result); } run(); /v1/passports/stats: get: tags: [Passports] operationId: lucid_get_passport_stats summary: Passport statistics description: | Retrieve aggregate statistics about passports including counts by type, status breakdown, and sync status. No authentication required. x-speakeasy-mcp: name: lucid_get_passport_stats description: Get passport statistics. responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/PassportStatsResponse' '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.passports.getStats(); console.log(result); } run(); # =========================================================================== # Share Tokens # =========================================================================== /v1/passports/{passport_id}/token/launch: post: tags: [Shares] operationId: lucid_launch_share_token summary: Launch a share token for a passport description: | Create and launch an SPL Token-2022 share token for fractional ownership of an AI asset. Configurable name, symbol, initial supply, and decimals. Requires the passport to exist and not already have a share token. x-speakeasy-mcp: name: lucid_launch_share_token description: Create and launch a share token (SPL) for fractional ownership of a passport. parameters: - in: path name: passport_id description: Passport identifier to launch share token for required: true schema: {type: string} requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/TokenLaunchRequest' example: name: "Mistral 7B Share" symbol: "M7BS" initial_supply: 1000000 decimals: 9 responses: '201': description: Token launched content: application/json: schema: $ref: '#/components/schemas/TokenLaunchResponse' example: success: true mint: "So11111111111111111111111111111111111111112" name: "Mistral 7B Share" symbol: "M7BS" supply: "1000000000000000" decimals: 9 passport_id: "ppt_model_7xK9mQ2v" '400': {$ref: '#/components/responses/BadRequest'} '404': {$ref: '#/components/responses/NotFound'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.shares.lucidLaunchShareToken({ passportId: "", body: { name: "Mistral 7B Share", symbol: "M7BS", totalSupply: 39757, decimals: 9, }, }); console.log(result); } run(); /v1/passports/{passport_id}/token: get: tags: [Shares] operationId: lucid_get_share_token summary: Get share token info for a passport description: | Retrieve share token information for a passport including the SPL mint address, total supply, decimals, and current holder count. Returns 404 if no share token has been launched. x-speakeasy-mcp: name: lucid_get_share_token description: Get token info (mint, supply, holders) for a passport's share token. parameters: - in: path name: passport_id description: Passport identifier to query share token info required: true schema: {type: string} responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/TokenInfo' '404': {$ref: '#/components/responses/NotFound'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.shares.lucidGetShareToken({ passportId: "", }); console.log(result); } run(); /v1/passports/{passport_id}/token/airdrop: post: tags: [Shares] operationId: lucid_trigger_revenue_airdrop summary: Trigger revenue airdrop for share token holders description: | Snapshot all current share token holders and distribute accumulated SOL revenue proportionally based on each holder's token balance. Requires the passport to have a launched share token with accumulated revenue. x-speakeasy-mcp: name: lucid_trigger_revenue_airdrop description: Snapshot token holders and distribute SOL proportionally based on holdings. parameters: - in: path name: passport_id description: Passport identifier for revenue airdrop required: true schema: {type: string} requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AirdropRequest' responses: '200': description: Airdrop executed content: application/json: schema: $ref: '#/components/schemas/AirdropResponse' '400': {$ref: '#/components/responses/BadRequest'} '404': {$ref: '#/components/responses/NotFound'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.shares.lucidTriggerRevenueAirdrop({ passportId: "", body: { amountLamports: 453116, }, }); console.log(result); } run(); /v1/models: get: tags: [Passports] operationId: lucid_search_models summary: Search model passports description: | Search model passports with ModelMeta-specific filters including runtime, format, max VRAM, and availability. The availability filter is tri-state: 'true' for models with healthy compute, 'false' for unavailable models, omit for all. x-speakeasy-pagination: type: offsetLimit inputs: - name: page in: parameters type: page - name: per_page in: parameters type: limit outputs: results: $.models x-speakeasy-mcp: name: lucid_search_models description: Search model passports (ModelMeta filters). parameters: - in: query name: runtime description: Filter by recommended runtime (vllm, tgi, tensorrt, trustgate, openai) schema: {type: string} - in: query name: format description: Filter by model format (safetensors, gguf, or api) schema: {type: string} - in: query name: max_vram description: Maximum VRAM requirement in GB schema: {type: integer} - in: query name: available description: "Tri-state filter: 'true' returns only models that can serve inference (healthy compute or API-hosted), 'false' returns only unavailable models (missing compute), omit for all models" schema: {type: string, enum: ['true', 'false']} - in: query name: owner description: Filter by model owner wallet address schema: {type: string} - in: query name: tags description: Comma-separated tag filter schema: {type: string} - in: query name: search description: Free-text search across model name and description schema: {type: string} - in: query name: page description: Page number for pagination (starts at 1) schema: {type: integer, minimum: 1} - in: query name: per_page description: Number of results per page (1-100) schema: {type: integer, minimum: 1, maximum: 100} responses: '200': description: OK content: application/json: schema: type: object required: [success, models, pagination] properties: success: {type: boolean} models: type: array items: {$ref: '#/components/schemas/Passport'} pagination: {$ref: '#/components/schemas/Pagination'} example: success: true models: - passport_id: "ppt_model_7xK9mQ2v" type: "model" name: "mistral-7b-instruct" owner: "7xK9mQ2vNbPfYkRd3JhEzV1LnWqA8tUcGp4SyDfH5Bo" status: "active" metadata: format: "safetensors" runtime_recommended: "vllm" context_length: 32768 created_at: 1710288000 updated_at: 1710288000 - passport_id: "ppt_model_Lm9pZ3nQ" type: "model" name: "llama-3-70b" owner: "3fPnY7vUxKdNqB4JhMzRtD9wLcA2SgE6Hp8XkTuVm5Gj" status: "active" metadata: format: "api" runtime_recommended: "trustgate" created_at: 1710374400 updated_at: 1710374400 pagination: total: 15 page: 1 per_page: 20 total_pages: 1 '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.passports.searchModels(); for await (const page of result) { console.log(page); } } run(); /v1/compute: get: tags: [Compute] operationId: lucid_search_compute summary: Search compute passports description: | Search compute passports with ComputeMeta-specific filters including region, runtime, provider type, minimum VRAM, and GPU model. Returns paginated results with full passport details. x-speakeasy-pagination: type: offsetLimit inputs: - name: page in: parameters type: page - name: per_page in: parameters type: limit outputs: results: $.compute x-speakeasy-mcp: name: lucid_search_compute description: Search compute passports (ComputeMeta filters). parameters: - in: query name: regions description: Comma-separated region filter (e.g. us-east-1, eu-west-1) schema: {type: string} - in: query name: runtimes description: Comma-separated runtime filter (e.g. vllm, tgi) schema: {type: string} - in: query name: provider_type description: Filter by provider type (depin, cloud, onprem, managed) schema: {type: string} - in: query name: min_vram description: Minimum VRAM requirement in GB schema: {type: integer} - in: query name: gpu description: Filter by GPU model (e.g. NVIDIA-A100-40GB) schema: {type: string} - in: query name: owner description: Filter by compute provider owner wallet address schema: {type: string} - in: query name: tags description: Comma-separated tag filter schema: {type: string} - in: query name: search description: Free-text search across compute passport fields schema: {type: string} - in: query name: page description: Page number for pagination (starts at 1) schema: {type: integer, minimum: 1} - in: query name: per_page description: Number of results per page (1-100) schema: {type: integer, minimum: 1, maximum: 100} responses: '200': description: OK content: application/json: schema: type: object required: [success, compute, pagination] properties: success: {type: boolean} compute: type: array items: {$ref: '#/components/schemas/Passport'} pagination: {$ref: '#/components/schemas/Pagination'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.compute.searchCompute(); for await (const page of result) { console.log(page); } } run(); /v1/tools: get: tags: [Passports] operationId: lucid_list_tools summary: List tool passports description: | List active tool passports with optional filtering by owner, tags, and free-text search. Returns paginated results sorted by creation date. x-speakeasy-pagination: type: offsetLimit inputs: - name: page in: parameters type: page - name: per_page in: parameters type: limit outputs: results: $.tools x-speakeasy-mcp: name: lucid_list_tools description: List active tool passports with optional filtering. parameters: - in: query name: owner description: Filter by tool owner wallet address schema: {type: string} - in: query name: tags description: Comma-separated schema: {type: string} - in: query name: search description: Free-text search across tool name and description schema: {type: string} - in: query name: page description: Page number for pagination (starts at 1) schema: {type: integer, minimum: 1} - in: query name: per_page description: Number of results per page (1-100) schema: {type: integer, minimum: 1, maximum: 100} responses: '200': description: OK content: application/json: schema: type: object required: [success, tools, pagination] properties: success: {type: boolean} tools: type: array items: {$ref: '#/components/schemas/Passport'} pagination: {$ref: '#/components/schemas/Pagination'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.passports.lucidListTools(); for await (const page of result) { console.log(page); } } run(); /v1/datasets: get: tags: [Passports] operationId: lucid_list_datasets summary: List dataset passports description: | List active dataset passports with optional filtering by owner, tags, and free-text search. Returns paginated results sorted by creation date. x-speakeasy-pagination: type: offsetLimit inputs: - name: page in: parameters type: page - name: per_page in: parameters type: limit outputs: results: $.datasets x-speakeasy-mcp: name: lucid_list_datasets description: List active dataset passports with optional filtering. parameters: - in: query name: owner description: Filter by dataset owner wallet address schema: {type: string} - in: query name: tags description: Comma-separated schema: {type: string} - in: query name: search description: Free-text search across dataset name and description schema: {type: string} - in: query name: page description: Page number for pagination (starts at 1) schema: {type: integer, minimum: 1} - in: query name: per_page description: Number of results per page (1-100) schema: {type: integer, minimum: 1, maximum: 100} responses: '200': description: OK content: application/json: schema: type: object required: [success, datasets, pagination] properties: success: {type: boolean} datasets: type: array items: {$ref: '#/components/schemas/Passport'} pagination: {$ref: '#/components/schemas/Pagination'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.passports.lucidListDatasets(); for await (const page of result) { console.log(page); } } run(); /v1/agents: get: tags: [Passports] operationId: lucid_list_agent_passports summary: List agent passports description: | List active agent passports with optional filtering by owner, tags, and free-text search. Returns paginated results sorted by creation date. x-speakeasy-pagination: type: offsetLimit inputs: - name: page in: parameters type: page - name: per_page in: parameters type: limit outputs: results: $.agents x-speakeasy-mcp: name: lucid_list_agent_passports description: List active agent passports with optional filtering. parameters: - in: query name: owner description: Filter by agent owner wallet address schema: {type: string} - in: query name: tags description: Comma-separated schema: {type: string} - in: query name: search description: Free-text search across agent name and description schema: {type: string} - in: query name: page description: Page number for pagination (starts at 1) schema: {type: integer, minimum: 1} - in: query name: per_page description: Number of results per page (1-100) schema: {type: integer, minimum: 1, maximum: 100} responses: '200': description: OK content: application/json: schema: type: object required: [success, agents, pagination] properties: success: {type: boolean} agents: type: array items: {$ref: '#/components/schemas/Passport'} pagination: {$ref: '#/components/schemas/Pagination'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.passports.lucidListAgentPassports(); for await (const page of result) { console.log(page); } } run(); # =========================================================================== # Match # =========================================================================== /v1/match/explain: post: tags: [Match] operationId: lucid_match_explain summary: Evaluate policy against compute/model meta description: | Evaluate a policy against compute and model metadata, returning a detailed explanation of whether the compute node is allowed and the reasons for the decision. Useful for debugging policy mismatches. x-speakeasy-mcp: name: lucid_match_explain description: Evaluate a policy against compute & model metadata and explain the decision. requestBody: required: true content: application/json: schema: type: object properties: policy: {$ref: '#/components/schemas/Policy'} compute_meta: {$ref: '#/components/schemas/ComputeMeta'} model_meta: {$ref: '#/components/schemas/ModelMeta'} responses: '200': description: OK content: application/json: schema: type: object required: [success, allowed, reasons, policy_hash] properties: success: {type: boolean} allowed: {type: boolean} reasons: type: array items: {type: string} policy_hash: {type: string} '400': {$ref: '#/components/responses/BadRequest'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.match.explain({}); console.log(result); } run(); /v1/match: post: tags: [Match] operationId: lucid_match summary: Match compute for model description: | x402-gated with dynamic pricing when X402_ENABLED=true. x-speakeasy-mcp: name: lucid_match description: Match compute for a model given a compute catalog and policy constraints. parameters: - name: X-Payment-Proof in: header required: false description: Transaction hash proving USDC payment (x402 protocol) schema: {type: string} requestBody: required: true content: application/json: schema: type: object properties: model_meta: {$ref: '#/components/schemas/ModelMeta'} policy: {$ref: '#/components/schemas/Policy'} compute_catalog: type: array items: {$ref: '#/components/schemas/ComputeMeta'} require_live_healthy: {type: boolean, default: true} example: model_meta: schema_version: "1.0" model_passport_id: "ppt_model_7xK9mQ2v" format: "safetensors" runtime_recommended: "vllm" context_length: 32768 requirements: min_vram_gb: 16 policy: policy_version: "1.0" allow_regions: ["us-east-1"] latency: p95_ms_budget: 500 compute_catalog: - compute_passport_id: "ppt_compute_Xn5vR2kJ" provider_type: "cloud" regions: ["us-east-1"] hardware: gpu: "NVIDIA-A100-40GB" vram_gb: 40 responses: '200': description: OK content: application/json: schema: type: object required: [success, match, explain] properties: success: {type: boolean} match: {type: object, additionalProperties: true} explain: {type: object, additionalProperties: true} example: success: true match: compute_passport_id: "ppt_compute_Xn5vR2kJ" score: 0.95 region: "us-east-1" explain: runtime_compatible: true hardware_compatible: true policy_pass: true latency_ok: true '402': description: Payment Required (x402) content: application/json: schema: $ref: '#/components/schemas/X402PaymentRequired' '422': {$ref: '#/components/responses/UnprocessableEntity'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.match.compute({ body: { modelMeta: { schemaVersion: "1.0", modelPassportId: "ppt_model_7xK9mQ2v", format: "safetensors", runtimeRecommended: "vllm", contextLength: 32768, requirements: { minVramGb: 16, }, }, policy: { policyVersion: "1.0", allowRegions: [ "us-east-1", ], latency: { p95MsBudget: 500, }, }, computeCatalog: [ { schemaVersion: "1.0", computePassportId: "ppt_compute_Xn5vR2kJ", providerType: "cloud", regions: [ "us-east-1", ], hardware: { gpu: "NVIDIA-A100-40GB", vramGb: 40, }, runtimes: [], endpoints: { inferenceUrl: "https://ironclad-puritan.biz/", }, }, ], }, }); console.log(result); } run(); /v1/route: post: tags: [Match] operationId: lucid_route summary: Plan a route (match + resolve endpoint) description: | Perform compute matching and resolve an executable inference endpoint in a single call. Returns the matched compute node, model, endpoint URL, runtime, policy hash, and fallback options. x-speakeasy-mcp: name: lucid_route description: Match + resolve an executable inference endpoint for a model. requestBody: required: true content: application/json: schema: type: object properties: model_meta: {$ref: '#/components/schemas/ModelMeta'} policy: {$ref: '#/components/schemas/Policy'} compute_catalog: type: array items: {$ref: '#/components/schemas/ComputeMeta'} request_id: {type: string} require_live_healthy: {type: boolean, default: true} responses: '200': description: OK content: application/json: schema: type: object required: [success, route, explain] properties: success: {type: boolean} request_id: {type: string} route: type: object properties: compute_passport_id: {type: string} model_passport_id: {type: string} endpoint: {type: string} runtime: {type: string} policy_hash: {type: string} fallbacks: type: array items: {type: object, additionalProperties: true} explain: {type: object, additionalProperties: true} '422': {$ref: '#/components/responses/UnprocessableEntity'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.match.planRoute({}); console.log(result); } run(); # =========================================================================== # Run / Inference # =========================================================================== /v1/run/inference: post: tags: [Run] operationId: lucid_run_inference summary: Run inference (optionally streaming via SSE) description: | Execute inference through the LucidLayer execution gateway. Supports both streaming (SSE) and non-streaming responses. A cryptographic receipt is generated for each successful inference. x-speakeasy-mcp: name: lucid_run_inference description: | Run inference through LucidLayer. NOTE: streaming responses may not be supported by all MCP clients. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/InferenceRequest' responses: '200': description: Non-streaming inference result content: application/json: schema: $ref: '#/components/schemas/InferenceResult' '422': {$ref: '#/components/responses/UnprocessableEntity'} '503': {$ref: '#/components/responses/ServiceUnavailable'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.run.inference({}); console.log(result); } run(); /v1/chat/completions: post: tags: [Run] operationId: lucid_chat_completions x-speakeasy-usage-example: true summary: OpenAI-compatible chat completions description: | x402-gated with dynamic pricing. If `X402_ENABLED=true`, requests without a valid `X-Payment-Proof` header receive HTTP 402 with payment instructions. Pricing is resolved per-model from the asset_pricing table. x-speakeasy-mcp: name: lucid_chat_completions description: OpenAI-compatible chat completions routed through LucidLayer. parameters: - name: X-Payment-Proof in: header required: false description: Transaction hash proving USDC payment (x402 protocol) schema: {type: string} requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ChatCompletionRequest' example: model: "mistral-7b-instruct" messages: - role: "system" content: "You are a helpful AI assistant." - role: "user" content: "Explain how MMR proofs work in one paragraph." max_tokens: 256 temperature: 0.7 responses: '200': description: Chat completion response content: application/json: schema: $ref: '#/components/schemas/ChatCompletionResponse' example: id: "chatcmpl-abc123" object: "chat.completion" created: 1710288000 model: "mistral-7b-instruct" choices: - index: 0 message: role: "assistant" content: "A Merkle Mountain Range (MMR) proof works by..." finish_reason: "stop" usage: prompt_tokens: 42 completion_tokens: 128 total_tokens: 170 '400': {$ref: '#/components/responses/BadRequest'} '402': description: Payment Required (x402) content: application/json: schema: $ref: '#/components/schemas/X402PaymentRequired' '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.run.chatCompletions({ body: { model: "mistral-7b-instruct", messages: [ { role: "system", content: "You are a helpful AI assistant.", }, { role: "user", content: "Explain how MMR proofs work in one paragraph.", }, ], maxTokens: 256, temperature: 0.7, }, }); console.log(result); } run(); # =========================================================================== # Compute live-state # =========================================================================== /v1/compute/nodes/heartbeat: post: tags: [Compute] operationId: lucid_heartbeat summary: Submit compute node heartbeat description: > Submit a heartbeat from a compute node to register or update its live state. Compute nodes must send heartbeats within the 30-second TTL to remain eligible for matching. Includes queue depth and P95 latency estimates. x-speakeasy-mcp: name: lucid_heartbeat description: Submit a compute node heartbeat to update live state. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ComputeHeartbeat' responses: '200': description: OK content: application/json: schema: type: object properties: success: {type: boolean} state: {type: object, additionalProperties: true} '400': {$ref: '#/components/responses/BadRequest'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.compute.heartbeat({ computePassportId: "", status: "healthy", }); console.log(result); } run(); /v1/compute/nodes/{computePassportId}/health: get: tags: [Compute] operationId: lucid_get_health summary: Get compute node health description: > Get the current health state of a compute node. Returns 503 if the node's heartbeat has expired (>30s since last heartbeat). x-speakeasy-mcp: name: lucid_get_health description: Get the current health state of a compute node. parameters: - in: path name: computePassportId description: Compute node passport identifier required: true schema: {type: string} responses: '200': description: OK content: application/json: schema: type: object properties: success: {type: boolean} state: {type: object, additionalProperties: true} '503': {$ref: '#/components/responses/ServiceUnavailable'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.compute.getNodeHealth({ computePassportId: "", }); console.log(result); } run(); # =========================================================================== # Receipts # =========================================================================== /v1/receipts: post: tags: [Receipts] operationId: lucid_create_receipt summary: Create a receipt description: | Create a new cryptographic receipt for a completed inference run and append it to the Merkle Mountain Range. The receipt is Ed25519-signed by the orchestrator and includes timing metrics. x-speakeasy-mcp: name: lucid_create_receipt description: Create a receipt and append it to the receipt MMR. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateReceiptRequest' example: model_passport_id: "ppt_model_7xK9mQ2v" compute_passport_id: "ppt_compute_Xn5vR2kJ" policy_hash: "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" runtime: "vllm" tokens_in: 42 tokens_out: 128 ttft_ms: 85 total_latency_ms: 1200 responses: '200': description: OK content: application/json: schema: type: object required: [success, receipt] properties: success: {type: boolean} receipt: {$ref: '#/components/schemas/Receipt'} example: success: true receipt: run_id: "run_abc123def456" model_passport_id: "ppt_model_7xK9mQ2v" compute_passport_id: "ppt_compute_Xn5vR2kJ" policy_hash: "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" runtime: "vllm" timestamp: 1710288000 receipt_hash: "a3f2b8c1d4e5f6789012345678901234567890abcdef1234567890abcdef1234" receipt_signature: "3045022100..." signer_pubkey: "7xK9mQ2vNbPfYkRd3JhEzV1LnWqA8tUcGp4SyDfH5Bo" signer_type: "orchestrator" metrics: ttft_ms: 85 tokens_in: 42 tokens_out: 128 total_latency_ms: 1200 '400': {$ref: '#/components/responses/BadRequest'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.receipts.create({ modelPassportId: "ppt_model_7xK9mQ2v", computePassportId: "ppt_compute_Xn5vR2kJ", policyHash: "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", runtime: "vllm", tokensIn: 42, tokensOut: 128, ttftMs: 85, totalLatencyMs: 1200, }); console.log(result); } run(); /v1/receipts/{receipt_id}: get: tags: [Receipts] operationId: lucid_get_receipt summary: Get a receipt description: | Retrieve a single receipt by its UUID, including the receipt hash, Ed25519 signature, signer public key, and inference metrics (tokens, latency, TTFT). x-speakeasy-mcp: name: lucid_get_receipt description: Retrieve a receipt by receipt_id. parameters: - in: path name: receipt_id description: Unique receipt identifier (UUID) required: true schema: {type: string} responses: '200': description: OK content: application/json: schema: type: object required: [success, receipt] properties: success: {type: boolean} receipt: {$ref: '#/components/schemas/Receipt'} '404': {$ref: '#/components/responses/NotFound'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.receipts.get({ receiptId: "", }); console.log(result); } run(); /v1/receipts/{receipt_id}/verify: get: tags: [Receipts] operationId: lucid_verify_receipt summary: Verify a receipt (hash + signature + inclusion) description: | Verify a receipt's integrity by checking its SHA-256 hash against the canonical JSON content, validating the Ed25519 signature, and confirming MMR inclusion. Returns per-check pass/fail status. x-speakeasy-mcp: name: lucid_verify_receipt description: Verify a receipt (hash + signature + inclusion proof). parameters: - in: path name: receipt_id description: Receipt identifier to verify required: true schema: {type: string} responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ReceiptVerification' '404': {$ref: '#/components/responses/NotFound'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.receipts.verify({ receiptId: "", }); console.log(result); } run(); /v1/receipts/{receipt_id}/proof: get: tags: [Receipts] operationId: lucid_get_receipt_proof summary: Get inclusion proof for receipt description: | Retrieve the MMR inclusion proof for a receipt, containing the sibling hashes needed to verify the receipt's membership in the Merkle Mountain Range. x-speakeasy-mcp: name: lucid_get_receipt_proof description: Get the inclusion proof for a receipt. parameters: - in: path name: receipt_id description: Receipt identifier to get inclusion proof for required: true schema: {type: string} responses: '200': description: OK content: application/json: schema: type: object required: [success, proof] properties: success: {type: boolean} proof: {$ref: '#/components/schemas/ReceiptProof'} '404': {$ref: '#/components/responses/NotFound'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.receipts.getProof({ receiptId: "", }); console.log(result); } run(); /v1/verify/{receipt_hash}: get: tags: [Receipts] operationId: lucid_verify_receipt_by_hash summary: Verify receipt by hash with inclusion proof and epoch info description: | Verify a receipt using its 64-character hex hash. Returns the inclusion proof, on-chain anchoring status, and epoch information. This is the primary verification endpoint for the Fluid Compute protocol. x-speakeasy-mcp: name: lucid_verify_receipt_by_hash description: > Verify a receipt by its hash. Returns inclusion proof and on-chain anchoring status. Critical P0.9 endpoint for Fluid Compute. parameters: - in: path name: receipt_hash required: true schema: {type: string, minLength: 64, maxLength: 64} description: 64 hex character receipt hash responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ReceiptHashVerification' '400': {$ref: '#/components/responses/BadRequest'} '404': {$ref: '#/components/responses/NotFound'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.receipts.lucidVerifyReceiptByHash({ receiptHash: "", }); console.log(result); } run(); /v1/mmr/root: get: tags: [Receipts] operationId: lucid_get_mmr_root summary: Get current MMR root description: | Retrieve the current global MMR root hash and total leaf count. The root is recomputed via right-to-left peak bagging after each receipt append. x-speakeasy-mcp: name: lucid_get_mmr_root description: Get the current MMR root and leaf count. responses: '200': description: OK content: application/json: schema: type: object required: [success, root, leaf_count] properties: success: {type: boolean} root: {type: string} leaf_count: {type: integer} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.receipts.getMmrRoot(); console.log(result); } run(); /v1/signer/pubkey: get: tags: [Receipts] operationId: lucid_get_signer_pubkey summary: Get orchestrator signing public key description: | Retrieve the Ed25519 public key used by the orchestrator to sign receipts. Clients use this key to independently verify receipt signatures offline. x-speakeasy-mcp: name: lucid_get_signer_pubkey description: Get the orchestrator signing public key. responses: '200': description: OK content: application/json: schema: type: object required: [success, pubkey] properties: success: {type: boolean} signer_type: {type: string} pubkey: {type: string} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.receipts.getSignerPubKey(); console.log(result); } run(); # =========================================================================== # Epochs / anchoring # =========================================================================== /v1/epochs/current: get: tags: [Epochs] operationId: lucid_get_current_epoch summary: Get current epoch description: | Retrieve the current open epoch, optionally filtered by project_id. Returns epoch metadata including MMR root, leaf count, status, and timestamps. x-speakeasy-mcp: name: lucid_get_current_epoch description: Get the current epoch. parameters: - in: query name: project_id description: Filter by project identifier required: false schema: {type: string} responses: '200': description: OK content: application/json: schema: type: object required: [success, epoch] properties: success: {type: boolean} epoch: {$ref: '#/components/schemas/Epoch'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.epochs.getCurrent(); console.log(result); } run(); /v1/epochs: get: tags: [Epochs] operationId: lucid_list_epochs summary: List epochs description: | Retrieve a paginated list of epochs with optional filtering by project_id and status (open, anchoring, anchored, failed). Defaults to page 1, 20 results per page. x-speakeasy-pagination: type: offsetLimit inputs: - name: page in: parameters type: page - name: per_page in: parameters type: limit outputs: results: $.epochs x-speakeasy-mcp: name: lucid_list_epochs description: List epochs with optional filtering and pagination. parameters: - in: query name: project_id description: Filter by project identifier schema: {type: string} - in: query name: status description: Filter by epoch status (open, anchoring, anchored, failed) schema: {type: string} - in: query name: page description: Page number for pagination (starts at 1) schema: {type: integer, minimum: 1} - in: query name: per_page description: Number of results per page (1-100) schema: {type: integer, minimum: 1, maximum: 100} responses: '200': description: OK content: application/json: schema: type: object required: [success, epochs, pagination] properties: success: {type: boolean} epochs: type: array items: {$ref: '#/components/schemas/Epoch'} pagination: {$ref: '#/components/schemas/Pagination'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.epochs.list(); for await (const page of result) { console.log(page); } } run(); post: tags: [Epochs] operationId: lucid_create_epoch summary: Create epoch description: | Create a new epoch, optionally scoped to a project_id. The epoch starts in 'open' status with an empty MMR root and zero leaf count. x-speakeasy-mcp: name: lucid_create_epoch description: Create a new epoch. requestBody: required: false content: application/json: schema: type: object properties: project_id: {type: string} example: project_id: "proj_lucid_main" responses: '201': description: Created content: application/json: schema: type: object required: [success, epoch] properties: success: {type: boolean} epoch: {$ref: '#/components/schemas/Epoch'} example: success: true epoch: epoch_id: "epoch_2024_001" mmr_root: "0000000000000000000000000000000000000000000000000000000000000000" leaf_count: 0 status: "open" created_at: 1710288000 '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.epochs.create({ projectId: "proj_lucid_main", }); console.log(result); } run(); /v1/epochs/{epoch_id}: get: tags: [Epochs] operationId: lucid_get_epoch summary: Get epoch description: | Retrieve a single epoch by its epoch_id, including the MMR root, leaf count, status, and on-chain anchoring details. x-speakeasy-mcp: name: lucid_get_epoch description: Get an epoch by epoch_id. parameters: - in: path name: epoch_id description: Unique epoch identifier required: true schema: {type: string} responses: '200': description: OK content: application/json: schema: type: object required: [success, epoch] properties: success: {type: boolean} epoch: {$ref: '#/components/schemas/Epoch'} '404': {$ref: '#/components/responses/NotFound'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.epochs.get({ epochId: "", }); console.log(result); } run(); /v1/epochs/{epoch_id}/retry: post: tags: [Epochs] operationId: lucid_retry_epoch summary: Retry failed epoch description: | Retry the on-chain anchoring for an epoch that previously failed. The epoch must be in 'failed' status. Resets the status and re-submits the Solana transaction. x-speakeasy-mcp: name: lucid_retry_epoch description: Retry a failed epoch. parameters: - in: path name: epoch_id description: Epoch identifier to retry anchoring for required: true schema: {type: string} responses: '200': description: OK content: application/json: schema: type: object required: [success, epoch] properties: success: {type: boolean} epoch: type: object required: [epoch_id, status] properties: epoch_id: {type: string} status: {type: string} '400': {$ref: '#/components/responses/BadRequest'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.epochs.retry({ epochId: "", }); console.log(result); } run(); /v1/epochs/{epoch_id}/verify: get: tags: [Epochs] operationId: lucid_verify_epoch summary: Verify epoch anchor description: | Verify an epoch's on-chain anchor by comparing the committed MMR root on Solana with the expected off-chain root. Returns the comparison result and transaction signature. x-speakeasy-mcp: name: lucid_verify_epoch description: Verify an epoch anchor on-chain. parameters: - in: path name: epoch_id description: Epoch identifier to verify on-chain anchor required: true schema: {type: string} responses: '200': description: OK content: application/json: schema: type: object required: [success, valid] properties: success: {type: boolean} valid: {type: boolean} on_chain_root: {type: string, nullable: true} expected_root: {type: string, nullable: true} tx_signature: {type: string, nullable: true} error: {type: string, nullable: true} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.epochs.verify({ epochId: "", }); console.log(result); } run(); /v1/epochs/{epoch_id}/transaction: get: tags: [Epochs] operationId: lucid_get_epoch_transaction summary: Get epoch anchoring transaction description: | Retrieve the Solana transaction details for an epoch's on-chain anchoring, including the transaction signature, slot number, and block time. x-speakeasy-mcp: name: lucid_get_epoch_transaction description: Get epoch anchoring transaction details. parameters: - in: path name: epoch_id description: Epoch identifier to get anchoring transaction details required: true schema: {type: string} responses: '200': description: OK content: application/json: schema: type: object required: [success, tx_signature] properties: success: {type: boolean} tx_signature: {type: string} slot: {type: integer} block_time: {type: integer} '404': {$ref: '#/components/responses/NotFound'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.epochs.getTransaction({ epochId: "", }); console.log(result); } run(); /v1/receipts/commit-root: post: tags: [Epochs] operationId: lucid_commit_epoch_root summary: Commit epoch root description: | Finalize the current epoch and commit its MMR root to Solana via the thought_epoch program. Optionally force-commit even if the epoch threshold has not been reached. x-speakeasy-mcp: name: lucid_commit_epoch_root description: Commit an epoch root to chain. requestBody: required: false content: application/json: schema: type: object properties: project_id: {type: string} epoch_id: {type: string} force: {type: boolean} responses: '202': description: Accepted content: application/json: schema: type: object required: [success, epoch_id, root, tx] properties: success: {type: boolean} epoch_id: {type: string} root: {type: string} tx: {type: string} leaf_count: {type: integer} '400': {$ref: '#/components/responses/BadRequest'} '503': {$ref: '#/components/responses/ServiceUnavailable'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.epochs.commitRoot({}); console.log(result); } run(); /v1/receipts/commit-roots-batch: post: tags: [Epochs] operationId: lucid_commit_epoch_roots_batch summary: Commit multiple epoch roots description: | Commit multiple epoch roots to Solana in a single batch operation. Returns per-epoch success/failure results with transaction signatures. Uses the batch commit instruction for gas efficiency. x-speakeasy-mcp: name: lucid_commit_epoch_roots_batch description: Commit multiple epoch roots. requestBody: required: true content: application/json: schema: type: object required: [epoch_ids] properties: epoch_ids: type: array items: {type: string} responses: '202': description: Accepted content: application/json: schema: type: object required: [success, total, successful_count, failed_count, results] properties: success: {type: boolean} total: {type: integer} successful_count: {type: integer} failed_count: {type: integer} results: type: array items: type: object properties: success: {type: boolean} epoch_id: {type: string} root: {type: string} signature: {type: string} error: {type: string} '400': {$ref: '#/components/responses/BadRequest'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.epochs.commitRootsBatch({ epochIds: [ "", ], }); console.log(result); } run(); /v1/anchoring/health: get: tags: [Epochs] operationId: lucid_get_anchoring_health summary: Anchoring service health description: | Check the health of the on-chain anchoring service, including Solana connection status, network type, authority address, and whether mock mode is active. x-speakeasy-mcp: name: lucid_get_anchoring_health description: Health check for anchoring service. responses: '200': description: OK content: application/json: schema: type: object required: [success, connected] properties: success: {type: boolean} connected: {type: boolean} network: {type: string} authority: {type: string} mock_mode: {type: boolean} error: {type: string} '503': {$ref: '#/components/responses/ServiceUnavailable'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.epochs.getAnchoringHealth(); console.log(result); } run(); /v1/epochs/ready: get: tags: [Epochs] operationId: lucid_list_epochs_ready summary: Get epochs ready for finalization description: | List all epochs that have met the finalization threshold (more than 100 receipts or older than 1 hour) and are ready to be committed on-chain. x-speakeasy-mcp: name: lucid_list_epochs_ready description: List epochs ready for finalization. responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/EpochsReadyResponse' '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.epochs.listReady(); console.log(result); } run(); /v1/epochs/stats: get: tags: [Epochs] operationId: lucid_get_epoch_stats summary: Epoch statistics description: | Retrieve aggregate epoch statistics including total count, counts by status, average receipts per epoch, and anchoring success rate. x-speakeasy-mcp: name: lucid_get_epoch_stats description: Get epoch statistics. responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/EpochStatsResponse' '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.epochs.getStats(); console.log(result); } run(); # =========================================================================== # Memory # =========================================================================== /v1/memory/episodic: post: tags: [Memory] operationId: lucid_add_episodic_memory summary: Store episodic memory description: Store a conversation turn as episodic memory. Requires session_id, role, and content. parameters: - {name: X-Agent-Passport-Id, in: header, required: true, schema: {type: string}} requestBody: required: true content: application/json: schema: type: object required: [session_id, role, content] properties: session_id: {type: string} role: {type: string, enum: [user, assistant, system, tool]} content: {type: string} tokens: {type: integer, default: 0} namespace: {type: string} memory_lane: {type: string, enum: [self, user, shared, market]} metadata: {type: object, additionalProperties: true} responses: '201': description: Created content: application/json: schema: {$ref: '#/components/schemas/MemoryWriteResponse'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.memory.lucidAddEpisodicMemory({ xAgentPassportId: "", body: { sessionId: "", role: "tool", content: "", }, }); console.log(result); } run(); /v1/memory/semantic: post: tags: [Memory] operationId: lucid_add_semantic_memory summary: Store semantic memory (extracted fact) parameters: - {name: X-Agent-Passport-Id, in: header, required: true, schema: {type: string}} requestBody: required: true content: application/json: schema: type: object required: [fact, confidence] properties: fact: {type: string} confidence: {type: number, minimum: 0, maximum: 1} content: {type: string} source_memory_ids: {type: array, items: {type: string}} namespace: {type: string} memory_lane: {type: string, enum: [self, user, shared, market]} metadata: {type: object, additionalProperties: true} responses: '201': description: Created content: application/json: schema: {$ref: '#/components/schemas/MemoryWriteResponse'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.memory.lucidAddSemanticMemory({ xAgentPassportId: "", body: { fact: "", confidence: 4432.89, }, }); console.log(result); } run(); /v1/memory/procedural: post: tags: [Memory] operationId: lucid_add_procedural_memory summary: Store procedural memory (learned rule) parameters: - {name: X-Agent-Passport-Id, in: header, required: true, schema: {type: string}} requestBody: required: true content: application/json: schema: type: object required: [rule, trigger] properties: rule: {type: string} trigger: {type: string} content: {type: string} priority: {type: integer, default: 0} source_memory_ids: {type: array, items: {type: string}} namespace: {type: string} memory_lane: {type: string, enum: [self, user, shared, market]} metadata: {type: object, additionalProperties: true} responses: '201': description: Created content: application/json: schema: {$ref: '#/components/schemas/MemoryWriteResponse'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.memory.lucidAddProceduralMemory({ xAgentPassportId: "", body: { rule: "", trigger: "", }, }); console.log(result); } run(); /v1/memory/entity: post: tags: [Memory] operationId: lucid_add_entity_memory summary: Store entity memory (knowledge graph node) parameters: - {name: X-Agent-Passport-Id, in: header, required: true, schema: {type: string}} requestBody: required: true content: application/json: schema: type: object required: [entity_name, entity_type] properties: entity_name: {type: string} entity_type: {type: string} entity_id: {type: string} content: {type: string} attributes: {type: object, additionalProperties: true} relationships: type: array items: type: object properties: target_entity_id: {type: string} relation_type: {type: string} confidence: {type: number, minimum: 0, maximum: 1} source_memory_ids: {type: array, items: {type: string}} namespace: {type: string} memory_lane: {type: string, enum: [self, user, shared, market]} metadata: {type: object, additionalProperties: true} responses: '201': description: Created content: application/json: schema: {$ref: '#/components/schemas/MemoryWriteResponse'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.memory.lucidAddEntityMemory({ xAgentPassportId: "", body: { entityName: "", entityType: "", }, }); console.log(result); } run(); /v1/memory/trust-weighted: post: tags: [Memory] operationId: lucid_add_trust_weighted_memory summary: Store trust-weighted memory (cross-agent trust) parameters: - {name: X-Agent-Passport-Id, in: header, required: true, schema: {type: string}} requestBody: required: true content: application/json: schema: type: object required: [source_agent_passport_id] properties: source_agent_passport_id: {type: string} trust_score: {type: number, minimum: 0, maximum: 1} decay_factor: {type: number, minimum: 0, maximum: 1} weighted_relevance: {type: number, minimum: 0, maximum: 1} content: {type: string} namespace: {type: string} memory_lane: {type: string, enum: [self, user, shared, market]} metadata: {type: object, additionalProperties: true} responses: '201': description: Created content: application/json: schema: {$ref: '#/components/schemas/MemoryWriteResponse'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.memory.lucidAddTrustWeightedMemory({ xAgentPassportId: "", body: { sourceAgentPassportId: "", }, }); console.log(result); } run(); /v1/memory/temporal: post: tags: [Memory] operationId: lucid_add_temporal_memory summary: Store temporal memory (time-bounded fact) parameters: - {name: X-Agent-Passport-Id, in: header, required: true, schema: {type: string}} requestBody: required: true content: application/json: schema: type: object required: [content, valid_from] properties: content: {type: string} valid_from: {type: integer, description: Unix ms timestamp} valid_to: {type: integer, nullable: true} recorded_at: {type: integer} namespace: {type: string} memory_lane: {type: string, enum: [self, user, shared, market]} metadata: {type: object, additionalProperties: true} responses: '201': description: Created content: application/json: schema: {$ref: '#/components/schemas/MemoryWriteResponse'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.memory.lucidAddTemporalMemory({ xAgentPassportId: "", body: { content: "", validFrom: 352529, }, }); console.log(result); } run(); /v1/memory/recall: post: tags: [Memory] operationId: lucid_recall_memory summary: Recall relevant memories via two-stage retrieval description: | Two-stage recall: vector similarity search (if embeddings available) followed by metadata-aware reranking. Scoring: 0.55*similarity + 0.20*recency + 0.15*type_bonus + 0.10*quality. parameters: - {name: X-Agent-Passport-Id, in: header, required: true, schema: {type: string}} requestBody: required: true content: application/json: schema: type: object required: [query] properties: query: {type: string} types: {type: array, items: {type: string, enum: [episodic, semantic, procedural, entity, trust_weighted, temporal]}} lanes: {type: array, items: {type: string, enum: [self, user, shared, market]}} limit: {type: integer, default: 10} namespace: {type: string} min_similarity: {type: number, minimum: 0, maximum: 1} include_archived: {type: boolean, default: false} responses: '200': description: OK content: application/json: schema: {$ref: '#/components/schemas/MemoryRecallResponse'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.memory.lucidRecallMemory({ xAgentPassportId: "", body: { query: "", }, }); console.log(result); } run(); /v1/memory/compact: post: tags: [Memory] operationId: lucid_compact_memory summary: Trigger memory compaction description: | Tiered compaction: warm (archive old episodics), cold (hard-prune archived past retention). Self-healing: auto-compacts before rejecting writes when limits are exceeded. parameters: - {name: X-Agent-Passport-Id, in: header, required: true, schema: {type: string}} requestBody: required: true content: application/json: schema: type: object properties: namespace: {type: string} session_id: {type: string} mode: {type: string, enum: [warm, cold, full], default: full} responses: '200': description: OK content: application/json: schema: type: object properties: success: {type: boolean} data: type: object properties: sessions_compacted: {type: integer} episodic_archived: {type: integer} extraction_triggered: {type: boolean} cold_pruned: {type: integer} snapshot_cid: {type: string, nullable: true} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.memory.lucidCompactMemory({ xAgentPassportId: "", body: {}, }); console.log(result); } run(); /v1/memory/health: get: tags: [Memory] operationId: lucid_memory_health summary: Memory store health and diagnostics description: Returns store type, entry/vector counts, embedding pipeline status, and store capabilities. parameters: - {name: X-Agent-Passport-Id, in: header, required: true, schema: {type: string}} responses: '200': description: OK content: application/json: schema: type: object properties: success: {type: boolean} data: type: object properties: storeType: {type: string, enum: [sqlite, postgres, memory]} schemaVersion: {type: integer} walMode: {type: boolean} entryCount: {type: integer} vectorCount: {type: integer} pendingEmbeddings: {type: integer} failedEmbeddings: {type: integer} sizeMb: {type: number} capabilities: type: object properties: persistent: {type: boolean} vectorSearch: {type: boolean} crossAgentQuery: {type: boolean} transactions: {type: boolean} localFirst: {type: boolean} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.memory.lucidMemoryHealth({ xAgentPassportId: "", }); console.log(result); } run(); /v1/memory/sessions: post: tags: [Memory] operationId: lucid_start_memory_session summary: Start a new conversation session parameters: - {name: X-Agent-Passport-Id, in: header, required: true, schema: {type: string}} requestBody: content: application/json: schema: type: object properties: namespace: {type: string} responses: '201': description: Created content: application/json: schema: type: object properties: success: {type: boolean} data: type: object properties: session_id: {type: string} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.memory.lucidStartMemorySession({ xAgentPassportId: "", }); console.log(result); } run(); get: tags: [Memory] operationId: lucid_list_memory_sessions summary: List sessions for an agent parameters: - {name: X-Agent-Passport-Id, in: header, required: true, schema: {type: string}} responses: '200': description: OK content: application/json: schema: type: object properties: success: {type: boolean} data: {type: array, items: {$ref: '#/components/schemas/MemorySession'}} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.memory.lucidListMemorySessions({ xAgentPassportId: "", }); console.log(result); } run(); /v1/memory/verify: post: tags: [Memory] operationId: lucid_verify_memory_chain summary: Verify memory hash chain integrity requestBody: required: true content: application/json: schema: type: object required: [agent_passport_id, namespace] properties: agent_passport_id: {type: string} namespace: {type: string} responses: '200': description: OK content: application/json: schema: type: object properties: success: {type: boolean} data: type: object properties: valid: {type: boolean} chain_length: {type: integer} broken_links: {type: array, items: {type: string}} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.memory.lucidVerifyMemoryChain({ agentPassportId: "", namespace: "", }); console.log(result); } run(); /v1/memory/entries/{id}: get: tags: [Memory] operationId: lucid_get_memory_entry summary: Read a single memory entry description: Retrieve a single memory entry by its unique identifier. parameters: - name: id in: path required: true schema: {type: string} description: Memory entry identifier responses: '200': description: OK content: application/json: schema: type: object properties: entry: type: object additionalProperties: true '404': {$ref: '#/components/responses/NotFound'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.memory.lucidGetMemoryEntry({ id: "", }); console.log(result); } run(); /v1/memory/entries: get: tags: [Memory] operationId: lucid_list_memory_entries summary: List memory entries with filters description: | List memory entries for an agent, optionally filtered by type and namespace. Supports pagination via page and per_page query parameters. parameters: - name: agent_passport_id in: query schema: {type: string} description: Agent passport identifier to filter entries - name: type in: query schema: {type: string} description: Memory type filter (episodic, semantic, procedural, entity, trust_weighted, temporal) - name: namespace in: query schema: {type: string} description: Namespace filter - name: page in: query schema: {type: integer, minimum: 1, default: 1} description: Page number for pagination - name: per_page in: query schema: {type: integer, minimum: 1, maximum: 100, default: 20} description: Number of results per page responses: '200': description: OK content: application/json: schema: type: object properties: entries: type: array items: {type: object, additionalProperties: true} pagination: type: object properties: page: {type: integer} per_page: {type: integer} total: {type: integer} total_pages: {type: integer} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.memory.lucidListMemoryEntries({}); console.log(result); } run(); /v1/memory/sessions/{id}/close: post: tags: [Memory] operationId: lucid_close_memory_session summary: Close a memory session description: Close an active memory session, preventing further writes. parameters: - name: id in: path required: true schema: {type: string} description: Session identifier to close responses: '200': description: OK content: application/json: schema: type: object properties: success: {type: boolean} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.memory.lucidCloseMemorySession({ id: "", }); console.log(result); } run(); /v1/memory/sessions/{id}/context: get: tags: [Memory] operationId: lucid_get_memory_session_context summary: Get session context description: | Retrieve the full context for a memory session, including recent turns, extracted facts, and relevant procedural rules. parameters: - name: id in: path required: true schema: {type: string} description: Session identifier responses: '200': description: OK content: application/json: schema: type: object properties: context: type: object additionalProperties: true x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.memory.lucidGetMemorySessionContext({ id: "", }); console.log(result); } run(); /v1/memory/provenance/{agent_id}/{namespace}: get: tags: [Memory] operationId: lucid_get_memory_provenance_chain summary: Get provenance chain description: | Return the full hash-chain provenance for a given agent and namespace, ordered from oldest to newest. parameters: - name: agent_id in: path required: true schema: {type: string} description: Agent passport identifier - name: namespace in: path required: true schema: {type: string} description: Memory namespace responses: '200': description: OK content: application/json: schema: type: object properties: chain: type: array items: {type: object, additionalProperties: true} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.memory.lucidGetMemoryProvenanceChain({ agentId: "", namespace: "", }); console.log(result); } run(); /v1/memory/provenance/entry/{id}: get: tags: [Memory] operationId: lucid_get_memory_entry_provenance summary: Single entry provenance description: Retrieve the provenance record for a single memory entry. parameters: - name: id in: path required: true schema: {type: string} description: Memory entry identifier responses: '200': description: OK content: application/json: schema: type: object properties: provenance: type: object additionalProperties: true '404': {$ref: '#/components/responses/NotFound'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.memory.lucidGetMemoryEntryProvenance({ id: "", }); console.log(result); } run(); /v1/memory/stats/{agent_id}: get: tags: [Memory] operationId: lucid_get_memory_stats summary: Memory diagnostics description: | Return memory statistics and diagnostics for a specific agent, including entry counts by type, storage usage, and hash chain integrity status. parameters: - name: agent_id in: path required: true schema: {type: string} description: Agent passport identifier responses: '200': description: OK content: application/json: schema: type: object properties: stats: type: object additionalProperties: true x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.memory.lucidGetMemoryStats({ agentId: "", }); console.log(result); } run(); # =========================================================================== # Anchoring # =========================================================================== /v1/anchors: get: tags: [Anchoring] operationId: lucid_list_anchors summary: Query anchor records description: | List anchor records for a given agent passport. Optionally filter by artifact type and limit results. parameters: - name: agent_passport_id in: query required: true schema: {type: string} description: Agent passport ID to filter anchor records - name: artifact_type in: query required: false schema: type: string enum: [epoch_bundle, epoch_proof, memory_snapshot, deploy_artifact, passport_metadata, nft_metadata, mmr_checkpoint] description: Filter by artifact type - name: limit in: query required: false schema: {type: integer, default: 50} description: Maximum number of records to return responses: '200': description: OK content: application/json: schema: type: object properties: success: {type: boolean} data: {type: array, items: {$ref: '#/components/schemas/AnchorRecord'}} '400': {$ref: '#/components/responses/BadRequest'} '401': {$ref: '#/components/responses/Unauthorized'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.anchoring.lucidListAnchors({ agentPassportId: "", }); console.log(result); } run(); /v1/anchors/{anchor_id}: get: tags: [Anchoring] operationId: lucid_get_anchor summary: Get a single anchor record description: Retrieve a single anchor record by its unique ID. parameters: - name: anchor_id in: path required: true schema: {type: string, format: uuid} responses: '200': description: OK content: application/json: schema: type: object properties: success: {type: boolean} data: {$ref: '#/components/schemas/AnchorRecord'} '404': {$ref: '#/components/responses/NotFound'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.anchoring.lucidGetAnchor({ anchorId: "1c20a5ef-56be-459b-b72d-bc77726c7945", }); console.log(result); } run(); /v1/anchors/{anchor_id}/lineage: get: tags: [Anchoring] operationId: lucid_get_anchor_lineage summary: Get anchor parent chain description: | Walk the parent_anchor_id chain for a given anchor, returning the full lineage from the target record back to the root. parameters: - name: anchor_id in: path required: true schema: {type: string, format: uuid} responses: '200': description: OK content: application/json: schema: type: object properties: success: {type: boolean} data: {type: array, items: {$ref: '#/components/schemas/AnchorRecord'}} '404': {$ref: '#/components/responses/NotFound'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.anchoring.lucidGetAnchorLineage({ anchorId: "02ef5517-fce0-4c5f-ad6c-1783e93e4a8f", }); console.log(result); } run(); /v1/anchors/{anchor_id}/verify: post: tags: [Anchoring] operationId: lucid_verify_anchor summary: Verify anchor CID against DePIN provider description: | Trigger verification of the anchor's CID against its DePIN storage provider. Updates the anchor status to verified or unreachable. parameters: - name: anchor_id in: path required: true schema: {type: string, format: uuid} responses: '200': description: OK content: application/json: schema: type: object properties: success: {type: boolean} data: type: object properties: anchor_id: {type: string, format: uuid} status: {type: string, enum: [verified, unreachable]} verified_at: {type: integer, nullable: true, description: Unix timestamp in milliseconds} '404': {$ref: '#/components/responses/NotFound'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.anchoring.lucidVerifyAnchor({ anchorId: "b84b97b3-cbae-4633-b640-65cd92f9c70a", }); console.log(result); } run(); /v1/anchors/cid/{cid}: get: tags: [Anchoring] operationId: lucid_lookup_anchor_by_cid summary: Reverse lookup anchor by CID description: Find anchor records that match a given content identifier (CID). parameters: - name: cid in: path required: true schema: {type: string} responses: '200': description: OK content: application/json: schema: type: object properties: success: {type: boolean} data: {type: array, items: {$ref: '#/components/schemas/AnchorRecord'}} '404': {$ref: '#/components/responses/NotFound'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.anchoring.lucidLookupAnchorByCid({ cid: "", }); console.log(result); } run(); # =========================================================================== # Payouts # =========================================================================== /v1/payouts/calculate: post: tags: [Payouts] operationId: lucid_calculate_payout summary: Calculate payout split description: | Calculate a revenue split for a set of recipients using basis-point math. Default split is 70% compute, 20% model, 10% protocol (configurable via request body). x-speakeasy-mcp: name: lucid_calculate_payout description: Calculate payout split between recipients. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PayoutCalculateRequest' responses: '200': description: OK content: application/json: schema: type: object required: [success, payout] properties: success: {type: boolean} payout: {$ref: '#/components/schemas/Payout'} '400': {$ref: '#/components/responses/BadRequest'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.payouts.calculate({ runId: "", totalAmountLamports: 721074, computeWallet: "", }); console.log(result); } run(); /v1/payouts/from-receipt: post: tags: [Payouts] operationId: lucid_payout_from_receipt summary: Create payout from receipt token data description: | Extract token usage data from a receipt and compute the payout split automatically. Uses the receipt's model and compute passport IDs to resolve the split configuration. x-speakeasy-mcp: name: lucid_payout_from_receipt description: Create payout split from receipt token data. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PayoutFromReceiptRequest' responses: '200': description: OK content: application/json: schema: type: object required: [success, payout] properties: success: {type: boolean} payout: {$ref: '#/components/schemas/Payout'} '400': {$ref: '#/components/responses/BadRequest'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.payouts.createFromReceipt({ runId: "", tokensIn: 844317, tokensOut: 600261, pricePer1kTokensLamports: "", computeWallet: "", }); console.log(result); } run(); /v1/payouts/{run_id}: get: tags: [Payouts] operationId: lucid_get_payout summary: Get payout by run_id description: | Retrieve the computed payout split for a specific inference run by its run_id, including per-recipient amounts and the overall split configuration. x-speakeasy-mcp: name: lucid_get_payout description: Get payout for a run_id. parameters: - in: path name: run_id description: Inference run identifier associated with the payout required: true schema: {type: string} responses: '200': description: OK content: application/json: schema: type: object required: [success, payout] properties: success: {type: boolean} payout: {$ref: '#/components/schemas/Payout'} '404': {$ref: '#/components/responses/NotFound'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.payouts.get({ runId: "", }); console.log(result); } run(); /v1/payouts/{run_id}/verify: get: tags: [Payouts] operationId: lucid_verify_payout summary: Verify payout split description: | Verify the integrity of a payout split by checking that recipient amounts sum to the total, all recipients are valid addresses, and the payout hash is correct. x-speakeasy-mcp: name: lucid_verify_payout description: Verify payout split integrity. parameters: - in: path name: run_id description: Inference run identifier to verify payout integrity required: true schema: {type: string} responses: '200': description: OK content: application/json: schema: type: object required: [success, valid] properties: success: {type: boolean} valid: {type: boolean} total_matches: {type: boolean} recipients_valid: {type: boolean} hash_valid: {type: boolean} '404': {$ref: '#/components/responses/NotFound'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.payouts.verify({ runId: "", }); console.log(result); } run(); # =========================================================================== # Health # =========================================================================== /health: get: tags: [Health] operationId: lucid_check_system_health summary: Overall system health description: > Check overall system health including all dependencies (database, Redis, Solana, Nango). Returns healthy, degraded, or down status with a 200 when healthy or 503 when degraded/down. Use /health/detailed for resource metrics. x-speakeasy-mcp: name: lucid_check_system_health description: Check overall system health including all dependencies. responses: '200': description: Healthy content: application/json: schema: $ref: '#/components/schemas/SystemHealth' example: status: "healthy" timestamp: "2026-03-12T10:00:00Z" uptime: 86400 version: "0.2.0" dependencies: database: status: "healthy" latency: 2.5 redis: status: "healthy" latency: 0.8 solana: status: "healthy" latency: 150 '503': description: Degraded or down content: application/json: schema: $ref: '#/components/schemas/SystemHealth' x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.health.lucidCheckSystemHealth(); console.log(result); } run(); /health/live: get: tags: [Health] operationId: lucid_check_liveness summary: Liveness probe description: > Kubernetes-compatible liveness probe. Returns 200 if the application process is alive. Does not check dependencies. Use /health/ready for full readiness. x-speakeasy-mcp: name: lucid_check_liveness description: Liveness probe - is the application alive? responses: '200': description: Alive content: application/json: schema: type: object required: [status, timestamp, uptime] properties: status: {type: string, example: alive} timestamp: {type: string, format: date-time} uptime: {type: number} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.health.lucidCheckLiveness(); console.log(result); } run(); /health/ready: get: tags: [Health] operationId: lucid_check_readiness summary: Readiness probe description: > Kubernetes-compatible readiness probe. Checks all dependencies (database, Redis, etc.) and returns 200 only when the service is ready to accept traffic. Returns 503 with dependency status details when not ready. x-speakeasy-mcp: name: lucid_check_readiness description: Readiness probe - is the application ready to serve traffic? responses: '200': description: Ready content: application/json: schema: type: object required: [status] properties: status: {type: string} timestamp: {type: string, format: date-time} dependencies: type: object additionalProperties: $ref: '#/components/schemas/HealthCheckResult' '503': description: Not ready content: application/json: schema: type: object properties: status: {type: string} timestamp: {type: string, format: date-time} error: {type: string} dependencies: type: object additionalProperties: $ref: '#/components/schemas/HealthCheckResult' x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.health.lucidCheckReadiness(); console.log(result); } run(); /health/database: get: tags: [Health] operationId: lucid_check_database_health summary: Database health check description: > Check database (PostgreSQL/Supabase) connectivity and query latency. Returns 503 when the database is unreachable. x-speakeasy-mcp: name: lucid_check_database_health description: Check database connectivity and latency. responses: '200': description: Healthy content: application/json: schema: $ref: '#/components/schemas/HealthCheckResult' '503': description: Unhealthy content: application/json: schema: $ref: '#/components/schemas/HealthCheckResult' x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.health.lucidCheckDatabaseHealth(); console.log(result); } run(); /health/redis: get: tags: [Health] operationId: lucid_check_redis_health summary: Redis health check description: > Check Redis connectivity and latency. Redis is used for spent proof deduplication and caching. Returns 503 when Redis is unreachable. x-speakeasy-mcp: name: lucid_check_redis_health description: Check Redis connectivity and latency. responses: '200': description: Healthy content: application/json: schema: $ref: '#/components/schemas/HealthCheckResult' '503': description: Unhealthy content: application/json: schema: $ref: '#/components/schemas/HealthCheckResult' x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.health.lucidCheckRedisHealth(); console.log(result); } run(); /health/nango: get: tags: [Health] operationId: lucid_check_nango_health summary: Nango service health check description: > Check Nango OAuth service connectivity. Nango manages third-party OAuth connections for agent integrations. Returns 503 when Nango is unreachable. x-speakeasy-mcp: name: lucid_check_nango_health description: Check Nango service connectivity and latency. responses: '200': description: Healthy content: application/json: schema: $ref: '#/components/schemas/HealthCheckResult' '503': description: Unhealthy content: application/json: schema: $ref: '#/components/schemas/HealthCheckResult' x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.health.lucidCheckNangoHealth(); console.log(result); } run(); /health/detailed: get: tags: [Health] operationId: lucid_get_detailed_health summary: Detailed health with statistics description: > Detailed health check including system resources (memory, CPU), per-dependency status, version info, environment, and aggregate statistics. Use this for operational dashboards and monitoring. x-speakeasy-mcp: name: lucid_get_detailed_health description: Detailed health check including system resources and statistics. responses: '200': description: OK content: application/json: schema: type: object required: [status, timestamp, uptime, version, environment, dependencies] properties: status: type: string enum: [healthy, degraded, down] timestamp: {type: string, format: date-time} uptime: {type: number} version: {type: string} environment: {type: string} dependencies: type: object additionalProperties: $ref: '#/components/schemas/HealthCheckResult' statistics: {type: object, additionalProperties: true, nullable: true} resources: type: object properties: memory: {type: object, additionalProperties: true} cpu: {type: object, additionalProperties: true} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.health.lucidGetDetailedHealth(); console.log(result); } run(); # =========================================================================== # Agents — Core MMR (DEPRECATED — routes removed from codebase) # These endpoints are retained for SDK backward compatibility but no longer # exist in the server. Use /v1/agents/* deployment routes instead. # =========================================================================== /api/agents/init: post: tags: [Agents] operationId: lucid_init_agent summary: Initialize an AI agent description: | DEPRECATED. Initialize or load a legacy agent for MMR-based proof-of-contribution tracking. Use /v1/agents/deploy instead for new agent deployments. deprecated: true x-speakeasy-mcp: name: lucid_init_agent description: Initialize or load an AI agent for MMR-based proof-of-contribution. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AgentInitRequest' responses: '200': description: OK content: application/json: schema: type: object required: [success, agentId, initialized] properties: success: {type: boolean} agentId: {type: string} initialized: {type: boolean} stats: {$ref: '#/components/schemas/AgentStats'} message: {type: string} '400': {$ref: '#/components/responses/BadRequest'} '500': {$ref: '#/components/responses/InternalServerError'} /api/agents/epoch: post: tags: [Agents] operationId: lucid_process_agent_epoch summary: Process an epoch for an agent description: | DEPRECATED. Process an epoch of vectors for a legacy agent, computing the MMR root and optionally anchoring on-chain. Use /v1/agents/* endpoints instead. deprecated: true x-speakeasy-mcp: name: lucid_process_agent_epoch description: Process an epoch of vectors for an AI agent. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AgentEpochRequest' responses: '200': description: OK content: application/json: schema: type: object required: [success, agentId, epochNumber, vectorCount, mmrRoot] properties: success: {type: boolean} agentId: {type: string} epochNumber: {type: integer} vectorCount: {type: integer} mmrRoot: {type: string} depinCid: {type: string} transactionSignature: {type: string} gasCost: {$ref: '#/components/schemas/GasCost'} message: {type: string} '400': {$ref: '#/components/responses/BadRequest'} '500': {$ref: '#/components/responses/InternalServerError'} /api/agents/batch-epochs: post: tags: [Agents] operationId: lucid_process_agent_batch_epochs summary: Process multiple epochs in batch description: | DEPRECATED. Process multiple epochs in batch for one or more legacy agents. Returns per-epoch results with MMR roots and transaction signatures. Use /v1/agents/* endpoints instead. deprecated: true x-speakeasy-mcp: name: lucid_process_agent_batch_epochs description: Process multiple epochs in batch for one or more agents. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AgentBatchEpochsRequest' responses: '200': description: OK content: application/json: schema: type: object required: [success, processedEpochs, results, totalGasCost] properties: success: {type: boolean} processedEpochs: {type: integer} results: type: array items: type: object properties: agentId: {type: string} epochNumber: {type: integer} mmrRoot: {type: string} depinCid: {type: string} transactionSignature: {type: string} gasCost: {$ref: '#/components/schemas/GasCost'} totalGasCost: {$ref: '#/components/schemas/GasCost'} message: {type: string} '400': {$ref: '#/components/responses/BadRequest'} '500': {$ref: '#/components/responses/InternalServerError'} /api/agents/proof: post: tags: [Agents] operationId: lucid_generate_agent_proof summary: Generate proof of contribution description: | DEPRECATED. Generate a cryptographic MMR proof of contribution for a specific vector submitted by a legacy agent. Use /v1/agents/{passportId}/proof instead. deprecated: true x-speakeasy-mcp: name: lucid_generate_agent_proof description: Generate cryptographic proof of contribution for a specific vector. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AgentProofRequest' responses: '200': description: OK content: application/json: schema: type: object required: [success, agentId, vectorText, epochNumber, proof, verified] properties: success: {type: boolean} agentId: {type: string} vectorText: {type: string} epochNumber: {type: integer} proof: {type: object, additionalProperties: true} verified: {type: boolean} message: {type: string} '400': {$ref: '#/components/responses/BadRequest'} '404': {$ref: '#/components/responses/NotFound'} '500': {$ref: '#/components/responses/InternalServerError'} /api/agents/{agentId}/stats: get: tags: [Agents] operationId: lucid_get_agent_stats summary: Get agent statistics description: | DEPRECATED. Retrieve statistics and current status for a legacy agent including epoch count, total vectors, and current MMR root. Use /v1/agents/{passportId}/receipts instead. deprecated: true x-speakeasy-mcp: name: lucid_get_agent_stats description: Get statistics and current status for an AI agent. parameters: - in: path name: agentId description: Legacy agent identifier required: true schema: {type: string} responses: '200': description: OK content: application/json: schema: type: object required: [success, stats] properties: success: {type: boolean} stats: {$ref: '#/components/schemas/AgentStats'} message: {type: string} '404': {$ref: '#/components/responses/NotFound'} '500': {$ref: '#/components/responses/InternalServerError'} /api/agents/{agentId}/history: get: tags: [Agents] operationId: lucid_get_agent_history summary: Get agent MMR root history description: | DEPRECATED. Retrieve a legacy agent's MMR root history across all epochs, ordered chronologically. Use /v1/agents/{passportId}/epoch instead. deprecated: true x-speakeasy-mcp: name: lucid_get_agent_history description: Get an agent's MMR root history across epochs. parameters: - in: path name: agentId description: Legacy agent identifier required: true schema: {type: string} responses: '200': description: OK content: application/json: schema: type: object required: [success, agentId, history, totalEpochs] properties: success: {type: boolean} agentId: {type: string} history: type: array items: {$ref: '#/components/schemas/AgentHistoryEntry'} totalEpochs: {type: integer} message: {type: string} '500': {$ref: '#/components/responses/InternalServerError'} /api/agents/{agentId}/root: get: tags: [Agents] operationId: lucid_get_agent_root summary: Get current MMR root for agent description: | DEPRECATED. Retrieve the current MMR root hash for a legacy agent. Use /v1/agents/{passportId}/proof instead for the modern equivalent. deprecated: true x-speakeasy-mcp: name: lucid_get_agent_root description: Get the current MMR root for an AI agent. parameters: - in: path name: agentId description: Legacy agent identifier required: true schema: {type: string} responses: '200': description: OK content: application/json: schema: type: object required: [success, agentId, currentRoot] properties: success: {type: boolean} agentId: {type: string} currentRoot: {type: string} message: {type: string} '404': {$ref: '#/components/responses/NotFound'} '500': {$ref: '#/components/responses/InternalServerError'} /api/agents/{agentId}/verify: get: tags: [Agents] operationId: lucid_verify_agent_mmr summary: Verify MMR integrity for agent description: | DEPRECATED. Verify the MMR integrity for a legacy agent by recomputing the tree and comparing roots. Use /v1/receipts/{receipt_id}/verify for receipt-level verification. deprecated: true x-speakeasy-mcp: name: lucid_verify_agent_mmr description: Verify MMR integrity for an AI agent. parameters: - in: path name: agentId description: Legacy agent identifier required: true schema: {type: string} responses: '200': description: OK content: application/json: schema: type: object required: [success, agentId, verification] properties: success: {type: boolean} agentId: {type: string} verification: {type: object, additionalProperties: true} message: {type: string} '500': {$ref: '#/components/responses/InternalServerError'} /api/agents: get: tags: [Agents] operationId: lucid_list_agents summary: List all registered agents description: | DEPRECATED. List all legacy registered agents with their statistics. Use GET /v1/agents (lucid_list_agent_passports) for the modern passport-based agent listing. deprecated: true x-speakeasy-mcp: name: lucid_list_agents description: List all registered AI agents with their stats. responses: '200': description: OK content: application/json: schema: type: object required: [success, totalAgents, agents] properties: success: {type: boolean} totalAgents: {type: integer} agents: type: array items: {$ref: '#/components/schemas/AgentStats'} message: {type: string} '500': {$ref: '#/components/responses/InternalServerError'} # =========================================================================== # Agents — Planner (Phase 3) # =========================================================================== /api/agents/plan: post: tags: [Agents] operationId: lucid_plan_agent_workflow summary: Plan a workflow from a goal description: | DEPRECATED. Plan a multi-step workflow from a natural language goal using the CrewAI planner. Returns a FlowSpec, reasoning explanation, and complexity estimate. deprecated: true x-speakeasy-mcp: name: lucid_plan_agent_workflow description: Plan a workflow from a natural language goal using CrewAI. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AgentPlanRequest' responses: '200': description: OK content: application/json: schema: type: object required: [success, goal, flowspec, reasoning] properties: success: {type: boolean} goal: {type: string} flowspec: {type: object, additionalProperties: true} reasoning: {type: string} complexity: {type: string} workflowId: {type: string} execution: {type: object, additionalProperties: true} executionError: {type: string} message: {type: string} '400': {$ref: '#/components/responses/BadRequest'} '503': {$ref: '#/components/responses/ServiceUnavailable'} '500': {$ref: '#/components/responses/InternalServerError'} /api/agents/accomplish: post: tags: [Agents] operationId: lucid_accomplish_agent_goal summary: Plan and execute a workflow in one call description: | DEPRECATED. Plan and execute a complete workflow in a single call via the Agent Orchestrator. Combines planning and execution with automatic executor selection. deprecated: true x-speakeasy-mcp: name: lucid_accomplish_agent_goal description: Plan and execute a workflow in one call via the Agent Orchestrator. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AgentAccomplishRequest' responses: '200': description: OK content: application/json: schema: type: object required: [success, goal] properties: success: {type: boolean} goal: {type: string} result: {type: object, additionalProperties: true} execution: {type: object, additionalProperties: true} '400': {$ref: '#/components/responses/BadRequest'} '500': {$ref: '#/components/responses/InternalServerError'} /api/agents/accomplish/preview: post: tags: [Agents] operationId: lucid_preview_agent_workflow summary: Preview a workflow without executing description: | DEPRECATED. Generate a workflow preview (dry run) from a natural language goal without executing it. Returns the FlowSpec and reasoning for review before committing. deprecated: true x-speakeasy-mcp: name: lucid_preview_agent_workflow description: Preview a planned workflow (dry run) without executing. requestBody: required: true content: application/json: schema: type: object required: [goal] properties: goal: {type: string} context: {type: object, additionalProperties: true} responses: '200': description: OK content: application/json: schema: type: object required: [success, preview, flowspec] properties: success: {type: boolean} preview: {type: object, additionalProperties: true} flowspec: {type: object, additionalProperties: true} reasoning: {type: string} '400': {$ref: '#/components/responses/BadRequest'} '500': {$ref: '#/components/responses/InternalServerError'} /api/agents/history/{tenantId}: get: tags: [Agents] operationId: lucid_get_agent_orchestrator_history summary: Get agent execution history for a tenant description: | DEPRECATED. Retrieve the execution history for a specific tenant, including workflow results, timing, and status. Supports an optional limit parameter. deprecated: true x-speakeasy-mcp: name: lucid_get_agent_orchestrator_history description: Get agent execution history for a specific tenant. parameters: - in: path name: tenantId description: Tenant identifier for execution history lookup required: true schema: {type: string} - in: query name: limit description: Maximum number of history entries to return schema: {type: integer, minimum: 1} responses: '200': description: OK content: application/json: schema: type: object required: [success, tenantId, history] properties: success: {type: boolean} tenantId: {type: string} history: type: array items: {type: object, additionalProperties: true} stats: {type: object, additionalProperties: true} message: {type: string} '400': {$ref: '#/components/responses/BadRequest'} '500': {$ref: '#/components/responses/InternalServerError'} /api/agents/orchestrator/health: get: tags: [Agents] operationId: lucid_check_agent_orchestrator_health summary: Agent orchestrator health check description: | DEPRECATED. Check the health of all agent orchestrator sub-services (planner, executor router, n8n, LangGraph). Returns per-service status. deprecated: true x-speakeasy-mcp: name: lucid_check_agent_orchestrator_health description: Check health of all agent orchestrator services. responses: '200': description: OK content: application/json: schema: type: object required: [success, health] properties: success: {type: boolean} health: {type: object, additionalProperties: true} message: {type: string} '500': {$ref: '#/components/responses/InternalServerError'} /api/agents/execute: post: tags: [Agents] operationId: lucid_execute_agent_flowspec summary: Execute a FlowSpec description: | DEPRECATED. Execute a FlowSpec workflow with automatic executor selection (n8n or LangGraph). Requires a tenant context with tenantId for execution tracking. deprecated: true x-speakeasy-mcp: name: lucid_execute_agent_flowspec description: Execute a FlowSpec with automatic executor selection. requestBody: required: true content: application/json: schema: type: object required: [flowspec, context] properties: flowspec: {type: object, additionalProperties: true} context: type: object required: [tenantId] properties: tenantId: {type: string} variables: {type: object, additionalProperties: true} executor: type: string enum: [n8n, langgraph] responses: '200': description: OK content: application/json: schema: type: object required: [success] properties: success: {type: boolean} result: {type: object, additionalProperties: true} '400': {$ref: '#/components/responses/BadRequest'} '500': {$ref: '#/components/responses/InternalServerError'} /api/agents/validate: post: tags: [Agents] operationId: lucid_validate_flowspec summary: Validate a FlowSpec structure description: | DEPRECATED. Validate a FlowSpec structure for correctness without executing it. Returns validation results including any errors or warnings found in the spec. deprecated: true x-speakeasy-mcp: name: lucid_validate_flowspec description: Validate a FlowSpec structure without executing. requestBody: required: true content: application/json: schema: type: object additionalProperties: true description: FlowSpec object to validate responses: '200': description: OK content: application/json: schema: type: object required: [success, validation] properties: success: {type: boolean} validation: {type: object, additionalProperties: true} message: {type: string} '400': {$ref: '#/components/responses/BadRequest'} '500': {$ref: '#/components/responses/InternalServerError'} /api/agents/planner/info: get: tags: [Agents] operationId: lucid_get_planner_info summary: Get planner service info description: | DEPRECATED. Retrieve the agent planner service information including status, available planning backends, and configuration details. deprecated: true x-speakeasy-mcp: name: lucid_get_planner_info description: Get agent planner service information and status. responses: '200': description: OK content: application/json: schema: type: object required: [success, status] properties: success: {type: boolean} status: {type: string} info: {type: object, additionalProperties: true} message: {type: string} '500': {$ref: '#/components/responses/InternalServerError'} /api/agents/executor/health: get: tags: [Agents] operationId: lucid_check_executor_health summary: Check executor health description: | DEPRECATED. Check the health of all executor backends (n8n, LangGraph), returning a boolean status for each. Used for operational monitoring. deprecated: true x-speakeasy-mcp: name: lucid_check_executor_health description: Check health of executor backends (n8n, LangGraph). responses: '200': description: OK content: application/json: schema: type: object required: [success, executors] properties: success: {type: boolean} executors: type: object properties: n8n: {type: boolean} langgraph: {type: boolean} message: {type: string} '500': {$ref: '#/components/responses/InternalServerError'} /api/agents/executor/decision: post: tags: [Agents] operationId: lucid_get_executor_decision summary: Get executor decision for a FlowSpec description: | DEPRECATED. Get the recommended executor for a FlowSpec without actually running it. Returns the executor choice (n8n or langgraph) and the reasoning behind the decision. deprecated: true x-speakeasy-mcp: name: lucid_get_executor_decision description: Get recommended executor for a FlowSpec without executing. requestBody: required: true content: application/json: schema: type: object required: [flowspec] properties: flowspec: {type: object, additionalProperties: true} responses: '200': description: OK content: application/json: schema: type: object required: [success, decision] properties: success: {type: boolean} decision: type: object properties: executor: {type: string} reason: {type: string} message: {type: string} '400': {$ref: '#/components/responses/BadRequest'} '500': {$ref: '#/components/responses/InternalServerError'} # =========================================================================== # v2 Escrow # =========================================================================== /v2/escrow/create: post: tags: [Escrow] operationId: lucid_create_escrow summary: Create a time-locked escrow description: | Create a new time-locked escrow for agent-to-agent transactions on a specific chain. Funds are held until released by receipt verification or timed out. x-speakeasy-mcp: name: lucid_create_escrow description: Create a time-locked escrow for agent-to-agent transactions. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateEscrowRequest' responses: '200': description: Escrow created content: application/json: schema: $ref: '#/components/schemas/SuccessResponse' '400': {$ref: '#/components/responses/BadRequest'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.escrow.lucidCreateEscrow({ chainId: "", beneficiary: "", token: "", amount: "398.30", duration: 430908, }); console.log(result); } run(); /v2/escrow/release: post: tags: [Escrow] operationId: lucid_release_escrow summary: Release escrow with verified receipt description: | Release escrowed funds to the beneficiary after verifying the associated receipt. Requires a valid receipt hash proving service delivery. x-speakeasy-mcp: name: lucid_release_escrow description: Release escrow funds to beneficiary after receipt verification. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ReleaseEscrowRequest' responses: '200': description: Escrow released content: application/json: schema: $ref: '#/components/schemas/SuccessResponse' '400': {$ref: '#/components/responses/BadRequest'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.escrow.lucidReleaseEscrow({ chainId: "", escrowId: "", receiptHash: "", signature: "", signerPubkey: "", }); console.log(result); } run(); /v2/escrow/dispute: post: tags: [Escrow] operationId: lucid_dispute_escrow summary: Dispute an escrow description: | Dispute an active escrow, freezing the funds and initiating the arbitration process. The escrow must be in 'active' status to be disputed. x-speakeasy-mcp: name: lucid_dispute_escrow description: Dispute an active escrow, freezing funds for arbitration. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/DisputeEscrowRequest' responses: '200': description: Escrow disputed content: application/json: schema: $ref: '#/components/schemas/SuccessResponse' '400': {$ref: '#/components/responses/BadRequest'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.escrow.lucidDisputeEscrow({ chainId: "", escrowId: "", reason: "", }); console.log(result); } run(); /v2/escrow/{chainId}/{escrowId}: get: tags: [Escrow] operationId: lucid_get_escrow summary: Get escrow details description: | Retrieve the full details of a specific escrow by chain and escrow ID, including status, parties, amounts, timeout, and associated receipt hashes. x-speakeasy-mcp: name: lucid_get_escrow description: Get details of a specific escrow by chain and ID. parameters: - name: chainId in: path description: Blockchain chain identifier (e.g. base, solana-devnet) required: true schema: {type: string} - name: escrowId in: path description: Escrow identifier on the specified chain required: true schema: {type: string} responses: '200': description: Escrow details content: application/json: schema: $ref: '#/components/schemas/GetEscrowResponse' '404': {$ref: '#/components/responses/NotFound'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.escrow.lucidGetEscrow({ chainId: "", escrowId: "", }); console.log(result); } run(); # =========================================================================== # v2 Disputes # =========================================================================== /v2/disputes/open: post: tags: [Disputes] operationId: lucid_open_dispute summary: Open a dispute on an escrow description: | Open a formal dispute on an active escrow, transitioning it to the evidence submission phase. Both parties can then submit evidence before resolution. x-speakeasy-mcp: name: lucid_open_dispute description: Open a dispute on an active escrow, starting the evidence phase. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/OpenDisputeRequest' responses: '200': description: Dispute opened content: application/json: schema: $ref: '#/components/schemas/SuccessResponse' '400': {$ref: '#/components/responses/BadRequest'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.disputes.lucidOpenDispute({ chainId: "", escrowId: "", reason: "", }); console.log(result); } run(); /v2/disputes/{disputeId}/evidence: post: tags: [Disputes] operationId: lucid_submit_evidence summary: Submit evidence for a dispute description: | Submit evidence (receipt hashes, MMR proofs, or other supporting data) for an open dispute. Evidence is recorded on-chain and used during automated resolution. x-speakeasy-mcp: name: lucid_submit_evidence description: Submit evidence (receipt hash, MMR proof) for an open dispute. parameters: - name: disputeId in: path description: Dispute identifier for evidence submission required: true schema: {type: string} requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SubmitEvidenceRequest' responses: '200': description: Evidence submitted content: application/json: schema: $ref: '#/components/schemas/SuccessResponse' '400': {$ref: '#/components/responses/BadRequest'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.disputes.lucidSubmitEvidence({ disputeId: "", body: { chainId: "", }, }); console.log(result); } run(); /v2/disputes/{disputeId}/resolve: post: tags: [Disputes] operationId: lucid_resolve_dispute summary: Resolve a dispute description: | Trigger automated resolution of a dispute based on the submitted evidence. The resolution logic evaluates receipt validity and proof correctness to determine the outcome. x-speakeasy-mcp: name: lucid_resolve_dispute description: Trigger automated resolution of a dispute based on submitted evidence. parameters: - name: disputeId in: path description: Dispute identifier to resolve required: true schema: {type: string} requestBody: required: true content: application/json: schema: type: object required: [chainId] properties: chainId: {type: string} responses: '200': description: Dispute resolved content: application/json: schema: $ref: '#/components/schemas/SuccessResponse' '400': {$ref: '#/components/responses/BadRequest'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.disputes.lucidResolveDispute({ disputeId: "", body: { chainId: "", }, }); console.log(result); } run(); /v2/disputes/{disputeId}/appeal: post: tags: [Disputes] operationId: lucid_appeal_dispute summary: Appeal a dispute decision description: | Appeal a dispute resolution decision. Requires staking LUCID tokens as a bond. The appeal triggers a secondary review with stricter evidence requirements. x-speakeasy-mcp: name: lucid_appeal_dispute description: Appeal a dispute resolution (requires staking LUCID). parameters: - name: disputeId in: path description: Dispute identifier to appeal required: true schema: {type: string} requestBody: required: true content: application/json: schema: type: object required: [chainId] properties: chainId: {type: string} responses: '200': description: Appeal submitted content: application/json: schema: $ref: '#/components/schemas/SuccessResponse' '400': {$ref: '#/components/responses/BadRequest'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.disputes.lucidAppealDispute({ disputeId: "", body: { chainId: "", }, }); console.log(result); } run(); /v2/disputes/{chainId}/{disputeId}: get: tags: [Disputes] operationId: lucid_get_dispute summary: Get dispute details description: | Retrieve the full details of a specific dispute by chain and dispute ID, including status, evidence submissions, resolution outcome, and appeal status. x-speakeasy-mcp: name: lucid_get_dispute description: Get details of a specific dispute. parameters: - name: chainId in: path description: Blockchain chain identifier required: true schema: {type: string} - name: disputeId in: path description: Dispute identifier to query required: true schema: {type: string} responses: '200': description: Dispute details content: application/json: schema: $ref: '#/components/schemas/GetDisputeResponse' '404': {$ref: '#/components/responses/NotFound'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.disputes.lucidGetDispute({ chainId: "", disputeId: "", }); console.log(result); } run(); # =========================================================================== # v2 Paymaster (ERC-4337 gas abstraction) # =========================================================================== /v2/paymaster/sponsor: post: tags: [Paymaster] operationId: lucid_sponsor_user_op summary: Sponsor a UserOp with $LUCID description: | Sponsor an ERC-4337 UserOperation by paying the gas cost in LUCID tokens. The paymaster signs the UserOp and deducts LUCID from the sender's balance at the current exchange rate. x-speakeasy-mcp: name: lucid_sponsor_user_op description: Sponsor an ERC-4337 UserOperation, paying gas in $LUCID. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SponsorUserOpRequest' responses: '200': description: UserOp sponsored content: application/json: schema: $ref: '#/components/schemas/SuccessResponse' '400': {$ref: '#/components/responses/BadRequest'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.paymaster.lucidSponsorUserOp({ chainId: "", userOp: {}, }); console.log(result); } run(); /v2/paymaster/rate/{chainId}: get: tags: [Paymaster] operationId: lucid_get_paymaster_rate summary: Get LUCID/ETH exchange rate description: | Retrieve the current LUCID-per-ETH exchange rate used for gas sponsoring on a specific EVM chain. The rate determines how much LUCID is charged per gas unit. x-speakeasy-mcp: name: lucid_get_paymaster_rate description: Get the current LUCID per ETH exchange rate for gas sponsoring. parameters: - name: chainId in: path description: EVM chain identifier for exchange rate lookup required: true schema: {type: string} responses: '200': description: Exchange rate content: application/json: schema: $ref: '#/components/schemas/PaymasterRateResponse' '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.paymaster.lucidGetPaymasterRate({ chainId: "", }); console.log(result); } run(); /v2/paymaster/estimate: post: tags: [Paymaster] operationId: lucid_estimate_gas_lucid summary: Estimate gas cost in $LUCID description: | Estimate the LUCID token cost for a UserOperation before submitting it. Returns the estimated gas in ETH and the equivalent LUCID amount at the current exchange rate. x-speakeasy-mcp: name: lucid_estimate_gas_lucid description: Estimate how much $LUCID a UserOperation will cost. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/EstimateGasRequest' responses: '200': description: Gas estimate content: application/json: schema: $ref: '#/components/schemas/SuccessResponse' '400': {$ref: '#/components/responses/BadRequest'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.paymaster.lucidEstimateGasLucid({ chainId: "", userOp: {}, }); console.log(result); } run(); # =========================================================================== # v2 Identity (cross-chain) # =========================================================================== /v2/identity/link: post: tags: [Identity] operationId: lucid_link_identity summary: Link addresses cross-chain description: | Link a new blockchain address to an existing cross-chain identity using CAIP-10 format. Creates the identity graph if it does not exist. Supports both Solana and EVM addresses. x-speakeasy-mcp: name: lucid_link_identity description: Link a new address to an existing cross-chain identity. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/LinkIdentityRequest' responses: '200': description: Identity linked content: application/json: schema: $ref: '#/components/schemas/IdentityLinkResponse' '400': {$ref: '#/components/responses/BadRequest'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.identity.lucidLinkIdentity({ primaryCaip10: "", linkedCaip10: "", }); console.log(result); } run(); /v2/identity/resolve: post: tags: [Identity] operationId: lucid_resolve_identity summary: Resolve cross-chain identity description: | Resolve a CAIP-10 address to its full cross-chain identity graph via POST. Returns all linked addresses across chains and the identity's creation timestamp. x-speakeasy-mcp: name: lucid_resolve_identity description: Resolve a CAIP-10 address to its cross-chain identity graph. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ResolveIdentityRequest' responses: '200': description: Identity resolved content: application/json: schema: $ref: '#/components/schemas/SuccessResponse' '400': {$ref: '#/components/responses/BadRequest'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.identity.lucidResolveIdentity({ caip10: "", }); console.log(result); } run(); get: tags: [Identity] operationId: lucid_get_identity summary: Resolve identity (GET) description: | Resolve a CAIP-10 address to its cross-chain identity graph via GET query parameter. Functionally equivalent to the POST resolve endpoint but uses query string input. x-speakeasy-mcp: name: lucid_get_identity description: Resolve a CAIP-10 address via query parameter. parameters: - name: caip10 in: query description: "CAIP-10 address to resolve (e.g. eip155:8453:0x1234...)" required: true schema: {type: string} responses: '200': description: Identity resolved content: application/json: schema: $ref: '#/components/schemas/SuccessResponse' '400': {$ref: '#/components/responses/BadRequest'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.identity.lucidGetIdentity({ caip10: "", }); console.log(result); } run(); /v2/identity/chains: get: tags: [Identity] operationId: lucid_get_identity_chains summary: Get linked chains for identity description: | Retrieve all blockchain chains linked to a CAIP-10 address, returning chain identifiers and their associated addresses within the identity graph. x-speakeasy-mcp: name: lucid_get_identity_chains description: Get all chains linked to a CAIP-10 address. parameters: - name: caip10 in: query description: CAIP-10 address to query chains for required: true schema: {type: string} responses: '200': description: Linked chains content: application/json: schema: $ref: '#/components/schemas/IdentityChainsResponse' '400': {$ref: '#/components/responses/BadRequest'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.identity.lucidGetIdentityChains({ caip10: "", }); console.log(result); } run(); /v2/identity/unlink: post: tags: [Identity] operationId: lucid_unlink_identity summary: Unlink a cross-chain address description: | Remove a linked address from a cross-chain identity graph. Returns 404 if the address is not found in any identity graph. x-speakeasy-mcp: name: lucid_unlink_identity description: Remove a linked address from a cross-chain identity. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UnlinkIdentityRequest' responses: '200': description: Identity unlinked content: application/json: schema: $ref: '#/components/schemas/SuccessResponse' '404': {$ref: '#/components/responses/NotFound'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.identity.lucidUnlinkIdentity({ primaryCaip10: "", linkedCaip10: "", }); console.log(result); } run(); # =========================================================================== # v2 TBA (Token Bound Accounts) # =========================================================================== /v2/tba/create: post: tags: [TBA] operationId: lucid_create_tba summary: Create TBA for passport NFT description: | Create an ERC-6551 Token Bound Account for a passport NFT on a specific EVM chain. The TBA enables the AI asset to hold tokens and interact with smart contracts autonomously. x-speakeasy-mcp: name: lucid_create_tba description: Create an ERC-6551 Token Bound Account for a passport NFT. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateTBARequest' responses: '200': description: TBA created content: application/json: schema: $ref: '#/components/schemas/GetTBAResponse' '400': {$ref: '#/components/responses/BadRequest'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.tba.lucidCreateTba({ chainId: "", tokenContract: "", tokenId: "", }); console.log(result); } run(); /v2/tba/{chainId}/{tokenId}: get: tags: [TBA] operationId: lucid_get_tba summary: Get TBA address description: | Retrieve the Token Bound Account address for an NFT by chain, token ID, and contract address. Returns the computed TBA address and deployment status. x-speakeasy-mcp: name: lucid_get_tba description: Get the Token Bound Account address for a token. parameters: - name: chainId in: path description: EVM chain identifier required: true schema: {type: string} - name: tokenId in: path description: NFT token identifier for TBA lookup required: true schema: {type: string} - name: tokenContract in: query description: NFT contract address (EVM 0x format) required: true schema: {type: string} responses: '200': description: TBA info content: application/json: schema: $ref: '#/components/schemas/GetTBAResponse' '400': {$ref: '#/components/responses/BadRequest'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.tba.lucidGetTba({ chainId: "", tokenId: "", tokenContract: "", }); console.log(result); } run(); # =========================================================================== # v2 ERC-7579 Modules # =========================================================================== /v2/modules/install: post: tags: [Modules] operationId: lucid_install_module summary: Install module on smart account description: | Install an ERC-7579 module (policy, payout, or receipt) on a smart account. The module type and initialization data must be provided in the request body. x-speakeasy-mcp: name: lucid_install_module description: Install an ERC-7579 module on a smart account. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/InstallModuleRequest' responses: '200': description: Module installed content: application/json: schema: $ref: '#/components/schemas/SuccessResponse' '400': {$ref: '#/components/responses/BadRequest'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.modules.lucidInstallModule({ chainId: "", account: "81158790", moduleType: "", moduleAddress: "", }); console.log(result); } run(); /v2/modules/uninstall: post: tags: [Modules] operationId: lucid_uninstall_module summary: Uninstall module from smart account description: | Uninstall an ERC-7579 module from a smart account. Requires the module address and type to identify which module to remove. x-speakeasy-mcp: name: lucid_uninstall_module description: Uninstall an ERC-7579 module from a smart account. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UninstallModuleRequest' responses: '200': description: Module uninstalled content: application/json: schema: $ref: '#/components/schemas/SuccessResponse' '400': {$ref: '#/components/responses/BadRequest'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.modules.lucidUninstallModule({ chainId: "", account: "31674046", moduleType: "", moduleAddress: "", }); console.log(result); } run(); /v2/modules/policy/configure: post: tags: [Modules] operationId: lucid_configure_policy_module summary: Configure policy module description: | Configure allowed policy hashes on the LucidPolicyModule. Only transactions matching an allowed policy hash will be permitted by the module. x-speakeasy-mcp: name: lucid_configure_policy_module description: Set allowed policy hashes on the LucidPolicyModule. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ConfigurePolicyRequest' responses: '200': description: Policy configured content: application/json: schema: $ref: '#/components/schemas/SuccessResponse' '400': {$ref: '#/components/responses/BadRequest'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.modules.lucidConfigurePolicyModule({ chainId: "", account: "04622028", policyHashes: [], }); console.log(result); } run(); /v2/modules/payout/configure: post: tags: [Modules] operationId: lucid_configure_payout_module summary: Configure payout module description: | Configure the revenue split percentages on the LucidPayoutModule. Sets the basis-point allocations for compute, model, and protocol recipients. x-speakeasy-mcp: name: lucid_configure_payout_module description: Set revenue split on the LucidPayoutModule. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ConfigurePayoutRequest' responses: '200': description: Payout configured content: application/json: schema: $ref: '#/components/schemas/SuccessResponse' '400': {$ref: '#/components/responses/BadRequest'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.modules.lucidConfigurePayoutModule({ chainId: "", account: "86222423", recipients: [ "", "", ], basisPoints: [ 122328, ], }); console.log(result); } run(); /v2/modules/{chainId}/{account}: get: tags: [Modules] operationId: lucid_list_modules summary: List installed modules description: | List all ERC-7579 modules installed on a smart account, including module type, address, and configuration status for each. x-speakeasy-mcp: name: lucid_list_modules description: List ERC-7579 modules installed on a smart account. parameters: - name: chainId in: path description: EVM chain identifier for the smart account required: true schema: {type: string} - name: account in: path description: Smart account address (EVM 0x format) required: true schema: {type: string} responses: '200': description: Installed modules content: application/json: schema: $ref: '#/components/schemas/ListModulesResponse' '400': {$ref: '#/components/responses/BadRequest'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.modules.lucidListModules({ chainId: "", account: "00461751", }); console.log(result); } run(); # =========================================================================== # v2 zkML # =========================================================================== /v2/zkml/prove: post: tags: [zkML] operationId: lucid_generate_zkml_proof summary: Generate zkML proof description: | Generate a zero-knowledge proof for a model inference run. The proof attests that a specific model produced a specific output without revealing the model weights or full input. x-speakeasy-mcp: name: lucid_generate_zkml_proof description: Generate a zkML proof for model inference verification. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/GenerateZkMLProofRequest' responses: '200': description: Proof generated content: application/json: schema: type: object required: [success] properties: success: {type: boolean} proof: {$ref: '#/components/schemas/ZkMLProof'} '400': {$ref: '#/components/responses/BadRequest'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.zkML.lucidGenerateZkmlProof({ modelId: "", inputHash: "", outputHash: "", policyHash: "", }); console.log(result); } run(); /v2/zkml/verify: post: tags: [zkML] operationId: lucid_verify_zkml_proof summary: Verify zkML proof description: | Verify a zkML Groth16 proof. Performs off-chain verification first, then optionally submits for on-chain verification via the ecPairing precompile on EVM chains. x-speakeasy-mcp: name: lucid_verify_zkml_proof description: Verify a zkML proof (offchain first, then onchain if valid). requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/VerifyZkMLProofRequest' responses: '200': description: Verification result content: application/json: schema: $ref: '#/components/schemas/ZkMLVerifyResponse' '400': {$ref: '#/components/responses/BadRequest'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.zkML.lucidVerifyZkmlProof({ chainId: "", proof: {}, receiptHash: "", }); console.log(result); } run(); /v2/zkml/register-model: post: tags: [zkML] operationId: lucid_register_zkml_model summary: Register model circuit description: | Register a model's Groth16 verifying key on-chain, enabling future proofs for this model to be verified by the ZkMLVerifier smart contract. x-speakeasy-mcp: name: lucid_register_zkml_model description: Register a model's Groth16 verifying key for onchain proof verification. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/RegisterZkMLModelRequest' responses: '200': description: Model registered content: application/json: schema: $ref: '#/components/schemas/SuccessResponse' '400': {$ref: '#/components/responses/BadRequest'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.zkML.lucidRegisterZkmlModel({ chainId: "", modelHash: "", verifyingKey: "", }); console.log(result); } run(); /v2/zkml/models/{chainId}: get: tags: [zkML] operationId: lucid_list_zkml_models summary: List registered model circuits description: | List all registered zkML model circuits on a specific chain, including model IDs, verifying key hashes, and registration timestamps. x-speakeasy-mcp: name: lucid_list_zkml_models description: List all registered zkML model circuits on a chain. parameters: - name: chainId in: path description: Chain identifier for registered model circuits required: true schema: {type: string} responses: '200': description: Model circuits content: application/json: schema: $ref: '#/components/schemas/ListZkMLModelsResponse' '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.zkML.lucidListZkmlModels({ chainId: "", }); console.log(result); } run(); # =========================================================================== # Passport PATCH sub-routes # =========================================================================== /v1/passports/{passport_id}/pricing: patch: tags: [Passports] operationId: lucid_update_passport_pricing summary: Update passport pricing description: | Update pricing-related fields on a passport (e.g., price per token, pricing model). Requires X-Owner-Address header for ownership verification. x-speakeasy-mcp: name: lucid_update_passport_pricing description: Update pricing fields on a passport. parameters: - name: passport_id in: path description: Passport identifier to update pricing for required: true schema: {type: string} - name: X-Owner-Address in: header description: Owner wallet address for ownership verification required: false schema: {type: string} requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdatePassportPricingRequest' responses: '200': description: Updated content: application/json: schema: $ref: '#/components/schemas/GetPassportResponse' '403': {$ref: '#/components/responses/Forbidden'} '404': {$ref: '#/components/responses/NotFound'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.passports.lucidUpdatePassportPricing({ passportId: "", body: {}, }); console.log(result); } run(); /v1/passports/{passport_id}/projections/retry: post: tags: [Passports] operationId: lucid_retry_passport_projections summary: Retry failed identity projections description: | Triggers a retry of identity projection to all configured external registries (Metaplex, QuantuLabs) for a passport. Useful when projections are stuck in 'failed' or 'pending' status. Runs asynchronously — returns immediately with current projection status. parameters: - name: passport_id in: path required: true schema: {type: string} responses: '200': description: Retry triggered content: application/json: schema: type: object properties: success: {type: boolean} message: {type: string} current_registrations: type: object additionalProperties: $ref: '#/components/schemas/ExternalRegistrationStatus' '404': {description: Passport not found} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.passports.lucidRetryPassportProjections({ passportId: "", }); console.log(result); } run(); /v1/passports/{passport_id}/endpoints: patch: tags: [Passports] operationId: lucid_update_passport_endpoints summary: Update passport endpoint URLs description: | Update the endpoint URLs on a passport (inference URL, health URL, metrics URL). Requires X-Owner-Address header for ownership verification. x-speakeasy-mcp: name: lucid_update_passport_endpoints description: Update endpoint URLs on a passport. parameters: - name: passport_id in: path description: Passport identifier to update endpoints for required: true schema: {type: string} - name: X-Owner-Address in: header description: Owner wallet address for ownership verification required: false schema: {type: string} requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdatePassportEndpointsRequest' responses: '200': description: Updated content: application/json: schema: $ref: '#/components/schemas/GetPassportResponse' '403': {$ref: '#/components/responses/Forbidden'} '404': {$ref: '#/components/responses/NotFound'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.passports.lucidUpdatePassportEndpoints({ passportId: "", body: {}, }); console.log(result); } run(); # =========================================================================== # x402 Payments — Asset Pricing, Revenue, Withdrawal # =========================================================================== /v1/assets/{passport_id}/pricing: get: tags: [Payments] operationId: lucid_get_asset_pricing summary: Get asset pricing description: | Retrieve the x402 pricing configuration for an AI asset. Returns null if no pricing has been configured (asset is free access). No authentication required. x-speakeasy-mcp: name: lucid_get_asset_pricing description: Get the pricing configuration for an AI asset (model, compute, etc.). parameters: - name: passport_id in: path description: AI asset passport identifier required: true schema: {type: string} responses: '200': description: Pricing data (null if not configured) content: application/json: schema: type: object required: [success] properties: success: {type: boolean} pricing: nullable: true $ref: '#/components/schemas/AssetPricing' '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.payments.lucidGetAssetPricing({ passportId: "", }); console.log(result); } run(); put: tags: [Payments] operationId: lucid_set_asset_pricing summary: Set asset pricing description: Admin-only. Sets or updates the pricing configuration for an AI asset. security: - BearerAuth: [] x-speakeasy-mcp: name: lucid_set_asset_pricing description: Set or update pricing for an AI asset (admin auth required). parameters: - name: passport_id in: path description: AI asset passport identifier to set pricing for required: true schema: {type: string} requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SetAssetPricingRequest' responses: '200': description: Pricing updated content: application/json: schema: $ref: '#/components/schemas/SuccessResponse' '400': {$ref: '#/components/responses/BadRequest'} '401': description: Unauthorized (admin auth required) content: application/json: schema: {$ref: '#/components/schemas/ErrorResponse'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi({ bearerAuth: process.env["RAIJINLABSLUCIDAI_BEARER_AUTH"] ?? "", }); async function run() { const result = await raijinLabsLucidAi.payments.lucidSetAssetPricing({ passportId: "", body: { payoutAddress: "", }, }); console.log(result); } run(); delete: tags: [Payments] operationId: lucid_delete_asset_pricing summary: Remove asset pricing description: Admin-only. Removes pricing (asset becomes free access). security: - BearerAuth: [] x-speakeasy-mcp: name: lucid_delete_asset_pricing description: Remove pricing for an AI asset, making it free (admin auth required). parameters: - name: passport_id in: path description: AI asset passport identifier to remove pricing from required: true schema: {type: string} responses: '200': description: Deleted content: application/json: schema: type: object required: [success, deleted] properties: success: {type: boolean} deleted: {type: boolean} '401': description: Unauthorized content: application/json: schema: {$ref: '#/components/schemas/ErrorResponse'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi({ bearerAuth: process.env["RAIJINLABSLUCIDAI_BEARER_AUTH"] ?? "", }); async function run() { const result = await raijinLabsLucidAi.payments.lucidDeleteAssetPricing({ passportId: "", }); console.log(result); } run(); /v1/assets/{passport_id}/revenue: get: tags: [Payments] operationId: lucid_get_asset_revenue summary: Get asset revenue summary description: | Retrieve the revenue summary for an AI asset including total earned, pending settlement, and withdrawn amounts. Defaults to USDC token if not specified. x-speakeasy-mcp: name: lucid_get_asset_revenue description: Get total, pending, and withdrawn revenue for an AI asset. parameters: - name: passport_id in: path description: AI asset passport identifier for revenue query required: true schema: {type: string} - name: token in: query description: Payment token to query revenue for (default USDC) required: false schema: {type: string, default: USDC} responses: '200': description: Revenue summary content: application/json: schema: type: object required: [success, revenue] properties: success: {type: boolean} revenue: $ref: '#/components/schemas/RevenueInfo' '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.payments.lucidGetAssetRevenue({ passportId: "", }); console.log(result); } run(); /v1/assets/{passport_id}/withdraw: post: tags: [Payments] operationId: lucid_withdraw_asset_revenue summary: Withdraw asset revenue description: | Admin-only. Marks confirmed revenue as pending_payout. The actual on-chain transfer happens via the batch payout epoch. security: - BearerAuth: [] x-speakeasy-mcp: name: lucid_withdraw_asset_revenue description: Withdraw accumulated revenue for an AI asset (admin auth required). parameters: - name: passport_id in: path description: AI asset passport identifier to withdraw revenue from required: true schema: {type: string} requestBody: required: false content: application/json: schema: type: object properties: token: {type: string, default: USDC} responses: '200': description: Withdrawal queued content: application/json: schema: type: object required: [success, withdrawal] properties: success: {type: boolean} withdrawal: type: object required: [amount, token, status] properties: amount: {type: string, description: Amount in micro-units} token: {type: string} status: type: string enum: [pending_payout, no_funds] '401': description: Unauthorized content: application/json: schema: {$ref: '#/components/schemas/ErrorResponse'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi({ bearerAuth: process.env["RAIJINLABSLUCIDAI_BEARER_AUTH"] ?? "", }); async function run() { const result = await raijinLabsLucidAi.payments.lucidWithdrawAssetRevenue({ passportId: "", }); console.log(result); } run(); # =========================================================================== # x402 Payments — Configuration # =========================================================================== /v1/config/payment: get: tags: [Payments] operationId: lucid_get_payment_config summary: Get x402 payment configuration description: | Retrieve the current x402 payment configuration including supported chains, default facilitator, enabled status, and facilitator-specific settings. x-speakeasy-mcp: name: lucid_get_payment_config description: Get the current x402 payment configuration (chains, facilitator, etc.). responses: '200': description: Payment configuration content: application/json: schema: type: object required: [success, config] properties: success: {type: boolean} config: {type: object, additionalProperties: true} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.payments.lucidGetPaymentConfig(); console.log(result); } run(); /v1/config/facilitator: put: tags: [Payments] operationId: lucid_set_default_facilitator summary: Set default payment facilitator description: Admin-only. Sets the default x402 facilitator (direct, coinbase, payai). security: - BearerAuth: [] x-speakeasy-mcp: name: lucid_set_default_facilitator description: Set the default x402 facilitator for payment verification (admin auth required). requestBody: required: true content: application/json: schema: type: object required: [facilitator] properties: facilitator: type: string enum: [direct, coinbase, payai] responses: '200': description: Facilitator updated content: application/json: schema: $ref: '#/components/schemas/SuccessResponse' '400': {$ref: '#/components/responses/BadRequest'} '401': description: Unauthorized content: application/json: schema: {$ref: '#/components/schemas/ErrorResponse'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi({ bearerAuth: process.env["RAIJINLABSLUCIDAI_BEARER_AUTH"] ?? "", }); async function run() { const result = await raijinLabsLucidAi.payments.lucidSetDefaultFacilitator({ facilitator: "payai", }); console.log(result); } run(); /v1/config/chains: get: tags: [Payments] operationId: lucid_get_supported_chains summary: List supported payment chains description: | List all blockchain chains supported for x402 payments, including the accepted payment tokens (e.g., USDC) on each chain. x-speakeasy-mcp: name: lucid_get_supported_chains description: List the chains supported for x402 payments (Base, Solana, etc.). responses: '200': description: Supported chains content: application/json: schema: type: object required: [success, chains] properties: success: {type: boolean} chains: type: array items: type: object properties: chain: {type: string} tokens: type: array items: {type: string} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.payments.lucidGetSupportedChains(); console.log(result); } run(); # =========================================================================== # x402 Payments — Subscriptions # =========================================================================== /v1/access/subscribe: post: tags: [Payments] operationId: lucid_subscribe_asset summary: Subscribe to asset access description: | x402-gated. Pay via USDC and receive a time-limited access subscription. On success, creates an on-chain AccessReceipt. x-speakeasy-mcp: name: lucid_subscribe_asset description: Pay for a time-limited subscription to an AI asset via x402. parameters: - name: X-Payment-Proof in: header required: true description: Transaction hash proving USDC payment (x402 protocol) schema: {type: string} requestBody: required: true content: application/json: schema: type: object required: [passport_id] properties: passport_id: {type: string} duration_hours: {type: integer, default: 24} responses: '200': description: Subscription created content: application/json: schema: type: object required: [subscribed, passport_id, expires_at, duration_hours] properties: subscribed: {type: boolean} passport_id: {type: string} expires_at: {type: integer, description: Unix timestamp} duration_hours: {type: integer} '402': description: Payment Required (x402) content: application/json: schema: $ref: '#/components/schemas/X402PaymentRequired' '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.payments.lucidSubscribeAsset({ xPaymentProof: "", body: { passportId: "", }, }); console.log(result); } run(); # =========================================================================== # Payment Grants # =========================================================================== /v1/config/grants: post: tags: [Payments] operationId: lucid_create_payment_grant summary: Issue a signed payment grant description: | Admin-only. Issues a signed payment grant for an agent run. The grant is Ed25519-signed by the orchestrator and scoped to specific models/tools. security: - BearerAuth: [] x-speakeasy-mcp: name: lucid_create_payment_grant description: Issue a signed payment grant for agent spending (admin auth required). requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreatePaymentGrantRequest' responses: '201': description: Grant created content: application/json: schema: type: object required: [success, grant] properties: success: {type: boolean} grant: {$ref: '#/components/schemas/PaymentGrant'} '400': {$ref: '#/components/responses/BadRequest'} '401': description: Unauthorized (admin auth required) content: application/json: schema: {$ref: '#/components/schemas/ErrorResponse'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi({ bearerAuth: process.env["RAIJINLABSLUCIDAI_BEARER_AUTH"] ?? "", }); async function run() { const result = await raijinLabsLucidAi.payments.lucidCreatePaymentGrant({ tenantId: "", agentPassportId: "", runId: "", scope: { models: [ "", ], tools: [], maxPerCallUsd: 8892.57, }, limits: { totalUsd: 2605.79, expiresAt: 877872, maxCalls: 60861, }, }); console.log(result); } run(); # =========================================================================== # Agent Deployment # =========================================================================== /v1/agents/deploy: post: tags: [AgentDeploy] operationId: lucid_deploy_agent x-speakeasy-group: agents.deploy summary: One-click agent deployment description: | Admin-only. Creates a passport, generates code via runtime adapter, builds a Docker image, and deploys to the preferred target. security: - BearerAuth: [] x-speakeasy-mcp: name: lucid_deploy_agent description: Deploy an agent end-to-end (passport, code gen, build, deploy). requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/DeployAgentRequest' example: name: "trading-agent-v2" owner: "7xK9mQ2vNbPfYkRd3JhEzV1LnWqA8tUcGp4SyDfH5Bo" descriptor: runtime: "node" framework: "langchain" tools: ["web-search", "calculator"] target: "railway" responses: '201': description: Deployment created content: application/json: schema: type: object required: [success, deployment] properties: success: {type: boolean} deployment: {type: object, additionalProperties: true} example: success: true deployment: passport_id: "ppt_agent_Qm3kR8wZ" target: "railway" status: "deploying" url: "https://trading-agent-v2.up.railway.app" image: "ghcr.io/raijinlabs/lucid-agents/ppt_agent_Qm3kR8wZ:latest" created_at: 1710288000 '400': {$ref: '#/components/responses/BadRequest'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi({ bearerAuth: process.env["RAIJINLABSLUCIDAI_BEARER_AUTH"] ?? "", }); async function run() { const result = await raijinLabsLucidAi.agents.deploy.lucidDeployAgent({ name: "trading-agent-v2", owner: "7xK9mQ2vNbPfYkRd3JhEzV1LnWqA8tUcGp4SyDfH5Bo", descriptor: { "runtime": "node", "framework": "langchain", "tools": [ "web-search", "calculator", ], }, }); console.log(result); } run(); /v1/agents/preview: post: tags: [AgentDeploy] operationId: lucid_preview_agent x-speakeasy-group: agents.deploy summary: Generate agent code preview description: | Admin-only. Generates agent code without deploying (dry run). security: - BearerAuth: [] x-speakeasy-mcp: name: lucid_preview_agent description: Generate agent code preview without deploying. requestBody: required: true content: application/json: schema: type: object required: [descriptor] properties: name: {type: string} owner: {type: string} descriptor: {type: object, additionalProperties: true, description: Agent runtime descriptor} preferred_adapter: {type: string} responses: '200': description: Preview generated content: application/json: schema: type: object required: [success, preview] properties: success: {type: boolean} preview: {type: object, additionalProperties: true} '400': {$ref: '#/components/responses/BadRequest'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi({ bearerAuth: process.env["RAIJINLABSLUCIDAI_BEARER_AUTH"] ?? "", }); async function run() { const result = await raijinLabsLucidAi.agents.deploy.lucidPreviewAgent({ descriptor: { "key": "", "key1": "", "key2": "", }, }); console.log(result); } run(); /v1/agents/deployments: get: tags: [AgentDeploy] operationId: lucid_list_agent_deployments x-speakeasy-group: agents.deploy summary: List all agent deployments description: Admin-only. Lists all agent deployments with optional filters. security: - BearerAuth: [] x-speakeasy-mcp: name: lucid_list_agent_deployments description: List all agent deployments with optional filtering by tenant, status, or target. parameters: - in: query name: tenant_id description: Filter deployments by tenant identifier schema: {type: string} - in: query name: status description: Filter by deployment status (e.g. running, stopped, failed) schema: {type: string} - in: query name: target description: Filter by deploy target (docker, railway, akash, phala, ionet, nosana) schema: {type: string} responses: '200': description: OK content: application/json: schema: type: object required: [success, deployments] properties: success: {type: boolean} deployments: type: array items: {type: object, additionalProperties: true} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi({ bearerAuth: process.env["RAIJINLABSLUCIDAI_BEARER_AUTH"] ?? "", }); async function run() { const result = await raijinLabsLucidAi.agents.deploy.lucidListAgentDeployments(); console.log(result); } run(); /v1/agents/capabilities: get: tags: [AgentDeploy] operationId: lucid_get_agent_capabilities x-speakeasy-group: agents.deploy summary: List available runtime adapters and deploy targets description: | List the available runtime adapters (node, python, langchain, crewai) and deployment targets (docker, railway, akash, phala, ionet, nosana) for agent deployment. x-speakeasy-mcp: name: lucid_get_agent_capabilities description: List available runtime adapters and deployment targets. responses: '200': description: OK content: application/json: schema: type: object required: [success, capabilities] properties: success: {type: boolean} capabilities: type: object properties: adapters: type: array items: {type: string} deployers: type: array items: {type: string} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.agents.deploy.lucidGetAgentCapabilities(); console.log(result); } run(); /v1/agents/{passportId}/status: get: tags: [AgentDeploy] operationId: lucid_get_agent_deploy_status x-speakeasy-group: agents.deploy summary: Get agent deployment status description: | Retrieve the current deployment status for an agent by passport ID, including target platform, URL, health state, and deployment timestamps. x-speakeasy-mcp: name: lucid_get_agent_deploy_status description: Get the current deployment status for an agent. parameters: - in: path name: passportId description: Agent passport identifier required: true schema: {type: string} responses: '200': description: OK content: application/json: schema: type: object required: [success, status] properties: success: {type: boolean} status: {type: object, additionalProperties: true} '404': {$ref: '#/components/responses/NotFound'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.agents.deploy.lucidGetAgentDeployStatus({ passportId: "", }); console.log(result); } run(); /v1/agents/{passportId}/logs: get: tags: [AgentDeploy] operationId: lucid_get_agent_deploy_logs x-speakeasy-group: agents.deploy summary: Get agent deployment logs description: | Retrieve deployment logs for an agent. Supports a tail parameter to control the number of log lines returned (default 100). x-speakeasy-mcp: name: lucid_get_agent_deploy_logs description: Get deployment logs for an agent. parameters: - in: path name: passportId description: Agent passport identifier required: true schema: {type: string} - in: query name: tail description: Number of log lines to return (default 100) schema: {type: integer, default: 100} responses: '200': description: OK content: application/json: schema: type: object required: [success, logs] properties: success: {type: boolean} logs: {type: object, additionalProperties: true} '400': {$ref: '#/components/responses/BadRequest'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.agents.deploy.lucidGetAgentDeployLogs({ passportId: "", }); console.log(result); } run(); /v1/agents/{passportId}/terminate: post: tags: [AgentDeploy] operationId: lucid_terminate_agent x-speakeasy-group: agents.deploy summary: Terminate a deployed agent description: Admin-only. Terminates an active agent deployment. security: - BearerAuth: [] x-speakeasy-mcp: name: lucid_terminate_agent description: Terminate a deployed agent by passport ID. parameters: - in: path name: passportId description: Agent passport identifier to terminate required: true schema: {type: string} responses: '200': description: Agent terminated content: application/json: schema: type: object required: [success, message] properties: success: {type: boolean} message: {type: string} '400': {$ref: '#/components/responses/BadRequest'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi({ bearerAuth: process.env["RAIJINLABSLUCIDAI_BEARER_AUTH"] ?? "", }); async function run() { const result = await raijinLabsLucidAi.agents.deploy.lucidTerminateAgent({ passportId: "", }); console.log(result); } run(); /v1/agents/{passportId}/events: get: tags: [AgentDeploy] operationId: lucid_get_deployment_events x-speakeasy-group: agents.deploy summary: Get deployment event history description: Returns append-only audit log of deployment lifecycle events. x-speakeasy-mcp: name: lucid_get_deployment_events description: Get deployment event history for an agent by passport ID. parameters: - name: passportId in: path description: Agent passport identifier required: true schema: {type: string} - name: limit in: query description: Maximum number of events to return schema: {type: integer, default: 50} responses: '200': description: OK content: application/json: schema: type: object properties: success: {type: boolean} data: type: array items: type: object properties: event_id: {type: string} deployment_id: {type: string} event_type: {type: string} actor: {type: string} previous_state: {type: string} new_state: {type: string} metadata: {type: object} created_at: {type: string, format: date-time} '404': {$ref: '#/components/responses/NotFound'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.agents.deploy.lucidGetDeploymentEvents({ passportId: "", }); console.log(result); } run(); # =========================================================================== # Agent Launch # =========================================================================== /v1/agents/launch: post: tags: [AgentLaunch] operationId: lucid_launch_agent x-speakeasy-group: agents.launch summary: Launch an agent in the Lucid verified network description: | Launch an agent via one of two modes: - **image**: Deploy a pre-built Docker image (Path A — Bring Your Own Image). - **base-runtime**: Deploy a pre-configured base runtime with model, prompt, and optional tools (Path B — No-Code). Both modes create a passport, deploy to the target provider, and inject Lucid env vars. Returns the passport_id, deployment_id, and deployment URL. security: - BearerAuth: [] x-speakeasy-mcp: name: lucid_launch_agent description: Launch an agent via image or base-runtime mode. requestBody: required: true content: application/json: schema: oneOf: - $ref: '#/components/schemas/LaunchImageRequest' - $ref: '#/components/schemas/LaunchBaseRuntimeRequest' discriminator: propertyName: mode mapping: image: '#/components/schemas/LaunchImageRequest' base-runtime: '#/components/schemas/LaunchBaseRuntimeRequest' examples: image_mode: summary: Launch with a Docker image value: mode: "image" image: "ghcr.io/myorg/my-agent:latest" target: "railway" owner: "7xK9mQ2vNbPfYkRd3JhEzV1LnWqA8tUcGp4SyDfH5Bo" name: "my-trading-agent" base_runtime_mode: summary: Launch with base runtime value: mode: "base-runtime" model: "gpt-4o" prompt: "You are a helpful trading assistant" target: "docker" owner: "7xK9mQ2vNbPfYkRd3JhEzV1LnWqA8tUcGp4SyDfH5Bo" name: "trading-assistant" responses: '201': description: Agent launched content: application/json: schema: $ref: '#/components/schemas/LaunchResponse' '400': {$ref: '#/components/responses/BadRequest'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi({ bearerAuth: process.env["RAIJINLABSLUCIDAI_BEARER_AUTH"] ?? "", }); async function run() { const result = await raijinLabsLucidAi.agents.launch.lucidLaunchAgent({ mode: "image", image: "ghcr.io/myorg/my-agent:latest", target: "railway", owner: "7xK9mQ2vNbPfYkRd3JhEzV1LnWqA8tUcGp4SyDfH5Bo", name: "my-trading-agent", verification: "full", }); console.log(result); } run(); # =========================================================================== # Blue-Green Deployment # =========================================================================== /v1/agents/{passportId}/deploy/blue-green: post: tags: [AgentLaunch] operationId: lucid_deploy_blue_green x-speakeasy-group: agents.launch summary: Initiate blue-green deployment description: | Start a blue-green rollout for an agent. Deploys a new version into the blue slot while the current primary continues serving traffic. Use promote or rollback to finalize. security: - BearerAuth: [] x-speakeasy-mcp: name: lucid_deploy_blue_green description: Initiate a blue-green deployment for an agent. parameters: - name: passportId in: path required: true schema: {type: string} description: Agent passport identifier requestBody: required: true content: application/json: schema: type: object required: [image] properties: image: {type: string, description: Docker image reference for the blue deployment} target: {type: string, description: "Deploy target override (docker, railway, akash, phala, ionet, nosana)"} env_vars: {type: object, additionalProperties: {type: string}, description: Environment variable overrides} health_gate_ms: {type: integer, description: Health check wait time in milliseconds before promotion eligibility} responses: '201': description: Blue deployment created content: application/json: schema: type: object required: [success, deployment_id, slot] properties: success: {type: boolean} deployment_id: {type: string} slot: {type: string, enum: [blue]} status: {type: string} url: {type: string} '400': {$ref: '#/components/responses/BadRequest'} '404': {$ref: '#/components/responses/NotFound'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi({ bearerAuth: process.env["RAIJINLABSLUCIDAI_BEARER_AUTH"] ?? "", }); async function run() { const result = await raijinLabsLucidAi.agents.launch.lucidDeployBlueGreen({ passportId: "", body: { image: "https://picsum.photos/seed/x0OR83PrbJ/659/3733", }, }); console.log(result); } run(); /v1/agents/{passportId}/promote: post: tags: [AgentLaunch] operationId: lucid_promote_blue x-speakeasy-group: agents.launch summary: Promote blue to primary description: | Promote the blue deployment to primary. The current primary is terminated and the blue slot becomes the new primary. Fails if no healthy blue deployment exists. security: - BearerAuth: [] x-speakeasy-mcp: name: lucid_promote_blue description: Promote the blue deployment to primary. parameters: - name: passportId in: path required: true schema: {type: string} description: Agent passport identifier responses: '200': description: Blue promoted to primary content: application/json: schema: type: object required: [success, message] properties: success: {type: boolean} message: {type: string} deployment_id: {type: string} '400': {$ref: '#/components/responses/BadRequest'} '404': {$ref: '#/components/responses/NotFound'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi({ bearerAuth: process.env["RAIJINLABSLUCIDAI_BEARER_AUTH"] ?? "", }); async function run() { const result = await raijinLabsLucidAi.agents.launch.lucidPromoteBlue({ passportId: "", }); console.log(result); } run(); /v1/agents/{passportId}/rollback: post: tags: [AgentLaunch] operationId: lucid_rollback_deployment x-speakeasy-group: agents.launch summary: Rollback to previous deployment description: | Rollback to the previous primary deployment. Terminates the current primary and restores the prior version. Fails if no rollback target exists. security: - BearerAuth: [] x-speakeasy-mcp: name: lucid_rollback_deployment description: Rollback to the previous deployment. parameters: - name: passportId in: path required: true schema: {type: string} description: Agent passport identifier responses: '200': description: Rolled back content: application/json: schema: type: object required: [success, message] properties: success: {type: boolean} message: {type: string} deployment_id: {type: string} '400': {$ref: '#/components/responses/BadRequest'} '404': {$ref: '#/components/responses/NotFound'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi({ bearerAuth: process.env["RAIJINLABSLUCIDAI_BEARER_AUTH"] ?? "", }); async function run() { const result = await raijinLabsLucidAi.agents.launch.lucidRollbackDeployment({ passportId: "", }); console.log(result); } run(); /v1/agents/{passportId}/blue: get: tags: [AgentLaunch] operationId: lucid_get_blue_deployment x-speakeasy-group: agents.launch summary: Get blue deployment status description: | Retrieve the current blue-slot deployment status for an agent, including health state, URL, and promotion eligibility. x-speakeasy-mcp: name: lucid_get_blue_deployment description: Get the blue deployment status for an agent. parameters: - name: passportId in: path required: true schema: {type: string} description: Agent passport identifier responses: '200': description: OK content: application/json: schema: type: object properties: success: {type: boolean} deployment: type: object properties: deployment_id: {type: string} slot: {type: string, enum: [blue]} status: {type: string} url: {type: string} healthy: {type: boolean} created_at: {type: string, format: date-time} '404': {$ref: '#/components/responses/NotFound'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.agents.launch.lucidGetBlueDeployment({ passportId: "", }); console.log(result); } run(); /v1/agents/{passportId}/blue/cancel: post: tags: [AgentLaunch] operationId: lucid_cancel_blue_deployment x-speakeasy-group: agents.launch summary: Cancel blue deployment description: | Cancel and terminate the blue-slot deployment without affecting the current primary. Useful when the blue deployment fails health checks or is no longer needed. security: - BearerAuth: [] x-speakeasy-mcp: name: lucid_cancel_blue_deployment description: Cancel the blue deployment without affecting primary. parameters: - name: passportId in: path required: true schema: {type: string} description: Agent passport identifier responses: '200': description: Blue deployment canceled content: application/json: schema: type: object required: [success, message] properties: success: {type: boolean} message: {type: string} '404': {$ref: '#/components/responses/NotFound'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi({ bearerAuth: process.env["RAIJINLABSLUCIDAI_BEARER_AUTH"] ?? "", }); async function run() { const result = await raijinLabsLucidAi.agents.launch.lucidCancelBlueDeployment({ passportId: "", }); console.log(result); } run(); # =========================================================================== # Webhooks # =========================================================================== /v1/webhooks/{provider}: post: tags: [Webhooks] operationId: lucid_receive_deployment_webhook summary: Receive deployment webhook description: | Receive and normalize provider-specific deployment webhooks (Railway, Akash, Phala, io.net, Nosana). The provider path parameter selects the appropriate normalizer. Webhook payloads are converted into deployment events. parameters: - name: provider in: path required: true schema: type: string enum: [railway, akash, phala, ionet, nosana] description: Deployment provider name requestBody: required: true content: application/json: schema: type: object additionalProperties: true description: Provider-specific webhook payload responses: '200': description: Webhook processed content: application/json: schema: type: object required: [success] properties: success: {type: boolean} event_id: {type: string} '400': {$ref: '#/components/responses/BadRequest'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.webhooks.lucidReceiveDeploymentWebhook({ provider: "railway", body: { "key": "", "key1": "", }, }); console.log(result); } run(); # =========================================================================== # Agent Wallet # =========================================================================== /v1/agents/{agentId}/wallet/balance: get: tags: [AgentWallet] operationId: lucid_get_agent_wallet_balance x-speakeasy-group: agents.wallet summary: Get agent wallet balance description: | Retrieve the wallet balance for a deployed agent's PDA wallet, including SOL and token balances on the configured chain. x-speakeasy-mcp: name: lucid_get_agent_wallet_balance description: Get the wallet balance for a deployed agent. parameters: - in: path name: agentId description: Agent passport identifier for wallet balance required: true schema: {type: string} responses: '200': description: OK content: application/json: schema: type: object required: [success, balance] properties: success: {type: boolean} balance: {type: object, additionalProperties: true} '404': {$ref: '#/components/responses/NotFound'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.agents.wallet.lucidGetAgentWalletBalance({ agentId: "", }); console.log(result); } run(); /v1/agents/{agentId}/wallet/send: post: tags: [AgentWallet] operationId: lucid_agent_wallet_send x-speakeasy-group: agents.wallet summary: Send from agent wallet description: | Admin-only. Execute a policy-gated transaction from the agent's PDA wallet. security: - BearerAuth: [] x-speakeasy-mcp: name: lucid_agent_wallet_send description: Send tokens from an agent wallet (policy-gated). parameters: - in: path name: agentId description: Agent passport identifier for wallet send required: true schema: {type: string} requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AgentWalletSendRequest' responses: '200': description: Transaction executed content: application/json: schema: type: object required: [success, transaction] properties: success: {type: boolean} transaction: {type: object, additionalProperties: true} '400': {$ref: '#/components/responses/BadRequest'} '404': {$ref: '#/components/responses/NotFound'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi({ bearerAuth: process.env["RAIJINLABSLUCIDAI_BEARER_AUTH"] ?? "", }); async function run() { const result = await raijinLabsLucidAi.agents.wallet.lucidAgentWalletSend({ agentId: "", body: { to: "", amount: "634.76", }, }); console.log(result); } run(); /v1/agents/{agentId}/wallet/limits: put: tags: [AgentWallet] operationId: lucid_set_agent_wallet_limits x-speakeasy-group: agents.wallet summary: Set agent wallet spending limits description: Admin-only. Set per-transaction and daily spending limits. security: - BearerAuth: [] x-speakeasy-mcp: name: lucid_set_agent_wallet_limits description: Set spending limits on an agent wallet. parameters: - in: path name: agentId description: Agent passport identifier for wallet limits required: true schema: {type: string} requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AgentWalletLimitsRequest' responses: '200': description: Limits updated content: application/json: schema: type: object required: [success, message] properties: success: {type: boolean} message: {type: string} '400': {$ref: '#/components/responses/BadRequest'} '404': {$ref: '#/components/responses/NotFound'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi({ bearerAuth: process.env["RAIJINLABSLUCIDAI_BEARER_AUTH"] ?? "", }); async function run() { const result = await raijinLabsLucidAi.agents.wallet.lucidSetAgentWalletLimits({ agentId: "", body: { perTxUsd: 4858.69, dailyUsd: 8909.2, }, }); console.log(result); } run(); /v1/agents/{agentId}/wallet/policy: get: tags: [AgentWallet] operationId: lucid_get_agent_wallet_policy x-speakeasy-group: agents.wallet summary: Get agent wallet policy description: | Retrieve the wallet policy and configuration for an agent, including the wallet address, chain, provider type, and any spending constraints. x-speakeasy-mcp: name: lucid_get_agent_wallet_policy description: Get the wallet policy and details for an agent. parameters: - in: path name: agentId description: Agent passport identifier for wallet policy required: true schema: {type: string} responses: '200': description: OK content: application/json: schema: type: object required: [success, wallet] properties: success: {type: boolean} wallet: type: object properties: address: {type: string} chain: {type: string} provider: {type: string} agent_passport_id: {type: string} '404': {$ref: '#/components/responses/NotFound'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.agents.wallet.lucidGetAgentWalletPolicy({ agentId: "", }); console.log(result); } run(); # =========================================================================== # Agent Revenue # =========================================================================== /v1/agents/{agentId}/revenue: get: tags: [AgentRevenue] operationId: lucid_get_agent_revenue x-speakeasy-group: agents.revenue summary: Get agent revenue pool status description: | Retrieve the accumulated revenue pool for an agent, including total earned, pending distribution, and the share token configuration if launched. x-speakeasy-mcp: name: lucid_get_agent_revenue description: Get the accumulated revenue pool for an agent. parameters: - in: path name: agentId description: Agent passport identifier for revenue query required: true schema: {type: string} responses: '200': description: OK content: application/json: schema: type: object required: [success, revenue] properties: success: {type: boolean} revenue: $ref: '#/components/schemas/AgentRevenuePool' '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.agents.revenue.lucidGetAgentRevenue({ agentId: "", }); console.log(result); } run(); /v1/agents/{agentId}/revenue/airdrop: post: tags: [AgentRevenue] operationId: lucid_trigger_agent_airdrop x-speakeasy-group: agents.revenue summary: Trigger revenue airdrop to share token holders description: | Admin-only. Distributes accumulated agent revenue to share token holders proportionally based on their holdings. security: - BearerAuth: [] x-speakeasy-mcp: name: lucid_trigger_agent_airdrop description: Trigger airdrop of accumulated agent revenue to share token holders. parameters: - in: path name: agentId description: Agent passport identifier for revenue airdrop required: true schema: {type: string} responses: '200': description: Airdrop executed content: application/json: schema: type: object required: [success, airdrop] properties: success: {type: boolean} airdrop: type: object properties: distributed_lamports: {type: string} holder_count: {type: integer} '400': {$ref: '#/components/responses/BadRequest'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi({ bearerAuth: process.env["RAIJINLABSLUCIDAI_BEARER_AUTH"] ?? "", }); async function run() { const result = await raijinLabsLucidAi.agents.revenue.lucidTriggerAgentAirdrop({ agentId: "", }); console.log(result); } run(); /v1/agents/{agentId}/revenue/history: get: tags: [AgentRevenue] operationId: lucid_get_agent_revenue_history x-speakeasy-group: agents.revenue summary: Get agent payout history description: | Retrieve the complete payout history for an agent, including airdrop distributions, amounts, recipient counts, and timestamps. x-speakeasy-mcp: name: lucid_get_agent_revenue_history description: Get the payout history for an agent. parameters: - in: path name: agentId description: Agent passport identifier for payout history required: true schema: {type: string} responses: '200': description: OK content: application/json: schema: type: object required: [success, history] properties: success: {type: boolean} history: type: array items: $ref: '#/components/schemas/AgentPayoutEntry' '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.agents.revenue.lucidGetAgentRevenueHistory({ agentId: "", }); console.log(result); } run(); # =========================================================================== # A2A Protocol (Agent-to-Agent) # =========================================================================== /v1/a2a/{passportId}/agent.json: get: tags: [A2A] operationId: lucid_get_a2a_agent_card summary: Get A2A Agent Card description: | Standard A2A discovery endpoint. Returns the Agent Card for the specified agent, conforming to the A2A protocol spec. x-speakeasy-mcp: name: lucid_get_a2a_agent_card description: Get the A2A Agent Card for discovery. parameters: - in: path name: passportId description: Agent passport identifier for A2A card discovery required: true schema: {type: string} responses: '200': description: Agent Card content: application/json: schema: $ref: '#/components/schemas/A2AAgentCard' '404': {$ref: '#/components/responses/NotFound'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.a2A.lucidGetA2aAgentCard({ passportId: "", }); console.log(result); } run(); /v1/a2a/{passportId}/tasks/send: post: tags: [A2A] operationId: lucid_send_a2a_task summary: Send task to A2A agent description: | Admin-only. Sends a task to an A2A-compatible agent. If the agent has a deployment URL, the request is forwarded via the A2A client. security: - BearerAuth: [] x-speakeasy-mcp: name: lucid_send_a2a_task description: Send a task to an A2A agent. parameters: - in: path name: passportId description: Agent passport identifier to send task to required: true schema: {type: string} requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/A2ASendTaskRequest' responses: '200': description: Task created/forwarded content: application/json: schema: $ref: '#/components/schemas/A2ATask' '400': {$ref: '#/components/responses/BadRequest'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi({ bearerAuth: process.env["RAIJINLABSLUCIDAI_BEARER_AUTH"] ?? "", }); async function run() { const result = await raijinLabsLucidAi.a2A.lucidSendA2aTask({ passportId: "", body: { message: { parts: [ {}, ], }, }, }); console.log(result); } run(); /v1/a2a/discover: post: tags: [A2A] operationId: lucid_discover_a2a_agent summary: Discover an external A2A agent description: | Admin-only. Fetches the Agent Card from an external HTTPS URL. Includes SSRF protection (blocks internal/private IPs). security: - BearerAuth: [] x-speakeasy-mcp: name: lucid_discover_a2a_agent description: Discover an external A2A agent by URL and retrieve its Agent Card. requestBody: required: true content: application/json: schema: type: object required: [agent_url] properties: agent_url: {type: string, format: uri, description: HTTPS URL of the agent} auth_token: {type: string, description: Optional auth token for the remote agent} responses: '200': description: Agent discovered content: application/json: schema: type: object required: [success, agent_card] properties: success: {type: boolean} agent_card: {$ref: '#/components/schemas/A2AAgentCard'} '400': {$ref: '#/components/responses/BadRequest'} '404': {$ref: '#/components/responses/NotFound'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi({ bearerAuth: process.env["RAIJINLABSLUCIDAI_BEARER_AUTH"] ?? "", }); async function run() { const result = await raijinLabsLucidAi.a2A.lucidDiscoverA2aAgent({ agentUrl: "https://unripe-bug.info/", }); console.log(result); } run(); /v1/a2a/{passportId}/tasks/{taskId}: get: tags: [A2A] operationId: lucid_get_a2a_task summary: Get A2A task status description: Admin-only. Retrieves the current state of a task. security: - BearerAuth: [] x-speakeasy-mcp: name: lucid_get_a2a_task description: Get the status of an A2A task by ID. parameters: - in: path name: passportId description: Agent passport identifier required: true schema: {type: string} - in: path name: taskId description: A2A task identifier (UUID) required: true schema: {type: string} responses: '200': description: Task details content: application/json: schema: $ref: '#/components/schemas/A2ATask' '404': {$ref: '#/components/responses/NotFound'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi({ bearerAuth: process.env["RAIJINLABSLUCIDAI_BEARER_AUTH"] ?? "", }); async function run() { const result = await raijinLabsLucidAi.a2A.lucidGetA2aTask({ passportId: "", taskId: "", }); console.log(result); } run(); delete: tags: [A2A] operationId: lucid_delete_a2a_task summary: Delete an A2A task description: | Admin-only. Deletes a task record. If the task is still in progress it is canceled first, then the record is removed. Returns 404 if the task does not exist. security: - BearerAuth: [] x-speakeasy-mcp: name: lucid_delete_a2a_task description: Delete an A2A task by ID (cancels if still in progress). parameters: - in: path name: passportId description: Agent passport identifier required: true schema: {type: string} - in: path name: taskId description: A2A task identifier to delete (UUID) required: true schema: {type: string} responses: '200': description: Task deleted content: application/json: schema: type: object required: [success] properties: success: {type: boolean} '404': {$ref: '#/components/responses/NotFound'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi({ bearerAuth: process.env["RAIJINLABSLUCIDAI_BEARER_AUTH"] ?? "", }); async function run() { const result = await raijinLabsLucidAi.a2A.lucidDeleteA2aTask({ passportId: "", taskId: "", }); console.log(result); } run(); /v1/a2a/{passportId}/tasks: get: tags: [A2A] operationId: lucid_list_a2a_tasks summary: List A2A tasks for an agent description: Admin-only. Lists tasks with optional state filter and pagination. security: - BearerAuth: [] x-speakeasy-pagination: type: offsetLimit inputs: - name: page in: parameters type: page - name: per_page in: parameters type: limit outputs: results: $.tasks x-speakeasy-mcp: name: lucid_list_a2a_tasks description: List A2A tasks for an agent with optional filtering and pagination. parameters: - in: path name: passportId description: Agent passport identifier to list tasks for required: true schema: {type: string} - in: query name: state description: Filter by task state schema: type: string enum: [submitted, working, input-required, completed, failed, canceled] - in: query name: page description: Page number for pagination (starts at 1) schema: {type: integer, minimum: 1, default: 1} - in: query name: per_page description: Number of results per page (1-100) schema: {type: integer, minimum: 1, maximum: 100, default: 20} responses: '200': description: OK content: application/json: schema: type: object required: [tasks, total, page, per_page, total_pages] properties: tasks: type: array items: {$ref: '#/components/schemas/A2ATask'} total: {type: integer} page: {type: integer} per_page: {type: integer} total_pages: {type: integer} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi({ bearerAuth: process.env["RAIJINLABSLUCIDAI_BEARER_AUTH"] ?? "", }); async function run() { const result = await raijinLabsLucidAi.a2A.lucidListA2aTasks({ passportId: "", }); for await (const page of result) { console.log(page); } } run(); # =========================================================================== # Reputation Computation (v2) # =========================================================================== /v2/reputation/algorithms: get: tags: [Reputation] operationId: lucid_list_reputation_algorithms summary: List available scoring algorithms description: | List all registered reputation scoring algorithms with their IDs, names, descriptions, and version information. Used to discover available algorithms before computing scores. x-speakeasy-mcp: name: lucid_list_reputation_algorithms description: List all registered reputation scoring algorithms. responses: '200': description: OK content: application/json: schema: type: object required: [success, algorithms] properties: success: {type: boolean} algorithms: type: array items: $ref: '#/components/schemas/ReputationAlgorithmInfo' '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.reputation.lucidListReputationAlgorithms(); console.log(result); } run(); /v2/reputation/{agentId}/compute: post: tags: [Reputation] operationId: lucid_compute_reputation summary: Compute reputation score description: | Compute a reputation score for an agent using a specific algorithm. Defaults to `receipt-volume-v1` if no algorithmId is provided. x-speakeasy-mcp: name: lucid_compute_reputation description: Compute a reputation score for an agent using a pluggable algorithm. parameters: - in: path name: agentId description: Agent identifier for reputation computation required: true schema: {type: string} requestBody: required: false content: application/json: schema: type: object properties: algorithmId: {type: string, description: "Algorithm to use (default: receipt-volume-v1)"} context: type: object additionalProperties: true description: Optional context for the computation (chain IDs, time range, etc.) responses: '200': description: Score computed content: application/json: schema: type: object required: [success, algorithmId, agentId, score] properties: success: {type: boolean} algorithmId: {type: string} agentId: {type: string} score: {$ref: '#/components/schemas/AlgorithmScore'} '400': {$ref: '#/components/responses/BadRequest'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.reputation.lucidComputeReputation({ agentId: "", }); console.log(result); } run(); /v2/reputation/{agentId}/composite: get: tags: [Reputation] operationId: lucid_get_composite_reputation summary: Get composite reputation score description: | Computes a composite reputation score from all registered algorithms with equal weighting. x-speakeasy-mcp: name: lucid_get_composite_reputation description: Get a weighted composite reputation score across all algorithms. parameters: - in: path name: agentId description: Agent identifier for composite reputation score required: true schema: {type: string} responses: '200': description: Composite score content: application/json: schema: type: object required: [success, agentId, composite] properties: success: {type: boolean} agentId: {type: string} composite: {$ref: '#/components/schemas/CompositeReputationScore'} '400': {$ref: '#/components/responses/BadRequest'} '404': description: No algorithms registered content: application/json: schema: {$ref: '#/components/schemas/ErrorResponse'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.reputation.lucidGetCompositeReputation({ agentId: "", }); console.log(result); } run(); # =========================================================================== # Cross-Chain (v2) — EVM multi-chain + ERC-8004 # =========================================================================== /v2/chains: get: tags: [CrossChain] operationId: lucid_list_chains x-speakeasy-group: chains summary: List supported chains description: List all supported chains with connection status and ERC-8004 info. x-speakeasy-mcp: name: lucid_list_chains description: List all supported blockchain chains and their connection status. responses: '200': description: OK content: application/json: schema: type: object required: [success, count, chains] properties: success: {type: boolean} count: {type: integer} chains: type: array items: $ref: '#/components/schemas/ChainInfo' example: success: true count: 3 chains: - chainId: "solana-devnet" type: "solana" connected: true blockHeight: 285000000 - chainId: "base" type: "evm" connected: true blockHeight: 12500000 - chainId: "ethereum" type: "evm" connected: false blockHeight: 0 '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.chains.lucidListChains(); console.log(result); } run(); /v2/chains/{chainId}/status: get: tags: [CrossChain] operationId: lucid_get_chain_status x-speakeasy-group: chains summary: Get chain status description: Get detailed status for a specific chain including account address. x-speakeasy-mcp: name: lucid_get_chain_status description: Get detailed status and connection info for a specific chain. parameters: - in: path name: chainId required: true schema: {type: string} description: Chain identifier (e.g. base, ethereum, solana-devnet) responses: '200': description: OK content: application/json: schema: type: object required: [success, chain] properties: success: {type: boolean} chain: allOf: - $ref: '#/components/schemas/ChainInfo' - type: object properties: account: {type: string, description: Account address on this chain} '404': description: Chain not found content: application/json: schema: {$ref: '#/components/schemas/ErrorResponse'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.chains.lucidGetChainStatus({ chainId: "", }); console.log(result); } run(); /v2/validate: post: tags: [CrossChain] operationId: lucid_cross_chain_validate summary: Validate a receipt cross-chain description: | Validate a receipt locally and optionally submit the validation on-chain via the ERC-8004 Validation Registry. x-speakeasy-mcp: name: lucid_cross_chain_validate description: Validate a receipt and optionally submit on-chain validation. requestBody: required: true content: application/json: schema: type: object properties: receipt_hash: {type: string} run_id: {type: string} signature: {type: string} chain_id: type: string description: If provided, submit validation on-chain agent_token_id: type: string description: ERC-8004 token ID for on-chain submission example: receipt_hash: "a3f2b8c1d4e5f6789012345678901234567890abcdef1234567890abcdef1234" run_id: "run_abc123def456" signature: "3045022100..." chain_id: "base" responses: '200': description: Validation result content: application/json: schema: type: object required: [success, receipt_hash, run_id, local_valid, hash_valid, signature_valid] properties: success: {type: boolean} receipt_hash: {type: string} run_id: {type: string} local_valid: {type: boolean} hash_valid: {type: boolean} signature_valid: {type: boolean} on_chain: type: object properties: tx_hash: {type: string} confirmed: {type: boolean} example: success: true receipt_hash: "a3f2b8c1d4e5f6789012345678901234567890abcdef1234567890abcdef1234" run_id: "run_abc123def456" local_valid: true hash_valid: true signature_valid: true on_chain: tx_hash: "0xabc123..." confirmed: true '400': {$ref: '#/components/responses/BadRequest'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.crossChain.lucidCrossChainValidate({ receiptHash: "a3f2b8c1d4e5f6789012345678901234567890abcdef1234567890abcdef1234", runId: "run_abc123def456", signature: "3045022100...", chainId: "base", }); console.log(result); } run(); /v2/route: post: tags: [CrossChain] operationId: lucid_cross_chain_route summary: Chain-aware compute routing description: | Route with chain_id parameter for chain-aware compute matching. Extends the standard /v1/match with cross-chain context. x-speakeasy-mcp: name: lucid_cross_chain_route description: Chain-aware compute matching with cross-chain context. requestBody: required: true content: application/json: schema: type: object required: [model_meta, policy, compute_catalog] properties: model_meta: {type: object, additionalProperties: true} policy: {type: object, additionalProperties: true} compute_catalog: {type: array, items: {type: object, additionalProperties: true}} request_id: {type: string} require_live_healthy: {type: boolean} chain_id: {type: string, description: Target chain for routing context} responses: '200': description: Route computed content: application/json: schema: type: object required: [success, request_id, route, explain] properties: success: {type: boolean} request_id: {type: string} chain_id: {type: string} route: {type: object, additionalProperties: true} explain: {type: object, additionalProperties: true} chain: {type: object, additionalProperties: true} '400': {$ref: '#/components/responses/BadRequest'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.crossChain.lucidCrossChainRoute({ modelMeta: { "key": "", "key1": "", }, policy: { "key": "", }, computeCatalog: [ { "key": "", }, { }, { }, ], }); console.log(result); } run(); # =========================================================================== # Cross-Chain Agents (v2) — ERC-8004 Registration + Reputation # =========================================================================== /v2/agents/register: post: tags: [CrossChain] operationId: lucid_register_agent_on_chain x-speakeasy-group: agents.crosschain summary: Register agent on ERC-8004 description: Register an agent on the ERC-8004 Identity Registry on a specific chain. x-speakeasy-mcp: name: lucid_register_agent_on_chain description: Register an agent on-chain via ERC-8004 Identity Registry. requestBody: required: true content: application/json: schema: type: object required: [chain_id, metadata_uri] properties: chain_id: {type: string} name: {type: string} description: {type: string} metadata_uri: {type: string} endpoints: {type: array, items: {type: string}} capabilities: {type: array, items: {type: string}} wallets: {type: array, items: {type: string}} responses: '200': description: Agent registered content: application/json: schema: type: object required: [success, chain_id, tx_hash, confirmed] properties: success: {type: boolean} chain_id: {type: string} tx_hash: {type: string} confirmed: {type: boolean} block_number: {type: integer} '400': {$ref: '#/components/responses/BadRequest'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.agents.crosschain.lucidRegisterAgentOnChain({ chainId: "", metadataUri: "https://fortunate-cornet.name", }); console.log(result); } run(); /v2/agents/{agentId}/reputation: get: tags: [CrossChain] operationId: lucid_get_agent_cross_chain_reputation x-speakeasy-group: agents.crosschain summary: Cross-chain reputation query description: Query an agent's reputation across all chains or a specific chain. x-speakeasy-mcp: name: lucid_get_agent_cross_chain_reputation description: Get cross-chain reputation data for an agent. parameters: - in: path name: agentId description: Agent identifier for cross-chain reputation query required: true schema: {type: string} - in: query name: chain_id required: false schema: {type: string} description: Filter to specific chain (omit for all chains) responses: '200': description: Reputation data content: application/json: schema: type: object required: [success, agent_id, chains_queried, results] properties: success: {type: boolean} agent_id: {type: string} chains_queried: {type: integer} results: type: array items: type: object properties: chain_id: {type: string} score: {type: number} feedback_count: {type: integer} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.agents.crosschain.lucidGetAgentCrossChainReputation({ agentId: "", }); console.log(result); } run(); # =========================================================================== # Cross-Chain Reputation (v2) — Unified Scores + Receipt-Based # =========================================================================== /v2/reputation/{agentId}: get: tags: [CrossChain, Reputation] operationId: lucid_get_unified_reputation x-speakeasy-group: reputation.crosschain summary: Unified cross-chain reputation score description: Aggregate reputation across all chains into a unified score. x-speakeasy-mcp: name: lucid_get_unified_reputation description: Get unified cross-chain reputation score for an agent. parameters: - in: path name: agentId description: Agent identifier for unified cross-chain reputation required: true schema: {type: string} responses: '200': description: Unified score content: application/json: schema: type: object required: [success, agentId, unifiedScore, totalFeedbackCount, chainCount] properties: success: {type: boolean} agentId: {type: string} unifiedScore: {type: number, minimum: 0, maximum: 100} totalFeedbackCount: {type: integer} chainCount: {type: integer} message: {type: string} example: success: true agentId: "ppt_agent_Qm3kR8wZ" unifiedScore: 87.5 totalFeedbackCount: 142 chainCount: 2 message: "Aggregated across 2 chains" '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.reputation.crosschain.lucidGetUnifiedReputation({ agentId: "", }); console.log(result); } run(); /v2/reputation/{agentId}/breakdown: get: tags: [CrossChain, Reputation] operationId: lucid_get_reputation_breakdown x-speakeasy-group: reputation.crosschain summary: Per-chain reputation breakdown description: Get per-chain reputation breakdown with feedback records. x-speakeasy-mcp: name: lucid_get_reputation_breakdown description: Get per-chain reputation breakdown for an agent. parameters: - in: path name: agentId description: Agent identifier for per-chain reputation breakdown required: true schema: {type: string} responses: '200': description: Breakdown by chain content: application/json: schema: type: object required: [success, agentId, chainCount, chains] properties: success: {type: boolean} agentId: {type: string} chainCount: {type: integer} chains: type: array items: type: object properties: chainId: {type: string} score: {type: number} feedbackCount: {type: integer} feedback: {type: array, items: {type: object, additionalProperties: true}} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.reputation.crosschain.lucidGetReputationBreakdown({ agentId: "", }); console.log(result); } run(); /v2/reputation/{agentId}/receipt-based: get: tags: [CrossChain, Reputation] operationId: lucid_get_receipt_based_reputation x-speakeasy-group: reputation.crosschain summary: Sybil-resistant receipt-based reputation description: | Compute a sybil-resistant reputation score derived from verified receipts. Only counts receipts with valid hashes and signatures. x-speakeasy-mcp: name: lucid_get_receipt_based_reputation description: Get sybil-resistant receipt-derived reputation score. parameters: - in: path name: agentId description: Agent identifier for receipt-based reputation required: true schema: {type: string} responses: '200': description: Receipt-based score content: application/json: schema: type: object required: [success] properties: success: {type: boolean} agentId: {type: string} score: {type: number} receiptCount: {type: integer} verifiedCount: {type: integer} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.reputation.crosschain.lucidGetReceiptBasedReputation({ agentId: "", }); console.log(result); } run(); /v2/reputation/{agentId}/submit: post: tags: [CrossChain, Reputation] operationId: lucid_submit_reputation_on_chain x-speakeasy-group: reputation.crosschain summary: Submit reputation on-chain description: Submit receipt-based reputation to the on-chain Reputation Registry. x-speakeasy-mcp: name: lucid_submit_reputation_on_chain description: Submit receipt-based reputation score to on-chain Reputation Registry. parameters: - in: path name: agentId description: Agent identifier for on-chain reputation submission required: true schema: {type: string} requestBody: required: true content: application/json: schema: type: object required: [chainId] properties: chainId: {type: string, description: Target chain for on-chain submission} responses: '200': description: Submission result content: application/json: schema: type: object required: [success] properties: success: {type: boolean} txHash: {type: string} score: {type: number} error: {type: string} '400': {$ref: '#/components/responses/BadRequest'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.reputation.crosschain.lucidSubmitReputationOnChain({ agentId: "", body: { chainId: "", }, }); console.log(result); } run(); /v2/reputation/indexer/status: get: tags: [CrossChain, Reputation] operationId: lucid_get_reputation_indexer_status x-speakeasy-group: reputation.crosschain summary: Reputation indexer status description: Get the status of the cross-chain reputation indexer across all chains. x-speakeasy-mcp: name: lucid_get_reputation_indexer_status description: Get cross-chain reputation indexer status. responses: '200': description: Indexer status content: application/json: schema: type: object required: [success, chains] properties: success: {type: boolean} chains: type: array items: type: object properties: chainId: {type: string} connected: {type: boolean} lastIndexedBlock: {type: integer} status: {type: string} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.reputation.crosschain.lucidGetReputationIndexerStatus(); console.log(result); } run(); # =========================================================================== # Cross-Chain Payouts (v2) — On-chain execution # =========================================================================== /v2/payouts/execute: post: tags: [CrossChain, Payouts] operationId: lucid_execute_payout_on_chain x-speakeasy-group: payouts.crosschain summary: Execute payout on-chain description: Execute a payout split on-chain via USDC transfers. x-speakeasy-mcp: name: lucid_execute_payout_on_chain description: Execute payout split on-chain via USDC transfers. requestBody: required: true content: application/json: schema: type: object required: [run_id, chainId] properties: run_id: {type: string} chainId: {type: string} responses: '200': description: Payout executed content: application/json: schema: type: object required: [success, execution] properties: success: {type: boolean} execution: type: object properties: run_id: {type: string} chain_id: {type: string} transfers: type: array items: type: object properties: recipient: {type: string} amount: {type: string} tx_hash: {type: string} '400': {$ref: '#/components/responses/BadRequest'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.payouts.crosschain.lucidExecutePayoutOnChain({ runId: "", chainId: "", }); console.log(result); } run(); /v2/payouts/{runId}/execution: get: tags: [CrossChain, Payouts] operationId: lucid_get_payout_execution x-speakeasy-group: payouts.crosschain summary: Get payout execution status description: Get the execution status and details for a specific payout. x-speakeasy-mcp: name: lucid_get_payout_execution description: Get payout execution status for a run. parameters: - in: path name: runId description: Inference run identifier for payout execution lookup required: true schema: {type: string} - in: query name: chainId required: true schema: {type: string} description: Chain on which the payout was executed responses: '200': description: Execution status content: application/json: schema: type: object required: [success, execution] properties: success: {type: boolean} execution: type: object additionalProperties: true '400': {$ref: '#/components/responses/BadRequest'} '404': description: Execution not found content: application/json: schema: {$ref: '#/components/schemas/ErrorResponse'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.payouts.crosschain.lucidGetPayoutExecution({ runId: "", chainId: "", }); console.log(result); } run(); # =========================================================================== # Agent Mirror (v1) — Read-only proof/receipt/epoch endpoints for agents # =========================================================================== /v1/agents/{passportId}/receipts: get: tags: [AgentMirror] operationId: lucid_get_agent_receipts x-speakeasy-group: agents.mirror summary: Get agent receipts description: Paginated receipts filtered by agent passport ID. Admin auth required. x-speakeasy-pagination: type: offsetLimit inputs: - name: page in: parameters type: page - name: per_page in: parameters type: limit outputs: results: $.receipts x-speakeasy-mcp: name: lucid_get_agent_receipts description: Get paginated receipts for a specific agent. security: - AdminAuth: [] parameters: - in: path name: passportId description: Agent passport identifier to get receipts for required: true schema: {type: string} - in: query name: page description: Page number for pagination (starts at 1) required: false schema: {type: integer, default: 1, minimum: 1} - in: query name: per_page description: Number of results per page (1-100) required: false schema: {type: integer, default: 20, minimum: 1, maximum: 100} responses: '200': description: Paginated receipts content: application/json: schema: type: object required: [receipts, total, page, per_page, total_pages] properties: receipts: type: array items: $ref: '#/components/schemas/AgentReceipt' total: {type: integer} page: {type: integer} per_page: {type: integer} total_pages: {type: integer} example: receipts: - run_id: "run_abc123def456" receipt_hash: "a3f2b8c1d4e5f6789012345678901234567890abcdef1234567890abcdef1234" model_passport_id: "ppt_model_7xK9mQ2v" compute_passport_id: "ppt_compute_Xn5vR2kJ" timestamp: 1710288000 metrics: tokens_in: 42 tokens_out: 128 ttft_ms: 85 - run_id: "run_xyz789ghi012" receipt_hash: "b4c3d9e2f5a6b7890123456789012345678901abcdef5678901234567890bcde" model_passport_id: "ppt_model_7xK9mQ2v" compute_passport_id: "ppt_compute_Xn5vR2kJ" timestamp: 1710291600 metrics: tokens_in: 100 tokens_out: 256 ttft_ms: 92 total: 47 page: 1 per_page: 20 total_pages: 3 '401': {$ref: '#/components/responses/Unauthorized'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.agents.mirror.lucidGetAgentReceipts({ adminAuth: process.env["RAIJINLABSLUCIDAI_ADMIN_AUTH"] ?? "", }, { passportId: "", }); for await (const page of result) { console.log(page); } } run(); /v1/agents/{passportId}/epoch: get: tags: [AgentMirror] operationId: lucid_get_agent_epoch x-speakeasy-group: agents.mirror summary: Get agent current epoch description: | Get the current open epoch for an agent. Checks both in-memory state and database for coverage across restarts. x-speakeasy-mcp: name: lucid_get_agent_epoch description: Get current open epoch for a specific agent. security: - AdminAuth: [] parameters: - in: path name: passportId description: Agent passport identifier for epoch lookup required: true schema: {type: string} responses: '200': description: Current epoch state content: application/json: schema: type: object properties: active: type: object properties: epoch_id: {type: string} status: {type: string} leaf_count: {type: integer} mmr_root: {type: string} created_at: {type: string, format: date-time} latest_db: type: object nullable: true properties: epoch_id: {type: string} status: {type: string} leaf_count: {type: integer} mmr_root: {type: string} created_at: {type: string, format: date-time} '401': {$ref: '#/components/responses/Unauthorized'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.agents.mirror.lucidGetAgentEpoch({ adminAuth: process.env["RAIJINLABSLUCIDAI_ADMIN_AUTH"] ?? "", }, { passportId: "", }); console.log(result); } run(); /v1/agents/{passportId}/proof: get: tags: [AgentMirror] operationId: lucid_get_agent_proof x-speakeasy-group: agents.mirror summary: Get agent latest proof description: Get the latest MMR proof for an agent (most recent anchored epoch). x-speakeasy-mcp: name: lucid_get_agent_proof description: Get latest MMR proof for a specific agent. security: - AdminAuth: [] parameters: - in: path name: passportId description: Agent passport identifier for latest proof required: true schema: {type: string} responses: '200': description: Latest proof content: application/json: schema: $ref: '#/components/schemas/AgentProof' example: epoch_id: "epoch_2024_001" mmr_root: "c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470" leaf_count: 142 status: "anchored" chain_tx: "5xYz...abc123" finalized_at: 1710374400 proof: leaf_index: 141 proof: - "a1b2c3d4e5f6..." - "f6e5d4c3b2a1..." root: "c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470" directions: ["L", "R", "L"] '401': {$ref: '#/components/responses/Unauthorized'} '404': description: No anchored epoch found content: application/json: schema: {$ref: '#/components/schemas/ErrorResponse'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.agents.mirror.lucidGetAgentProof({ adminAuth: process.env["RAIJINLABSLUCIDAI_ADMIN_AUTH"] ?? "", }, { passportId: "", }); console.log(result); } run(); /v1/agents/{passportId}/proof/{runId}: get: tags: [AgentMirror] operationId: lucid_get_agent_run_proof x-speakeasy-group: agents.mirror summary: Get proof for specific run description: Get proof details for a specific run_id (leaf-level proof with receipt data). x-speakeasy-mcp: name: lucid_get_agent_run_proof description: Get leaf-level MMR proof for a specific agent run. security: - AdminAuth: [] parameters: - in: path name: passportId description: Agent passport identifier required: true schema: {type: string} - in: path name: runId description: Specific inference run identifier for leaf-level proof required: true schema: {type: string} responses: '200': description: Run-level proof content: application/json: schema: $ref: '#/components/schemas/AgentRunProof' '401': {$ref: '#/components/responses/Unauthorized'} '404': description: Receipt or epoch not found content: application/json: schema: {$ref: '#/components/schemas/ErrorResponse'} '500': {$ref: '#/components/responses/InternalServerError'} x-codeSamples: - lang: typescript label: Typescript (SDK) source: |- import { RaijinLabsLucidAi } from "raijin-labs-lucid-ai"; const raijinLabsLucidAi = new RaijinLabsLucidAi(); async function run() { const result = await raijinLabsLucidAi.agents.mirror.lucidGetAgentRunProof({ adminAuth: process.env["RAIJINLABSLUCIDAI_ADMIN_AUTH"] ?? "", }, { passportId: "", runId: "", }); console.log(result); } run(); # ============================================================================= # Components # ============================================================================= components: responses: BadRequest: description: Bad Request content: application/json: schema: {$ref: '#/components/schemas/ErrorResponse'} Unauthorized: description: Unauthorized — missing or invalid admin key content: application/json: schema: {$ref: '#/components/schemas/ErrorResponse'} Forbidden: description: Forbidden content: application/json: schema: {$ref: '#/components/schemas/ErrorResponse'} NotFound: description: Not Found content: application/json: schema: {$ref: '#/components/schemas/ErrorResponse'} UnprocessableEntity: description: Unprocessable Entity content: application/json: schema: {$ref: '#/components/schemas/ErrorResponse'} ServiceUnavailable: description: Service Unavailable content: application/json: schema: {$ref: '#/components/schemas/ErrorResponse'} InternalServerError: description: Internal Server Error content: application/json: schema: {$ref: '#/components/schemas/ErrorResponse'} securitySchemes: BearerAuth: type: http scheme: bearer description: Lucid API key (lk_live_... or lk_test_...) AdminAuth: type: apiKey in: header name: X-Admin-Key description: Admin API key for internal/operator endpoints schemas: # ========================================================================= # Memory schemas # ========================================================================= MemoryWriteResponse: type: object properties: success: {type: boolean} data: type: object properties: memory_id: {type: string, format: uuid} content_hash: {type: string} prev_hash: {type: string, nullable: true} MemoryRecallResponse: type: object properties: success: {type: boolean} data: type: object properties: memories: type: array items: type: object properties: memory_id: {type: string} type: {type: string} content: {type: string} similarity: {type: number} score: {type: number} created_at: {type: integer} query_embedding_model: {type: string, nullable: true} total_candidates: {type: integer} MemorySession: type: object properties: session_id: {type: string} agent_passport_id: {type: string} namespace: {type: string} status: {type: string, enum: [active, closed, archived]} turn_count: {type: integer} total_tokens: {type: integer} summary: {type: string} created_at: {type: integer} last_activity: {type: integer} # ========================================================================= # Anchoring schemas # ========================================================================= AnchorRecord: type: object properties: anchor_id: {type: string, format: uuid} artifact_type: type: string enum: [epoch_bundle, epoch_proof, memory_snapshot, deploy_artifact, passport_metadata, nft_metadata, mmr_checkpoint] artifact_id: {type: string} agent_passport_id: {type: string, nullable: true} producer: {type: string} provider: {type: string} storage_tier: {type: string, enum: [permanent, evolving]} cid: {type: string} content_hash: {type: string} url: {type: string} size_bytes: {type: integer} status: {type: string, enum: [uploaded, verified, unreachable]} parent_anchor_id: {type: string, nullable: true} chain_tx: {type: object, nullable: true} metadata: {type: object} created_at: {type: integer, description: Unix timestamp in milliseconds} verified_at: {type: integer, nullable: true, description: Unix timestamp in milliseconds} # ========================================================================= # Passport schemas # ========================================================================= ExternalRegistrationStatus: type: object properties: externalId: {type: string, description: 'ID on the external registry'} txSignature: {type: string, description: 'Registration transaction signature'} registrationDocUri: {type: string, nullable: true, description: 'ERC-8004 registration doc URI'} registeredAt: {type: integer, description: 'Unix ms when first registered'} lastSyncedAt: {type: integer, description: 'Unix ms of last sync attempt'} status: type: string enum: [synced, failed, pending] lastError: {type: string, nullable: true, description: 'Last error message'} PassportType: type: string enum: [model, compute, tool, dataset, agent, voice, other] PassportStatus: type: string enum: [active, deprecated, revoked] Passport: type: object required: [passport_id, type, owner, status, created_at, updated_at] properties: passport_id: {type: string} type: {$ref: '#/components/schemas/PassportType'} owner: {type: string} name: {type: string, nullable: true} description: {type: string, nullable: true} version: {type: string, nullable: true} tags: type: array items: {type: string} nullable: true status: {$ref: '#/components/schemas/PassportStatus'} metadata: type: object additionalProperties: true nullable: true metadata_hash: {type: string, nullable: true} depin_metadata_cid: {type: string, nullable: true, description: 'DePIN storage CID for metadata'} depin_provider: {type: string, nullable: true, description: 'DePIN provider used (arweave, lighthouse, mock)'} nft_mint: {type: string, nullable: true, description: 'NFT mint address (Solana base58 or EVM 0x)'} nft_chain: {type: string, nullable: true, description: 'Chain where NFT was minted'} share_token_mint: {type: string, nullable: true, description: 'Share token SPL mint address'} external_registrations: type: object nullable: true description: 'External identity projection status per registry (summary cache). Key is registry name.' additionalProperties: $ref: '#/components/schemas/ExternalRegistrationStatus' created_at: {type: integer} updated_at: {type: integer} on_chain: type: object nullable: true properties: pda: {type: string, nullable: true} tx: {type: string, nullable: true} synced_at: {type: integer, nullable: true} CreatePassportRequest: type: object required: [type, owner, metadata] properties: type: {$ref: '#/components/schemas/PassportType'} owner: {type: string} metadata: type: object additionalProperties: true name: {type: string} description: {type: string} version: {type: string} tags: type: array items: {type: string} UpdatePassportRequest: type: object properties: metadata: type: object additionalProperties: true name: {type: string} description: {type: string} version: {type: string} tags: type: array items: {type: string} status: {$ref: '#/components/schemas/PassportStatus'} CreatePassportResponse: type: object required: [success, passport_id, passport] properties: success: {type: boolean} passport_id: {type: string} passport: {$ref: '#/components/schemas/Passport'} GetPassportResponse: type: object required: [success, passport] properties: success: {type: boolean} passport: {$ref: '#/components/schemas/Passport'} ListPassportsResponse: type: object required: [success, passports, pagination] properties: success: {type: boolean} passports: type: array items: {$ref: '#/components/schemas/Passport'} pagination: {$ref: '#/components/schemas/Pagination'} Pagination: type: object required: [total, page, per_page, total_pages] properties: total: {type: integer} page: {type: integer} per_page: {type: integer} total_pages: {type: integer} # ========================================================================= # Policy # ========================================================================= Policy: type: object required: [policy_version] additionalProperties: false properties: policy_version: {type: string, description: "Policy schema version, e.g. '1.0'"} allow_regions: type: array items: {type: string} residency_required: {type: boolean} attestation: type: object additionalProperties: false properties: attestation_required: {type: boolean} require_cc_on: {type: boolean} fallback_allowed: {type: boolean} latency: type: object additionalProperties: false properties: p95_ms_budget: {type: integer} hard_timeout_ms: {type: integer} cost: type: object additionalProperties: false properties: max_price_per_1k_tokens_usd: {type: number} spot_only: {type: boolean} privacy: type: object additionalProperties: false properties: store_inputs: {type: boolean} redact_pii: {type: boolean} # ========================================================================= # ComputeMeta / ModelMeta schemas (mirror schemas/*.schema.json) # ========================================================================= ComputeHardware: type: object required: [gpu, vram_gb] properties: gpu: {type: string, description: "GPU model (e.g. 'NVIDIA-A100-40GB')"} vram_gb: {type: integer, minimum: 0, description: GPU VRAM in gigabytes} arch: {type: string, description: "GPU architecture (e.g. 'ampere', 'hopper')"} gpu_count: {type: integer, minimum: 1, default: 1} cpu_cores: {type: integer, minimum: 1} memory_gb: {type: integer, minimum: 1, description: System RAM in gigabytes} ComputeRuntime: type: object required: [name] properties: name: type: string enum: [vllm, tgi, tensorrt, hf-inference-api, openai-compatible, custom] version: {type: string} image: {type: string, description: Docker image reference} ComputeCapabilities: type: object properties: supports_streaming: {type: boolean, default: true} supports_attestation: {type: boolean, default: false} supports_cc_on: {type: boolean, default: false} inference_types: type: array items: type: string enum: [text-generation, chat-completion, embeddings, image-generation, speech-to-text] ComputeEndpoints: type: object required: [inference_url] properties: inference_url: {type: string, description: URL for inference requests} quote_url: {type: string, format: uri} jobs_url: {type: string, format: uri} health_url: {type: string, format: uri} metrics_url: {type: string, format: uri} ComputeWorker: type: object required: [worker_id, status] properties: worker_id: {type: string} status: type: string enum: [online, offline, degraded, draining] last_heartbeat: {type: integer, description: Unix timestamp of last heartbeat} ComputeMeta: type: object description: >- Metadata for a compute provider passport. Validated against schemas/ComputeMeta.schema.json (additionalProperties: false). required: [schema_version, compute_passport_id, provider_type, regions, hardware, runtimes, endpoints] properties: schema_version: {type: string, enum: ['1.0']} compute_passport_id: {type: string, minLength: 10} provider_type: type: string enum: [depin, cloud, onprem, managed] execution_mode: type: string enum: [byo_runtime, managed_endpoint] operator_pubkey: type: string pattern: '^[a-f0-9]{64}$' description: ed25519 public key (hex) of the provider operator regions: type: array items: {type: string} minItems: 1 residency_supported: {type: boolean, default: false} hardware: {$ref: '#/components/schemas/ComputeHardware'} gpu_fingerprint: type: string nullable: true description: "GPU hardware fingerprint. Must be null for managed_endpoint mode." runtime_hash: type: string nullable: true pattern: '^sha256:[a-f0-9]{64}$' description: "Docker image digest. Must be null for managed_endpoint mode." runtimes: type: array items: {$ref: '#/components/schemas/ComputeRuntime'} minItems: 1 capabilities: {$ref: '#/components/schemas/ComputeCapabilities'} network: type: object properties: p95_ms_estimate: {type: integer, minimum: 0} bandwidth: {type: string} limits: type: object properties: max_context: {type: integer, minimum: 0} max_batch: {type: integer, minimum: 0} max_input_tokens: {type: integer, minimum: 1} max_output_tokens: {type: integer, minimum: 1} requests_per_minute: {type: integer, minimum: 1} pricing: type: object properties: price_per_1k_tokens_estimate: {type: number, minimum: 0} price_per_minute_estimate: {type: number, minimum: 0} per_input_token: {type: number, minimum: 0} per_output_token: {type: number, minimum: 0} currency: type: string enum: [lamports, usd_cents, credits] endpoints: {$ref: '#/components/schemas/ComputeEndpoints'} workers: type: array items: {$ref: '#/components/schemas/ComputeWorker'} sla: type: object properties: tier: type: string enum: [best-effort, standard, premium, enterprise] uptime_target: {type: number, minimum: 0, maximum: 100} policy_tags: type: array items: {type: string} description: "Tags for matching (e.g. 'hipaa', 'gdpr', 'no-logging')" metadata: type: object additionalProperties: true ModelRequirements: type: object properties: min_vram_gb: {type: integer, minimum: 0} gpu_classes: type: array items: {type: string} cuda_min: {type: string} ModelMeta: type: object description: >- Metadata for a model passport. Validated against schemas/ModelMeta.schema.json (additionalProperties: false). required: [schema_version, model_passport_id, format, runtime_recommended] properties: schema_version: {type: string, enum: ['1.0']} model_passport_id: {type: string, minLength: 10} format: type: string enum: [safetensors, gguf, api] runtime_recommended: type: string enum: [vllm, tgi, tensorrt, trustgate, openai] name: {type: string} description: {type: string} provider: {type: string, description: "Provider name (e.g. trustgate, openai)"} base: type: string enum: [hf, openai, anthropic, google, cohere, custom_endpoint] default: hf hf: type: object properties: repo_id: {type: string} revision: {type: string} context_length: {type: integer, minimum: 1} quantizations: type: array items: type: string enum: [fp16, int8, awq, gptq, gguf_q4] requirements: {$ref: '#/components/schemas/ModelRequirements'} endpoints: type: object properties: openai_compat_base_url: {type: string} auth_mode: type: string enum: [byok, lucid_key, none] default: none artifacts: type: array items: {type: string} weights_uri: {type: string} weights_hash: {type: string} # ========================================================================= # Chat / Inference schemas # ========================================================================= ChatMessage: type: object required: [role, content] properties: role: type: string enum: [system, user, assistant, function] content: {type: string} name: {type: string} function_call: type: object properties: name: {type: string} arguments: {type: string} InferenceRequest: type: object properties: model_passport_id: {type: string} model: {type: string} prompt: {type: string} messages: type: array items: {$ref: '#/components/schemas/ChatMessage'} max_tokens: {type: integer} temperature: {type: number} top_p: {type: number} top_k: {type: integer} stop: type: array items: {type: string} stream: {type: boolean} policy: {$ref: '#/components/schemas/Policy'} compute_passport_id: {type: string} trace_id: {type: string} request_id: {type: string} InferenceResult: type: object required: [success, run_id, tokens_in, tokens_out, ttft_ms, total_latency_ms, model_passport_id, compute_passport_id, runtime] properties: success: {type: boolean} run_id: {type: string} request_id: {type: string} trace_id: {type: string} text: {type: string} finish_reason: {type: string} tokens_in: {type: integer} tokens_out: {type: integer} ttft_ms: {type: integer} total_latency_ms: {type: integer} model_passport_id: {type: string} compute_passport_id: {type: string} runtime: {type: string} policy_hash: {type: string} receipt_id: {type: string} used_fallback: {type: boolean} fallback_reason: {type: string} error: {type: string} error_code: {type: string} ChatCompletionRequest: type: object required: [model, messages] properties: model: {type: string} messages: type: array items: {$ref: '#/components/schemas/ChatMessage'} max_tokens: {type: integer} temperature: {type: number} top_p: {type: number} stop: oneOf: - type: string - type: array items: {type: string} stream: {type: boolean} policy: {$ref: '#/components/schemas/Policy'} trace_id: {type: string} ChatCompletionResponse: type: object required: [id, object, created, model, choices, usage] properties: id: {type: string} object: {type: string} created: {type: integer} model: {type: string} choices: type: array items: type: object properties: index: {type: integer} message: {$ref: '#/components/schemas/ChatMessage'} finish_reason: {type: string, nullable: true} usage: type: object required: [prompt_tokens, completion_tokens, total_tokens] properties: prompt_tokens: {type: integer} completion_tokens: {type: integer} total_tokens: {type: integer} # ========================================================================= # Error # ========================================================================= ErrorResponse: type: object properties: success: {type: boolean} error: {type: string} message: {type: string} error_code: {type: string} details: {} # ========================================================================= # Compute # ========================================================================= ComputeHeartbeat: type: object required: [compute_passport_id, status] properties: compute_passport_id: {type: string} status: type: string enum: [healthy, degraded, down] queue_depth: {type: integer} price_per_1k_tokens_estimate: {type: number} p95_ms_estimate: {type: number} # ========================================================================= # Receipt schemas # ========================================================================= Receipt: type: object required: [run_id, model_passport_id, compute_passport_id, policy_hash, runtime, timestamp, receipt_hash, receipt_signature, signer_pubkey, signer_type, metrics] properties: schema_version: {type: string} run_id: {type: string} model_passport_id: {type: string} compute_passport_id: {type: string} policy_hash: {type: string} runtime: {type: string} timestamp: {type: integer} trace_id: {type: string} image_hash: {type: string} model_hash: {type: string} attestation: {type: object, additionalProperties: true} execution_mode: {type: string} job_hash: {type: string} quote_hash: {type: string} node_id: {type: string} runtime_hash: {type: string, nullable: true} gpu_fingerprint: {type: string, nullable: true} outputs_hash: {type: string} output_ref: {type: string} start_ts: {type: integer} end_ts: {type: integer} input_ref: {type: string} error_code: {type: string} error_message: {type: string} metrics: type: object required: [ttft_ms, tokens_in, tokens_out] properties: ttft_ms: {type: integer} tokens_in: {type: integer} tokens_out: {type: integer} p95_ms: {type: integer} total_latency_ms: {type: integer} queue_wait_ms: {type: integer} queue_time_ms: {type: integer} cold_start_ms: {type: integer} model_load_ms: {type: integer} cache_hit: {type: boolean} receipt_hash: {type: string} receipt_signature: {type: string} signer_pubkey: {type: string} signer_type: type: string enum: [orchestrator, compute, worker] _mmr_leaf_index: {type: integer} anchor: type: object nullable: true properties: chain: {type: string} tx: {type: string} root: {type: string} epoch_id: {type: string} CreateReceiptRequest: type: object description: Input fields for creating a receipt. The backend computes the hash, signature, and wraps metrics. required: [model_passport_id, compute_passport_id, policy_hash, runtime, tokens_in, tokens_out, ttft_ms] properties: model_passport_id: {type: string} compute_passport_id: {type: string} policy_hash: {type: string} runtime: {type: string} tokens_in: {type: integer} tokens_out: {type: integer} ttft_ms: {type: integer} total_latency_ms: {type: integer} timestamp: {type: integer} trace_id: {type: string} run_id: {type: string} image_hash: {type: string} model_hash: {type: string} attestation: {type: object, additionalProperties: true} execution_mode: {type: string} node_id: {type: string} runtime_hash: {type: string} gpu_fingerprint: {type: string} ReceiptProof: type: object required: [run_id, receipt_hash, leaf_index, proof, root] properties: run_id: {type: string} receipt_hash: {type: string} leaf: {type: string, description: 'The leaf hash (receipt_hash) at leaf_index'} leaf_index: {type: integer} proof: type: array items: {type: string} description: Sibling hashes along the Merkle path root: {type: string} directions: type: array items: type: string enum: ['L', 'R'] description: Direction of each sibling (L = sibling is on left, R = on right). ReceiptVerification: type: object properties: success: {type: boolean} valid: {type: boolean} hash_valid: {type: boolean} signature_valid: {type: boolean} inclusion_valid: {type: boolean} expected_hash: {type: string} computed_hash: {type: string} merkle_root: {type: string} ReceiptHashVerification: type: object required: [success, verified, receipt_hash] properties: success: {type: boolean} verified: {type: boolean} receipt_hash: {type: string} run_id: {type: string} hash_valid: {type: boolean} signature_valid: {type: boolean} signer_pubkey: {type: string} signer_type: {type: string} execution_mode: {type: string} runtime_hash: {type: string} gpu_fingerprint: {type: string} inclusion_proof: type: object nullable: true properties: leaf_index: {type: integer} proof: type: array items: {type: string} root: {type: string} directions: type: array items: {type: string} inclusion_valid: {type: boolean} epoch: type: object nullable: true properties: epoch_id: {type: string} mmr_root: {type: string} chain_tx: {type: string} finalized_at: {type: integer} on_chain_verified: {type: boolean} tx_signature: {type: string, nullable: true} # ========================================================================= # Epoch schemas # ========================================================================= Epoch: type: object required: [epoch_id, mmr_root, leaf_count, created_at, status] properties: epoch_id: {type: string} project_id: {type: string} mmr_root: {type: string} leaf_count: {type: integer} created_at: {type: integer} finalized_at: {type: integer} status: type: string enum: [open, anchoring, anchored, failed] chain_tx: {type: string} error: {type: string} start_leaf_index: {type: integer} end_leaf_index: {type: integer} EpochStatsResponse: type: object required: [success, stats] properties: success: {type: boolean} stats: type: object properties: total_epochs: {type: integer} total_receipts: {type: integer} by_status: type: object properties: open: {type: integer} anchoring: {type: integer} anchored: {type: integer} failed: {type: integer} avg_receipts_per_epoch: {type: number} last_anchor_time: {type: integer} EpochsReadyResponse: type: object required: [success, count, epochs] properties: success: {type: boolean} count: {type: integer} epochs: type: array items: type: object properties: epoch_id: {type: string} project_id: {type: string} leaf_count: {type: integer} created_at: {type: integer} mmr_root: {type: string} # ========================================================================= # Payout schemas # ========================================================================= PayoutCalculateRequest: type: object required: [run_id, total_amount_lamports, compute_wallet] properties: run_id: {type: string} total_amount_lamports: oneOf: - type: string - type: integer compute_wallet: {type: string} model_wallet: {type: string} orchestrator_wallet: {type: string} config: $ref: '#/components/schemas/PayoutConfig' PayoutFromReceiptRequest: type: object required: [run_id, tokens_in, tokens_out, price_per_1k_tokens_lamports, compute_wallet] properties: run_id: {type: string} tokens_in: {type: integer} tokens_out: {type: integer} price_per_1k_tokens_lamports: oneOf: - type: string - type: integer compute_wallet: {type: string} model_wallet: {type: string} orchestrator_wallet: {type: string} config: $ref: '#/components/schemas/PayoutConfig' PayoutConfig: type: object description: Payout split configuration (basis points, must sum to 10000) properties: compute_bp: type: integer description: Basis points for compute provider (e.g., 7000 = 70%) minimum: 0 maximum: 10000 model_bp: type: integer description: Basis points for model owner (e.g., 2000 = 20%) minimum: 0 maximum: 10000 orchestrator_bp: type: integer description: Basis points for orchestrator (e.g., 1000 = 10%) minimum: 0 maximum: 10000 Payout: type: object required: [run_id, total_amount_lamports, recipients, payout_hash, timestamp] properties: run_id: {type: string} total_amount_lamports: {type: string, description: BigInt serialized as string} recipients: type: array items: {$ref: '#/components/schemas/PayoutRecipient'} payout_hash: {type: string} timestamp: {type: integer} PayoutRecipient: type: object required: [role, wallet, bp, amount_lamports] properties: role: {type: string} wallet: {type: string} bp: {type: integer} amount_lamports: {type: string, description: BigInt serialized as string} PassportStatsResponse: type: object required: [success, stats] properties: success: {type: boolean} stats: type: object required: [total, by_type, by_status] properties: total: {type: integer} by_type: type: object properties: model: {type: integer} compute: {type: integer} tool: {type: integer} dataset: {type: integer} agent: {type: integer} by_status: type: object properties: active: {type: integer} deprecated: {type: integer} revoked: {type: integer} # ========================================================================= # Health schemas # ========================================================================= HealthCheckResult: type: object required: [status] properties: status: type: string enum: [healthy, degraded, down] latency: {type: number} error: {type: string} details: {type: object, additionalProperties: true} SystemHealth: type: object required: [status, timestamp, uptime, version, dependencies] properties: status: type: string enum: [healthy, degraded, down] timestamp: {type: string, format: date-time} uptime: {type: number} version: {type: string} dependencies: type: object additionalProperties: $ref: '#/components/schemas/HealthCheckResult' # ========================================================================= # Agent schemas # ========================================================================= AgentInitRequest: type: object required: [agentId] properties: agentId: {type: string} depinCid: {type: string} AgentEpochRequest: type: object required: [agentId, vectors] properties: agentId: {type: string} vectors: type: array items: {type: string} minItems: 1 epochNumber: {type: integer} AgentBatchEpochsRequest: type: object required: [epochs] properties: epochs: type: array items: type: object required: [agentId, vectors] properties: agentId: {type: string} vectors: type: array items: {type: string} minItems: 1 epochNumber: {type: integer} AgentProofRequest: type: object required: [agentId, vectorText, epochNumber] properties: agentId: {type: string} vectorText: {type: string} epochNumber: {type: integer} AgentStats: type: object properties: agentId: {type: string} totalEpochs: {type: integer} totalVectors: {type: integer} currentRoot: {type: string} lastEpoch: {type: integer} createdAt: {type: string, format: date-time} AgentHistoryEntry: type: object properties: epoch: {type: integer} root: {type: string} timestamp: {type: integer} date: {type: string, format: date-time} GasCost: type: object required: [iGas, mGas, total] properties: iGas: {type: integer} mGas: {type: integer} total: {type: integer} AgentPlanRequest: type: object required: [goal] properties: goal: {type: string} context: {type: object, additionalProperties: true} constraints: type: array items: {type: string} autoExecute: {type: boolean} AgentAccomplishRequest: type: object required: [goal] properties: goal: {type: string} context: {type: object, additionalProperties: true} preferredExecutor: type: string enum: [n8n, langgraph] dryRun: {type: boolean} # ========================================================================= # Share Token schemas # ========================================================================= TokenLaunchRequest: type: object required: [name, symbol, totalSupply] properties: name: {type: string, description: 'Token name (e.g., "Llama 3.1 Share")'} symbol: {type: string, description: 'Token symbol (e.g., "LLAMA")'} totalSupply: {type: integer, minimum: 1, description: 'Total token supply'} decimals: {type: integer, minimum: 0, maximum: 18, default: 6, description: 'Token decimals'} TokenLaunchResponse: type: object required: [success, mint, txSignature, totalSupply, provider] properties: success: {type: boolean} mint: {type: string, description: 'SPL token mint address'} txSignature: {type: string, description: 'Transaction signature'} totalSupply: {type: integer} provider: {type: string, description: 'Token launcher provider used'} TokenInfo: type: object required: [success, mint, passportId, name, symbol, totalSupply, decimals] properties: success: {type: boolean} mint: {type: string, description: 'SPL token mint address'} passportId: {type: string} name: {type: string} symbol: {type: string} totalSupply: {type: integer} decimals: {type: integer} holders: {type: integer, description: 'Number of unique token holders'} AirdropRequest: type: object required: [amountLamports] properties: amountLamports: {type: integer, minimum: 1, description: 'SOL amount in lamports to distribute'} AirdropResponse: type: object required: [success, passportId, tokenMint, totalDistributed, holders, distributions, txSignatures] properties: success: {type: boolean} passportId: {type: string} tokenMint: {type: string} totalDistributed: {type: integer, description: 'Total lamports distributed'} holders: {type: integer, description: 'Number of holders who received airdrop'} distributions: type: array items: type: object properties: holder: {type: string} balance: {type: number} share: {type: number} amountLamports: {type: integer} txSignatures: type: array items: {type: string} # ========================================================================= # v2 Escrow # ========================================================================= EscrowStatus: type: string enum: [Created, Released, Refunded, Disputed] CreateEscrowRequest: type: object required: [chainId, beneficiary, token, amount, duration] properties: chainId: {type: string, description: "Chain identifier (e.g. 'base', 'ethereum-sepolia')"} beneficiary: {type: string, description: "Beneficiary address"} token: {type: string, description: "ERC-20 token address"} amount: {type: string, description: "Amount in token base units"} duration: {type: integer, description: "Escrow duration in seconds"} expectedReceiptHash: {type: string, description: "Optional expected receipt hash for auto-release"} ReleaseEscrowRequest: type: object required: [chainId, escrowId, receiptHash, signature, signerPubkey] properties: chainId: {type: string} escrowId: {type: string} receiptHash: {type: string} signature: {type: string} signerPubkey: {type: string} DisputeEscrowRequest: type: object required: [chainId, escrowId, reason] properties: chainId: {type: string} escrowId: {type: string} reason: {type: string} EscrowInfo: type: object properties: escrowId: {type: string} depositor: {type: string} beneficiary: {type: string} token: {type: string} amount: {type: string} createdAt: {type: string} expiresAt: {type: string} expectedReceiptHash: {type: string} status: {$ref: '#/components/schemas/EscrowStatus'} GetEscrowResponse: type: object required: [success] properties: success: {type: boolean} escrow: {$ref: '#/components/schemas/EscrowInfo'} # ========================================================================= # v2 Disputes # ========================================================================= DisputeStatus: type: string enum: [Open, EvidencePhase, Resolved, Appealed] OpenDisputeRequest: type: object required: [chainId, escrowId, reason] properties: chainId: {type: string} escrowId: {type: string} reason: {type: string} SubmitEvidenceRequest: type: object required: [chainId] properties: chainId: {type: string} receiptHash: {type: string} mmrRoot: {type: string} mmrProof: {type: string} description: {type: string} DisputeInfo: type: object properties: disputeId: {type: string} escrowId: {type: string} status: {$ref: '#/components/schemas/DisputeStatus'} reason: {type: string} createdAt: {type: string} resolvedAt: {type: string} resolution: {type: string} GetDisputeResponse: type: object required: [success] properties: success: {type: boolean} dispute: {$ref: '#/components/schemas/DisputeInfo'} # ========================================================================= # v2 Paymaster # ========================================================================= SponsorUserOpRequest: type: object required: [chainId, userOp] properties: chainId: {type: string} userOp: type: object description: ERC-4337 UserOperation struct EstimateGasRequest: type: object required: [chainId, userOp] properties: chainId: {type: string} userOp: type: object description: ERC-4337 UserOperation struct PaymasterRateResponse: type: object required: [success] properties: success: {type: boolean} exchangeRate: {type: number, description: "LUCID per ETH rate"} chainId: {type: string} # ========================================================================= # v2 Identity # ========================================================================= LinkIdentityRequest: type: object required: [primaryCaip10, linkedCaip10] properties: primaryCaip10: {type: string, description: "Primary CAIP-10 address"} linkedCaip10: {type: string, description: "Address to link"} proof: {type: string, description: "Optional ownership proof"} ResolveIdentityRequest: type: object required: [caip10] properties: caip10: {type: string} UnlinkIdentityRequest: type: object required: [primaryCaip10, linkedCaip10] properties: primaryCaip10: {type: string} linkedCaip10: {type: string} IdentityLink: type: object properties: linkId: {type: string} primaryCaip10: {type: string} linkedCaip10: {type: string} createdAt: {type: string} IdentityLinkResponse: type: object required: [success] properties: success: {type: boolean} link: {$ref: '#/components/schemas/IdentityLink'} IdentityChainsResponse: type: object required: [success] properties: success: {type: boolean} caip10: {type: string} chains: type: array items: {type: string} # ========================================================================= # v2 TBA (Token Bound Accounts) # ========================================================================= CreateTBARequest: type: object required: [chainId, tokenContract, tokenId] properties: chainId: {type: string} tokenContract: {type: string, description: "NFT contract address"} tokenId: {type: string, description: "NFT token ID"} TBAInfo: type: object properties: address: {type: string, description: "TBA contract address"} chainId: {type: string} tokenContract: {type: string} tokenId: {type: string} GetTBAResponse: type: object required: [success] properties: success: {type: boolean} tba: {$ref: '#/components/schemas/TBAInfo'} # ========================================================================= # v2 ERC-7579 Modules # ========================================================================= InstallModuleRequest: type: object required: [chainId, account, moduleType, moduleAddress] properties: chainId: {type: string} account: {type: string, description: "Smart account address"} moduleType: {type: string, description: "Module type (validator, executor)"} moduleAddress: {type: string, description: "Module contract address"} initData: {type: string, description: "Optional init calldata (hex)"} UninstallModuleRequest: type: object required: [chainId, account, moduleType, moduleAddress] properties: chainId: {type: string} account: {type: string} moduleType: {type: string} moduleAddress: {type: string} ConfigurePolicyRequest: type: object required: [chainId, account, policyHashes] properties: chainId: {type: string} account: {type: string} policyHashes: type: array items: {type: string} ConfigurePayoutRequest: type: object required: [chainId, account, recipients, basisPoints] properties: chainId: {type: string} account: {type: string} recipients: type: array items: {type: string} basisPoints: type: array items: {type: integer} description: "Must sum to 10000" ListModulesResponse: type: object required: [success] properties: success: {type: boolean} modules: {type: object, description: "Installed modules by type"} # ========================================================================= # v2 zkML # ========================================================================= GenerateZkMLProofRequest: type: object required: [modelId, inputHash, outputHash, policyHash] properties: modelId: {type: string} inputHash: {type: string} outputHash: {type: string} policyHash: {type: string} VerifyZkMLProofRequest: type: object required: [chainId, proof, receiptHash] properties: chainId: {type: string} proof: {type: object, description: "Groth16 proof (a, b, c points)"} receiptHash: {type: string} RegisterZkMLModelRequest: type: object required: [chainId, modelHash, verifyingKey] properties: chainId: {type: string} modelHash: {type: string} verifyingKey: {type: string, description: "Groth16 verifying key (hex)"} ZkMLProof: type: object properties: proof: {type: object} publicInputs: type: array items: {type: string} modelCircuitHash: {type: string} verified: {type: boolean} ZkMLVerifyResponse: type: object required: [success] properties: success: {type: boolean} valid: {type: boolean} stage: type: string enum: [offchain, onchain] error: {type: string} ListZkMLModelsResponse: type: object required: [success] properties: success: {type: boolean} models: {type: object} # ========================================================================= # Passport PATCH sub-routes # ========================================================================= UpdatePassportPricingRequest: type: object properties: price_per_request: {type: number} billing_model: {type: string} revenue_split: type: object properties: compute_bps: {type: integer} model_bps: {type: integer} protocol_bps: {type: integer} UpdatePassportEndpointsRequest: type: object properties: inference_url: {type: string, format: uri} health_url: {type: string, format: uri} api_base_url: {type: string, format: uri} # ========================================================================= # x402 Payments # ========================================================================= X402PaymentRequired: type: object required: [error, x402] properties: error: {type: string, example: Payment Required} x402: type: object required: [version, facilitator, payment, expires] properties: version: {type: string, example: '2'} facilitator: {type: string, example: direct} description: {type: string} payment: type: object required: [chain, token, tokenAddress, amount, recipient, facilitator, scheme] properties: chain: {type: string, example: base-sepolia} token: {type: string, example: USDC} tokenAddress: {type: string} amount: {type: string, description: Amount in micro-units (6 decimals)} recipient: {type: string, description: Wallet or splitter contract address} facilitator: {type: string} scheme: {type: string, enum: [exact]} alternatives: type: array items: {type: object, additionalProperties: true} splits: type: array items: {type: object, additionalProperties: true} expires: {type: integer, description: Unix timestamp} AssetPricing: type: object required: [passport_id, payout_address] properties: passport_id: {type: string} price_per_call: {type: string, nullable: true, description: Micro-units (6 decimals)} price_per_token: {type: string, nullable: true} price_subscription_hour: {type: string, nullable: true} accepted_tokens: type: array items: {type: string} default: [USDC] accepted_chains: type: array items: {type: string} default: [base] payout_address: {type: string} custom_split_bps: type: object nullable: true additionalProperties: {type: integer} updated_at: {type: string, format: date-time} SetAssetPricingRequest: type: object required: [payout_address] properties: price_per_call: {type: string, description: Micro-units (e.g. "10000" = $0.01)} price_per_token: {type: string} price_subscription_hour: {type: string} accepted_tokens: type: array items: {type: string} accepted_chains: type: array items: {type: string} payout_address: {type: string} custom_split_bps: type: object additionalProperties: {type: integer} RevenueInfo: type: object required: [total, pending, withdrawn, token] properties: total: {type: string, description: Total revenue in micro-units} pending: type: string description: Pending revenue that is confirmed but not yet withdrawn withdrawn: {type: string, description: Already withdrawn} token: {type: string} # ========================================================================= # Payment Grants # ========================================================================= PaymentGrantScope: type: object required: [models, tools, max_per_call_usd] properties: models: type: array items: {type: string} tools: type: array items: {type: string} max_per_call_usd: {type: number} PaymentGrantLimits: type: object required: [total_usd, expires_at, max_calls] properties: total_usd: {type: number} expires_at: {type: integer, description: Unix timestamp} max_calls: {type: integer} PaymentGrantAttestation: type: object required: [balance_verified_at, balance_source] properties: balance_verified_at: {type: integer, description: Unix timestamp} balance_source: type: string enum: [escrow, credit, prepaid] PaymentGrant: type: object required: [grant_id, tenant_id, agent_passport_id, run_id, scope, limits, attestation, signature, signer_pubkey] properties: grant_id: {type: string} tenant_id: {type: string} agent_passport_id: {type: string} run_id: {type: string} scope: {$ref: '#/components/schemas/PaymentGrantScope'} limits: {$ref: '#/components/schemas/PaymentGrantLimits'} attestation: {$ref: '#/components/schemas/PaymentGrantAttestation'} signature: {type: string, description: Ed25519 signature (hex)} signer_pubkey: {type: string, description: Ed25519 public key (hex)} CreatePaymentGrantRequest: type: object required: [tenant_id, agent_passport_id, run_id, scope, limits] properties: tenant_id: {type: string} agent_passport_id: {type: string} run_id: {type: string} scope: {$ref: '#/components/schemas/PaymentGrantScope'} limits: {$ref: '#/components/schemas/PaymentGrantLimits'} attestation: $ref: '#/components/schemas/PaymentGrantAttestation' # ========================================================================= # Agent Deployment # ========================================================================= DeployAgentRequest: type: object required: [name, owner, descriptor] properties: name: {type: string} description: {type: string} owner: {type: string} descriptor: {type: object, additionalProperties: true, description: Agent runtime descriptor} preferred_adapter: {type: string, description: "Runtime adapter (e.g. vercel-ai, openclaw, docker)"} tags: type: array items: {type: string} list_on_marketplace: {type: boolean} # ========================================================================= # Agent Launch # ========================================================================= LaunchImageRequest: type: object required: [mode, image, target, owner, name] properties: mode: type: string enum: [image] description: Launch mode — bring your own Docker image image: type: string description: Docker image reference (e.g. ghcr.io/myorg/my-agent:latest) target: type: string enum: [docker, railway, akash, phala, ionet, nosana] description: Deployment target provider owner: type: string description: Owner wallet address (Solana base58 or EVM 0x) name: type: string description: Human-readable agent name port: type: integer description: Container port to expose (default 8080) verification: type: string enum: [full, minimal] default: full description: Verification mode (full includes receipts + memory + payment hooks) env_vars: type: object additionalProperties: {type: string} description: Additional environment variables injected into the container registry_auth: type: object properties: username: {type: string} password: {type: string} description: Private registry credentials (never stored, used at deploy time only) LaunchBaseRuntimeRequest: type: object required: [mode, model, prompt, target, owner, name] properties: mode: type: string enum: [base-runtime] description: Launch mode — pre-built base runtime model: type: string description: Model identifier (e.g. gpt-4o, claude-3-opus) prompt: type: string description: System prompt for the agent target: type: string enum: [docker, railway, akash, phala, ionet, nosana] description: Deployment target provider owner: type: string description: Owner wallet address (Solana base58 or EVM 0x) name: type: string description: Human-readable agent name tools: type: array items: {type: string} description: Optional tool identifiers to enable LaunchResponse: type: object required: [success, reputation_eligible] properties: success: {type: boolean} passport_id: type: string description: Created passport identifier deployment_id: type: string description: Deployment record identifier deployment_url: type: string description: Public URL of the deployed agent verification_mode: type: string enum: [full, minimal] description: Active verification mode reputation_eligible: type: boolean description: Whether the agent is eligible for on-chain reputation scoring config_hash: type: string description: SHA-256 hash of the launch configuration (for audit) error: type: string description: Error message (present only when success is false) # ========================================================================= # Agent Wallet # ========================================================================= AgentWalletSendRequest: type: object required: [to, amount] properties: to: {type: string, description: Recipient address} amount: {type: string, description: Amount to send} token: {type: string, description: "Token mint address (optional, defaults to SOL)"} AgentWalletLimitsRequest: type: object required: [per_tx_usd, daily_usd] properties: per_tx_usd: {type: number, description: Maximum USD per transaction} daily_usd: {type: number, description: Maximum USD per day} # ========================================================================= # Agent Revenue # ========================================================================= AgentRevenuePool: type: object required: [agent_passport_id, accumulated_lamports, total_distributed_lamports, last_airdrop_at] properties: agent_passport_id: {type: string} accumulated_lamports: {type: string, description: Lamports accumulated in pool} total_distributed_lamports: {type: string, description: Total lamports distributed via airdrops} last_airdrop_at: {type: integer, description: Unix timestamp of last airdrop (0 if never)} AgentPayoutEntry: type: object required: [run_id, total_amount_lamports, recipients, created_at] properties: run_id: {type: string} total_amount_lamports: {type: string} recipients: type: array items: type: object properties: address: {type: string} role: {type: string} bps: {type: integer} amount_lamports: {type: string} created_at: {type: integer} # ========================================================================= # A2A Protocol # ========================================================================= A2AAgentCard: type: object description: A2A Agent Card for agent discovery (per A2A protocol spec). properties: name: {type: string} description: {type: string} url: {type: string} provider: type: object properties: organization: {type: string} url: {type: string} version: {type: string} capabilities: type: object additionalProperties: true skills: type: array items: type: object properties: id: {type: string} name: {type: string} description: {type: string} A2ASendTaskRequest: type: object required: [message] properties: message: type: object required: [parts] properties: role: {type: string} parts: type: array items: type: object properties: type: {type: string} text: {type: string} A2ATask: type: object properties: id: {type: string} status: type: object properties: state: type: string enum: [submitted, working, input-required, completed, failed, canceled] timestamp: {type: string, format: date-time} message: {type: string} artifacts: type: array items: type: object properties: parts: type: array items: type: object properties: type: {type: string} text: {type: string} history: type: array items: type: object additionalProperties: true metadata: type: object additionalProperties: true # ========================================================================= # Reputation Computation # ========================================================================= ReputationAlgorithmInfo: type: object required: [id, name, version, description] properties: id: {type: string} name: {type: string} version: {type: string} description: {type: string} AlgorithmScore: type: object required: [overall, components, computedAt] properties: overall: {type: number, minimum: 0, maximum: 100, description: "Overall score (0-100)"} components: type: object additionalProperties: {type: number} description: Component scores (algorithm-specific) metadata: type: object additionalProperties: true description: Raw metadata from the computation computedAt: {type: integer, description: Unix timestamp} CompositeReputationScore: type: object required: [overall, algorithmScores, computedAt] properties: overall: {type: number, minimum: 0, maximum: 100} algorithmScores: type: array items: type: object required: [algorithmId, weight, score] properties: algorithmId: {type: string} weight: {type: number} score: {$ref: '#/components/schemas/AlgorithmScore'} computedAt: {type: integer, description: Unix timestamp} # ========================================================================= # Cross-Chain # ========================================================================= ChainInfo: type: object required: [chainId, name, type, connected] properties: chainId: {type: string} name: {type: string} type: {type: string, enum: [evm, solana]} evmChainId: {type: integer} testnet: {type: boolean} explorer: {type: string} connected: {type: boolean} erc8004: type: object properties: identityRegistry: {type: string} validationRegistry: {type: string} reputationRegistry: {type: string} # ========================================================================= # Agent Mirror # ========================================================================= AgentReceipt: type: object properties: receipt_hash: {type: string} run_id: {type: string} model_passport_id: {type: string} compute_passport_id: {type: string} policy_hash: {type: string} tokens_in: {type: integer} tokens_out: {type: integer} model: {type: string} status: {type: string} created_at: {type: string, format: date-time} AgentProof: type: object required: [passport_id, epoch_id, mmr_root, verified] properties: passport_id: {type: string} epoch_id: {type: string} epoch_index: {type: integer} mmr_root: {type: string} leaf_count: {type: integer} chain_tx: {type: string, nullable: true} verified: {type: boolean} finalized_at: {type: string, format: date-time} total_receipts: {type: integer} AgentRunProof: type: object required: [passport_id, run_id, receipt_hash, verified] properties: passport_id: {type: string} run_id: {type: string} receipt_hash: {type: string} epoch_id: {type: string} mmr_root: {type: string} chain_tx: {type: string, nullable: true} verified: {type: boolean} epoch_status: {type: string} model_passport_id: {type: string} policy_hash: {type: string} tokens_in: {type: integer} tokens_out: {type: integer} status: {type: string} created_at: {type: string, format: date-time} # ========================================================================= # Shared # ========================================================================= SuccessResponse: type: object required: [success] properties: success: {type: boolean}