{
  "openapi": "3.1.0",
  "info": {
    "title": "LLC wallet-authenticated creator platform",
    "version": "2026-10-14",
    "description": "Actual action-dispatch APIs. Session cookies last eight hours; login challenges last five minutes. Wallet login proves control of a wallet, not identity or copyright. Holder actions check currently held, confirmed LLC-issued NFTs. Agents need the wallet owner’s authorization; there is no privileged agent bypass. Marketplace accepts SOL/USDC/USDT and charges 2.5% on atomic settlement. Gigs escrow charges 2.5% only on release, zero platform fee on refund. Network/rent costs are extra in SOL. Devnet is test assets; the USDT slot requires an explicitly configured test mint, never real USDT. Escrow program is not deployed and deposits remain closed. No general idempotency-key support. Status actions may recover previously signed transactions. Inspect configuration before using a capability."
  },
  "servers": [
    {
      "url": "/"
    }
  ],
  "paths": {
    "/api/platform": {
      "get": {
        "operationId": "platform_get",
        "summary": "platform GET action dispatcher",
        "description": "Choose the action query parameter. x-llc-actions maps each real action to its body, response and authorization. Private keys are never accepted.",
        "parameters": [
          {
            "name": "action",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "config",
                "session",
                "drafts"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Action completed; inspect returned state before claiming confirmation.",
            "content": {
              "application/json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/PlatformConfig"
                    },
                    {
                      "$ref": "#/components/schemas/Session"
                    },
                    {
                      "$ref": "#/components/schemas/Drafts"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Invalid data",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Wallet session missing or expired",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Permission, membership, origin or CSRF rejected",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Record unavailable to this wallet",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Wrong HTTP method",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Conflicting state, expiry, ownership change or pending finalization",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Request too large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "Use application/json",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited; respect Retry-After when provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Service not configured, not ready or unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security": [
          {},
          {
            "walletSession": []
          }
        ]
      },
      "post": {
        "operationId": "platform_post",
        "summary": "platform POST action dispatcher",
        "description": "Choose the action query parameter. x-llc-actions maps each real action to its body, response and authorization. Private keys are never accepted.",
        "parameters": [
          {
            "name": "action",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "challenge",
                "verify",
                "logout",
                "generate",
                "mint-prepare",
                "mint-confirm"
              ]
            }
          },
          {
            "name": "Origin",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Exact configured deployment origin, no trailing slash. Non-browser clients set this explicitly."
          },
          {
            "name": "X-LLC-CSRF",
            "in": "header",
            "schema": {
              "type": "string"
            },
            "description": "Required on authenticated POST; returned from wallet verification."
          }
        ],
        "responses": {
          "200": {
            "description": "Action completed; inspect returned state before claiming confirmation.",
            "content": {
              "application/json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/Challenge"
                    },
                    {
                      "$ref": "#/components/schemas/Session"
                    },
                    {
                      "$ref": "#/components/schemas/Draft"
                    },
                    {
                      "$ref": "#/components/schemas/PreparedMint"
                    }
                  ]
                }
              }
            }
          },
          "201": {
            "description": "Created: generation, listing, gig or club post.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Result"
                }
              }
            }
          },
          "400": {
            "description": "Invalid data",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Wallet session missing or expired",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Permission, membership, origin or CSRF rejected",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Record unavailable to this wallet",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Wrong HTTP method",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Conflicting state, expiry, ownership change or pending finalization",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Request too large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "Use application/json",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited; respect Retry-After when provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Service not configured, not ready or unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security": [
          {},
          {
            "walletSession": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "anyOf": [
                  {
                    "$ref": "#/components/schemas/WalletChallenge"
                  },
                  {
                    "$ref": "#/components/schemas/WalletVerification"
                  },
                  {
                    "$ref": "#/components/schemas/Empty"
                  },
                  {
                    "$ref": "#/components/schemas/Character"
                  },
                  {
                    "$ref": "#/components/schemas/DraftId"
                  },
                  {
                    "$ref": "#/components/schemas/MintConfirmation"
                  }
                ]
              }
            }
          }
        }
      }
    },
    "/api/community": {
      "get": {
        "operationId": "community_get",
        "summary": "community GET action dispatcher",
        "description": "Choose the action query parameter. x-llc-actions maps each real action to its body, response and authorization. Private keys are never accepted.",
        "parameters": [
          {
            "name": "action",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "config",
                "listings",
                "gigs"
              ]
            }
          },
          {
            "name": "q",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Used by public listings/gigs; page is zero-based."
          },
          {
            "name": "kind",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Used by public listings/gigs; page is zero-based."
          },
          {
            "name": "category",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Used by public listings/gigs; page is zero-based."
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Used by public listings/gigs; page is zero-based."
          }
        ],
        "responses": {
          "200": {
            "description": "Action completed; inspect returned state before claiming confirmation.",
            "content": {
              "application/json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/CommunityConfig"
                    },
                    {
                      "$ref": "#/components/schemas/Result"
                    },
                    {
                      "$ref": "#/components/schemas/Gigs"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Invalid data",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Wallet session missing or expired",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Permission, membership, origin or CSRF rejected",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Record unavailable to this wallet",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Wrong HTTP method",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Conflicting state, expiry, ownership change or pending finalization",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Request too large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "Use application/json",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited; respect Retry-After when provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Service not configured, not ready or unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security": [
          {},
          {
            "walletSession": []
          }
        ]
      },
      "post": {
        "operationId": "community_post",
        "summary": "community POST action dispatcher",
        "description": "Choose the action query parameter. x-llc-actions maps each real action to its body, response and authorization. Private keys are never accepted.",
        "parameters": [
          {
            "name": "action",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "my-assets",
                "my-listings",
                "offers",
                "my-gigs",
                "gig-orders",
                "create-gig",
                "update-gig",
                "delete-gig",
                "create-listing",
                "cancel-listing",
                "make-offer",
                "update-offer",
                "sale-prepare",
                "sale-sign",
                "sale-status",
                "holder-access",
                "threads",
                "thread",
                "create-thread",
                "reply",
                "delete-post",
                "report",
                "gig-order-request",
                "gig-order-update",
                "gig-pay-prepare",
                "gig-pay-sign",
                "gig-pay-status",
                "escrow-prepare",
                "escrow-sign",
                "escrow-status",
                "escrow-verify"
              ]
            }
          },
          {
            "name": "Origin",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Exact configured deployment origin, no trailing slash. Non-browser clients set this explicitly."
          },
          {
            "name": "X-LLC-CSRF",
            "in": "header",
            "schema": {
              "type": "string"
            },
            "description": "Required on authenticated POST; returned from wallet verification."
          }
        ],
        "responses": {
          "200": {
            "description": "Action completed; inspect returned state before claiming confirmation.",
            "content": {
              "application/json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/Result"
                    },
                    {
                      "$ref": "#/components/schemas/Gigs"
                    },
                    {
                      "$ref": "#/components/schemas/GigResult"
                    },
                    {
                      "$ref": "#/components/schemas/Sale"
                    }
                  ]
                }
              }
            }
          },
          "201": {
            "description": "Created: generation, listing, gig or club post.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Result"
                }
              }
            }
          },
          "400": {
            "description": "Invalid data",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Wallet session missing or expired",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Permission, membership, origin or CSRF rejected",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Record unavailable to this wallet",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Wrong HTTP method",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Conflicting state, expiry, ownership change or pending finalization",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Request too large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "Use application/json",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited; respect Retry-After when provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Service not configured, not ready or unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security": [
          {},
          {
            "walletSession": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "anyOf": [
                  {
                    "$ref": "#/components/schemas/Empty"
                  },
                  {
                    "$ref": "#/components/schemas/GigInput"
                  },
                  {
                    "$ref": "#/components/schemas/GigUpdate"
                  },
                  {
                    "$ref": "#/components/schemas/GigDelete"
                  },
                  {
                    "$ref": "#/components/schemas/ListingInput"
                  },
                  {
                    "$ref": "#/components/schemas/ListingId"
                  },
                  {
                    "$ref": "#/components/schemas/Offer"
                  },
                  {
                    "$ref": "#/components/schemas/OfferUpdate"
                  },
                  {
                    "$ref": "#/components/schemas/OfferId"
                  },
                  {
                    "$ref": "#/components/schemas/SaleSignature"
                  },
                  {
                    "$ref": "#/components/schemas/SaleId"
                  },
                  {
                    "$ref": "#/components/schemas/Membership"
                  },
                  {
                    "$ref": "#/components/schemas/ThreadQuery"
                  },
                  {
                    "$ref": "#/components/schemas/ThreadId"
                  },
                  {
                    "$ref": "#/components/schemas/ThreadCreate"
                  },
                  {
                    "$ref": "#/components/schemas/Reply"
                  },
                  {
                    "$ref": "#/components/schemas/DeletePost"
                  },
                  {
                    "$ref": "#/components/schemas/Report"
                  },
                  {
                    "$ref": "#/components/schemas/OrderRequest"
                  },
                  {
                    "$ref": "#/components/schemas/OrderUpdate"
                  },
                  {
                    "$ref": "#/components/schemas/OrderId"
                  },
                  {
                    "$ref": "#/components/schemas/PaymentSignature"
                  },
                  {
                    "$ref": "#/components/schemas/EscrowPrepare"
                  }
                ]
              }
            }
          }
        }
      }
    },
    "/api/staking": {
      "get": {
        "operationId": "staking_get",
        "summary": "staking GET action dispatcher",
        "description": "Choose the action query parameter. x-llc-actions maps each real action to its body, response and authorization. Private keys are never accepted.",
        "parameters": [
          {
            "name": "action",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "config"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Action completed; inspect returned state before claiming confirmation.",
            "content": {
              "application/json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/StakingConfig"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Invalid data",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Wallet session missing or expired",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Permission, membership, origin or CSRF rejected",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Record unavailable to this wallet",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Wrong HTTP method",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Conflicting state, expiry, ownership change or pending finalization",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Request too large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "Use application/json",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited; respect Retry-After when provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Service not configured, not ready or unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security": [
          {},
          {
            "walletSession": []
          }
        ]
      },
      "post": {
        "operationId": "staking_post",
        "summary": "staking POST action dispatcher",
        "description": "Choose the action query parameter. x-llc-actions maps each real action to its body, response and authorization. Private keys are never accepted.",
        "parameters": [
          {
            "name": "action",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "position",
                "prepare",
                "confirm"
              ]
            }
          },
          {
            "name": "Origin",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Exact configured deployment origin, no trailing slash. Non-browser clients set this explicitly."
          },
          {
            "name": "X-LLC-CSRF",
            "in": "header",
            "schema": {
              "type": "string"
            },
            "description": "Required on authenticated POST; returned from wallet verification.",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Action completed; inspect returned state before claiming confirmation.",
            "content": {
              "application/json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/StakingPosition"
                    },
                    {
                      "$ref": "#/components/schemas/StakingPrepared"
                    },
                    {
                      "$ref": "#/components/schemas/StakingReceipt"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Invalid data",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Wallet session missing or expired",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Permission, membership, origin or CSRF rejected",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Record unavailable to this wallet",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Wrong HTTP method",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Conflicting state, expiry, ownership change or pending finalization",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Request too large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "Use application/json",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited; respect Retry-After when provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Service not configured, not ready or unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security": [
          {
            "walletSession": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "anyOf": [
                  {
                    "$ref": "#/components/schemas/Empty"
                  },
                  {
                    "$ref": "#/components/schemas/StakingPrepare"
                  },
                  {
                    "$ref": "#/components/schemas/StakingConfirm"
                  }
                ]
              }
            }
          }
        }
      }
    },
    "/api/mcp": {
      "post": {
        "operationId": "mcp_rpc",
        "summary": "MCP Streamable HTTP JSON-RPC transport",
        "description": "Use a standard MCP client. SDK negotiates protocol version; server supports 2025-11-25. Stateless POST JSON transport. Public tools need no auth. Private tools accept the existing eight-hour wallet-session Bearer credential OR same-origin cookie plus X-LLC-CSRF. No OAuth/DCR and no permanent API key. No registered MCP tool signs, submits or rebroadcasts payments. Tool input schemas are published at /agent-tools.json and tools/list.",
        "parameters": [
          {
            "name": "Accept",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "example": "application/json, text/event-stream"
            }
          },
          {
            "name": "MCP-Protocol-Version",
            "in": "header",
            "schema": {
              "type": "string",
              "example": "2025-11-25"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "jsonrpc": {
                    "const": "2.0"
                  },
                  "id": {
                    "type": [
                      "string",
                      "number"
                    ]
                  },
                  "method": {
                    "type": "string",
                    "examples": [
                      "initialize",
                      "notifications/initialized",
                      "tools/list",
                      "tools/call"
                    ]
                  },
                  "params": {
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "method"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "JSON-RPC result. Tool failures use isError=true; inspect both transport and tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Notification accepted."
          },
          "400": {
            "description": "Invalid data",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Wallet session missing or expired",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Permission, membership, origin or CSRF rejected",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Record unavailable to this wallet",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Wrong HTTP method",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Conflicting state, expiry, ownership change or pending finalization",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Request too large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "Use application/json",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited; respect Retry-After when provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Service not configured, not ready or unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security": [
          {},
          {
            "walletBearer": []
          },
          {
            "walletSession": []
          }
        ]
      }
    }
  },
  "components": {
    "securitySchemes": {
      "walletBearer": {
        "type": "http",
        "scheme": "bearer",
        "description": "MCP only: opaque existing wallet session from challenge verification; not an API key or wallet private key."
      },
      "walletSession": {
        "type": "apiKey",
        "in": "cookie",
        "name": "llc_session",
        "description": "Opaque HTTP-only wallet session obtained with Ed25519 challenge verification. Not a private key. CSRF and exact Origin required for authenticated POST."
      }
    },
    "schemas": {
      "Error": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string",
            "minLength": 1,
            "maxLength": 2000
          }
        },
        "required": [
          "error"
        ]
      },
      "Empty": {
        "type": "object",
        "properties": {},
        "required": []
      },
      "WalletChallenge": {
        "type": "object",
        "properties": {
          "walletAddress": {
            "type": "string",
            "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$",
            "description": "Base58 Solana public address decoding to 32 bytes; never a private key."
          }
        },
        "required": [
          "walletAddress"
        ]
      },
      "Challenge": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string",
            "minLength": 1,
            "maxLength": 4000
          },
          "challengeId": {
            "type": "string",
            "format": "uuid"
          },
          "expiresAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "message",
          "challengeId",
          "expiresAt"
        ]
      },
      "WalletVerification": {
        "type": "object",
        "properties": {
          "walletAddress": {
            "type": "string",
            "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$",
            "description": "Base58 Solana public address decoding to 32 bytes; never a private key."
          },
          "challengeId": {
            "type": "string",
            "format": "uuid"
          },
          "signature": {
            "type": "string",
            "pattern": "^[A-Za-z0-9+/]{86}==$",
            "description": "Base64 of raw 64-byte Ed25519 signature over exact UTF-8 challenge message."
          }
        },
        "required": [
          "walletAddress",
          "challengeId",
          "signature"
        ]
      },
      "Session": {
        "type": "object",
        "properties": {
          "walletAddress": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$",
                "description": "Base58 Solana public address decoding to 32 bytes; never a private key."
              },
              {
                "type": "null"
              }
            ]
          },
          "csrfToken": {
            "type": "string",
            "minLength": 0,
            "maxLength": 1000
          },
          "expiresAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "walletAddress"
        ]
      },
      "PlatformConfig": {
        "type": "object",
        "properties": {
          "chain": {
            "enum": [
              "solana:mainnet",
              "solana:devnet"
            ]
          },
          "network": {
            "enum": [
              "mainnet-beta",
              "devnet"
            ]
          },
          "priceSol": {
            "const": 0.2
          },
          "priceLamports": {
            "const": 200000000
          },
          "treasuryAddress": {
            "type": "string",
            "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$",
            "description": "Base58 Solana public address decoding to 32 bytes; never a private key."
          },
          "maxImageBytes": {
            "const": 1000000
          },
          "auth": {
            "type": "object",
            "properties": {
              "ready": {
                "type": "boolean"
              },
              "reason": {
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "required": []
          },
          "generator": {
            "type": "object",
            "properties": {
              "ready": {
                "type": "boolean"
              },
              "reason": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "dailyPreviewLimit": {
                "const": 1
              },
              "mode": {
                "enum": [
                  "branded",
                  "ai"
                ]
              },
              "requiresApiKey": {
                "type": "boolean"
              },
              "feeIncludes": {
                "type": "string",
                "minLength": 0,
                "maxLength": 1000
              }
            },
            "required": []
          },
          "staking": {
            "type": "object",
            "properties": {
              "ready": {
                "const": false
              },
              "status": {
                "const": "not-launched"
              },
              "reason": {
                "type": "string",
                "minLength": 0,
                "maxLength": 1000
              },
              "rewardShareBps": {
                "const": 2000
              },
              "fundedRewardsLamports": {
                "const": 0
              },
              "guaranteedApr": {
                "type": "null"
              },
              "policy": {
                "type": "string",
                "minLength": 0,
                "maxLength": 1000
              }
            },
            "required": []
          }
        },
        "required": [
          "chain",
          "priceSol",
          "auth",
          "generator",
          "staking"
        ]
      },
      "CommunityConfig": {
        "type": "object",
        "properties": {
          "currenciesReady": {
            "type": "boolean"
          },
          "escrowStorageReady": {
            "type": "boolean"
          },
          "escrowReady": {
            "type": "boolean"
          },
          "escrowDepositsOpen": {
            "type": "boolean"
          },
          "paymentsPaused": {
            "type": "boolean"
          },
          "paymentCurrencies": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "currency": {
                  "enum": [
                    "SOL",
                    "USDC",
                    "USDT"
                  ]
                },
                "mintAddress": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "decimals": {
                  "enum": [
                    6,
                    9
                  ]
                },
                "enabled": {
                  "type": "boolean"
                },
                "testAsset": {
                  "type": "boolean"
                },
                "label": {
                  "type": "string",
                  "minLength": 0,
                  "maxLength": 1000
                }
              },
              "required": []
            }
          },
          "ready": {
            "type": "boolean"
          },
          "gigsReady": {
            "type": "boolean"
          },
          "gigCategories": {
            "type": "object"
          },
          "network": {
            "type": "string",
            "minLength": 0,
            "maxLength": 1000
          },
          "channels": {
            "type": "array",
            "items": {
              "enum": [
                "alpha",
                "creators",
                "help"
              ]
            }
          },
          "salesReady": {
            "type": "boolean"
          },
          "reason": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "ready",
          "gigsReady",
          "salesReady"
        ]
      },
      "Character": {
        "type": "object",
        "properties": {
          "characterName": {
            "type": "string",
            "minLength": 2,
            "maxLength": 48
          },
          "creatorName": {
            "type": "string",
            "minLength": 2,
            "maxLength": 64
          },
          "instagram": {
            "type": "string",
            "format": "uri",
            "description": "HTTPS Instagram profile URL, not a post. Link is self-claimed, not verified."
          },
          "description": {
            "type": "string",
            "minLength": 20,
            "maxLength": 600
          },
          "creationDate": {
            "type": "string",
            "format": "date",
            "description": "Year 1900 or later, not a future date."
          },
          "creationMethod": {
            "enum": [
              "original",
              "ai-assisted"
            ]
          },
          "tools": {
            "type": "string",
            "minLength": 0,
            "maxLength": 120
          },
          "evidenceUrl": {
            "type": "string",
            "maxLength": 400,
            "description": "Optional public HTTPS URL without credentials or custom port."
          },
          "characterSheet": {
            "$ref": "#/components/schemas/ImageData"
          },
          "portrait": {
            "$ref": "#/components/schemas/ImageData"
          },
          "rightsConfirmed": {
            "type": "boolean",
            "const": true
          },
          "adultConfirmed": {
            "type": "boolean",
            "const": true
          },
          "publicRecordConsent": {
            "type": "boolean",
            "const": true
          },
          "generationConsent": {
            "type": "boolean",
            "const": true
          },
          "termsAccepted": {
            "type": "boolean",
            "const": true
          },
          "artworkMode": {
            "enum": [
              "branded",
              "ai"
            ],
            "default": "branded"
          },
          "aiProcessingConsent": {
            "type": "boolean",
            "description": "Must be true only when explicitly approving optional AI mode."
          }
        },
        "required": [
          "characterName",
          "creatorName",
          "instagram",
          "description",
          "creationDate",
          "creationMethod",
          "characterSheet",
          "portrait",
          "rightsConfirmed",
          "adultConfirmed",
          "publicRecordConsent",
          "generationConsent",
          "termsAccepted"
        ]
      },
      "ImageData": {
        "type": "string",
        "pattern": "^data:image/(png|jpeg);base64,",
        "description": "PNG/JPEG data URL; decoded file <=1,000,000 bytes, dimensions 128–8192 each, <=20 megapixels. Whole platform request <=2,800,000 UTF-8 bytes."
      },
      "DraftId": {
        "type": "object",
        "properties": {
          "draftId": {
            "type": "string",
            "format": "uuid"
          }
        },
        "required": [
          "draftId"
        ]
      },
      "MintConfirmation": {
        "type": "object",
        "properties": {
          "draftId": {
            "type": "string",
            "format": "uuid"
          },
          "signature": {
            "type": "string",
            "maxLength": 88,
            "description": "Base58 Solana transaction signature decoding to 64 bytes."
          }
        },
        "required": [
          "draftId",
          "signature"
        ]
      },
      "Draft": {
        "type": "object",
        "properties": {
          "draftId": {
            "type": "string",
            "format": "uuid"
          },
          "status": {
            "enum": [
              "generating",
              "failed",
              "ready",
              "prepared",
              "minted"
            ]
          },
          "imageUrl": {
            "type": [
              "string",
              "null"
            ]
          },
          "metadataUrl": {
            "type": [
              "string",
              "null"
            ]
          },
          "metadata": {
            "type": [
              "object",
              "null"
            ]
          },
          "characterName": {
            "type": "string",
            "minLength": 0,
            "maxLength": 1000
          },
          "priceSol": {
            "type": "number",
            "minimum": 0,
            "description": "The saved draft or confirmed receipt price, including historical prices."
          },
          "currentPriceSol": {
            "const": 0.2
          },
          "failureCode": {
            "type": [
              "string",
              "null"
            ],
            "description": "PRICE_CHANGED marks an obsolete unminted draft; create a fresh preview at the current price."
          },
          "assetAddress": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$",
                "description": "Base58 Solana public address decoding to 32 bytes; never a private key."
              },
              {
                "type": "null"
              }
            ]
          },
          "signature": {
            "type": [
              "string",
              "null"
            ]
          },
          "chain": {
            "enum": [
              "solana:mainnet",
              "solana:devnet"
            ]
          },
          "createdAt": {
            "type": "string"
          }
        },
        "required": [
          "draftId",
          "status"
        ]
      },
      "Drafts": {
        "type": "object",
        "properties": {
          "drafts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Draft"
            }
          }
        },
        "required": [
          "drafts"
        ]
      },
      "PreparedMint": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Draft"
          },
          {
            "type": "object",
            "properties": {
              "transaction": {
                "type": "string",
                "description": "Base64 serialized version-0 transaction partially signed for asset creation. Preserve exact message."
              },
              "assetAddress": {
                "type": "string",
                "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$",
                "description": "Base58 Solana public address decoding to 32 bytes; never a private key."
              },
              "blockhash": {
                "type": "string",
                "minLength": 0,
                "maxLength": 1000
              },
              "lastValidBlockHeight": {
                "type": "integer"
              },
              "treasuryAddress": {
                "type": "string",
                "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$",
                "description": "Base58 Solana public address decoding to 32 bytes; never a private key."
              }
            },
            "required": []
          }
        ]
      },
      "Membership": {
        "type": "object",
        "properties": {
          "assetAddress": {
            "type": "string",
            "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$",
            "description": "Base58 Solana public address decoding to 32 bytes; never a private key."
          }
        },
        "required": []
      },
      "GigInput": {
        "type": "object",
        "properties": {
          "assetAddress": {
            "type": "string",
            "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$",
            "description": "Base58 Solana public address decoding to 32 bytes; never a private key."
          },
          "kind": {
            "enum": [
              "offering",
              "hiring"
            ]
          },
          "category": {
            "enum": [
              "character",
              "video",
              "editing",
              "audio",
              "social"
            ]
          },
          "title": {
            "type": "string",
            "minLength": 6,
            "maxLength": 100
          },
          "description": {
            "type": "string",
            "minLength": 40,
            "maxLength": 4000
          },
          "currency": {
            "enum": [
              "SOL",
              "USDC",
              "USDT"
            ]
          },
          "budget": {
            "type": "string",
            "pattern": "^(0|[1-9]\\d{0,6})(?:\\.\\d{1,9})?$",
            "description": "Empty only for a negotiable post; otherwise exact selected-currency decimal string within supported payment limits."
          },
          "negotiable": {
            "type": "boolean"
          },
          "turnaround": {
            "type": "string",
            "minLength": 3,
            "maxLength": 120
          },
          "contactUrl": {
            "type": "string",
            "minLength": 1,
            "maxLength": 500
          },
          "publicContactConsent": {
            "type": "boolean",
            "const": true
          },
          "adultConfirmed": {
            "type": "boolean",
            "const": true
          },
          "termsAccepted": {
            "type": "boolean",
            "const": true
          }
        },
        "required": [
          "kind",
          "category",
          "title",
          "description",
          "currency",
          "turnaround",
          "contactUrl",
          "publicContactConsent",
          "adultConfirmed",
          "termsAccepted"
        ]
      },
      "GigUpdate": {
        "allOf": [
          {
            "$ref": "#/components/schemas/GigInput"
          },
          {
            "type": "object",
            "properties": {
              "gigId": {
                "type": "string",
                "format": "uuid"
              }
            },
            "required": [
              "gigId"
            ]
          }
        ]
      },
      "GigDelete": {
        "type": "object",
        "properties": {
          "assetAddress": {
            "type": "string",
            "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$",
            "description": "Base58 Solana public address decoding to 32 bytes; never a private key."
          },
          "gigId": {
            "type": "string",
            "format": "uuid"
          }
        },
        "required": [
          "gigId"
        ]
      },
      "Gig": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "author": {
            "type": "string",
            "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$",
            "description": "Base58 Solana public address decoding to 32 bytes; never a private key."
          },
          "kind": {
            "enum": [
              "offering",
              "hiring"
            ]
          },
          "category": {
            "type": "string",
            "minLength": 0,
            "maxLength": 1000
          },
          "title": {
            "type": "string",
            "minLength": 0,
            "maxLength": 1000
          },
          "description": {
            "type": "string",
            "minLength": 0,
            "maxLength": 1000
          },
          "currency": {
            "enum": [
              "SOL",
              "USDC",
              "USDT"
            ]
          },
          "budget": {
            "type": [
              "string",
              "null"
            ]
          },
          "negotiable": {
            "type": "boolean"
          },
          "turnaround": {
            "type": "string",
            "minLength": 0,
            "maxLength": 1000
          },
          "contactUrl": {
            "type": "string",
            "minLength": 0,
            "maxLength": 1000
          },
          "status": {
            "type": "string",
            "minLength": 0,
            "maxLength": 1000
          },
          "createdAt": {
            "type": "string",
            "minLength": 0,
            "maxLength": 1000
          },
          "updatedAt": {
            "type": "string",
            "minLength": 0,
            "maxLength": 1000
          }
        },
        "required": []
      },
      "Gigs": {
        "type": "object",
        "properties": {
          "gigs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Gig"
            }
          },
          "hasMore": {
            "type": "boolean"
          }
        },
        "required": [
          "gigs"
        ]
      },
      "GigResult": {
        "type": "object",
        "properties": {
          "gig": {
            "$ref": "#/components/schemas/Gig"
          }
        },
        "required": [
          "gig"
        ]
      },
      "ListingInput": {
        "type": "object",
        "properties": {
          "nftAddress": {
            "type": "string",
            "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$",
            "description": "Base58 Solana public address decoding to 32 bytes; never a private key."
          },
          "currency": {
            "enum": [
              "SOL",
              "USDC",
              "USDT"
            ]
          },
          "price": {
            "type": "string",
            "pattern": "^(0|[1-9]\\d{0,6})(?:\\.\\d{1,9})?$",
            "description": "Exact decimal string: SOL <=9 fractional digits, USDC/USDT <=6. Raw amount must be 40..1,000,000,000,000 units. No floating-point numbers, exponent or fiat currency."
          },
          "priceSol": {
            "type": "string",
            "pattern": "^\\d{1,5}(?:\\.\\d{1,9})?$",
            "description": "Positive decimal SOL string, at most 1,000 SOL. Checkout requires at least 40 lamports.",
            "deprecated": true
          },
          "summary": {
            "type": "string",
            "minLength": 20,
            "maxLength": 600
          },
          "licenseType": {
            "enum": [
              "collectible-only",
              "commercial-license",
              "rights-transfer"
            ]
          },
          "licenseTerms": {
            "type": "string",
            "minLength": 30,
            "maxLength": 3000
          },
          "deliveryUrl": {
            "type": "string",
            "format": "uri",
            "maxLength": 1000,
            "description": "HTTPS buyer delivery link, no credentials/port; hidden from public responses."
          },
          "rightsConfirmed": {
            "type": "boolean",
            "const": true
          },
          "adultConfirmed": {
            "type": "boolean",
            "const": true
          },
          "termsAccepted": {
            "type": "boolean",
            "const": true
          }
        },
        "required": [
          "nftAddress",
          "currency",
          "price",
          "summary",
          "licenseType",
          "licenseTerms",
          "deliveryUrl",
          "rightsConfirmed",
          "adultConfirmed",
          "termsAccepted"
        ]
      },
      "ListingId": {
        "type": "object",
        "properties": {
          "listingId": {
            "type": "string",
            "format": "uuid"
          }
        },
        "required": [
          "listingId"
        ]
      },
      "Offer": {
        "type": "object",
        "properties": {
          "listingId": {
            "type": "string",
            "format": "uuid"
          },
          "currency": {
            "enum": [
              "SOL",
              "USDC",
              "USDT"
            ]
          },
          "price": {
            "type": "string",
            "pattern": "^(0|[1-9]\\d{0,6})(?:\\.\\d{1,9})?$",
            "description": "Exact decimal string: SOL <=9 fractional digits, USDC/USDT <=6. Raw amount must be 40..1,000,000,000,000 units. No floating-point numbers, exponent or fiat currency."
          },
          "priceSol": {
            "type": "string",
            "pattern": "^\\d{1,5}(?:\\.\\d{1,9})?$",
            "description": "Positive decimal SOL string, at most 1,000 SOL. Checkout requires at least 40 lamports.",
            "deprecated": true
          },
          "message": {
            "type": "string",
            "minLength": 3,
            "maxLength": 1000
          },
          "adultConfirmed": {
            "type": "boolean",
            "const": true
          },
          "termsAccepted": {
            "type": "boolean",
            "const": true
          }
        },
        "required": [
          "listingId",
          "currency",
          "price",
          "adultConfirmed",
          "termsAccepted"
        ]
      },
      "OfferUpdate": {
        "type": "object",
        "properties": {
          "offerId": {
            "type": "string",
            "format": "uuid"
          },
          "status": {
            "enum": [
              "accepted",
              "declined",
              "withdrawn"
            ]
          }
        },
        "required": [
          "offerId",
          "status"
        ]
      },
      "OfferId": {
        "type": "object",
        "properties": {
          "offerId": {
            "type": "string",
            "format": "uuid"
          }
        },
        "required": [
          "offerId"
        ]
      },
      "SaleId": {
        "type": "object",
        "properties": {
          "saleId": {
            "type": "string",
            "format": "uuid"
          }
        },
        "required": [
          "saleId"
        ]
      },
      "SaleSignature": {
        "type": "object",
        "properties": {
          "saleId": {
            "type": "string",
            "format": "uuid"
          },
          "transaction": {
            "type": "string",
            "maxLength": 6000,
            "description": "Base64 wallet-signed prepared transaction; same message and existing signatures preserved."
          }
        },
        "required": [
          "saleId",
          "transaction"
        ]
      },
      "ThreadQuery": {
        "type": "object",
        "properties": {
          "assetAddress": {
            "type": "string",
            "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$",
            "description": "Base58 Solana public address decoding to 32 bytes; never a private key."
          },
          "channel": {
            "enum": [
              "alpha",
              "creators",
              "help"
            ]
          },
          "q": {
            "type": "string",
            "minLength": 0,
            "maxLength": 100
          },
          "page": {
            "type": "integer",
            "minimum": 0,
            "maximum": 500
          }
        },
        "required": []
      },
      "ThreadId": {
        "type": "object",
        "properties": {
          "assetAddress": {
            "type": "string",
            "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$",
            "description": "Base58 Solana public address decoding to 32 bytes; never a private key."
          },
          "threadId": {
            "type": "string",
            "format": "uuid"
          }
        },
        "required": [
          "threadId"
        ]
      },
      "ThreadCreate": {
        "type": "object",
        "properties": {
          "assetAddress": {
            "type": "string",
            "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$",
            "description": "Base58 Solana public address decoding to 32 bytes; never a private key."
          },
          "channel": {
            "enum": [
              "alpha",
              "creators",
              "help"
            ]
          },
          "title": {
            "type": "string",
            "minLength": 4,
            "maxLength": 100
          },
          "body": {
            "type": "string",
            "minLength": 10,
            "maxLength": 5000
          },
          "rulesAccepted": {
            "type": "boolean",
            "const": true
          }
        },
        "required": [
          "channel",
          "title",
          "body",
          "rulesAccepted"
        ]
      },
      "Reply": {
        "type": "object",
        "properties": {
          "assetAddress": {
            "type": "string",
            "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$",
            "description": "Base58 Solana public address decoding to 32 bytes; never a private key."
          },
          "threadId": {
            "type": "string",
            "format": "uuid"
          },
          "body": {
            "type": "string",
            "minLength": 2,
            "maxLength": 3000
          }
        },
        "required": [
          "threadId",
          "body"
        ]
      },
      "DeletePost": {
        "type": "object",
        "properties": {
          "assetAddress": {
            "type": "string",
            "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$",
            "description": "Base58 Solana public address decoding to 32 bytes; never a private key."
          },
          "threadId": {
            "type": "string",
            "format": "uuid"
          },
          "replyId": {
            "type": "string",
            "format": "uuid"
          }
        },
        "required": [
          "threadId"
        ]
      },
      "Report": {
        "type": "object",
        "properties": {
          "assetAddress": {
            "type": "string",
            "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$",
            "description": "Base58 Solana public address decoding to 32 bytes; never a private key."
          },
          "threadId": {
            "type": "string",
            "format": "uuid"
          },
          "replyId": {
            "type": "string",
            "format": "uuid"
          },
          "reason": {
            "type": "string",
            "minLength": 5,
            "maxLength": 500
          }
        },
        "required": [
          "threadId",
          "reason"
        ]
      },
      "OrderRequest": {
        "type": "object",
        "properties": {
          "gigId": {
            "type": "string",
            "format": "uuid"
          },
          "scope": {
            "type": "string",
            "minLength": 40,
            "maxLength": 4000
          },
          "verificationPolicy": {
            "enum": [
              "buyer-review",
              "public-post"
            ],
            "default": "buyer-review"
          },
          "provider": {
            "enum": [
              "generic",
              "youtube",
              "tiktok",
              "instagram"
            ],
            "default": "generic"
          },
          "providerAccountId": {
            "type": "string",
            "minLength": 0,
            "maxLength": 128
          },
          "autoReleaseAccepted": {
            "type": "boolean",
            "const": true
          },
          "deliverySeconds": {
            "type": "integer",
            "minimum": 3600,
            "maximum": 2592000,
            "default": 604800
          },
          "reviewSeconds": {
            "type": "integer",
            "minimum": 3600,
            "maximum": 604800,
            "default": 172800
          },
          "adultConfirmed": {
            "type": "boolean",
            "const": true
          },
          "paymentTermsAccepted": {
            "type": "boolean",
            "const": true
          }
        },
        "required": [
          "gigId",
          "scope",
          "adultConfirmed",
          "paymentTermsAccepted"
        ]
      },
      "OrderUpdate": {
        "type": "object",
        "properties": {
          "orderId": {
            "type": "string",
            "format": "uuid"
          },
          "status": {
            "enum": [
              "accepted",
              "declined",
              "cancelled"
            ]
          }
        },
        "required": [
          "orderId",
          "status"
        ]
      },
      "OrderId": {
        "type": "object",
        "properties": {
          "orderId": {
            "type": "string",
            "format": "uuid"
          },
          "attemptId": {
            "type": "string",
            "format": "uuid"
          }
        },
        "required": [
          "orderId"
        ]
      },
      "PaymentSignature": {
        "type": "object",
        "properties": {
          "orderId": {
            "type": "string",
            "format": "uuid"
          },
          "attemptId": {
            "type": "string",
            "format": "uuid"
          },
          "transaction": {
            "type": "string",
            "maxLength": 6000,
            "description": "Base64 wallet-signed prepared transaction."
          }
        },
        "required": [
          "orderId",
          "attemptId",
          "transaction"
        ]
      },
      "EscrowPrepare": {
        "type": "object",
        "properties": {
          "orderId": {
            "type": "string",
            "format": "uuid"
          },
          "operation": {
            "enum": [
              "deposit",
              "deliver",
              "approve",
              "dispute",
              "refund",
              "timeout-refund",
              "resolve-release",
              "resolve-refund"
            ]
          },
          "deliveryUrl": {
            "type": "string",
            "format": "uri",
            "maxLength": 1000
          },
          "deliveryNote": {
            "type": "string",
            "minLength": 3,
            "maxLength": 2000
          },
          "deliveryHash": {
            "type": "string",
            "pattern": "^[a-f0-9]{64}$"
          }
        },
        "required": [
          "orderId",
          "operation"
        ]
      },
      "StakingPool": {
        "type": "object",
        "properties": {
          "verified": {
            "const": true
          },
          "network": {
            "enum": [
              "devnet",
              "mainnet-beta"
            ]
          },
          "chain": {
            "enum": [
              "solana:devnet",
              "solana:mainnet"
            ]
          },
          "fixture": {
            "type": "boolean"
          },
          "programAddress": {
            "type": "string",
            "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$",
            "description": "Base58 Solana public address decoding to 32 bytes; never a private key."
          },
          "poolAddress": {
            "type": "string",
            "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$",
            "description": "Base58 Solana public address decoding to 32 bytes; never a private key."
          },
          "mintAddress": {
            "type": "string",
            "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$",
            "description": "Base58 Solana public address decoding to 32 bytes; never a private key."
          },
          "authorityAddress": {
            "type": "string",
            "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$",
            "description": "Base58 Solana public address decoding to 32 bytes; never a private key."
          },
          "slot": {
            "type": "integer"
          },
          "chainTime": {
            "type": "integer"
          },
          "upgradable": {
            "type": "boolean"
          },
          "depositsOpen": {
            "type": "boolean"
          },
          "withdrawalsOpen": {
            "type": "boolean"
          },
          "claimsOpen": {
            "type": "boolean"
          },
          "totalStakedRaw": {
            "type": "string",
            "minLength": 0,
            "maxLength": 1000
          },
          "fundedTotalLamports": {
            "type": "string",
            "minLength": 0,
            "maxLength": 1000
          },
          "paidTotalLamports": {
            "type": "string",
            "minLength": 0,
            "maxLength": 1000
          },
          "remainingFundedLamports": {
            "type": "string",
            "minLength": 0,
            "maxLength": 1000
          },
          "periodBudgetLamports": {
            "type": "string",
            "minLength": 0,
            "maxLength": 1000
          },
          "periodStart": {
            "type": "integer"
          },
          "periodEnd": {
            "type": "integer"
          },
          "reason": {
            "type": [
              "string",
              "null"
            ]
          },
          "position": {
            "type": "object",
            "properties": {
              "walletAddress": {
                "type": "string",
                "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$",
                "description": "Base58 Solana public address decoding to 32 bytes; never a private key."
              },
              "tokenBalanceRaw": {
                "type": "string",
                "minLength": 0,
                "maxLength": 1000
              },
              "stakedRaw": {
                "type": "string",
                "minLength": 0,
                "maxLength": 1000
              },
              "claimableLamports": {
                "type": "string",
                "minLength": 0,
                "maxLength": 1000
              }
            },
            "required": []
          }
        },
        "required": []
      },
      "StakingConfig": {
        "type": "object",
        "properties": {
          "ready": {
            "type": "boolean"
          },
          "network": {
            "enum": [
              "devnet",
              "mainnet-beta"
            ]
          },
          "pool": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/StakingPool"
              },
              {
                "type": "null"
              }
            ]
          },
          "reason": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "ready",
          "network",
          "pool",
          "reason"
        ]
      },
      "StakingPosition": {
        "type": "object",
        "properties": {
          "pool": {
            "$ref": "#/components/schemas/StakingPool"
          }
        },
        "required": [
          "pool"
        ]
      },
      "StakingPrepare": {
        "type": "object",
        "properties": {
          "operation": {
            "enum": [
              "stake",
              "withdraw",
              "claim"
            ]
          },
          "amount": {
            "type": "string",
            "pattern": "^\\d{1,14}(?:\\.\\d{1,6})?$",
            "description": "Positive decimal LLC amount with up to six places, raw amount <=18446744073709551615. Required for stake/withdraw; omit for claim."
          },
          "adultConfirmed": {
            "type": "boolean",
            "const": true
          },
          "riskAccepted": {
            "type": "boolean",
            "const": true
          }
        },
        "required": [
          "operation",
          "adultConfirmed",
          "riskAccepted"
        ],
        "allOf": [
          {
            "if": {
              "properties": {
                "operation": {
                  "enum": [
                    "stake",
                    "withdraw"
                  ]
                }
              },
              "required": [
                "operation"
              ]
            },
            "then": {
              "required": [
                "amount"
              ]
            }
          }
        ]
      },
      "StakingPrepared": {
        "type": "object",
        "properties": {
          "transaction": {
            "type": "string",
            "description": "Unsigned base64 version-0 transaction. Inspect network, mint, program, amounts, fees and rent; approve and submit separately through the authorized wallet."
          },
          "intent": {
            "type": "string",
            "maxLength": 1600,
            "description": "Opaque wallet-bound receipt token valid 24 hours. Preserve exactly; does not sign or submit a transaction."
          },
          "action": {
            "enum": [
              "stake",
              "withdraw",
              "claim"
            ]
          },
          "amountRaw": {
            "type": "string",
            "minLength": 0,
            "maxLength": 1000
          },
          "chain": {
            "enum": [
              "solana:devnet",
              "solana:mainnet"
            ]
          },
          "network": {
            "enum": [
              "devnet",
              "mainnet-beta"
            ]
          },
          "blockhash": {
            "type": "string",
            "minLength": 0,
            "maxLength": 1000
          },
          "lastValidBlockHeight": {
            "type": "integer"
          },
          "networkFeeLamports": {
            "type": "integer"
          },
          "accountRentLamports": {
            "type": "integer"
          },
          "pool": {
            "$ref": "#/components/schemas/StakingPool"
          }
        },
        "required": [
          "transaction",
          "intent",
          "action",
          "amountRaw",
          "chain",
          "networkFeeLamports",
          "accountRentLamports",
          "pool"
        ]
      },
      "StakingConfirm": {
        "type": "object",
        "properties": {
          "intent": {
            "type": "string",
            "maxLength": 1600
          },
          "signature": {
            "type": "string",
            "pattern": "^[1-9A-HJ-NP-Za-km-z]{64,90}$"
          }
        },
        "required": [
          "intent",
          "signature"
        ]
      },
      "StakingReceipt": {
        "type": "object",
        "properties": {
          "status": {
            "enum": [
              "pending",
              "failed",
              "confirmed"
            ]
          },
          "signature": {
            "type": "string",
            "minLength": 0,
            "maxLength": 1000
          },
          "message": {
            "type": "string",
            "minLength": 0,
            "maxLength": 1000
          },
          "action": {
            "enum": [
              "stake",
              "withdraw",
              "claim"
            ]
          },
          "amountRaw": {
            "type": "string",
            "minLength": 0,
            "maxLength": 1000
          },
          "network": {
            "enum": [
              "devnet",
              "mainnet-beta"
            ]
          },
          "slot": {
            "type": "integer"
          }
        },
        "required": [
          "status",
          "signature"
        ]
      },
      "Result": {
        "type": "object",
        "description": "Action-specific result documented in x-llc-actions. No cookies, wallet secrets or private delivery links are present in public responses."
      },
      "Sale": {
        "type": "object",
        "properties": {
          "saleId": {
            "type": "string",
            "format": "uuid"
          },
          "saleReference": {
            "type": "string",
            "minLength": 0,
            "maxLength": 1000
          },
          "status": {
            "enum": [
              "pending",
              "submitted",
              "completed",
              "expired"
            ]
          },
          "seller": {
            "type": "string",
            "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$",
            "description": "Base58 Solana public address decoding to 32 bytes; never a private key."
          },
          "buyer": {
            "type": "string",
            "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$",
            "description": "Base58 Solana public address decoding to 32 bytes; never a private key."
          },
          "assetAddress": {
            "type": "string",
            "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$",
            "description": "Base58 Solana public address decoding to 32 bytes; never a private key."
          },
          "characterName": {
            "type": "string",
            "minLength": 0,
            "maxLength": 1000
          },
          "currency": {
            "enum": [
              "SOL",
              "USDC",
              "USDT"
            ]
          },
          "mintAddress": {
            "type": [
              "string",
              "null"
            ]
          },
          "decimals": {
            "enum": [
              6,
              9
            ]
          },
          "amountRaw": {
            "type": "string",
            "minLength": 0,
            "maxLength": 1000
          },
          "feeRaw": {
            "type": "string",
            "minLength": 0,
            "maxLength": 1000
          },
          "sellerRaw": {
            "type": "string",
            "minLength": 0,
            "maxLength": 1000
          },
          "price": {
            "type": "string",
            "minLength": 0,
            "maxLength": 1000
          },
          "label": {
            "type": "string",
            "minLength": 0,
            "maxLength": 1000
          },
          "additionalRentLamports": {
            "type": "integer"
          },
          "priceSol": {
            "type": [
              "number",
              "null"
            ]
          },
          "feeBps": {
            "const": 250
          },
          "feeLamports": {
            "type": [
              "integer",
              "null"
            ]
          },
          "sellerLamports": {
            "type": [
              "integer",
              "null"
            ]
          },
          "chain": {
            "enum": [
              "solana:mainnet",
              "solana:devnet"
            ]
          },
          "transaction": {
            "type": [
              "string",
              "null"
            ]
          },
          "expiresAt": {
            "type": "string",
            "minLength": 0,
            "maxLength": 1000
          },
          "sellerApproved": {
            "type": "boolean"
          },
          "buyerApproved": {
            "type": "boolean"
          },
          "signature": {
            "type": [
              "string",
              "null"
            ]
          },
          "deliveryUrl": {
            "type": [
              "string",
              "null"
            ]
          },
          "message": {
            "type": "string",
            "minLength": 0,
            "maxLength": 1000
          }
        },
        "required": []
      }
    }
  },
  "x-llc-actions": {
    "platform": {
      "config": {
        "method": "GET",
        "requestSchema": null,
        "responseSchema": "#/components/schemas/PlatformConfig",
        "authentication": "public",
        "summary": "Check service, wallet authentication, network and price readiness.",
        "retry": "Safe read."
      },
      "session": {
        "method": "GET",
        "requestSchema": null,
        "responseSchema": "#/components/schemas/Session",
        "authentication": "optional-cookie",
        "summary": "Inspect current session.",
        "retry": "Safe read."
      },
      "drafts": {
        "method": "GET",
        "requestSchema": null,
        "responseSchema": "#/components/schemas/Drafts",
        "authentication": "cookie",
        "summary": "Recover this authenticated wallet’s saved generations.",
        "retry": "Safe read."
      },
      "challenge": {
        "method": "POST",
        "requestSchema": "#/components/schemas/WalletChallenge",
        "responseSchema": "#/components/schemas/Challenge",
        "authentication": "public-plus-origin",
        "summary": "Create a five-minute challenge and llc_auth cookie. Sign exact UTF-8 message, using Ed25519.",
        "retry": "No general idempotency key. Do not automatically retry writes."
      },
      "verify": {
        "method": "POST",
        "requestSchema": "#/components/schemas/WalletVerification",
        "responseSchema": "#/components/schemas/Session",
        "authentication": "challenge-cookie-plus-origin",
        "summary": "Consume challenge once; sets llc_session cookie and returns csrfToken and eight-hour expiry.",
        "retry": "No general idempotency key. Do not automatically retry writes."
      },
      "logout": {
        "method": "POST",
        "requestSchema": "#/components/schemas/Empty",
        "responseSchema": "#/components/schemas/Session",
        "authentication": "cookie-csrf-origin",
        "summary": "Revoke session and clear cookie.",
        "retry": "No general idempotency key. Do not automatically retry writes."
      },
      "generate": {
        "method": "POST",
        "requestSchema": "#/components/schemas/Character",
        "responseSchema": "#/components/schemas/Draft",
        "authentication": "cookie-csrf-origin",
        "summary": "Create one final branded artwork preview; optional AI mode requires artworkMode=ai and aiProcessingConsent=true. One preview per wallet per UTC day plus an operator global cap. No mint fee charged yet.",
        "retry": "No general idempotency key. Do not automatically retry writes."
      },
      "mint-prepare": {
        "method": "POST",
        "requestSchema": "#/components/schemas/DraftId",
        "responseSchema": "#/components/schemas/PreparedMint",
        "authentication": "cookie-csrf-origin",
        "summary": "Prepare atomic 0.2 SOL fee + NFT creation. May instead return already minted receipt. Review artwork, metadata, treasury and all costs before separate wallet approval.",
        "retry": "Recover same draft; inspect drafts and prior signature before preparing another attempt."
      },
      "mint-confirm": {
        "method": "POST",
        "requestSchema": "#/components/schemas/MintConfirmation",
        "responseSchema": "#/components/schemas/Draft",
        "authentication": "cookie-csrf-origin",
        "summary": "Confirm exact prepared transaction at finalized commitment, then record issuance.",
        "retry": "Retry same draftId and same signature when pending; never pay again to fix a confirmation timeout."
      }
    },
    "community": {
      "config": {
        "method": "GET",
        "requestSchema": null,
        "responseSchema": "#/components/schemas/CommunityConfig",
        "authentication": "public",
        "summary": "Check community, Gigs and sales readiness.",
        "retry": "Safe read."
      },
      "listings": {
        "method": "GET",
        "requestSchema": null,
        "responseSchema": "#/components/schemas/Result",
        "authentication": "public",
        "summary": "Browse listings: q and zero-based page. Returns {listings,hasMore,salesReady}; public records exclude deliveryUrl.",
        "retry": "Safe read."
      },
      "gigs": {
        "method": "GET",
        "requestSchema": null,
        "responseSchema": "#/components/schemas/Gigs",
        "authentication": "public",
        "summary": "Browse public work board: q, kind, category and zero-based page. Returns at most 24 results.",
        "retry": "Safe read."
      },
      "my-assets": {
        "method": "POST",
        "requestSchema": "#/components/schemas/Empty",
        "responseSchema": "#/components/schemas/Result",
        "authentication": "cookie-csrf-origin",
        "summary": "Read authenticated wallet’s assets. my-assets lists original minted records; live ownership is rechecked before restricted actions.",
        "retry": "Read action; POST still requires CSRF and Origin."
      },
      "my-listings": {
        "method": "POST",
        "requestSchema": "#/components/schemas/Empty",
        "responseSchema": "#/components/schemas/Result",
        "authentication": "cookie-csrf-origin",
        "summary": "Read authenticated wallet’s listings. my-assets lists original minted records; live ownership is rechecked before restricted actions.",
        "retry": "Read action; POST still requires CSRF and Origin."
      },
      "offers": {
        "method": "POST",
        "requestSchema": "#/components/schemas/Empty",
        "responseSchema": "#/components/schemas/Result",
        "authentication": "cookie-csrf-origin",
        "summary": "Read authenticated wallet’s ers. my-assets lists original minted records; live ownership is rechecked before restricted actions.",
        "retry": "Read action; POST still requires CSRF and Origin."
      },
      "my-gigs": {
        "method": "POST",
        "requestSchema": "#/components/schemas/Empty",
        "responseSchema": "#/components/schemas/Gigs",
        "authentication": "cookie-csrf-origin",
        "summary": "Read authenticated wallet’s gigs. my-assets lists original minted records; live ownership is rechecked before restricted actions.",
        "retry": "Read action; POST still requires CSRF and Origin."
      },
      "gig-orders": {
        "method": "POST",
        "requestSchema": "#/components/schemas/Empty",
        "responseSchema": "#/components/schemas/Result",
        "authentication": "cookie-csrf-origin",
        "summary": "Read authenticated wallet’s -orders. my-assets lists original minted records; live ownership is rechecked before restricted actions.",
        "retry": "Read action; POST still requires CSRF and Origin."
      },
      "create-gig": {
        "method": "POST",
        "requestSchema": "#/components/schemas/GigInput",
        "responseSchema": "#/components/schemas/GigResult",
        "authentication": "cookie-csrf-origin",
        "summary": "Publish a public service or hiring post. Live LLC NFT ownership checked. At most ten active posts per wallet. Contact is public.",
        "retry": "No general idempotency key. Do not automatically retry writes."
      },
      "update-gig": {
        "method": "POST",
        "requestSchema": "#/components/schemas/GigUpdate",
        "responseSchema": "#/components/schemas/GigResult",
        "authentication": "cookie-csrf-origin",
        "summary": "Replace your active post; all required fields and current LLC NFT ownership required.",
        "retry": "No general idempotency key. Do not automatically retry writes."
      },
      "delete-gig": {
        "method": "POST",
        "requestSchema": "#/components/schemas/GigDelete",
        "responseSchema": "#/components/schemas/Result",
        "authentication": "cookie-csrf-origin",
        "summary": "Remove your active post, contact and description; current LLC NFT membership required.",
        "retry": "No general idempotency key. Do not automatically retry writes."
      },
      "create-listing": {
        "method": "POST",
        "requestSchema": "#/components/schemas/ListingInput",
        "responseSchema": "#/components/schemas/Result",
        "authentication": "cookie-csrf-origin",
        "summary": "List your currently held LLC-issued NFT. Seller declares exact rights and privately provides buyer delivery URL.",
        "retry": "No general idempotency key. Do not automatically retry writes."
      },
      "cancel-listing": {
        "method": "POST",
        "requestSchema": "#/components/schemas/ListingId",
        "responseSchema": "#/components/schemas/Result",
        "authentication": "cookie-csrf-origin",
        "summary": "Cancel your active listing if no open/submitted checkout prevents it.",
        "retry": "No general idempotency key. Do not automatically retry writes."
      },
      "make-offer": {
        "method": "POST",
        "requestSchema": "#/components/schemas/Offer",
        "responseSchema": "#/components/schemas/Result",
        "authentication": "cookie-csrf-origin",
        "summary": "Create an offer from a buyer wallet. No funds move.",
        "retry": "No general idempotency key. Do not automatically retry writes."
      },
      "update-offer": {
        "method": "POST",
        "requestSchema": "#/components/schemas/OfferUpdate",
        "responseSchema": "#/components/schemas/Result",
        "authentication": "cookie-csrf-origin",
        "summary": "Seller accepts/declines; buyer withdraws. No funds move.",
        "retry": "No general idempotency key. Do not automatically retry writes."
      },
      "sale-prepare": {
        "method": "POST",
        "requestSchema": "#/components/schemas/OfferId",
        "responseSchema": "#/components/schemas/Sale",
        "authentication": "cookie-csrf-origin",
        "summary": "Prepare or recover an accepted-offer checkout. Both parties approve exact transaction; payment includes a 2.5% fee deducted from agreed price, plus buyer network fees.",
        "retry": "No general idempotency key. Do not automatically retry writes."
      },
      "sale-sign": {
        "method": "POST",
        "requestSchema": "#/components/schemas/SaleSignature",
        "responseSchema": "#/components/schemas/Sale",
        "authentication": "cookie-csrf-origin",
        "summary": "Validate this party’s signature on exact prepared message. Server submits when both parties approve; may move funds and NFT.",
        "retry": "No general idempotency key. Do not automatically retry writes."
      },
      "sale-status": {
        "method": "POST",
        "requestSchema": "#/components/schemas/SaleId",
        "responseSchema": "#/components/schemas/Sale",
        "authentication": "cookie-csrf-origin",
        "summary": "Recover checkout; can re-broadcast the exact saved signed transaction and finalize the sale. Buyer receives delivery link only after completion.",
        "retry": "Recover using existing saleId/orderId. May rebroadcast same previously authorized transaction; never create a new payment solely because a response was lost."
      },
      "holder-access": {
        "method": "POST",
        "requestSchema": "#/components/schemas/Membership",
        "responseSchema": "#/components/schemas/Result",
        "authentication": "cookie-csrf-origin",
        "summary": "Verify current ownership of confirmed LLC-issued NFT. Returns {verified:true,assetAddress,channels}.",
        "retry": "Read action; POST still requires CSRF and Origin."
      },
      "threads": {
        "method": "POST",
        "requestSchema": "#/components/schemas/ThreadQuery",
        "responseSchema": "#/components/schemas/Result",
        "authentication": "cookie-csrf-origin",
        "summary": "Read private channel threads; current LLC NFT ownership checked. Returns {threads,hasMore,assetAddress}.",
        "retry": "Read action; POST still requires CSRF and Origin."
      },
      "thread": {
        "method": "POST",
        "requestSchema": "#/components/schemas/ThreadId",
        "responseSchema": "#/components/schemas/Result",
        "authentication": "cookie-csrf-origin",
        "summary": "Read a private thread and up to 200 replies; current LLC NFT ownership checked.",
        "retry": "Read action; POST still requires CSRF and Origin."
      },
      "create-thread": {
        "method": "POST",
        "requestSchema": "#/components/schemas/ThreadCreate",
        "responseSchema": "#/components/schemas/Result",
        "authentication": "cookie-csrf-origin",
        "summary": "Publish a club thread after live membership check; returns {threadId}.",
        "retry": "No general idempotency key. Do not automatically retry writes."
      },
      "reply": {
        "method": "POST",
        "requestSchema": "#/components/schemas/Reply",
        "responseSchema": "#/components/schemas/Result",
        "authentication": "cookie-csrf-origin",
        "summary": "Reply after live membership check; returns {created:true}.",
        "retry": "No general idempotency key. Do not automatically retry writes."
      },
      "delete-post": {
        "method": "POST",
        "requestSchema": "#/components/schemas/DeletePost",
        "responseSchema": "#/components/schemas/Result",
        "authentication": "cookie-csrf-origin",
        "summary": "Soft-delete your own thread or reply after live membership check.",
        "retry": "No general idempotency key. Do not automatically retry writes."
      },
      "report": {
        "method": "POST",
        "requestSchema": "#/components/schemas/Report",
        "responseSchema": "#/components/schemas/Result",
        "authentication": "cookie-csrf-origin",
        "summary": "Report a thread or reply after live membership check.",
        "retry": "No general idempotency key. Do not automatically retry writes."
      },
      "gig-order-request": {
        "method": "POST",
        "requestSchema": "#/components/schemas/OrderRequest",
        "responseSchema": "#/components/schemas/Result",
        "authentication": "cookie-csrf-origin",
        "summary": "Request fixed-price SOL/USDC/USDT work. Immutable scope, mint, amount, deadlines and verification policy require seller acceptance. Public-post automatic release additionally requires exact provider account ID and autoReleaseAccepted=true. Returns {order}.",
        "retry": "No general idempotency key. Do not automatically retry writes."
      },
      "gig-order-update": {
        "method": "POST",
        "requestSchema": "#/components/schemas/OrderUpdate",
        "responseSchema": "#/components/schemas/Result",
        "authentication": "cookie-csrf-origin",
        "summary": "Seller accepts/declines a requested order; either participant may cancel an eligible unfunded order. Delivery, disputes, release and refunds require escrow actions.",
        "retry": "No general idempotency key. Do not automatically retry writes."
      },
      "gig-pay-prepare": {
        "method": "POST",
        "requestSchema": "#/components/schemas/OrderId",
        "responseSchema": "#/components/schemas/Result",
        "authentication": "cookie-csrf-origin",
        "summary": "Alias for escrow-prepare deposit. Returns order, attempt, transaction, chain and cost fields. Requires verified deployment and open deposits; no direct-payment fallback.",
        "retry": "No general idempotency key. Do not automatically retry writes."
      },
      "gig-pay-sign": {
        "method": "POST",
        "requestSchema": "#/components/schemas/PaymentSignature",
        "responseSchema": "#/components/schemas/Result",
        "authentication": "cookie-csrf-origin",
        "summary": "Alias for escrow-sign. Validate exact actor signature, persist deterministic receipt then submit the prepared escrow operation. May move funds; fee charged only on release.",
        "retry": "No general idempotency key. Do not automatically retry writes."
      },
      "gig-pay-status": {
        "method": "POST",
        "requestSchema": "#/components/schemas/OrderId",
        "responseSchema": "#/components/schemas/Result",
        "authentication": "cookie-csrf-origin",
        "summary": "Alias for escrow-status. Reconcile on-chain state and saved attempt; REST may rebroadcast that exact signed operation, including release/refund. Never creates a replacement charge.",
        "retry": "Recover using existing saleId/orderId. May rebroadcast same previously authorized transaction; never create a new payment solely because a response was lost."
      },
      "escrow-prepare": {
        "method": "POST",
        "requestSchema": "#/components/schemas/EscrowPrepare",
        "responseSchema": "#/components/schemas/Result",
        "authentication": "cookie-csrf-origin",
        "summary": "Prepare one authorized escrow operation. Deliver requires public HTTPS deliveryUrl and deliveryNote; approve/resolve-release requires the exact saved deliveryHash. This does not sign or submit.",
        "retry": "No general idempotency key. Do not automatically retry writes."
      },
      "escrow-sign": {
        "method": "POST",
        "requestSchema": "#/components/schemas/PaymentSignature",
        "responseSchema": "#/components/schemas/Result",
        "authentication": "cookie-csrf-origin",
        "summary": "Verify wallet signature, persist deterministic signature before broadcast, then submit the exact saved escrow operation. Explicit wallet approval required.",
        "retry": "No general idempotency key. Do not automatically retry writes."
      },
      "escrow-status": {
        "method": "POST",
        "requestSchema": "#/components/schemas/OrderId",
        "responseSchema": "#/components/schemas/Result",
        "authentication": "cookie-csrf-origin",
        "summary": "Reconcile the same escrow attempt. REST may rebroadcast the same signed operation; MCP disables broadcast. Unknown outcomes stay submitted.",
        "retry": "No general idempotency key. Do not automatically retry writes."
      },
      "escrow-verify": {
        "method": "POST",
        "requestSchema": "#/components/schemas/OrderId",
        "responseSchema": "#/components/schemas/Result",
        "authentication": "cookie-csrf-origin",
        "summary": "Check the agreed public post using official provider evidence. When policy permits and proof verifies, this REST action can automatically sign and release escrow through the configured server verifier. Explicit owner authorization required; deliberately absent from MCP.",
        "retry": "No general idempotency key. Do not automatically retry writes."
      }
    },
    "staking": {
      "config": {
        "method": "GET",
        "requestSchema": null,
        "responseSchema": "#/components/schemas/StakingConfig",
        "authentication": "public",
        "summary": "Read actual staking deployment and pool readiness. Default closed; ready verifies the configured program binary, pool, mint and funding. depositsOpen separately controls new stakes.",
        "retry": "Safe read."
      },
      "position": {
        "method": "POST",
        "requestSchema": "#/components/schemas/Empty",
        "responseSchema": "#/components/schemas/StakingPosition",
        "authentication": "cookie-csrf-origin",
        "summary": "Read the authenticated wallet’s on-chain position and claimable funded SOL. No NFT membership requirement.",
        "retry": "Read-only; POST requires session, Origin and CSRF."
      },
      "prepare": {
        "method": "POST",
        "requestSchema": "#/components/schemas/StakingPrepare",
        "responseSchema": "#/components/schemas/StakingPrepared",
        "authentication": "cookie-csrf-origin",
        "summary": "Prepare stake/withdraw/claim only when the configured deployment and pool verify. All operations require adultConfirmed and riskAccepted. No server signing or broadcasting. Separate wallet approval and submission required.",
        "retry": "Do not automatically retry. Before replacing an expired transaction, inspect any previously submitted signature; never submit a second transaction merely because a response was lost."
      },
      "confirm": {
        "method": "POST",
        "requestSchema": "#/components/schemas/StakingConfirm",
        "responseSchema": "#/components/schemas/StakingReceipt",
        "authentication": "cookie-csrf-origin",
        "summary": "Inspect finalized outcome of the exact prepared message. Opaque intent is wallet/network-bound and expires after 24 hours. A failed finalized transaction can still cost network fees.",
        "retry": "Poll same intent and same signature while pending; this endpoint never broadcasts. After intent expiry use explorer/support, not a new payment."
      }
    }
  }
}
