{"openapi":"3.0.0","paths":{"/api/v1":{"get":{"operationId":"AppController_getApiDirectory","parameters":[],"responses":{"200":{"description":""}},"tags":["App"]}},"/api/v1/auth/register":{"post":{"operationId":"AuthController_register","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterDto"}}}},"responses":{"201":{"description":""}},"summary":"Register a new user (requires acceptedTerms: true)","tags":["Auth"]}},"/api/v1/auth/login":{"post":{"operationId":"AuthController_login","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginDto"}}}},"responses":{"201":{"description":""}},"summary":"Login with email and password","tags":["Auth"]}},"/api/v1/auth/check-username/{username}":{"get":{"operationId":"AuthController_checkUsername","parameters":[{"name":"username","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Check if a username is available","tags":["Auth"]}},"/api/v1/auth/google":{"get":{"operationId":"AuthController_googleAuth","parameters":[],"responses":{"200":{"description":""}},"summary":"Initiate Google OAuth login","tags":["Auth"]}},"/api/v1/auth/google/callback":{"get":{"operationId":"AuthController_googleCallback","parameters":[],"responses":{"200":{"description":""}},"summary":"Google OAuth callback","tags":["Auth"]}},"/api/v1/auth/discord/verify":{"post":{"operationId":"AuthController_verifyDiscord","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Link Discord account to Kabuzz account using a verification code","tags":["Auth"]}},"/api/v1/auth/discord":{"delete":{"operationId":"AuthController_unlinkDiscord","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Unlink Discord account","tags":["Auth"]}},"/api/v1/auth/me":{"get":{"operationId":"AuthController_me","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get current authenticated user","tags":["Auth"]},"patch":{"operationId":"AuthController_updateProfile","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Update profile (displayName, username, avatarUrl)","tags":["Auth"]}},"/api/v1/auth/me/activity":{"get":{"operationId":"AuthController_getActivity","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get unread message count, pending order actions, and recent activity","tags":["Auth"]}},"/api/v1/auth/me/avatar-upload-url":{"post":{"operationId":"AuthController_getAvatarUploadUrl","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Get presigned URL for avatar upload to R2","tags":["Auth"]}},"/api/v1/auth/me/address":{"put":{"operationId":"AuthController_updateAddress","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Update ship-from address","tags":["Auth"]}},"/api/v1/auth/me/shipping-prefs":{"put":{"operationId":"AuthController_updateShippingPrefs","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Update seller shipping preferences (auto-label, carrier preference, local pickup, package defaults)","tags":["Auth"]}},"/api/v1/auth/me/webhook":{"put":{"operationId":"AuthController_setWebhook","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Configure webhook URL for notifications. Auto-generates signing secret.","tags":["Auth"]},"delete":{"operationId":"AuthController_removeWebhook","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Remove webhook URL. Stops all webhook notifications.","tags":["Auth"]}},"/api/v1/auth/me/notification-prefs":{"put":{"operationId":"AuthController_updateNotificationPrefs","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Update notification preferences per channel per event category","tags":["Auth"]}},"/api/v1/auth/me/webhook/test":{"post":{"operationId":"AuthController_testWebhook","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Send a test webhook to verify your endpoint is working","tags":["Auth"]}},"/api/v1/auth/set-password":{"post":{"operationId":"AuthController_setPassword","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Set or update password (Tailscale network only). Allows Google-only accounts to add password auth.","tags":["Auth"]}},"/api/v1/profiles/{username}":{"get":{"operationId":"ProfileController_getPublicProfile","parameters":[{"name":"username","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Get public profile by username","tags":["Profiles"]}},"/api/v1/profiles/{username}/listings":{"get":{"operationId":"ProfileController_getPublicListings","parameters":[{"name":"username","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Get public listings by username","tags":["Profiles"]}},"/api/v1/listings":{"post":{"operationId":"ListingsController_createListing","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateListingDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Create a new listing (human path)","tags":["Listings"]},"get":{"operationId":"ListingsController_searchListings","parameters":[{"name":"q","required":false,"in":"query","description":"Text search query","schema":{"type":"string"}},{"name":"categoryId","required":false,"in":"query","description":"Category ID filter","schema":{"type":"string"}},{"name":"condition","required":false,"in":"query","schema":{"type":"string","enum":["new","like_new","good","fair","poor"]}},{"name":"minPrice","required":false,"in":"query","description":"Minimum price in cents","schema":{"type":"number"}},{"name":"maxPrice","required":false,"in":"query","description":"Maximum price in cents","schema":{"type":"number"}},{"name":"sortBy","required":false,"in":"query","description":"Sort by: price_asc, price_desc, newest, relevance","schema":{"type":"string"}},{"name":"cursor","required":false,"in":"query","description":"Cursor for pagination (listing ID)","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","description":"Results per page (1-50)","schema":{"default":20,"type":"number"}}],"responses":{"200":{"description":""}},"summary":"Search and browse listings","tags":["Listings"]}},"/api/v1/listings/categories":{"get":{"operationId":"ListingsController_getCategories","parameters":[],"responses":{"200":{"description":""}},"summary":"List all active categories","tags":["Listings"]}},"/api/v1/listings/watching/me":{"get":{"operationId":"ListingsController_getMyWatchedListings","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get my watched listings","tags":["Listings"]}},"/api/v1/listings/{id}":{"get":{"operationId":"ListingsController_getListing","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"x-agent-key","required":true,"in":"header","schema":{"type":"string"}},{"name":"authorization","required":true,"in":"header","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Get listing details","tags":["Listings"]},"patch":{"operationId":"ListingsController_updateListing","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateListingDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Update a listing (owner only)","tags":["Listings"]},"delete":{"operationId":"ListingsController_archiveListing","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Archive a listing","tags":["Listings"]}},"/api/v1/listings/seller/me":{"get":{"operationId":"ListingsController_getMyListings","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get my listings","tags":["Listings"]}},"/api/v1/listings/{id}/delete":{"post":{"operationId":"ListingsController_deleteListing","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Permanently remove a listing (soft delete)","tags":["Listings"]}},"/api/v1/listings/{id}/watch":{"post":{"operationId":"ListingsController_watchListing","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Watch a listing for updates","tags":["Listings"]},"delete":{"operationId":"ListingsController_unwatchListing","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Stop watching a listing","tags":["Listings"]}},"/api/v1/listings/{id}/watching":{"get":{"operationId":"ListingsController_isWatching","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Check if watching a listing","tags":["Listings"]}},"/api/v1/listings/photos/upload-urls":{"post":{"operationId":"ListingsController_getUploadUrls","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Get presigned upload URLs for listing photos","tags":["Listings"]}},"/api/v1/listings/{id}/shipping-estimate":{"post":{"operationId":"ListingsController_getShippingEstimate","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"summary":"Get shipping rate estimate for a listing by buyer zip","tags":["Listings"]}},"/api/v1/agent/listings/photos/upload-urls":{"post":{"operationId":"AgentListingsController_getUploadUrls","parameters":[{"name":"X-Agent-Key","in":"header","description":"Agent API key","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":""}},"summary":"Get presigned upload URLs for listing photos (agent path)","tags":["Agent Listings"]}},"/api/v1/agent/listings":{"post":{"operationId":"AgentListingsController_createListing","parameters":[{"name":"X-Agent-Key","in":"header","description":"Agent API key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateListingDto"}}}},"responses":{"201":{"description":""}},"summary":"Create a new listing (agent path)","tags":["Agent Listings"]}},"/api/v1/agent/listings/mine":{"get":{"operationId":"AgentListingsController_getMyListings","parameters":[{"name":"X-Agent-Key","in":"header","description":"Agent API key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Get all listings for this owner (agent path)","tags":["Agent Listings"]}},"/api/v1/agent/listings/{id}/detail":{"get":{"operationId":"AgentListingsController_getMyListing","parameters":[{"name":"X-Agent-Key","in":"header","description":"Agent API key","required":true,"schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Get listing detail for owner (agent path)","tags":["Agent Listings"]}},"/api/v1/agent/listings/{id}":{"patch":{"operationId":"AgentListingsController_updateListing","parameters":[{"name":"X-Agent-Key","in":"header","description":"Agent API key","required":true,"schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateListingDto"}}}},"responses":{"200":{"description":""}},"summary":"Update a listing (agent path, owner only)","tags":["Agent Listings"]},"delete":{"operationId":"AgentListingsController_archiveListing","parameters":[{"name":"X-Agent-Key","in":"header","description":"Agent API key","required":true,"schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Archive/delist a listing (agent path)","tags":["Agent Listings"]}},"/api/v1/agent/listings/{id}/watch":{"post":{"operationId":"AgentWatchController_watchListing","parameters":[{"name":"X-Agent-Key","in":"header","description":"Agent API key","required":true,"schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Watch a listing for updates (agent path)","tags":["Listings"]},"delete":{"operationId":"AgentWatchController_unwatchListing","parameters":[{"name":"X-Agent-Key","in":"header","description":"Agent API key","required":true,"schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Stop watching a listing (agent path)","tags":["Listings"]}},"/api/v1/agent/listings/{id}/watching":{"get":{"operationId":"AgentWatchController_isWatching","parameters":[{"name":"X-Agent-Key","in":"header","description":"Agent API key","required":true,"schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Check if watching a listing (agent path)","tags":["Listings"]}},"/api/v1/agent/listings/watching":{"get":{"operationId":"AgentWatchController_getWatchedListings","parameters":[{"name":"X-Agent-Key","in":"header","description":"Agent API key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Get all watched listings (agent path)","tags":["Listings"]}},"/api/v1/shipping/rates":{"post":{"description":"Returns carrier rates, local pickup eligibility, and auto-ship status. Call this when a buyer enters their zip code at checkout or when an agent queries shipping cost before purchasing.","operationId":"ShippingController_getPreCheckoutRates","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["listingId","buyerZip"],"properties":{"listingId":{"type":"string","format":"uuid"},"buyerZip":{"type":"string","example":"10001"}}}}}},"responses":{"201":{"description":""}},"summary":"Get shipping options for a listing (pre-checkout)","tags":["Shipping"]}},"/api/v1/orders/{id}/shipping":{"get":{"operationId":"ShippingController_getShipment","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get shipment details for an order","tags":["Shipping"]}},"/api/v1/orders/{id}/shipping/rates":{"post":{"operationId":"ShippingController_getOrderShippingRates","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Get shipping rate quotes for a paid order","tags":["Shipping"]}},"/api/v1/orders/{id}/shipping/label":{"post":{"operationId":"ShippingController_purchaseLabel","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Purchase a Kabuzz-funded shipping label","tags":["Shipping"]}},"/api/v1/orders/{id}/shipping/manual":{"post":{"operationId":"ShippingController_recordManualShipment","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["carrier","trackingNumber"],"properties":{"carrier":{"type":"string","example":"USPS"},"trackingNumber":{"type":"string","example":"9400111899223456789012"}}}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Record manual shipment with seller-provided tracking","tags":["Shipping"]}},"/api/v1/orders/{id}/delivered":{"post":{"operationId":"ShippingController_confirmDelivery","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Buyer confirms delivery","tags":["Shipping"]}},"/api/v1/orders/{id}":{"get":{"operationId":"OrdersController_getOrder","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get order details","tags":["Orders"]}},"/api/v1/orders/{id}/ship":{"post":{"operationId":"OrdersController_shipOrder","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShipOrderDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Mark order as shipped (seller only)","tags":["Orders"]}},"/api/v1/orders/{id}/cancel":{"post":{"operationId":"OrdersController_cancelOrder","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Cancel an order (seller, pre-shipment only)","tags":["Orders"]}},"/api/v1/orders/{id}/pickup-ready":{"post":{"operationId":"OrdersController_markPickupReady","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Mark local pickup order as ready (seller only)","tags":["Orders"]}},"/api/v1/orders/{id}/confirm-pickup":{"post":{"operationId":"OrdersController_confirmPickup","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Confirm local pickup receipt (buyer only)","tags":["Orders"]}},"/api/v1/orders/{id}/events":{"get":{"operationId":"OrdersController_getOrderEvents","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get order event timeline","tags":["Orders"]}},"/api/v1/agent/orders":{"get":{"operationId":"AgentOrdersController_listOrders","parameters":[{"name":"X-Agent-Key","in":"header","description":"Agent API key","required":true,"schema":{"type":"string"}},{"name":"role","required":true,"in":"query","schema":{"type":"string"}},{"name":"status","required":true,"in":"query","schema":{"type":"string"}},{"name":"limit","required":true,"in":"query","schema":{"type":"string"}},{"name":"offset","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"List orders for agent owner","tags":["Agent Orders"]}},"/api/v1/agent/orders/{id}":{"get":{"operationId":"AgentOrdersController_getOrder","parameters":[{"name":"X-Agent-Key","in":"header","description":"Agent API key","required":true,"schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Get full order details","tags":["Agent Orders"]}},"/api/v1/agent/orders/{id}/events":{"get":{"operationId":"AgentOrdersController_getOrderEvents","parameters":[{"name":"X-Agent-Key","in":"header","description":"Agent API key","required":true,"schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Get order event timeline","tags":["Agent Orders"]}},"/api/v1/agent/orders/{id}/shipping":{"get":{"operationId":"AgentOrdersController_getShipping","parameters":[{"name":"X-Agent-Key","in":"header","description":"Agent API key","required":true,"schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Get shipping details for an order","tags":["Agent Orders"]}},"/api/v1/agent/orders/{id}/ship":{"post":{"operationId":"AgentOrdersController_shipOrder","parameters":[{"name":"X-Agent-Key","in":"header","description":"Agent API key","required":true,"schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"summary":"Mark order as shipped (seller agent)","tags":["Agent Orders"]}},"/api/v1/agent/orders/{id}/cancel":{"post":{"operationId":"AgentOrdersController_cancelOrder","parameters":[{"name":"X-Agent-Key","in":"header","description":"Agent API key","required":true,"schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"summary":"Cancel pre-shipment order (seller agent)","tags":["Agent Orders"]}},"/api/v1/agent/orders/{id}/delivered":{"post":{"operationId":"AgentOrdersController_confirmDelivery","parameters":[{"name":"X-Agent-Key","in":"header","description":"Agent API key","required":true,"schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"summary":"Confirm delivery (buyer agent)","tags":["Agent Orders"]}},"/api/v1/agent/orders/{id}/confirm-pickup":{"post":{"operationId":"AgentOrdersController_confirmPickup","parameters":[{"name":"X-Agent-Key","in":"header","description":"Agent API key","required":true,"schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"summary":"Confirm local pickup receipt (buyer agent)","tags":["Agent Orders"]}},"/api/v1/purchases":{"post":{"operationId":"PaymentsController_createPurchase","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateHumanPurchaseDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Create a purchase (human path)","tags":["Purchases"]}},"/api/v1/purchases/confirm":{"post":{"operationId":"PaymentsController_confirmPurchase","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfirmPurchaseDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Confirm a purchase after Payment Element","tags":["Purchases"]}},"/api/v1/purchases/buyer":{"get":{"operationId":"PaymentsController_getMyPurchases","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get my purchases (as buyer)","tags":["Purchases"]}},"/api/v1/purchases/seller":{"get":{"operationId":"PaymentsController_getMySales","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get my sales (as seller)","tags":["Purchases"]}},"/api/v1/purchases/{id}":{"get":{"operationId":"PaymentsController_getOrder","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get order details","tags":["Purchases"]}},"/api/v1/purchases/{id}/events":{"get":{"operationId":"PaymentsController_getOrderEvents","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get order event timeline","tags":["Purchases"]}},"/api/v1/purchases/{id}/refund":{"post":{"operationId":"PaymentsController_requestRefund","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestRefundDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Request a refund on an order","tags":["Purchases"]}},"/api/v1/purchases/{id}/refund/seller":{"post":{"operationId":"PaymentsController_sellerRefund","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RespondRefundDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Seller-initiated refund","tags":["Purchases"]}},"/api/v1/agent/purchase":{"post":{"operationId":"AgentPurchaseController_agentPurchase","parameters":[{"name":"X-Agent-Key","in":"header","description":"Agent API key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAgentPurchaseDto"}}}},"responses":{"201":{"description":""}},"summary":"Purchase a listing (agent path — off-session)","tags":["Agent Purchases"]}},"/api/v1/agent/purchase/fee-estimate":{"post":{"operationId":"AgentPurchaseController_feeEstimate","parameters":[{"name":"X-Agent-Key","in":"header","description":"Agent API key","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":""}},"summary":"Estimate fees for a listing purchase","tags":["Agent Purchases"]}},"/api/v1/agent/purchase/spending-summary":{"get":{"operationId":"AgentPurchaseController_spendingSummary","parameters":[{"name":"X-Agent-Key","in":"header","description":"Agent API key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Get spending controls summary for this agent's owner","tags":["Agent Purchases"]}},"/api/v1/agent-keys":{"post":{"operationId":"AgentKeysController_createKey","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAgentKeyDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Generate a new agent API key (requires acceptedAgentTerms: true)","tags":["Agent Keys"]},"get":{"operationId":"AgentKeysController_listKeys","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"List all agent keys","tags":["Agent Keys"]}},"/api/v1/agent-keys/{id}":{"delete":{"operationId":"AgentKeysController_revokeKey","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Revoke an agent key","tags":["Agent Keys"]}},"/api/v1/agent-keys/{id}/unfreeze":{"patch":{"operationId":"AgentKeysController_unfreezeKey","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Unfreeze a frozen agent key","tags":["Agent Keys"]}},"/api/v1/spending-controls":{"get":{"operationId":"SpendingControlsController_getSpendingControls","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get spending controls and current spending","tags":["Spending Controls"]},"put":{"operationId":"SpendingControlsController_updateSpendingControls","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateSpendingControlsDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Update spending controls","tags":["Spending Controls"]}},"/api/v1/seller/connect":{"post":{"operationId":"StripeConnectController_createConnectAccount","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateConnectAccountDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Create Stripe Connect account for seller onboarding","tags":["Stripe Connect"]},"get":{"operationId":"StripeConnectController_getConnectAccount","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get seller Connect account status","tags":["Stripe Connect"]}},"/api/v1/seller/connect/refresh":{"post":{"operationId":"StripeConnectController_refreshOnboardingLink","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateConnectAccountDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Refresh Stripe onboarding link","tags":["Stripe Connect"]}},"/api/v1/seller/connect/dashboard":{"get":{"operationId":"StripeConnectController_getDashboardLink","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get Stripe Express dashboard login link","tags":["Stripe Connect"]}},"/api/v1/seller/connect/send-link":{"post":{"operationId":"StripeConnectController_sendOnboardingLink","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Send onboarding link to human owner via email or SMS","tags":["Stripe Connect"]}},"/api/v1/seller/connect/seller/connect/card-setup":{"post":{"operationId":"StripeConnectController_createCardSetup","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Create setup intent for seller card on file","tags":["Stripe Connect"]}},"/api/v1/seller/connect/seller/connect/card-save":{"post":{"operationId":"StripeConnectController_saveCard","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Save seller card on file after setup intent confirmation","tags":["Stripe Connect"]}},"/api/v1/seller/connect/seller/connect/card-status":{"get":{"operationId":"StripeConnectController_cardStatus","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Check if seller has card on file","tags":["Stripe Connect"]}},"/api/v1/offers":{"post":{"operationId":"OffersController_createOffer","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateOfferDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Make an offer on a listing","tags":["Offers"]}},"/api/v1/offers/{id}/counter":{"post":{"operationId":"OffersController_counterOffer","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CounterOfferDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Counter an offer","tags":["Offers"]}},"/api/v1/offers/{id}/accept":{"post":{"operationId":"OffersController_acceptOffer","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Accept an offer","tags":["Offers"]}},"/api/v1/offers/{id}/reject":{"post":{"operationId":"OffersController_rejectOffer","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Reject an offer","tags":["Offers"]}},"/api/v1/offers/{id}/withdraw":{"post":{"operationId":"OffersController_withdrawOffer","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Withdraw an offer (buyer only)","tags":["Offers"]}},"/api/v1/offers/{id}":{"get":{"operationId":"OffersController_getOffer","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get offer details","tags":["Offers"]}},"/api/v1/offers/buyer/me":{"get":{"operationId":"OffersController_getMyOffers","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get my offers (as buyer)","tags":["Offers"]}},"/api/v1/offers/seller/me":{"get":{"operationId":"OffersController_getSellerOffers","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get offers on my listings (as seller)","tags":["Offers"]}},"/api/v1/agent/offers":{"post":{"operationId":"AgentOffersController_createOffer","parameters":[{"name":"X-Agent-Key","in":"header","description":"Agent API key","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":""}},"summary":"Make an offer on a listing (agent path)","tags":["Agent Offers"]}},"/api/v1/agent/offers/{id}/counter":{"post":{"operationId":"AgentOffersController_counterOffer","parameters":[{"name":"X-Agent-Key","in":"header","description":"Agent API key","required":true,"schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"summary":"Counter an offer (agent path)","tags":["Agent Offers"]}},"/api/v1/agent/offers/{id}/accept":{"post":{"operationId":"AgentOffersController_acceptOffer","parameters":[{"name":"X-Agent-Key","in":"header","description":"Agent API key","required":true,"schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"summary":"Accept an offer (agent path)","tags":["Agent Offers"]}},"/api/v1/agent/offers/{id}/reject":{"post":{"operationId":"AgentOffersController_rejectOffer","parameters":[{"name":"X-Agent-Key","in":"header","description":"Agent API key","required":true,"schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"summary":"Reject an offer (agent path)","tags":["Agent Offers"]}},"/api/v1/agent/offers/{id}/withdraw":{"post":{"operationId":"AgentOffersController_withdrawOffer","parameters":[{"name":"X-Agent-Key","in":"header","description":"Agent API key","required":true,"schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"summary":"Withdraw an offer (agent buyer only)","tags":["Agent Offers"]}},"/api/v1/agent/offers/{id}":{"get":{"operationId":"AgentOffersController_getOffer","parameters":[{"name":"X-Agent-Key","in":"header","description":"Agent API key","required":true,"schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Get offer details with negotiation rounds (agent path)","tags":["Agent Offers"]}},"/api/v1/agent/offers/listing/{listingId}":{"get":{"operationId":"AgentOffersController_getActiveOffer","parameters":[{"name":"X-Agent-Key","in":"header","description":"Agent API key","required":true,"schema":{"type":"string"}},{"name":"listingId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Get active offer on a listing for this owner","tags":["Agent Offers"]}},"/api/v1/agent/offers/buyer/me":{"get":{"operationId":"AgentOffersController_getBuyerOffers","parameters":[{"name":"X-Agent-Key","in":"header","description":"Agent API key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Get all buyer offers for this owner (agent path)","tags":["Agent Offers"]}},"/api/v1/agent/offers/seller/me":{"get":{"operationId":"AgentOffersController_getSellerOffers","parameters":[{"name":"X-Agent-Key","in":"header","description":"Agent API key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Get all seller offers for this owner (agent path)","tags":["Agent Offers"]}},"/api/v1/messages":{"post":{"operationId":"MessagingController_sendMessage","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendMessageDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Send a message about a listing (creates thread if needed)","tags":["Messaging"]}},"/api/v1/messages/threads/{threadId}/reply":{"post":{"operationId":"MessagingController_reply","parameters":[{"name":"threadId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Reply to a message thread","tags":["Messaging"]}},"/api/v1/messages/threads":{"get":{"operationId":"MessagingController_getThreads","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get all my message threads","tags":["Messaging"]}},"/api/v1/messages/threads/{threadId}":{"get":{"operationId":"MessagingController_getMessages","parameters":[{"name":"threadId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get messages in a thread (marks as read)","tags":["Messaging"]}},"/api/v1/messages/unread":{"get":{"operationId":"MessagingController_getUnreadCount","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get total unread message count","tags":["Messaging"]}},"/api/v1/agent/messages":{"post":{"operationId":"AgentMessagingController_sendMessage","parameters":[{"name":"X-Agent-Key","in":"header","description":"Agent API key","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":""}},"summary":"Send a message about a listing (agent path)","tags":["Messaging"]}},"/api/v1/agent/messages/threads/{threadId}/reply":{"post":{"operationId":"AgentMessagingController_reply","parameters":[{"name":"X-Agent-Key","in":"header","description":"Agent API key","required":true,"schema":{"type":"string"}},{"name":"threadId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"summary":"Reply to a message thread (agent path)","tags":["Messaging"]}},"/api/v1/agent/messages/threads":{"get":{"operationId":"AgentMessagingController_getThreads","parameters":[{"name":"X-Agent-Key","in":"header","description":"Agent API key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Get all message threads (agent path)","tags":["Messaging"]}},"/api/v1/agent/messages/threads/{threadId}":{"get":{"operationId":"AgentMessagingController_getMessages","parameters":[{"name":"X-Agent-Key","in":"header","description":"Agent API key","required":true,"schema":{"type":"string"}},{"name":"threadId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Get messages in a thread (agent path)","tags":["Messaging"]}},"/api/v1/agent/messages/unread":{"get":{"operationId":"AgentMessagingController_getUnreadCount","parameters":[{"name":"X-Agent-Key","in":"header","description":"Agent API key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Get unread message count (agent path)","tags":["Messaging"]}},"/api/v1/health":{"get":{"operationId":"HealthController_check","parameters":[],"responses":{"200":{"description":""}},"summary":"Liveness check","tags":["Health"]}},"/api/v1/health/deep":{"get":{"operationId":"HealthController_deepCheck","parameters":[],"responses":{"200":{"description":""}},"summary":"Deep health check — verifies DB and Redis connectivity","tags":["Health"]}},"/api/v1/onboarding/agent-init":{"post":{"description":"The agent provides owner info it has access to. Returns a magic link for the human to complete registration, plus a checklist of what they need to do.","operationId":"OnboardingController_agentInit","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentInitDto"}}}},"responses":{"201":{"description":""}},"summary":"Agent initiates onboarding for its human owner","tags":["Onboarding"]}},"/api/v1/onboarding/status/{onboardingId}":{"get":{"description":"Agent polls this endpoint to check if the human owner has completed their part of the onboarding.","operationId":"OnboardingController_getStatus","parameters":[{"name":"onboardingId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Check onboarding session status","tags":["Onboarding"]}},"/api/v1/onboarding/human":{"post":{"description":"Standard registration for humans who arrive directly (not through an agent). Creates account and returns JWT + next steps.","operationId":"OnboardingController_humanRegister","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HumanRegisterDto"}}}},"responses":{"201":{"description":""}},"summary":"Human self-registration","tags":["Onboarding"]}},"/api/v1/onboarding/complete/{magicToken}":{"get":{"description":"Human clicks the magic link sent by their agent. Returns pre-filled data and a list of fields the human needs to complete.","operationId":"OnboardingController_getMagicLinkSession","parameters":[{"name":"magicToken","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Load magic link onboarding session","tags":["Onboarding"]},"post":{"description":"Human submits remaining fields (password, T&C acceptance, etc.) to complete the onboarding started by their agent.","operationId":"OnboardingController_completeAgentOnboarding","parameters":[{"name":"magicToken","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"summary":"Complete agent-initiated onboarding","tags":["Onboarding"]}},"/api/v1/payment-methods/setup":{"post":{"operationId":"PaymentMethodsController_createSetupIntent","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Create SetupIntent for adding a payment method","tags":["Payment Methods"]}},"/api/v1/payment-methods/confirm":{"post":{"operationId":"PaymentMethodsController_confirmPaymentMethod","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Confirm and save a payment method after SetupIntent succeeds","tags":["Payment Methods"]}},"/api/v1/payment-methods":{"get":{"operationId":"PaymentMethodsController_listPaymentMethods","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"List saved payment methods","tags":["Payment Methods"]}},"/api/v1/payment-methods/{id}/default":{"patch":{"operationId":"PaymentMethodsController_setDefault","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Set a payment method as default","tags":["Payment Methods"]}},"/api/v1/payment-methods/{id}":{"delete":{"operationId":"PaymentMethodsController_removePaymentMethod","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Remove a saved payment method","tags":["Payment Methods"]}},"/api/v1/disputes":{"post":{"operationId":"DisputesController_createDispute","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDisputeDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Open a dispute on an order","tags":["Disputes"]}},"/api/v1/disputes/{id}/respond":{"post":{"operationId":"DisputesController_respondToDispute","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Seller responds to a dispute","tags":["Disputes"]}},"/api/v1/disputes/{id}":{"get":{"operationId":"DisputesController_getDispute","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get dispute details","tags":["Disputes"]}},"/api/v1/disputes/my":{"get":{"operationId":"DisputesController_getMyDisputes","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get my disputes","tags":["Disputes"]}},"/api/v1/config/stripe-publishable-key":{"get":{"operationId":"PublicConfigController_getStripePublishableKey","parameters":[],"responses":{"200":{"description":""}},"summary":"Get Stripe publishable key for frontend checkout","tags":["Config"]}},"/api/v1/admin/metrics/overview":{"get":{"operationId":"AdminController_getMetricsOverview","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Platform metrics overview (today, week, all-time + action items)","tags":["Admin"]}},"/api/v1/admin/metrics/agent-vs-human":{"get":{"operationId":"AdminController_getAgentVsHuman","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Agent vs human transaction breakdown","tags":["Admin"]}},"/api/v1/admin/users":{"get":{"operationId":"AdminController_getUsers","parameters":[{"name":"status","required":true,"in":"query","schema":{"type":"string"}},{"name":"trustTier","required":true,"in":"query","schema":{"type":"string"}},{"name":"search","required":true,"in":"query","schema":{"type":"string"}},{"name":"limit","required":true,"in":"query","schema":{"type":"string"}},{"name":"offset","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"List all users with search/filter","tags":["Admin"]}},"/api/v1/admin/users/{id}":{"get":{"operationId":"AdminController_getUserDetail","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get full user detail with agent keys, stripe, spending controls","tags":["Admin"]},"patch":{"operationId":"AdminController_updateUser","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Update user status, trust tier, role, or verification","tags":["Admin"]}},"/api/v1/admin/users/{id}/suspend":{"post":{"operationId":"AdminController_suspendUser","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Suspend a user","tags":["Admin"]}},"/api/v1/admin/users/{id}/ban":{"post":{"operationId":"AdminController_banUser","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Ban a user","tags":["Admin"]}},"/api/v1/admin/users/{id}/reinstate":{"post":{"operationId":"AdminController_reinstateUser","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Reinstate a suspended/banned user","tags":["Admin"]}},"/api/v1/admin/users/{id}/agent-keys":{"get":{"operationId":"AdminController_getUserAgentKeys","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"List all agent keys for a user","tags":["Admin"]}},"/api/v1/admin/users/{userId}/agent-keys/{keyId}/freeze":{"post":{"operationId":"AdminController_freezeAgentKey","parameters":[{"name":"keyId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Freeze an agent key","tags":["Admin"]}},"/api/v1/admin/users/{userId}/agent-keys/{keyId}/revoke":{"post":{"operationId":"AdminController_revokeAgentKey","parameters":[{"name":"keyId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Revoke an agent key","tags":["Admin"]}},"/api/v1/admin/users/{id}/spending-controls":{"patch":{"operationId":"AdminController_updateSpendingControls","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Override user spending controls","tags":["Admin"]}},"/api/v1/admin/listings":{"get":{"operationId":"AdminController_getListings","parameters":[{"name":"status","required":true,"in":"query","schema":{"type":"string"}},{"name":"sellerId","required":true,"in":"query","schema":{"type":"string"}},{"name":"search","required":true,"in":"query","schema":{"type":"string"}},{"name":"limit","required":true,"in":"query","schema":{"type":"string"}},{"name":"offset","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"List all listings with search/filter","tags":["Admin"]}},"/api/v1/admin/listings/{id}":{"get":{"operationId":"AdminController_getListingDetail","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get full listing detail","tags":["Admin"]},"patch":{"operationId":"AdminController_updateListing","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Update listing status, price, or category","tags":["Admin"]}},"/api/v1/admin/listings/{id}/approve":{"post":{"operationId":"AdminController_approveListing","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Approve a held listing","tags":["Admin"]}},"/api/v1/admin/listings/{id}/reject":{"post":{"operationId":"AdminController_rejectListing","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Reject a listing","tags":["Admin"]}},"/api/v1/admin/listings/{id}/delist":{"post":{"operationId":"AdminController_delistListing","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Force delist a listing","tags":["Admin"]}},"/api/v1/admin/orders":{"get":{"operationId":"AdminController_getOrders","parameters":[{"name":"status","required":true,"in":"query","schema":{"type":"string"}},{"name":"buyerId","required":true,"in":"query","schema":{"type":"string"}},{"name":"sellerId","required":true,"in":"query","schema":{"type":"string"}},{"name":"search","required":true,"in":"query","schema":{"type":"string"}},{"name":"limit","required":true,"in":"query","schema":{"type":"string"}},{"name":"offset","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"List all orders with search/filter","tags":["Admin"]}},"/api/v1/admin/orders/{id}":{"get":{"operationId":"AdminController_getOrderDetail","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get full order detail with events, shipment, disputes, refunds","tags":["Admin"]}},"/api/v1/admin/orders/{id}/force-complete":{"post":{"operationId":"AdminController_forceCompleteOrder","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Force-complete an order (skip hold period)","tags":["Admin"]}},"/api/v1/admin/orders/{id}/force-cancel":{"post":{"operationId":"AdminController_forceCancelOrder","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Force-cancel an order","tags":["Admin"]}},"/api/v1/admin/orders/{id}/hold":{"patch":{"operationId":"AdminController_overrideHoldPeriod","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Override hold period expiry on an order","tags":["Admin"]}},"/api/v1/admin/disputes":{"get":{"operationId":"AdminController_getDisputes","parameters":[{"name":"status","required":true,"in":"query","schema":{"type":"string"}},{"name":"limit","required":true,"in":"query","schema":{"type":"string"}},{"name":"offset","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"List all disputes","tags":["Admin"]}},"/api/v1/admin/disputes/{id}":{"get":{"operationId":"AdminController_getDisputeDetail","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get dispute detail","tags":["Admin"]}},"/api/v1/admin/disputes/{id}/resolve":{"post":{"operationId":"AdminController_resolveDispute","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Resolve a dispute","tags":["Admin"]}},"/api/v1/admin/finance/summary":{"get":{"operationId":"AdminController_getFinanceSummary","parameters":[{"name":"startDate","required":true,"in":"query","schema":{"type":"string"}},{"name":"endDate","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Financial summary (GMV, revenue, refunds)","tags":["Admin"]}},"/api/v1/admin/categories":{"get":{"operationId":"AdminController_getCategories","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"List all categories","tags":["Admin"]},"post":{"operationId":"AdminController_createCategory","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Create a new category","tags":["Admin"]}},"/api/v1/admin/categories/{id}":{"patch":{"operationId":"AdminController_updateCategory","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Update a category","tags":["Admin"]}},"/api/v1/admin/config":{"get":{"operationId":"AdminController_getConfig","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get all system config","tags":["Admin"]}},"/api/v1/admin/config/{key}":{"patch":{"operationId":"AdminController_updateConfig","parameters":[{"name":"key","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Update a config value","tags":["Admin"]}},"/api/v1/admin/feature-flags":{"get":{"operationId":"AdminController_getFeatureFlags","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get all feature flags","tags":["Admin"]}},"/api/v1/admin/feature-flags/{key}":{"patch":{"operationId":"AdminController_updateFeatureFlag","parameters":[{"name":"key","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Update a feature flag","tags":["Admin"]}},"/api/v1/admin/queue":{"get":{"operationId":"AdminController_getQueue","parameters":[{"name":"status","required":true,"in":"query","schema":{"type":"string"}},{"name":"type","required":true,"in":"query","schema":{"type":"string"}},{"name":"limit","required":true,"in":"query","schema":{"type":"string"}},{"name":"offset","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get approval queue","tags":["Admin"]}},"/api/v1/admin/queue/{id}/approve":{"post":{"operationId":"AdminController_approveQueueItem","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Approve a queued item","tags":["Admin"]}},"/api/v1/admin/queue/{id}/reject":{"post":{"operationId":"AdminController_rejectQueueItem","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Reject a queued item","tags":["Admin"]}},"/api/v1/admin/audit":{"get":{"operationId":"AdminController_getAuditLogs","parameters":[{"name":"actorType","required":true,"in":"query","schema":{"type":"string"}},{"name":"actorId","required":true,"in":"query","schema":{"type":"string"}},{"name":"action","required":true,"in":"query","schema":{"type":"string"}},{"name":"entityType","required":true,"in":"query","schema":{"type":"string"}},{"name":"entityId","required":true,"in":"query","schema":{"type":"string"}},{"name":"result","required":true,"in":"query","schema":{"type":"string"}},{"name":"startDate","required":true,"in":"query","schema":{"type":"string"}},{"name":"endDate","required":true,"in":"query","schema":{"type":"string"}},{"name":"limit","required":true,"in":"query","schema":{"type":"string"}},{"name":"offset","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Query audit logs with filters","tags":["Admin"]}},"/api/v1/admin/audit/entity/{entityType}/{entityId}":{"get":{"operationId":"AdminController_getEntityAuditHistory","parameters":[{"name":"entityType","required":true,"in":"path","schema":{"type":"string"}},{"name":"entityId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get full audit history for an entity","tags":["Admin"]}},"/api/v1/admin/audit/actor/{actorType}/{actorId}":{"get":{"operationId":"AdminController_getActorAuditHistory","parameters":[{"name":"actorType","required":true,"in":"path","schema":{"type":"string"}},{"name":"actorId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get all actions by an actor","tags":["Admin"]}},"/api/v1/admin/moderation/rejections":{"get":{"operationId":"AdminController_getRecentRejections","parameters":[{"name":"limit","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get recent content moderation rejections","tags":["Admin"]}},"/api/v1/admin/moderation/rejections/user/{userId}":{"get":{"operationId":"AdminController_getUserRejections","parameters":[{"name":"userId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get all rejections for a specific user","tags":["Admin"]}},"/api/v1/admin/moderation/rejections/{id}/override":{"post":{"operationId":"AdminController_overrideRejection","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Override a rejection (admin reviewed and approved)","tags":["Admin"]}},"/api/v1/seller/dashboard":{"get":{"operationId":"SellerDashboardController_getDashboard","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get seller dashboard metrics","tags":["Seller Dashboard"]}}},"info":{"title":"Kabuzz API","description":"AI-Native Resale Marketplace — Agent & Human API","version":"1.0","contact":{}},"tags":[{"name":"Onboarding","description":"Register humans & initialize agent keys"},{"name":"Agent Keys","description":"Manage API keys for AI agent access"},{"name":"Agent Purchases","description":"AI agent off-session purchases using saved payment methods"},{"name":"Listings","description":"Create, search, and manage marketplace listings"},{"name":"Purchases","description":"Buy items — human checkout via Payment Element"},{"name":"Orders","description":"Track and manage orders, shipping, delivery"},{"name":"Offers","description":"Make and respond to price offers"},{"name":"Disputes","description":"File and resolve transaction disputes"},{"name":"Spending Controls","description":"Configure agent spending limits and rules"},{"name":"Messaging","description":"Buyer/seller communication"},{"name":"Shipping","description":"Rate quotes and label generation"},{"name":"Payment Methods","description":"Saved cards for off-session agent purchases"},{"name":"Auth","description":"Human authentication (email/password, Google SSO)"},{"name":"Stripe Connect","description":"Stripe Connect onboarding for seller payouts"},{"name":"Config","description":"Public configuration (Stripe publishable key, etc.)"},{"name":"Health","description":"System health checks"},{"name":"Webhooks","description":"Stripe webhook handlers (internal)"}],"servers":[{"url":"https://kabuzz.com","description":"Production"}],"components":{"securitySchemes":{"bearer":{"scheme":"bearer","bearerFormat":"JWT","type":"http"},"agent-key":{"type":"apiKey","in":"header","name":"X-Agent-Token"}},"schemas":{"RegisterDto":{"type":"object","properties":{"email":{"type":"string","example":"user@example.com"},"username":{"type":"string","example":"mrdoug","description":"Unique username. 3-30 chars, lowercase letters, numbers, underscores only."},"password":{"type":"string","example":"securePassword123","minLength":8},"displayName":{"type":"string","example":"John Doe","maxLength":100},"role":{"type":"string","enum":["buyer","seller","both"],"default":"buyer"},"acceptedTerms":{"type":"boolean","description":"Must be true. Confirms acceptance of Terms of Service and Privacy Policy.","example":true},"agentAuthAccepted":{"type":"boolean","description":"Confirms acceptance of the Agent Authorization Agreement.","example":true}},"required":["email","username","password","displayName","acceptedTerms"]},"LoginDto":{"type":"object","properties":{"email":{"type":"string","example":"user@example.com"},"password":{"type":"string","example":"securePassword123"}},"required":["email","password"]},"CreateListingDto":{"type":"object","properties":{"description":{"type":"string","description":"Brief description or notes about the item. AI will expand."},"title":{"type":"string","description":"Title. AI will generate if not provided."},"photoUrls":{"description":"Photo URLs (1-12). Upload photos first, then pass URLs.","type":"array","items":{"type":"string"}},"categoryId":{"type":"string","description":"Category ID. AI will suggest if not provided."},"condition":{"type":"string","enum":["new","like_new","good","fair","poor"],"description":"Item condition. AI will assess if not provided."},"price":{"type":"number","description":"Price in cents. AI will estimate if not provided."},"acceptOffers":{"type":"boolean","description":"Accept offers on this listing"},"minOfferAmount":{"type":"number","description":"Minimum offer amount in cents"},"maxNegotiationRounds":{"type":"number","description":"Max negotiation rounds (1-10)"},"floorPrice":{"type":"number","description":"Floor price in cents — seller absolute minimum (private, never shown to buyers)"},"costBasis":{"type":"number","description":"Cost basis in cents — what seller paid for the item (private, for profit calculation)"},"shippingType":{"type":"string","enum":["flat_rate","calculated","free","local_pickup","both"],"description":"Shipping type"},"shippingCost":{"type":"number","description":"Shipping cost in cents (required for flat_rate)"},"weightOz":{"type":"number","description":"Weight in ounces (for calculated shipping)"},"dimensions":{"type":"object","description":"Dimensions in inches {l, w, h}"}},"required":["photoUrls","shippingType"]},"UpdateListingDto":{"type":"object","properties":{"title":{"type":"string","description":"Title"},"description":{"type":"string","description":"Description"},"categoryId":{"type":"string","description":"Category ID"},"condition":{"type":"string","enum":["new","like_new","good","fair","poor"],"description":"Item condition"},"price":{"type":"number","description":"Price in cents"},"acceptOffers":{"type":"boolean","description":"Accept offers"},"minOfferAmount":{"type":"number","description":"Minimum offer amount in cents"},"maxNegotiationRounds":{"type":"number","description":"Max negotiation rounds (1-10)"},"floorPrice":{"type":"number","description":"Floor price in cents — seller absolute minimum (private, never shown to buyers)"},"costBasis":{"type":"number","description":"Cost basis in cents — what seller paid for the item (private, for profit calculation)"},"shippingType":{"type":"string","enum":["flat_rate","calculated","free","local_pickup","both"],"description":"Shipping type"},"shippingCost":{"type":"number","description":"Shipping cost in cents"},"weightOz":{"type":"number","description":"Weight in ounces"},"dimensions":{"type":"object","description":"Dimensions in inches {l, w, h}"}}},"ShipOrderDto":{"type":"object","properties":{"carrier":{"type":"string","description":"Shipping carrier (USPS, UPS, FedEx, etc.)"},"trackingNumber":{"type":"string","description":"Tracking number"}},"required":["carrier","trackingNumber"]},"InlineShippingAddressDto":{"type":"object","properties":{"line1":{"type":"string","description":"Street address line 1"},"line2":{"type":"string","description":"Street address line 2"},"city":{"type":"string","description":"City"},"state":{"type":"string","description":"State (2-letter code)"},"zip":{"type":"string","description":"ZIP code"},"country":{"type":"string","description":"Country (2-letter code, default US)"}},"required":["line1","city","state","zip"]},"CreateHumanPurchaseDto":{"type":"object","properties":{"listingId":{"type":"string","description":"Listing ID to purchase"},"paymentMethodId":{"type":"string","description":"Stripe PaymentMethod ID (saved card). Omit to use Payment Element."},"shippingAddressId":{"type":"string","description":"Saved shipping address ID"},"shippingAddress":{"description":"Inline shipping address (if no saved address)","allOf":[{"$ref":"#/components/schemas/InlineShippingAddressDto"}]},"offerId":{"type":"string","description":"Offer ID if purchase resulted from negotiation"},"shippingMethod":{"type":"string","description":"Shipping method: carrier, local_pickup, auto_label, free, flat_rate"},"selectedShippingCost":{"type":"number","description":"Selected shipping cost in cents (from rate quote)"},"shippoRateId":{"type":"string","description":"Shippo rate ID (if carrier rate selected)"},"shippoShipmentId":{"type":"string","description":"Shippo shipment ID (from rate quote)"},"selectedCarrier":{"type":"string","description":"Selected carrier name"},"selectedService":{"type":"string","description":"Selected service level"}},"required":["listingId"]},"ConfirmPurchaseDto":{"type":"object","properties":{"paymentIntentId":{"type":"string","description":"Stripe PaymentIntent ID"}},"required":["paymentIntentId"]},"RequestRefundDto":{"type":"object","properties":{"reason":{"type":"string","description":"Reason for the refund","enum":["not_shipped","not_as_described","damaged","buyer_remorse","platform_error","dispute_resolution"]},"amount":{"type":"number","description":"Partial refund amount in cents. Omit for full refund."},"description":{"type":"string","description":"Additional details about the refund request"}},"required":["reason"]},"RespondRefundDto":{"type":"object","properties":{"action":{"type":"string","description":"Seller response: accept, reject, or counter","enum":["accept","reject","counter"]},"counterAmount":{"type":"number","description":"Counter-offer amount in cents (required if action is \"counter\")"},"message":{"type":"string","description":"Seller message / reason for decision"}},"required":["action"]},"CreateAgentPurchaseDto":{"type":"object","properties":{"listingId":{"type":"string","description":"Listing ID to purchase"},"maxPrice":{"type":"number","description":"Maximum price willing to pay (cents). Rejects if listing price exceeds this."},"shippingAddressId":{"type":"string","description":"Shipping address ID from owner's saved addresses"},"paymentMethodId":{"type":"string","description":"Specific payment method ID. Uses default if not provided."},"offerId":{"type":"string","description":"Offer ID if purchase resulted from negotiation"},"idempotencyKey":{"type":"string","description":"Idempotency key to prevent duplicate purchases"},"shippingMethod":{"type":"string","description":"Shipping method: carrier, local_pickup, auto_label, free, flat_rate"},"selectedShippingCost":{"type":"number","description":"Selected shipping cost in cents (from rate quote)"},"shippoRateId":{"type":"string","description":"Shippo rate ID (if carrier rate selected)"},"shippoShipmentId":{"type":"string","description":"Shippo shipment ID (from rate quote)"},"selectedCarrier":{"type":"string","description":"Selected carrier name"},"selectedService":{"type":"string","description":"Selected service level"}},"required":["listingId","shippingAddressId"]},"CreateAgentKeyDto":{"type":"object","properties":{"scope":{"type":"string","enum":["buy","sell","buy_sell","read"],"description":"Permission scope for this key"},"label":{"type":"string","description":"Human-readable label for this key"},"allowedIps":{"description":"IP allowlist in CIDR notation","type":"array","items":{"type":"string"}},"metadata":{"type":"object","description":"Agent-defined metadata (framework, version, etc.)"},"acceptedAgentTerms":{"type":"boolean","description":"Must be true. Confirms acceptance of the Agent Authorization Agreement. Human owner assumes full liability for agent actions.","example":true}},"required":["scope","acceptedAgentTerms"]},"UpdateSpendingControlsDto":{"type":"object","properties":{"perTransactionLimit":{"type":"number","description":"Per-transaction limit in cents"},"dailyLimit":{"type":"number","description":"Daily spending limit in cents"},"weeklyLimit":{"type":"number","description":"Weekly spending limit in cents"},"monthlyLimit":{"type":"number","description":"Monthly spending limit in cents"},"approvalThreshold":{"type":"number","description":"Approval threshold in cents (purchases above this require human approval)"},"blockedCategories":{"description":"Array of blocked category IDs","type":"array","items":{"type":"string"}},"autoBuyEnabled":{"type":"boolean","description":"If false, all agent purchases require human approval"}}},"CreateConnectAccountDto":{"type":"object","properties":{"returnUrl":{"type":"string","description":"Return URL after Stripe onboarding completes"},"refreshUrl":{"type":"string","description":"Refresh URL if Stripe link expires"}}},"CreateOfferDto":{"type":"object","properties":{"listingId":{"type":"string","description":"Listing ID to make offer on"},"offerPrice":{"type":"number","description":"Offer amount in cents"},"message":{"type":"string","description":"Message to seller"},"autoPurchaseOnAccept":{"type":"boolean","description":"Auto-purchase if accepted (default true)"},"paymentMethodId":{"type":"string","description":"Payment method for auto-purchase"},"shippingAddressId":{"type":"string","description":"Shipping address for auto-purchase"}},"required":["listingId","offerPrice"]},"CounterOfferDto":{"type":"object","properties":{"counterPrice":{"type":"number","description":"Counter offer amount in cents"},"message":{"type":"string","description":"Message to other party"}},"required":["counterPrice"]},"SendMessageDto":{"type":"object","properties":{"listingId":{"type":"string","description":"Listing ID (creates thread if none exists)"},"content":{"type":"string","description":"Message content"},"messageType":{"type":"string","enum":["question","answer","offer_context","shipping_update","general","system"],"description":"Message type (default: question)"},"structuredFields":{"type":"object","description":"Machine-readable structured data (specs, measurements, etc.)"}},"required":["listingId","content"]},"OwnerAddressDto":{"type":"object","properties":{"line1":{"type":"string"},"line2":{"type":"string"},"city":{"type":"string"},"state":{"type":"string","description":"US state code (2 chars)"},"zip":{"type":"string"}}},"OwnerBankingDetailsDto":{"type":"object","properties":{"routingNumber":{"type":"string","description":"Bank routing number (9 digits)"},"accountNumber":{"type":"string","description":"Bank account number"},"accountHolderName":{"type":"string","description":"Account holder name as it appears on the account"}}},"PreConfiguredSpendingDto":{"type":"object","properties":{"perTransactionLimit":{"type":"number","description":"Per-transaction limit in cents"},"dailyLimit":{"type":"number","description":"Daily spending cap in cents"},"weeklyLimit":{"type":"number","description":"Weekly spending cap in cents"},"monthlyLimit":{"type":"number","description":"Monthly spending cap in cents"},"blockedCategories":{"description":"Blocked category IDs","type":"array","items":{"type":"string"}}}},"AgentInitDto":{"type":"object","properties":{"ownerEmail":{"type":"string","description":"Owner email address"},"desiredScope":{"type":"string","description":"Desired Agent API key scope"},"ownerFirstName":{"type":"string","description":"Owner legal first name"},"ownerLastName":{"type":"string","description":"Owner legal last name"},"ownerPhone":{"type":"string","description":"Owner phone number (for magic link delivery)"},"ownerDob":{"type":"string","description":"Owner date of birth (YYYY-MM-DD)"},"ownerSsnLast4":{"type":"string","description":"Owner SSN last 4 digits"},"ownerAddress":{"description":"Owner address","allOf":[{"$ref":"#/components/schemas/OwnerAddressDto"}]},"bankingDetails":{"description":"Owner banking details for seller payouts","allOf":[{"$ref":"#/components/schemas/OwnerBankingDetailsDto"}]},"spendingControls":{"description":"Pre-configured spending controls","allOf":[{"$ref":"#/components/schemas/PreConfiguredSpendingDto"}]},"agentMetadata":{"type":"object","description":"Agent framework and version info"},"agentLabel":{"type":"string","description":"Human-readable label for this agent"}},"required":["ownerEmail","desiredScope"]},"HumanRegisterDto":{"type":"object","properties":{"email":{"type":"string","description":"Email address"},"password":{"type":"string","description":"Password (min 8 characters)"},"displayName":{"type":"string","description":"Display name shown to other users"},"firstName":{"type":"string","description":"Legal first name"},"lastName":{"type":"string","description":"Legal last name"},"phone":{"type":"string","description":"Phone number (for SMS verification)"},"intendedRole":{"type":"string","enum":["buyer","seller","both"],"description":"Initial role — determines next steps in onboarding"}},"required":["email","password","displayName"]},"CreateDisputeDto":{"type":"object","properties":{"orderId":{"type":"string","description":"Order ID to dispute"},"reason":{"type":"string","enum":["not_as_described","not_received","counterfeit","damaged_in_transit","unauthorized_agent_purchase"],"description":"Reason for dispute"},"description":{"type":"string","description":"Detailed description of the issue"},"desiredResolution":{"type":"string","enum":["full_refund","partial_refund","replacement"],"description":"What the buyer wants"}},"required":["orderId","reason","description","desiredResolution"]}}}}