{"openapi":"3.1.0","info":{"title":"Tuolen Developer API","version":"1.0.0","description":"Customer workspace and integration APIs. Production origin: https://api.tuolen.com; paths already include /api. Use a personal access token or dashboard JWT for BearerAuth operations; billing, service plans, notifications and guided WhatsApp onboarding require a fresh customer JWT (WorkspaceJwtAuth), not a PAT. Widget keys are publishable and require visitor tokens where indicated. Reporting keys are server-only secrets and must never be embedded. Tenant, role, agent membership and paid-feature checks still apply: documentation visibility does not grant access. Provider callbacks, platform administration, worker protocols and preview-only routes are intentionally excluded. Pagination varies by endpoint. No global idempotency header or automatic outbound webhook retries are provided. Some legacy response contracts are explicitly marked envelope-only; generated examples are not proof of complete field coverage. OpenAPI 3.1.0 is the format, info.version is the document version, and /api/public/v1 identifies the reporting API only."},"externalDocs":{"description":"Quickstart, pagination, error handling, webhook verification and documentation changelog","url":"https://api.tuolen.com/api/public/docs#guide/quickstart"},"servers":[{"url":"/","description":"Current API host"}],"tags":[{"name":"API Keys"},{"name":"Agent Members"},{"name":"Agent Tools"},{"name":"Agents"},{"name":"Analytics"},{"name":"Attachments"},{"name":"Audit Logs"},{"name":"Auth"},{"name":"Connections"},{"name":"Conversations"},{"name":"Credit Wallet"},{"name":"Currency Estimates"},{"name":"D365 Handoff"},{"name":"Documents"},{"name":"Email Channels"},{"name":"Email Templates"},{"name":"Exports"},{"name":"Inbound Phone"},{"name":"Integrations"},{"name":"Knowledge Bases"},{"name":"Knowledge Graph"},{"name":"Knowledge Storage"},{"name":"News"},{"name":"Notifications"},{"name":"Organizations"},{"name":"Personal Access Tokens"},{"name":"Prepaid Billing"},{"name":"Public API"},{"name":"Service Plans"},{"name":"Slack Channels"},{"name":"Social Channels"},{"name":"Support Agent Workspace"},{"name":"Telephony Channels"},{"name":"Users"},{"name":"Visitor Identity"},{"name":"Voice"},{"name":"Webhooks"},{"name":"WhatsApp Channels"},{"name":"WhatsApp Onboarding"},{"name":"Widget Configs"},{"name":"Widget News"},{"name":"Widget Runtime"},{"name":"Widget Visitor"}],"components":{"securitySchemes":{"WorkspaceJwtAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Fresh revision-bound customer JWT. Personal access tokens, opaque staff sessions and widget credentials are not accepted."},"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT or PAT","description":"Dashboard JWT from /api/auth/login, or a personal access token."},"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-Key","description":"Publishable widget:chat credential (audience=widget). Not valid for reporting."},"VisitorTokenAuth":{"type":"apiKey","in":"header","name":"X-Visitor-Token","description":"Short-lived visitor session token returned by widget bootstrap."},"ReportingKeyAuth":{"type":"apiKey","in":"header","name":"X-API-Key","description":"Server-only reporting:read key created with audience=reporting. Legacy/widget keys are rejected. Never embed this secret."}},"schemas":{"SuccessResponse":{"type":"object","description":"Incomplete legacy response contract. Only the envelope is documented; data may be an object, array, scalar or null. Do not infer a concrete data type from Swagger-generated examples.","required":["success"],"properties":{"success":{"type":"boolean","const":true},"data":{},"message":{"type":"string"}}},"ErrorResponse":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"error":{"type":"string"},"code":{"type":"string"},"details":{"type":"object","additionalProperties":true}}},"XBillingControlsRequest":{"oneOf":[{"type":"object","properties":{"status":{"type":"string","enum":["paused"]}},"required":["status"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","enum":["active"]},"acknowledged":{"type":"boolean","enum":[true]},"scope":{"type":"string","enum":["dm_only","dm_and_public"],"default":"dm_only"},"offerFingerprint":{"type":"string","pattern":"^[a-f0-9]{64}$"},"publicationVersion":{"type":"integer","exclusiveMinimum":0},"rateVersion":{"type":"string","enum":["x-retail-2026-10-02-cost-plus-2033"]},"dailyUsdMicros":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"exclusiveMinimum":0},"monthlyUsdMicros":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"exclusiveMinimum":0}},"required":["status","acknowledged","offerFingerprint","publicationVersion","rateVersion","dailyUsdMicros","monthlyUsdMicros"],"additionalProperties":false}]},"SupportAvailabilityResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"availability":{"type":"string","enum":["available","away","offline"]},"maxActive":{"type":"integer","minimum":1,"maximum":100},"missedOffers":{"type":"integer","minimum":0},"connected":{"type":"boolean"},"active":{"type":"integer","minimum":0},"reserved":{"type":"integer","minimum":0}},"required":["availability","maxActive","missedOffers","connected","active","reserved"],"additionalProperties":false}},"required":["success","data"],"additionalProperties":false},"SupportAvailabilityRequest":{"type":"object","properties":{"availability":{"type":"string","enum":["available","away","offline"]}},"required":["availability"],"additionalProperties":false},"SupportCapacityRequest":{"type":"object","properties":{"maxActive":{"type":"integer","minimum":1,"maximum":100}},"required":["maxActive"],"additionalProperties":false},"SupportTeamRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120},"description":{"type":["string","null"],"maxLength":500}},"required":["name"]},"SupportMembershipRequest":{"type":"object","properties":{"userIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":500,"default":[]}}},"SupportQueueRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120},"description":{"type":["string","null"],"maxLength":500},"teamId":{"type":["string","null"],"format":"uuid"},"priority":{"type":"integer","minimum":1,"maximum":10000,"default":100},"slaMinutes":{"type":"integer","minimum":1,"maximum":43200,"default":60},"maxActive":{"type":["integer","null"],"minimum":1,"maximum":10000},"maxWaiting":{"type":"integer","minimum":0,"maximum":10000},"waitingPerAgent":{"type":["integer","null"],"minimum":1,"maximum":100},"offerTimeoutSeconds":{"type":"integer","minimum":10,"maximum":120},"isActive":{"type":"boolean","default":true}},"required":["name"]},"SupportQueueRoutingRequest":{"type":"object","properties":{"userIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":500,"default":[]},"agentIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":500,"default":[]}}},"SupportOfferRequest":{"type":"object","properties":{"offerId":{"type":"string","format":"uuid"}},"required":["offerId"],"additionalProperties":false},"AcknowledgementResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"message":{"type":"string"}},"required":["success"]},"ServicePlanSelectionRequest":{"type":"object","properties":{"planCode":{"type":"string","enum":["starter","growth","business","enterprise"]},"pricing":{"type":"string","enum":["standard","introductory"]},"addOns":{"type":"object","properties":{"additionalAgents":{"type":"integer","minimum":0,"maximum":10000},"additionalTeamMembers":{"type":"integer","minimum":0,"maximum":10000},"supportAgentSeats":{"type":"integer","minimum":0,"maximum":10000},"storage1Gb":{"type":"integer","minimum":0,"maximum":10000},"storage10Gb":{"type":"integer","minimum":0,"maximum":10000},"emailMailboxes":{"type":"integer","minimum":0,"maximum":10000},"instagramAccounts":{"type":"integer","minimum":0,"maximum":10000},"facebookPages":{"type":"integer","minimum":0,"maximum":10000},"xAccounts":{"type":"integer","minimum":0,"maximum":10000},"whatsappNumbers":{"type":"integer","minimum":0,"maximum":10000},"slackConnections":{"type":"integer","minimum":0,"maximum":10000},"omnichannelPacks":{"type":"integer","minimum":0,"maximum":10000},"byonConnections":{"type":"integer","minimum":0,"maximum":10000},"telephoneNumbers":{"type":"integer","minimum":0,"maximum":10000},"concurrentCalls":{"type":"integer","minimum":0,"maximum":10000},"automationRunPacks":{"type":"integer","minimum":0,"maximum":10000}},"additionalProperties":false},"storagePack":{"type":["string","null"],"enum":["100MB","500MB","1GB","custom"],"default":null},"customStorageMb":{"type":"integer","minimum":100,"maximum":1000000},"agentWorkspace":{"type":"boolean"},"agentSeats":{"type":"integer","minimum":1,"maximum":10000},"automation":{"type":"boolean","default":false},"channels":{"type":"boolean","default":false},"periodMonths":{"anyOf":[{"type":"number","enum":[1]},{"type":"number","enum":[3]},{"type":"number","enum":[6]},{"type":"number","enum":[12]}]},"aiAllowanceUsdCents":{"type":"integer","minimum":0,"maximum":10000,"default":0},"draftConnectionIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":100}},"required":["periodMonths"],"additionalProperties":false},"ServicePlanEnterpriseAddOnsRequest":{"type":"object","properties":{"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"addOns":{"type":"object","properties":{"additionalAgents":{"type":"integer","minimum":0,"maximum":10000},"additionalTeamMembers":{"type":"integer","minimum":0,"maximum":10000},"supportAgentSeats":{"type":"integer","minimum":0,"maximum":10000},"storage1Gb":{"type":"integer","minimum":0,"maximum":10000},"storage10Gb":{"type":"integer","minimum":0,"maximum":10000},"emailMailboxes":{"type":"integer","minimum":0,"maximum":10000},"instagramAccounts":{"type":"integer","minimum":0,"maximum":10000},"facebookPages":{"type":"integer","minimum":0,"maximum":10000},"xAccounts":{"type":"integer","minimum":0,"maximum":10000},"whatsappNumbers":{"type":"integer","minimum":0,"maximum":10000},"slackConnections":{"type":"integer","minimum":0,"maximum":10000},"omnichannelPacks":{"type":"integer","minimum":0,"maximum":10000},"byonConnections":{"type":"integer","minimum":0,"maximum":10000},"telephoneNumbers":{"type":"integer","minimum":0,"maximum":10000},"concurrentCalls":{"type":"integer","minimum":0,"maximum":10000},"automationRunPacks":{"type":"integer","minimum":0,"maximum":10000}},"additionalProperties":false}},"required":["expectedRevision","addOns"],"additionalProperties":false},"ServicePlanAcceptRequest":{"type":"object","properties":{"quoteId":{"type":"string","format":"uuid"},"idempotencyKey":{"type":"string","format":"uuid"},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"consent":{"type":"object","properties":{"accepted":{"type":"boolean","enum":[true]},"termsVersion":{"type":"string","enum":["service-plans-v1"]},"autoRenew":{"type":"boolean"},"paymentPreference":{"type":"string","enum":["wallet","invoice"]}},"required":["accepted","termsVersion","autoRenew","paymentPreference"],"additionalProperties":false}},"required":["quoteId","idempotencyKey","expectedRevision","consent"],"additionalProperties":false},"ServicePlanDetailsRequest":{"type":"object","properties":{"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"legalName":{"type":"string","minLength":1,"maxLength":200},"billingEmail":{"type":"string","maxLength":254,"format":"email"},"address":{"type":"string","minLength":1,"maxLength":2000},"taxId":{"type":"string","maxLength":100},"paymentPreference":{"type":"string","enum":["wallet","invoice"]}},"required":["expectedRevision","legalName","billingEmail","address","paymentPreference"],"additionalProperties":false},"ServicePlanCancelRequest":{"type":"object","properties":{"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"idempotencyKey":{"type":"string","format":"uuid"}},"required":["expectedRevision","idempotencyKey"],"additionalProperties":false},"ServicePlanWalletRequest":{"type":"object","properties":{"idempotencyKey":{"type":"string","format":"uuid"}},"required":["idempotencyKey"],"additionalProperties":false},"EmptyBillingRequest":{"type":"object","properties":{},"additionalProperties":false},"BillingNotificationPreferencesRequest":{"type":"object","properties":{"inAppEnabled":{"type":"boolean"},"emailEnabled":{"type":"boolean"},"pushEnabled":{"type":"boolean"},"walletLowCredits":{"type":"integer","minimum":0,"maximum":100000000},"categoryPreferences":{"type":"object","properties":{"billing":{"type":"object","properties":{"inApp":{"type":"boolean"},"email":{"type":"boolean"},"push":{"type":"boolean"}},"additionalProperties":false},"support":{"type":"object","properties":{"inApp":{"type":"boolean"},"email":{"type":"boolean"},"push":{"type":"boolean"}},"additionalProperties":false},"reviews":{"type":"object","properties":{"inApp":{"type":"boolean"},"email":{"type":"boolean"},"push":{"type":"boolean"}},"additionalProperties":false},"channels":{"type":"object","properties":{"inApp":{"type":"boolean"},"email":{"type":"boolean"},"push":{"type":"boolean"}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"BillingNotificationReadRequest":{"type":"object","properties":{"read":{"type":"boolean"}},"required":["read"],"additionalProperties":false},"ConversationViewedRequest":{"type":"object","properties":{"messageIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":100}},"required":["messageIds"],"additionalProperties":false},"BillingNotificationSubscriptionRequest":{"type":"object","properties":{"consent":{"type":"boolean","enum":[true]},"subscription":{"type":"object","properties":{"endpoint":{"type":"string","minLength":1,"maxLength":4096},"expirationTime":{"type":["integer","null"],"minimum":0,"maximum":8640000000000000,"default":null},"keys":{"type":"object","properties":{"p256dh":{"type":"string","maxLength":100},"auth":{"type":"string","maxLength":30}},"required":["p256dh","auth"],"additionalProperties":false}},"required":["endpoint","keys"],"additionalProperties":false}},"required":["consent","subscription"],"additionalProperties":false},"BillingNotificationUnsubscribeRequest":{"type":"object","properties":{"endpoint":{"type":"string","minLength":1,"maxLength":4096}},"required":["endpoint"],"additionalProperties":false},"CreateSocialChannelRequest":{"type":"object","properties":{"agentId":{"type":"string","format":"uuid"},"name":{"type":"string","minLength":1,"maxLength":120},"platform":{"type":"string","enum":["facebook","instagram","x"]},"externalAccountId":{"type":"string","minLength":1,"maxLength":300},"accessToken":{"type":"string","minLength":1,"maxLength":16000},"responseMode":{"type":"string","enum":["draft_only","auto_send","manual_only"],"default":"draft_only"},"publicResponseMode":{"type":"string","enum":["draft_only","auto_send","manual_only"],"default":"draft_only"}},"required":["agentId","name","platform","externalAccountId","accessToken"],"additionalProperties":false},"StartSocialOAuthRequest":{"type":"object","properties":{"agentId":{"type":"string","format":"uuid"},"name":{"type":"string","minLength":1,"maxLength":120},"responseMode":{"type":"string","enum":["draft_only","auto_send","manual_only"],"default":"draft_only"},"publicResponseMode":{"type":"string","enum":["draft_only","auto_send","manual_only"]},"providerFlow":{"type":"string","enum":["instagram_login","facebook_login"]},"channelId":{"type":"string","format":"uuid"}},"required":["agentId","name"],"additionalProperties":false},"CompleteSocialOAuthRequest":{"type":"object","properties":{"externalAccountId":{"type":"string","pattern":"^[0-9]{1,64}$"}},"required":["externalAccountId"],"additionalProperties":false},"UpdateSocialChannelRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120},"responseMode":{"type":"string","enum":["draft_only","auto_send","manual_only"]},"publicResponseMode":{"type":"string","enum":["draft_only","auto_send","manual_only"]}},"additionalProperties":false},"SendSocialDraftRequest":{"type":"object","properties":{"content":{"type":"string","minLength":1,"maxLength":20000},"mediaIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":4}},"additionalProperties":false},"XActivityResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"configured":{"type":"boolean"},"enabled":{"type":"boolean"},"state":{"type":"string","enum":["disabled","pending","active","stopping","needs_review"]},"stopState":{"type":["string","null"],"enum":["stopping","confirmed"]},"subscriptions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"eventType":{"type":"string","enum":["dm.received","chat.received","post.mention.create","post.reply.create","post.delete"]},"expiresAt":{"type":"string","format":"date-time"},"webhookId":{"type":"string"}},"required":["id","eventType","expiresAt"],"additionalProperties":false}},"requiresReconnect":{"type":"boolean"},"chat":{"type":"object","properties":{"configured":{"type":"boolean"},"keysPresent":{"type":"boolean"},"enabled":{"type":"boolean"},"ready":{"type":"boolean"},"state":{"type":"string","enum":["platform_setup_required","local_key_unlock_required","needs_review","ready","approval_required"]},"needsReview":{"type":"integer","minimum":0}},"required":["configured","keysPresent","enabled","ready","state","needsReview"],"additionalProperties":false,"description":"Readiness only. Never contains a PIN, private key or backup credentials."},"lastError":{"type":["string","null"]},"updatedAt":{"type":["string","null"],"format":"date-time"}},"required":["configured","enabled","state","stopState","subscriptions","requiresReconnect","chat","lastError","updatedAt"],"additionalProperties":false}},"required":["success","data"],"additionalProperties":false},"SocialPublicKnowledgeRequest":{"type":"object","properties":{"knowledgeBaseIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":100}},"required":["knowledgeBaseIds"],"additionalProperties":false},"BillingTopupRequest":{"type":"object","properties":{"idempotencyKey":{"type":"string","format":"uuid"},"amountMinor":{"type":"integer","minimum":1,"maximum":2000000000},"currency":{"type":"string","pattern":"^[A-Z]{3}$"}},"required":["idempotencyKey","amountMinor","currency"],"additionalProperties":false},"LoginRequest":{"type":"object","required":["email","password"],"properties":{"email":{"type":"string","format":"email"},"password":{"type":"string","minLength":1,"maxLength":128,"format":"password"}}},"LoginResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"token":{"type":"string"},"user":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"organizationId":{"type":"string","format":"uuid"},"email":{"type":"string","format":"email"},"displayName":{"type":"string"},"role":{"type":"string","enum":["super_admin","org_admin","admin","developer","agent","viewer"]}},"required":["id","organizationId","email","displayName","role"]}},"required":["token","user"]}},"required":["success","data"]},"UpdateOrganizationRequest":{"type":"object","properties":{"name":{"type":"string","minLength":2,"maxLength":100},"slug":{"type":"string","minLength":2,"maxLength":50,"pattern":"^[a-z0-9-]+$"},"defaultProvider":{"type":["string","null"],"enum":["openai","anthropic","litellm","openrouter"]},"defaultModel":{"type":["string","null"],"maxLength":100,"pattern":"^[a-zA-Z0-9._\\-/:@]+$"},"embeddingProvider":{"type":["string","null"],"enum":["openai","anthropic","litellm","openrouter"]},"embeddingModel":{"type":["string","null"],"maxLength":100,"pattern":"^[a-zA-Z0-9._\\-/:]+$"}}},"BusinessProfileResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"name":{"type":"string"},"slug":{"type":"string"},"region":{"type":["string","null"]},"sector":{"type":["string","null"]},"companySize":{"type":["string","null"]},"primaryGoal":{"type":["string","null"]},"referralSource":{"type":["string","null"]},"updatedAt":{"type":"string","format":"date-time"},"primaryContactUserId":{"type":["string","null"],"format":"uuid"},"contactVersion":{"type":"integer","minimum":0},"contacts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"displayName":{"type":"string"},"email":{"type":"string"}},"required":["id","displayName","email"],"additionalProperties":false}},"canEdit":{"type":"boolean"}},"required":["name","slug","region","sector","companySize","primaryGoal","referralSource","updatedAt","primaryContactUserId","contactVersion","contacts","canEdit"],"additionalProperties":false}},"required":["success","data"],"additionalProperties":false},"BusinessProfileUpdateRequest":{"type":"object","properties":{"name":{"type":"string","minLength":2,"maxLength":100},"region":{"type":"string"},"sector":{"type":"string"},"companySize":{"type":"string"},"primaryGoal":{"type":"string"},"referralSource":{"type":["string","null"]},"primaryContactUserId":{"type":"string","format":"uuid"},"expectedUpdatedAt":{"type":"string","format":"date-time"},"expectedContactVersion":{"type":"integer","minimum":0,"maximum":2147483646}},"required":["name","region","sector","companySize","primaryGoal","primaryContactUserId","expectedUpdatedAt","expectedContactVersion"],"additionalProperties":false},"InviteUserRequest":{"type":"object","properties":{"email":{"type":"string","format":"email"},"displayName":{"type":"string","minLength":1,"maxLength":100},"role":{"type":"string","enum":["super_admin","org_admin","admin","developer","agent","viewer"],"default":"viewer"},"agentIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":100,"default":[]}},"required":["email"],"additionalProperties":false},"UpdateUserRequest":{"type":"object","properties":{"displayName":{"type":"string","minLength":1,"maxLength":100},"role":{"type":"string","enum":["super_admin","org_admin","admin","developer","agent","viewer"]},"isActive":{"type":"boolean"}},"additionalProperties":false},"UpdateUserAgentsRequest":{"type":"object","properties":{"agentIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":100}},"required":["agentIds"]},"AgentListResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"organizationId":{"type":"string","format":"uuid"},"name":{"type":"string"},"description":{"type":["string","null"]},"systemPrompt":{"type":"string"},"emailSignature":{"type":"string"},"emailSignatureHtml":{"type":"string"},"model":{"type":["string","null"]},"provider":{"type":["string","null"],"enum":["openai","anthropic","litellm","openrouter"]},"temperature":{"type":"number"},"maxTokens":{"type":"integer"},"welcomeMessage":{"type":"string"},"ratingEnabled":{"type":"boolean"},"inactivityTimeoutMinutes":{"type":["integer","null"]},"handoffMode":{"type":"string","enum":["human","ticket","email","slack","d365","disabled"]},"ticketProvider":{"type":["string","null"],"enum":["dynamics365","salesforce"]},"handoffFallbackMinutes":{"type":["integer","null"]},"requireIdentityVerification":{"type":"boolean"},"initialForm":{"type":["object","null"],"properties":{"enabled":{"type":"boolean"},"message":{"type":"string","minLength":1,"maxLength":500},"fields":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":50,"pattern":"^[a-zA-Z_][a-zA-Z0-9_]*$"},"label":{"type":"string","minLength":1,"maxLength":100},"type":{"type":"string","enum":["text","email","tel","number","select"],"default":"text"},"required":{"type":"boolean","default":true},"placeholder":{"type":"string","maxLength":200},"options":{"type":"array","items":{"type":"string","minLength":1,"maxLength":100},"maxItems":20}},"required":["name","label"]},"minItems":1,"maxItems":10}},"required":["enabled","message","fields"]},"isActive":{"type":"boolean"},"hasIdentitySecret":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","organizationId","name","description","systemPrompt","emailSignature","emailSignatureHtml","model","provider","temperature","maxTokens","welcomeMessage","ratingEnabled","inactivityTimeoutMinutes","handoffMode","ticketProvider","handoffFallbackMinutes","requireIdentityVerification","initialForm","isActive","hasIdentitySecret","createdAt","updatedAt"]}}},"required":["success","data"]},"CreateAgentRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"description":{"type":"string","maxLength":500},"systemPrompt":{"type":"string","maxLength":10000,"default":"You are a helpful assistant."},"emailSignature":{"type":"string","maxLength":2000,"default":""},"emailSignatureHtml":{"type":"string","maxLength":20000,"default":""},"model":{"type":["string","null"],"maxLength":200,"pattern":"^[a-zA-Z0-9._\\-/:@]+$"},"provider":{"type":["string","null"],"enum":["openai","anthropic","litellm","openrouter"]},"temperature":{"type":"number","minimum":0,"maximum":2,"default":0.7},"maxTokens":{"type":"number","minimum":1,"maximum":16000,"default":2048},"welcomeMessage":{"type":"string","maxLength":500,"default":"Hello! How can I help you today?"},"ratingEnabled":{"type":"boolean","default":false},"inactivityTimeoutMinutes":{"type":["integer","null"],"minimum":1,"maximum":1440,"default":null},"isActive":{"type":"boolean","default":true},"handoffMode":{"type":"string","enum":["human","ticket","email","slack","d365","disabled"],"default":"human"},"ticketProvider":{"type":["string","null"],"enum":["dynamics365","salesforce"],"default":null},"handoffFallbackMinutes":{"type":["integer","null"],"minimum":1,"maximum":1440,"default":null},"requireIdentityVerification":{"type":"boolean","default":false},"initialForm":{"type":["object","null"],"properties":{"enabled":{"type":"boolean"},"message":{"type":"string","minLength":1,"maxLength":500},"fields":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":50,"pattern":"^[a-zA-Z_][a-zA-Z0-9_]*$"},"label":{"type":"string","minLength":1,"maxLength":100},"type":{"type":"string","enum":["text","email","tel","number","select"],"default":"text"},"required":{"type":"boolean","default":true},"placeholder":{"type":"string","maxLength":200},"options":{"type":"array","items":{"type":"string","minLength":1,"maxLength":100},"maxItems":20}},"required":["name","label"]},"minItems":1,"maxItems":10}},"required":["enabled","message","fields"]}},"required":["name"]},"AgentResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"organizationId":{"type":"string","format":"uuid"},"name":{"type":"string"},"description":{"type":["string","null"]},"systemPrompt":{"type":"string"},"emailSignature":{"type":"string"},"emailSignatureHtml":{"type":"string"},"model":{"type":["string","null"]},"provider":{"type":["string","null"],"enum":["openai","anthropic","litellm","openrouter"]},"temperature":{"type":"number"},"maxTokens":{"type":"integer"},"welcomeMessage":{"type":"string"},"ratingEnabled":{"type":"boolean"},"inactivityTimeoutMinutes":{"type":["integer","null"]},"handoffMode":{"type":"string","enum":["human","ticket","email","slack","d365","disabled"]},"ticketProvider":{"type":["string","null"],"enum":["dynamics365","salesforce"]},"handoffFallbackMinutes":{"type":["integer","null"]},"requireIdentityVerification":{"type":"boolean"},"initialForm":{"type":["object","null"],"properties":{"enabled":{"type":"boolean"},"message":{"type":"string","minLength":1,"maxLength":500},"fields":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":50,"pattern":"^[a-zA-Z_][a-zA-Z0-9_]*$"},"label":{"type":"string","minLength":1,"maxLength":100},"type":{"type":"string","enum":["text","email","tel","number","select"],"default":"text"},"required":{"type":"boolean","default":true},"placeholder":{"type":"string","maxLength":200},"options":{"type":"array","items":{"type":"string","minLength":1,"maxLength":100},"maxItems":20}},"required":["name","label"]},"minItems":1,"maxItems":10}},"required":["enabled","message","fields"]},"isActive":{"type":"boolean"},"hasIdentitySecret":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","organizationId","name","description","systemPrompt","emailSignature","emailSignatureHtml","model","provider","temperature","maxTokens","welcomeMessage","ratingEnabled","inactivityTimeoutMinutes","handoffMode","ticketProvider","handoffFallbackMinutes","requireIdentityVerification","initialForm","isActive","hasIdentitySecret","createdAt","updatedAt"]}},"required":["success","data"]},"AgentTransferBundle":{"type":"object","properties":{"format":{"type":"string","enum":["veraconnect.agent"]},"version":{"type":"number","enum":[1]},"exportedAt":{"type":"string","format":"date-time"},"agent":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"description":{"type":["string","null"],"maxLength":500},"systemPrompt":{"type":"string","maxLength":10000,"default":"You are a helpful assistant."},"emailSignature":{"type":"string","maxLength":2000,"default":""},"emailSignatureHtml":{"type":"string","maxLength":20000,"default":""},"model":{"type":["string","null"],"maxLength":200,"pattern":"^[a-zA-Z0-9._\\-/:@]+$"},"provider":{"type":["string","null"],"enum":["openai","anthropic","litellm","openrouter"]},"temperature":{"type":"number","minimum":0,"maximum":2,"default":0.7},"maxTokens":{"type":"number","minimum":1,"maximum":16000,"default":2048},"welcomeMessage":{"type":"string","maxLength":500,"default":"Hello! How can I help you today?"},"ratingEnabled":{"type":"boolean","default":false},"inactivityTimeoutMinutes":{"type":["integer","null"],"minimum":1,"maximum":1440,"default":null},"isActive":{"type":"boolean","default":true},"handoffMode":{"type":"string","enum":["human","ticket","email","slack","d365","disabled"],"default":"human"},"ticketProvider":{"type":["string","null"],"enum":["dynamics365","salesforce"],"default":null},"handoffFallbackMinutes":{"type":["integer","null"],"minimum":1,"maximum":1440,"default":null},"requireIdentityVerification":{"type":"boolean","default":false},"initialForm":{"type":["object","null"],"properties":{"enabled":{"type":"boolean"},"message":{"type":"string","minLength":1,"maxLength":500},"fields":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":50,"pattern":"^[a-zA-Z_][a-zA-Z0-9_]*$"},"label":{"type":"string","minLength":1,"maxLength":100},"type":{"type":"string","enum":["text","email","tel","number","select"],"default":"text"},"required":{"type":"boolean","default":true},"placeholder":{"type":"string","maxLength":200},"options":{"type":"array","items":{"type":"string","minLength":1,"maxLength":100},"maxItems":20}},"required":["name","label"]},"minItems":1,"maxItems":10}},"required":["enabled","message","fields"]}},"required":["name"],"additionalProperties":false},"widget":{"type":"object","properties":{"primaryColor":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$","default":"#134a76"},"backgroundColor":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$","default":"#ffffff"},"textColor":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$","default":"#1f2937"},"headerText":{"type":"string","maxLength":100,"default":"Chat with us"},"placeholderText":{"type":"string","maxLength":100,"default":"Type your message..."},"position":{"type":"string","enum":["bottom-right","bottom-left","top-right","top-left","middle-right","middle-left"],"default":"bottom-right"},"iconUrl":{"type":["string","null"]},"fontSize":{"type":"string","enum":["sm","md","lg"],"default":"md"},"borderRadius":{"type":"string","enum":["sharp","rounded","pill"],"default":"rounded"},"launcherType":{"type":"string","enum":["icon","text","icon-text","hidden"],"default":"icon"},"launcherText":{"type":"string","minLength":1,"maxLength":60,"default":"Chat with Support"},"windowPosition":{"type":"string","enum":["anchored","center"],"default":"anchored"},"launcherIcon":{"type":["string","null"]},"allowedOrigins":{"type":"array","items":{"type":"string","pattern":"^https?:\\/\\/[a-zA-Z0-9\\-.]+(:\\d+)?$"},"default":[]},"showBranding":{"type":"boolean","default":true},"voiceEnabled":{"type":"boolean","default":false},"voiceInputEnabled":{"type":"boolean","default":true},"voiceOutputEnabled":{"type":"boolean","default":false},"voiceAutoPlay":{"type":"boolean","default":false},"voiceProvider":{"type":"string","enum":["browser","openai"],"default":"browser"},"voiceGender":{"type":"string","enum":["female","male","neutral"],"default":"female"},"voiceTone":{"type":"string","enum":["formal","friendly","calm"],"default":"friendly"},"realtimeVoiceEnabled":{"type":"boolean","default":false},"realtimeVoiceProvider":{"type":"string","enum":["openai"],"default":"openai"},"realtimeVoiceModel":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-zA-Z0-9._\\-/:@]+$","default":"gpt-realtime-2.1-mini"},"realtimeVoiceVoice":{"type":"string","enum":["marin","cedar","alloy","ash","ballad","coral","echo","fable","onyx","nova","sage","shimmer","verse"],"default":"alloy"},"realtimeVoiceMaxDurationSeconds":{"type":"integer","minimum":60,"maximum":1800,"default":600},"translations":{"type":"object","additionalProperties":{"type":"object","properties":{"headerText":{"type":"string","maxLength":100},"placeholderText":{"type":"string","maxLength":100},"welcomeMessage":{"type":"string","maxLength":500},"homeGreeting":{"type":"string","maxLength":200},"homeSubtext":{"type":"string","maxLength":300},"navHome":{"type":"string","maxLength":40},"navMessages":{"type":"string","maxLength":40},"startConversation":{"type":"string","maxLength":80},"identityHeading":{"type":"string","maxLength":100},"voiceDisclosure":{"type":"string","maxLength":100}}},"default":{}},"chatTriggers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1},"name":{"type":"string","minLength":1,"maxLength":100},"enabled":{"type":"boolean"},"conditionType":{"type":"string","enum":["time_on_page","page_url","visit_count","scroll_depth","exit_intent"]},"conditionValue":{"type":"string","maxLength":500},"actionType":{"type":"string","enum":["open_with_message","show_notification"]},"message":{"type":"string","minLength":1,"maxLength":500},"maxDisplays":{"type":"integer","minimum":0,"maximum":100,"default":3},"cooldownMinutes":{"type":"integer","minimum":0,"maximum":10080,"default":60}},"required":["id","name","enabled","conditionType","conditionValue","actionType","message"]},"default":[]},"messengerEnabled":{"type":"boolean","default":false},"newsEnabled":{"type":"boolean","default":false},"newsShowOnHome":{"type":"boolean","default":true},"homeEnabled":{"type":"boolean","default":true},"defaultView":{"type":"string","enum":["home","chat"],"default":"home"},"homeGreeting":{"type":"string","maxLength":200,"default":"Hi there. How can we help?"},"homeSubtext":{"type":["string","null"],"maxLength":300},"suggestedPrompts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":50},"label":{"type":"string","minLength":1,"maxLength":80},"prompt":{"type":"string","minLength":1,"maxLength":500}},"required":["id","label","prompt"]},"maxItems":3,"default":[]},"showRecentConversation":{"type":"boolean","default":true},"showTeamAvailability":{"type":"boolean","default":true},"teamAvailabilityText":{"type":["string","null"],"maxLength":200},"showTeamAvatars":{"type":"boolean","default":false},"anonymousRecoveryEnabled":{"type":"boolean","default":false},"privacyPolicyUrl":{"type":["string","null"],"maxLength":2048,"format":"uri"},"helpBrowseEnabled":{"type":"boolean"}},"additionalProperties":false},"tools":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-z_][a-z0-9_]*$"},"description":{"type":"string","minLength":1,"maxLength":1000},"method":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE"]},"urlTemplate":{"type":"string","maxLength":2000,"default":""},"headers":{"type":"object","additionalProperties":{"type":"string"},"default":{}},"authType":{"type":"string","enum":["none","api_key","bearer","basic","oauth2_integration","mcp_server"],"default":"none"},"authConfig":{"type":"object","additionalProperties":{},"default":{}},"bodyTemplate":{"type":["object","null"],"additionalProperties":{},"default":null},"parameters":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z_][a-zA-Z0-9_]*$"},"type":{"type":"string","enum":["string","number","boolean","integer"]},"description":{"type":"string","minLength":1,"maxLength":500},"required":{"type":"boolean"},"enum":{"type":"array","items":{"type":"string","minLength":1,"maxLength":100},"maxItems":20}},"required":["name","type","description","required"]},"default":[]},"responseMapping":{"type":["string","null"],"maxLength":500,"default":null},"timeout":{"type":"integer","minimum":1000,"maximum":30000,"default":10000},"isActive":{"type":"boolean","default":true},"riskLevel":{"type":"string","enum":["read","write","destructive"],"default":"read"},"requiresConfirmation":{"type":"boolean","default":false},"allowedChannels":{"type":"array","items":{"type":"string","enum":["web_widget","whatsapp","email","instagram","facebook","x","linkedin"]},"minItems":1,"default":["web_widget","whatsapp","email"]},"rateLimitPerMinute":{"type":"integer","minimum":1,"maximum":300,"default":30}},"required":["name","description","method"]},"maxItems":100,"default":[]},"requiresSetup":{"type":"object","properties":{"identityVerification":{"type":"boolean","default":false},"toolCredentials":{"type":"array","items":{"type":"string"},"maxItems":100,"default":[]},"localWidgetAssets":{"type":"array","items":{"type":"string","enum":["iconUrl","launcherIcon"]},"maxItems":2,"default":[]}},"default":{"identityVerification":false,"toolCredentials":[],"localWidgetAssets":[]}}},"required":["format","version","exportedAt","agent"],"additionalProperties":false},"AgentImportResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"agent":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"organizationId":{"type":"string","format":"uuid"},"name":{"type":"string"},"description":{"type":["string","null"]},"systemPrompt":{"type":"string"},"emailSignature":{"type":"string"},"emailSignatureHtml":{"type":"string"},"model":{"type":["string","null"]},"provider":{"type":["string","null"],"enum":["openai","anthropic","litellm","openrouter"]},"temperature":{"type":"number"},"maxTokens":{"type":"integer"},"welcomeMessage":{"type":"string"},"ratingEnabled":{"type":"boolean"},"inactivityTimeoutMinutes":{"type":["integer","null"]},"handoffMode":{"type":"string","enum":["human","ticket","email","slack","d365","disabled"]},"ticketProvider":{"type":["string","null"],"enum":["dynamics365","salesforce"]},"handoffFallbackMinutes":{"type":["integer","null"]},"requireIdentityVerification":{"type":"boolean"},"initialForm":{"type":["object","null"],"properties":{"enabled":{"type":"boolean"},"message":{"type":"string","minLength":1,"maxLength":500},"fields":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":50,"pattern":"^[a-zA-Z_][a-zA-Z0-9_]*$"},"label":{"type":"string","minLength":1,"maxLength":100},"type":{"type":"string","enum":["text","email","tel","number","select"],"default":"text"},"required":{"type":"boolean","default":true},"placeholder":{"type":"string","maxLength":200},"options":{"type":"array","items":{"type":"string","minLength":1,"maxLength":100},"maxItems":20}},"required":["name","label"]},"minItems":1,"maxItems":10}},"required":["enabled","message","fields"]},"isActive":{"type":"boolean"},"hasIdentitySecret":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","organizationId","name","description","systemPrompt","emailSignature","emailSignatureHtml","model","provider","temperature","maxTokens","welcomeMessage","ratingEnabled","inactivityTimeoutMinutes","handoffMode","ticketProvider","handoffFallbackMinutes","requireIdentityVerification","initialForm","isActive","hasIdentitySecret","createdAt","updatedAt"]},"requiresSetup":{"type":"object","properties":{"identityVerification":{"type":"boolean","default":false},"toolCredentials":{"type":"array","items":{"type":"string"},"maxItems":100,"default":[]},"localWidgetAssets":{"type":"array","items":{"type":"string","enum":["iconUrl","launcherIcon"]},"maxItems":2,"default":[]}},"default":{"identityVerification":false,"toolCredentials":[],"localWidgetAssets":[]}}},"required":["agent"]}},"required":["success","data"]},"UpdateAgentRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"description":{"type":"string","maxLength":500},"systemPrompt":{"type":"string","maxLength":10000,"default":"You are a helpful assistant."},"emailSignature":{"type":"string","maxLength":2000,"default":""},"emailSignatureHtml":{"type":"string","maxLength":20000,"default":""},"model":{"type":["string","null"],"maxLength":200,"pattern":"^[a-zA-Z0-9._\\-/:@]+$"},"provider":{"type":["string","null"],"enum":["openai","anthropic","litellm","openrouter"]},"temperature":{"type":"number","minimum":0,"maximum":2,"default":0.7},"maxTokens":{"type":"number","minimum":1,"maximum":16000,"default":2048},"welcomeMessage":{"type":"string","maxLength":500,"default":"Hello! How can I help you today?"},"ratingEnabled":{"type":"boolean","default":false},"inactivityTimeoutMinutes":{"type":["integer","null"],"minimum":1,"maximum":1440,"default":null},"isActive":{"type":"boolean","default":true},"handoffMode":{"type":"string","enum":["human","ticket","email","slack","d365","disabled"]},"ticketProvider":{"type":["string","null"],"enum":["dynamics365","salesforce"],"default":null},"handoffFallbackMinutes":{"type":["integer","null"],"minimum":1,"maximum":1440,"default":null},"requireIdentityVerification":{"type":"boolean","default":false},"initialForm":{"type":["object","null"],"properties":{"enabled":{"type":"boolean"},"message":{"type":"string","minLength":1,"maxLength":500},"fields":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":50,"pattern":"^[a-zA-Z_][a-zA-Z0-9_]*$"},"label":{"type":"string","minLength":1,"maxLength":100},"type":{"type":"string","enum":["text","email","tel","number","select"],"default":"text"},"required":{"type":"boolean","default":true},"placeholder":{"type":"string","maxLength":200},"options":{"type":"array","items":{"type":"string","minLength":1,"maxLength":100},"maxItems":20}},"required":["name","label"]},"minItems":1,"maxItems":10}},"required":["enabled","message","fields"]}}},"IdentitySecretResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"secret":{"type":"string"},"generatedAt":{"type":"string","format":"date-time"},"message":{"type":"string"}},"required":["secret","generatedAt","message"]}},"required":["success","data"]},"AddAgentMemberRequest":{"type":"object","properties":{"userId":{"type":"string","format":"uuid"}},"required":["userId"]},"CreateAgentToolRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-z_][a-z0-9_]*$"},"description":{"type":"string","minLength":1,"maxLength":1000},"method":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE"]},"urlTemplate":{"type":"string","maxLength":2000,"default":""},"headers":{"type":"object","additionalProperties":{"type":"string"},"default":{}},"authType":{"type":"string","enum":["none","api_key","bearer","basic","oauth2_integration","mcp_server"],"default":"none"},"credentials":{"type":"string","maxLength":10000},"authConfig":{"type":"object","additionalProperties":{},"default":{}},"bodyTemplate":{"type":["object","null"],"additionalProperties":{},"default":null},"parameters":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z_][a-zA-Z0-9_]*$"},"type":{"type":"string","enum":["string","number","boolean","integer"]},"description":{"type":"string","minLength":1,"maxLength":500},"required":{"type":"boolean"},"enum":{"type":"array","items":{"type":"string","minLength":1,"maxLength":100},"maxItems":20}},"required":["name","type","description","required"]},"default":[]},"responseMapping":{"type":["string","null"],"maxLength":500,"default":null},"timeout":{"type":"integer","minimum":1000,"maximum":30000,"default":10000},"isActive":{"type":"boolean","default":true},"riskLevel":{"type":"string","enum":["read","write","destructive"],"default":"read"},"requiresConfirmation":{"type":"boolean","default":false},"allowedChannels":{"type":"array","items":{"type":"string","enum":["web_widget","whatsapp","email","instagram","facebook","x","linkedin"]},"minItems":1,"default":["web_widget","whatsapp","email"]},"rateLimitPerMinute":{"type":"integer","minimum":1,"maximum":300,"default":30}},"required":["name","description","method"]},"OpenApiToolImportRequest":{"type":"object","properties":{"spec":{"type":"object","additionalProperties":{}},"baseUrl":{"type":"string","format":"uri"},"operationIds":{"type":"array","items":{"type":"string","minLength":1},"maxItems":50},"credentials":{"type":"string","maxLength":10000},"authType":{"type":"string","enum":["none","bearer"],"default":"none"}},"required":["spec"]},"McpToolImportRequest":{"type":"object","properties":{"serverUrl":{"type":"string","format":"uri"},"token":{"type":"string","maxLength":10000},"toolNames":{"type":"array","items":{"type":"string","minLength":1},"maxItems":50}},"required":["serverUrl"]},"ImportAgentToolsRequest":{"anyOf":[{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-z_][a-z0-9_]*$"},"description":{"type":"string","minLength":1,"maxLength":1000},"method":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE"]},"urlTemplate":{"type":"string","maxLength":2000,"default":""},"headers":{"type":"object","additionalProperties":{"type":"string"},"default":{}},"authType":{"type":"string","enum":["none","api_key","bearer","basic","oauth2_integration","mcp_server"],"default":"none"},"authConfig":{"type":"object","additionalProperties":{},"default":{}},"bodyTemplate":{"type":["object","null"],"additionalProperties":{},"default":null},"parameters":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z_][a-zA-Z0-9_]*$"},"type":{"type":"string","enum":["string","number","boolean","integer"]},"description":{"type":"string","minLength":1,"maxLength":500},"required":{"type":"boolean"},"enum":{"type":"array","items":{"type":"string","minLength":1,"maxLength":100},"maxItems":20}},"required":["name","type","description","required"]},"default":[]},"responseMapping":{"type":["string","null"],"maxLength":500,"default":null},"timeout":{"type":"integer","minimum":1000,"maximum":30000,"default":10000},"isActive":{"type":"boolean","default":true},"riskLevel":{"type":"string","enum":["read","write","destructive"],"default":"read"},"requiresConfirmation":{"type":"boolean","default":false},"allowedChannels":{"type":"array","items":{"type":"string","enum":["web_widget","whatsapp","email","instagram","facebook","x","linkedin"]},"minItems":1,"default":["web_widget","whatsapp","email"]},"rateLimitPerMinute":{"type":"integer","minimum":1,"maximum":300,"default":30}},"required":["name","description","method"]},"minItems":1,"maxItems":50},"tools":{}},"required":["data"]},{"type":"object","properties":{"tools":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-z_][a-z0-9_]*$"},"description":{"type":"string","minLength":1,"maxLength":1000},"method":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE"]},"urlTemplate":{"type":"string","maxLength":2000,"default":""},"headers":{"type":"object","additionalProperties":{"type":"string"},"default":{}},"authType":{"type":"string","enum":["none","api_key","bearer","basic","oauth2_integration","mcp_server"],"default":"none"},"authConfig":{"type":"object","additionalProperties":{},"default":{}},"bodyTemplate":{"type":["object","null"],"additionalProperties":{},"default":null},"parameters":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z_][a-zA-Z0-9_]*$"},"type":{"type":"string","enum":["string","number","boolean","integer"]},"description":{"type":"string","minLength":1,"maxLength":500},"required":{"type":"boolean"},"enum":{"type":"array","items":{"type":"string","minLength":1,"maxLength":100},"maxItems":20}},"required":["name","type","description","required"]},"default":[]},"responseMapping":{"type":["string","null"],"maxLength":500,"default":null},"timeout":{"type":"integer","minimum":1000,"maximum":30000,"default":10000},"isActive":{"type":"boolean","default":true},"riskLevel":{"type":"string","enum":["read","write","destructive"],"default":"read"},"requiresConfirmation":{"type":"boolean","default":false},"allowedChannels":{"type":"array","items":{"type":"string","enum":["web_widget","whatsapp","email","instagram","facebook","x","linkedin"]},"minItems":1,"default":["web_widget","whatsapp","email"]},"rateLimitPerMinute":{"type":"integer","minimum":1,"maximum":300,"default":30}},"required":["name","description","method"]},"minItems":1,"maxItems":50},"data":{}},"required":["tools"]},{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-z_][a-z0-9_]*$"},"description":{"type":"string","minLength":1,"maxLength":1000},"method":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE"]},"urlTemplate":{"type":"string","maxLength":2000,"default":""},"headers":{"type":"object","additionalProperties":{"type":"string"},"default":{}},"authType":{"type":"string","enum":["none","api_key","bearer","basic","oauth2_integration","mcp_server"],"default":"none"},"authConfig":{"type":"object","additionalProperties":{},"default":{}},"bodyTemplate":{"type":["object","null"],"additionalProperties":{},"default":null},"parameters":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z_][a-zA-Z0-9_]*$"},"type":{"type":"string","enum":["string","number","boolean","integer"]},"description":{"type":"string","minLength":1,"maxLength":500},"required":{"type":"boolean"},"enum":{"type":"array","items":{"type":"string","minLength":1,"maxLength":100},"maxItems":20}},"required":["name","type","description","required"]},"default":[]},"responseMapping":{"type":["string","null"],"maxLength":500,"default":null},"timeout":{"type":"integer","minimum":1000,"maximum":30000,"default":10000},"isActive":{"type":"boolean","default":true},"riskLevel":{"type":"string","enum":["read","write","destructive"],"default":"read"},"requiresConfirmation":{"type":"boolean","default":false},"allowedChannels":{"type":"array","items":{"type":"string","enum":["web_widget","whatsapp","email","instagram","facebook","x","linkedin"]},"minItems":1,"default":["web_widget","whatsapp","email"]},"rateLimitPerMinute":{"type":"integer","minimum":1,"maximum":300,"default":30}},"required":["name","description","method"]},"minItems":1,"maxItems":50}],"description":"Use an array, {tools: [...]} or {data: [...]}. A data array takes precedence over tools; conditional precedence is also enforced at runtime."},"CopyAgentToolsRequest":{"type":"object","properties":{"includeInactive":{"type":"boolean","default":false}}},"UpdateAgentToolRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-z_][a-z0-9_]*$"},"description":{"type":"string","minLength":1,"maxLength":1000},"method":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE"]},"urlTemplate":{"type":"string","maxLength":2000,"default":""},"headers":{"type":"object","additionalProperties":{"type":"string"},"default":{}},"authType":{"type":"string","enum":["none","api_key","bearer","basic","oauth2_integration","mcp_server"],"default":"none"},"credentials":{"type":"string","maxLength":10000},"authConfig":{"type":"object","additionalProperties":{},"default":{}},"bodyTemplate":{"type":["object","null"],"additionalProperties":{},"default":null},"parameters":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z_][a-zA-Z0-9_]*$"},"type":{"type":"string","enum":["string","number","boolean","integer"]},"description":{"type":"string","minLength":1,"maxLength":500},"required":{"type":"boolean"},"enum":{"type":"array","items":{"type":"string","minLength":1,"maxLength":100},"maxItems":20}},"required":["name","type","description","required"]},"default":[]},"responseMapping":{"type":["string","null"],"maxLength":500,"default":null},"timeout":{"type":"integer","minimum":1000,"maximum":30000,"default":10000},"isActive":{"type":"boolean","default":true},"riskLevel":{"type":"string","enum":["read","write","destructive"],"default":"read"},"requiresConfirmation":{"type":"boolean","default":false},"allowedChannels":{"type":"array","items":{"type":"string","enum":["web_widget","whatsapp","email","instagram","facebook","x","linkedin"]},"minItems":1,"default":["web_widget","whatsapp","email"]},"rateLimitPerMinute":{"type":"integer","minimum":1,"maximum":300,"default":30}}},"TestAgentToolRequest":{"type":"object","properties":{"parameters":{"type":"object","additionalProperties":{},"default":{}}}},"ApiKeyListResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"organizationId":{"type":"string","format":"uuid"},"agentId":{"type":"string","format":"uuid"},"name":{"type":"string"},"audience":{"type":"string","enum":["widget","reporting"]},"scopes":{"type":"array","items":{"type":"string"}},"keyPrefix":{"type":"string"},"lastUsedAt":{"type":["string","null"],"format":"date-time"},"expiresAt":{"type":["string","null"],"format":"date-time"},"isActive":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","organizationId","agentId","name","audience","scopes","keyPrefix","lastUsedAt","expiresAt","isActive","createdAt","updatedAt"]}}},"required":["success","data"]},"ApiKeyCreateRequest":{"type":"object","required":["agentId"],"properties":{"audience":{"type":"string","enum":["widget","reporting"],"default":"widget","description":"Fixed scope: widget:chat or reporting:read. Rotation preserves audience."},"agentId":{"type":"string","format":"uuid"},"name":{"type":"string","minLength":1,"maxLength":100},"expiresAt":{"type":"string","format":"date-time"}}},"ApiKeyCreateResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"audience":{"type":"string","enum":["widget","reporting"]},"scopes":{"type":"array","items":{"type":"string"}},"key":{"type":"string","description":"Secret returned only on creation or rotation. Never use the example as a credential."},"keyPrefix":{"type":"string"},"expiresAt":{"type":["string","null"],"format":"date-time"},"createdAt":{"type":"string","format":"date-time"},"rotatedFromKeyId":{"type":"string","format":"uuid"}},"required":["id","name","audience","scopes","key","keyPrefix","expiresAt","createdAt"]}},"required":["success","data"]},"UpdateWidgetConfigRequest":{"type":"object","properties":{"primaryColor":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$","default":"#134a76"},"backgroundColor":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$","default":"#ffffff"},"textColor":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$","default":"#1f2937"},"headerText":{"type":"string","maxLength":100,"default":"Chat with us"},"placeholderText":{"type":"string","maxLength":100,"default":"Type your message..."},"position":{"type":"string","enum":["bottom-right","bottom-left","top-right","top-left","middle-right","middle-left"],"default":"bottom-right"},"iconUrl":{"type":["string","null"]},"fontSize":{"type":"string","enum":["sm","md","lg"],"default":"md"},"borderRadius":{"type":"string","enum":["sharp","rounded","pill"],"default":"rounded"},"launcherType":{"type":"string","enum":["icon","text","icon-text","hidden"],"default":"icon"},"launcherText":{"type":"string","minLength":1,"maxLength":60,"default":"Chat with Support"},"windowPosition":{"type":"string","enum":["anchored","center"],"default":"anchored"},"launcherIcon":{"type":["string","null"]},"allowedOrigins":{"type":"array","items":{"type":"string","pattern":"^https?:\\/\\/[a-zA-Z0-9\\-.]+(:\\d+)?$"},"default":[]},"showBranding":{"type":"boolean","default":true},"voiceEnabled":{"type":"boolean","default":false},"voiceInputEnabled":{"type":"boolean","default":true},"voiceOutputEnabled":{"type":"boolean","default":false},"voiceAutoPlay":{"type":"boolean","default":false},"voiceProvider":{"type":"string","enum":["browser","openai"],"default":"browser"},"voiceGender":{"type":"string","enum":["female","male","neutral"],"default":"female"},"voiceTone":{"type":"string","enum":["formal","friendly","calm"],"default":"friendly"},"realtimeVoiceEnabled":{"type":"boolean","default":false},"realtimeVoiceProvider":{"type":"string","enum":["openai"],"default":"openai"},"realtimeVoiceModel":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-zA-Z0-9._\\-/:@]+$","default":"gpt-realtime-2.1-mini"},"realtimeVoiceVoice":{"type":"string","enum":["marin","cedar","alloy","ash","ballad","coral","echo","fable","onyx","nova","sage","shimmer","verse"],"default":"alloy"},"realtimeVoiceMaxDurationSeconds":{"type":"integer","minimum":60,"maximum":1800,"default":600},"translations":{"type":"object","additionalProperties":{"type":"object","properties":{"headerText":{"type":"string","maxLength":100},"placeholderText":{"type":"string","maxLength":100},"welcomeMessage":{"type":"string","maxLength":500},"homeGreeting":{"type":"string","maxLength":200},"homeSubtext":{"type":"string","maxLength":300},"navHome":{"type":"string","maxLength":40},"navMessages":{"type":"string","maxLength":40},"startConversation":{"type":"string","maxLength":80},"identityHeading":{"type":"string","maxLength":100},"voiceDisclosure":{"type":"string","maxLength":100}}},"default":{}},"chatTriggers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1},"name":{"type":"string","minLength":1,"maxLength":100},"enabled":{"type":"boolean"},"conditionType":{"type":"string","enum":["time_on_page","page_url","visit_count","scroll_depth","exit_intent"]},"conditionValue":{"type":"string","maxLength":500},"actionType":{"type":"string","enum":["open_with_message","show_notification"]},"message":{"type":"string","minLength":1,"maxLength":500},"maxDisplays":{"type":"integer","minimum":0,"maximum":100,"default":3},"cooldownMinutes":{"type":"integer","minimum":0,"maximum":10080,"default":60}},"required":["id","name","enabled","conditionType","conditionValue","actionType","message"]},"default":[]},"messengerEnabled":{"type":"boolean","default":false},"newsEnabled":{"type":"boolean","default":false},"newsShowOnHome":{"type":"boolean","default":true},"homeEnabled":{"type":"boolean","default":true},"defaultView":{"type":"string","enum":["home","chat"],"default":"home"},"homeGreeting":{"type":"string","maxLength":200,"default":"Hi there. How can we help?"},"homeSubtext":{"type":"string","maxLength":300},"suggestedPrompts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":50},"label":{"type":"string","minLength":1,"maxLength":80},"prompt":{"type":"string","minLength":1,"maxLength":500}},"required":["id","label","prompt"]},"maxItems":3,"default":[]},"showRecentConversation":{"type":"boolean","default":true},"showTeamAvailability":{"type":"boolean","default":true},"teamAvailabilityText":{"type":["string","null"],"maxLength":200},"showTeamAvatars":{"type":"boolean","default":false},"anonymousRecoveryEnabled":{"type":"boolean","default":false},"privacyPolicyUrl":{"type":["string","null"],"maxLength":2048,"format":"uri"}}},"KnowledgeBaseListResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"organizationId":{"type":"string","format":"uuid"},"agentId":{"type":"string","format":"uuid"},"name":{"type":"string"},"embeddingModel":{"type":"string"},"chunkSize":{"type":"integer"},"chunkOverlap":{"type":"integer"},"widgetPublic":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","organizationId","agentId","name","embeddingModel","chunkSize","chunkOverlap","widgetPublic","createdAt","updatedAt"]}},"pagination":{"type":"object","properties":{"limit":{"type":"integer","exclusiveMinimum":0},"offset":{"type":"integer","minimum":0}},"required":["limit","offset"]}},"required":["success","data","pagination"]},"KnowledgeBaseResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"organizationId":{"type":"string","format":"uuid"},"agentId":{"type":"string","format":"uuid"},"name":{"type":"string"},"embeddingModel":{"type":"string"},"chunkSize":{"type":"integer"},"chunkOverlap":{"type":"integer"},"widgetPublic":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","organizationId","agentId","name","embeddingModel","chunkSize","chunkOverlap","widgetPublic","createdAt","updatedAt"]}},"required":["success","data"]},"CreateKnowledgeBaseRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"agentId":{"type":"string","format":"uuid"},"embeddingModel":{"type":"string","maxLength":100,"pattern":"^[a-zA-Z0-9._\\-/:]+$"},"chunkSize":{"type":"number","minimum":100,"maximum":4000,"default":512},"chunkOverlap":{"type":"number","minimum":0,"maximum":1000,"default":50}},"required":["name","agentId"]},"WidgetPublicationRequest":{"type":"object","required":["widgetPublic"],"properties":{"widgetPublic":{"type":"boolean"}}},"DocumentListResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"organizationId":{"type":"string","format":"uuid"},"knowledgeBaseId":{"type":"string","format":"uuid"},"title":{"type":"string"},"sourceType":{"type":"string","enum":["file","url","text","confluence","sharepoint","web_crawl"]},"sourceUrl":{"type":["string","null"]},"filePath":{"type":["string","null"]},"fileSize":{"type":["integer","null"]},"mimeType":{"type":["string","null"]},"status":{"type":"string","enum":["pending","processing","completed","failed"]},"widgetPublic":{"type":"boolean"},"chunkCount":{"type":"integer"},"metadata":{"type":"object","additionalProperties":{}},"integrationId":{"type":["string","null"],"format":"uuid"},"externalId":{"type":["string","null"]},"externalVersion":{"type":["string","null"]},"externalEtag":{"type":["string","null"]},"errorMessage":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","organizationId","knowledgeBaseId","title","sourceType","sourceUrl","filePath","fileSize","mimeType","status","widgetPublic","chunkCount","metadata","integrationId","externalId","externalVersion","externalEtag","errorMessage","createdAt","updatedAt"]}},"pagination":{"type":"object","properties":{"limit":{"type":"integer","exclusiveMinimum":0},"offset":{"type":"integer","minimum":0}},"required":["limit","offset"]}},"required":["success","data","pagination"]},"DocumentUploadRequest":{"type":"object","required":["file","knowledgeBaseId"],"properties":{"file":{"type":"string","format":"binary"},"knowledgeBaseId":{"type":"string","format":"uuid"},"title":{"type":"string"}}},"DocumentResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"organizationId":{"type":"string","format":"uuid"},"knowledgeBaseId":{"type":"string","format":"uuid"},"title":{"type":"string"},"sourceType":{"type":"string","enum":["file","url","text","confluence","sharepoint","web_crawl"]},"sourceUrl":{"type":["string","null"]},"filePath":{"type":["string","null"]},"fileSize":{"type":["integer","null"]},"mimeType":{"type":["string","null"]},"status":{"type":"string","enum":["pending","processing","completed","failed"]},"widgetPublic":{"type":"boolean"},"chunkCount":{"type":"integer"},"metadata":{"type":"object","additionalProperties":{}},"integrationId":{"type":["string","null"],"format":"uuid"},"externalId":{"type":["string","null"]},"externalVersion":{"type":["string","null"]},"externalEtag":{"type":["string","null"]},"errorMessage":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","organizationId","knowledgeBaseId","title","sourceType","sourceUrl","filePath","fileSize","mimeType","status","widgetPublic","chunkCount","metadata","integrationId","externalId","externalVersion","externalEtag","errorMessage","createdAt","updatedAt"]}},"required":["success","data"]},"DocumentUrlRequest":{"type":"object","required":["knowledgeBaseId","sourceUrl"],"properties":{"knowledgeBaseId":{"type":"string","format":"uuid"},"sourceUrl":{"type":"string","format":"uri"},"title":{"type":"string","minLength":1,"maxLength":200}}},"DocumentTextRequest":{"type":"object","required":["knowledgeBaseId","content"],"properties":{"knowledgeBaseId":{"type":"string","format":"uuid"},"title":{"type":"string","minLength":1,"maxLength":200},"content":{"type":"string","minLength":1,"maxLength":5000000}}},"ConversationListResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"organizationId":{"type":"string","format":"uuid"},"agentId":{"type":"string","format":"uuid"},"visitorId":{"type":"string"},"assignedUserId":{"type":["string","null"],"format":"uuid"},"queueId":{"type":["string","null"],"format":"uuid"},"status":{"type":"string","enum":["active","waiting_handoff","human_assigned","resolved"]},"supportEpisodeId":{"type":["string","null"],"format":"uuid"},"supportQueuedAt":{"type":["string","null"],"format":"date-time"},"supportAcceptedAt":{"type":["string","null"],"format":"date-time"},"supportFirstReplyAt":{"type":["string","null"],"format":"date-time"},"supportAdmission":{"type":["string","null"],"enum":["full","offline","unconfigured"]},"title":{"type":["string","null"]},"metadata":{"type":"object","additionalProperties":{}},"rating":{"type":["integer","null"]},"ratingFeedback":{"type":["string","null"]},"source":{"type":"string","enum":["web_widget","whatsapp","email","mobile_sdk","telephony","instagram","facebook","x","linkedin"]},"resolvedAt":{"type":["string","null"],"format":"date-time"},"handoffRequestedAt":{"type":["string","null"],"format":"date-time"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","organizationId","agentId","visitorId","assignedUserId","queueId","status","supportEpisodeId","supportQueuedAt","supportAcceptedAt","supportFirstReplyAt","supportAdmission","title","metadata","rating","ratingFeedback","source","resolvedAt","handoffRequestedAt","createdAt","updatedAt"]}},"total":{"type":"integer","minimum":0},"page":{"type":"integer","exclusiveMinimum":0},"limit":{"type":"integer","exclusiveMinimum":0},"totalPages":{"type":"integer","minimum":0}},"required":["items","total","page","limit","totalPages"]}},"required":["success","data"]},"VisitorHistoryResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["active","waiting_handoff","human_assigned","resolved"]},"title":{"type":["string","null"]},"lastMessage":{"type":"string","maxLength":120},"lastMessageAt":{"type":"string","description":"Display timestamp; currently serialized with Date.toString(), not an ISO date-time contract."},"lastSender":{"type":"string","enum":["visitor","bot","human","system"]},"unreadCount":{"type":"integer","minimum":0}},"required":["id","status","title","lastMessage","lastMessageAt","lastSender","unreadCount"]}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]}},"required":["success","data"]},"VisitorConversationReadRequest":{"type":"object","properties":{"lastReadMessageId":{"type":["string","null"],"format":"uuid"}}},"ConversationDetailResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"organizationId":{"type":"string","format":"uuid"},"agentId":{"type":"string","format":"uuid"},"visitorId":{"type":"string"},"assignedUserId":{"type":["string","null"],"format":"uuid"},"queueId":{"type":["string","null"],"format":"uuid"},"status":{"type":"string","enum":["active","waiting_handoff","human_assigned","resolved"]},"supportEpisodeId":{"type":["string","null"],"format":"uuid"},"supportQueuedAt":{"type":["string","null"],"format":"date-time"},"supportAcceptedAt":{"type":["string","null"],"format":"date-time"},"supportFirstReplyAt":{"type":["string","null"],"format":"date-time"},"supportAdmission":{"type":["string","null"],"enum":["full","offline","unconfigured"]},"title":{"type":["string","null"]},"metadata":{"type":"object","additionalProperties":{}},"rating":{"type":["integer","null"]},"ratingFeedback":{"type":["string","null"]},"source":{"type":"string","enum":["web_widget","whatsapp","email","mobile_sdk","telephony","instagram","facebook","x","linkedin"]},"resolvedAt":{"type":["string","null"],"format":"date-time"},"handoffRequestedAt":{"type":["string","null"],"format":"date-time"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"messages":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"conversationId":{"type":"string","format":"uuid"},"sender":{"type":"string","enum":["visitor","bot","human","system"]},"senderUserId":{"type":["string","null"],"format":"uuid"},"content":{"type":"string"},"metadata":{"type":"object","additionalProperties":{}},"attachments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"messageId":{"type":"string","format":"uuid"},"fileName":{"type":"string"},"fileSize":{"type":"number"},"mimeType":{"type":"string"},"url":{"type":"string"},"thumbnailUrl":{"type":["string","null"]},"extractedText":{"type":["string","null"]},"extractionStatus":{"type":["string","null"]},"extractionError":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"}},"required":["id","messageId","fileName","fileSize","mimeType","url","thumbnailUrl","extractedText","extractionStatus","extractionError","createdAt"]}},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","conversationId","sender","senderUserId","content","metadata","attachments","createdAt","updatedAt"]},"maxItems":200}},"required":["id","organizationId","agentId","visitorId","assignedUserId","queueId","status","supportEpisodeId","supportQueuedAt","supportAcceptedAt","supportFirstReplyAt","supportAdmission","title","metadata","rating","ratingFeedback","source","resolvedAt","handoffRequestedAt","createdAt","updatedAt","messages"]}},"required":["success","data"]},"PublicSupportQueueResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":["object","null"],"properties":{"conversationId":{"type":"string","format":"uuid"},"state":{"type":"string","enum":["waiting","offered","accepted","connected","offline","full","unconfigured"]},"queuedAt":{"type":["string","null"],"format":"date-time"},"acceptedAt":{"type":["string","null"],"format":"date-time"},"firstReplyAt":{"type":["string","null"],"format":"date-time"},"position":{"type":["integer","null"],"exclusiveMinimum":0,"description":"One-based place only when a single eligible routing order is meaningful. Null is not position zero."},"estimatedWaitSeconds":{"type":"null","description":"Always null in v1. Show wait estimate unavailable, not the queue SLA or an invented prediction."},"supportAgentName":{"type":["string","null"],"description":"Safe display name only after acceptance; never a login email or an offered recipient."},"canLeave":{"type":"boolean"},"serverTime":{"type":"string","format":"date-time"}},"required":["conversationId","state","queuedAt","acceptedAt","firstReplyAt","position","estimatedWaitSeconds","supportAgentName","canLeave","serverTime"],"additionalProperties":false},"conversationStatus":{"type":"string","enum":["active","waiting_handoff","human_assigned","resolved"]}},"required":["success","data","conversationStatus"],"additionalProperties":false},"LeaveSupportQueueRequest":{"type":"object","properties":{},"additionalProperties":false},"LeaveSupportQueueResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"conversationId":{"type":"string","format":"uuid"},"supportQueue":{"type":"null"}},"required":["conversationId","supportQueue"],"additionalProperties":false}},"required":["success","data"],"additionalProperties":false},"RateConversationRequest":{"type":"object","properties":{"rating":{"type":"integer","minimum":1,"maximum":5},"feedback":{"type":"string","maxLength":500}},"required":["rating"]},"ConversationResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"organizationId":{"type":"string","format":"uuid"},"agentId":{"type":"string","format":"uuid"},"visitorId":{"type":"string"},"assignedUserId":{"type":["string","null"],"format":"uuid"},"queueId":{"type":["string","null"],"format":"uuid"},"status":{"type":"string","enum":["active","waiting_handoff","human_assigned","resolved"]},"supportEpisodeId":{"type":["string","null"],"format":"uuid"},"supportQueuedAt":{"type":["string","null"],"format":"date-time"},"supportAcceptedAt":{"type":["string","null"],"format":"date-time"},"supportFirstReplyAt":{"type":["string","null"],"format":"date-time"},"supportAdmission":{"type":["string","null"],"enum":["full","offline","unconfigured"]},"title":{"type":["string","null"]},"metadata":{"type":"object","additionalProperties":{}},"rating":{"type":["integer","null"]},"ratingFeedback":{"type":["string","null"]},"source":{"type":"string","enum":["web_widget","whatsapp","email","mobile_sdk","telephony","instagram","facebook","x","linkedin"]},"resolvedAt":{"type":["string","null"],"format":"date-time"},"handoffRequestedAt":{"type":["string","null"],"format":"date-time"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","organizationId","agentId","visitorId","assignedUserId","queueId","status","supportEpisodeId","supportQueuedAt","supportAcceptedAt","supportFirstReplyAt","supportAdmission","title","metadata","rating","ratingFeedback","source","resolvedAt","handoffRequestedAt","createdAt","updatedAt"]}},"required":["success","data"]},"ConversationAssignmentRequest":{"type":"object","properties":{"userId":{"type":"string","format":"uuid"},"offerId":{"type":"string","format":"uuid"}},"required":["offerId"]},"WidgetAnalyticsRequest":{"type":"object","properties":{"event":{"type":"string","enum":["widget_opened","home_question_submitted","message_sent","suggested_prompt_selected","dictation_started","realtime_voice_started","realtime_voice_connected","realtime_voice_ended","realtime_voice_failed","realtime_voice_turn_timing","conversation_resumed","identity_state_changed","anonymous_recovery_succeeded","anonymous_recovery_failed"]},"agentId":{"type":"string","format":"uuid"},"props":{"type":"object","additionalProperties":{"anyOf":[{"type":"string","maxLength":100},{"type":"number"},{"type":"boolean"}]},"default":{}}},"required":["event","agentId"],"additionalProperties":false},"RealtimeVoiceTimingProperties":{"type":"object","properties":{"voiceTurnId":{"type":"string","format":"uuid"},"outcome":{"type":"string","enum":["acknowledged","timeout","rejected"]},"transcriptToSocketMs":{"type":"integer","minimum":0,"maximum":3600000},"socketToBackendMs":{"type":"integer","minimum":0,"maximum":3600000},"backendToCommentaryMs":{"type":"integer","minimum":0,"maximum":3600000},"commentaryAckMs":{"type":"integer","minimum":0,"maximum":3600000}},"required":["voiceTurnId","outcome"],"additionalProperties":false},"CreateIntegrationRequest":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["confluence"]},"config":{"type":"object","properties":{"baseUrl":{"type":"string","format":"uri"}},"required":["baseUrl"],"additionalProperties":false},"credentials":{"type":"object","properties":{"email":{"type":"string","format":"email"},"apiToken":{"type":"string","minLength":1,"maxLength":500}},"required":["email","apiToken"],"additionalProperties":false}},"required":["type","config","credentials"],"additionalProperties":false},{"type":"object","properties":{"knowledgeBaseId":{"type":"string","format":"uuid"},"type":{"type":"string","enum":["confluence"]},"config":{"type":"object","properties":{"spaceId":{"type":"string","minLength":1},"spaceKey":{"type":"string","minLength":1,"maxLength":50},"includeLabels":{"type":"array","items":{"type":"string"}},"excludeLabels":{"type":"array","items":{"type":"string"}},"scheduleIntervalMinutes":{"type":"integer","minimum":15,"maximum":10080}},"required":["spaceId","spaceKey"],"additionalProperties":false}},"required":["knowledgeBaseId","type","config"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["sharepoint"]},"config":{"type":"object","properties":{"tenantId":{"type":"string","format":"uuid"},"clientId":{"type":"string","format":"uuid"}},"required":["tenantId","clientId"],"additionalProperties":false},"credentials":{"type":"object","properties":{"clientSecret":{"type":"string","minLength":1,"maxLength":500}},"required":["clientSecret"],"additionalProperties":false}},"required":["type","config","credentials"],"additionalProperties":false},{"type":"object","properties":{"knowledgeBaseId":{"type":"string","format":"uuid"},"type":{"type":"string","enum":["sharepoint"]},"config":{"type":"object","properties":{"siteId":{"type":"string","minLength":1},"driveId":{"type":"string","minLength":1},"folderId":{"type":"string","default":"root"},"siteName":{"type":"string"},"folderPath":{"type":"string"},"scheduleIntervalMinutes":{"type":"integer","minimum":15,"maximum":10080}},"required":["siteId","driveId"],"additionalProperties":false}},"required":["knowledgeBaseId","type","config"],"additionalProperties":false},{"type":"object","properties":{"knowledgeBaseId":{"type":"string","format":"uuid"},"type":{"type":"string","enum":["web_crawl"]},"config":{"type":"object","properties":{"seedUrl":{"type":"string","format":"uri"},"maxDepth":{"type":"integer","minimum":1,"maximum":5,"default":3},"maxPages":{"type":"integer","minimum":1,"maximum":500,"default":100},"allowedPathPatterns":{"type":"array","items":{"type":"string","maxLength":200},"maxItems":20,"default":[]},"excludePatterns":{"type":"array","items":{"type":"string","maxLength":200},"maxItems":20,"default":[]},"scheduleIntervalMinutes":{"type":"integer","minimum":15,"maximum":10080}},"required":["seedUrl"]}},"required":["knowledgeBaseId","type","config"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["dynamics365"]},"config":{"type":"object","properties":{"environmentUrl":{"type":"string","format":"uri"},"tenantId":{"type":"string","format":"uuid"},"clientId":{"type":"string","format":"uuid"}},"required":["environmentUrl","tenantId","clientId"],"additionalProperties":false},"credentials":{"type":"object","properties":{"clientSecret":{"type":"string","minLength":1,"maxLength":500}},"required":["clientSecret"],"additionalProperties":false}},"required":["type","config","credentials"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["salesforce"]},"config":{"type":"object","properties":{"loginUrl":{"type":"string","format":"uri"},"apiVersion":{"type":"string","pattern":"^v\\d{2}\\.\\d$","default":"v65.0"}},"required":["loginUrl"],"additionalProperties":false},"credentials":{"type":"object","properties":{"clientId":{"type":"string","minLength":1,"maxLength":255},"clientSecret":{"type":"string","minLength":1,"maxLength":500}},"required":["clientId","clientSecret"],"additionalProperties":false}},"required":["type","config","credentials"],"additionalProperties":false}]},"UpdateIntegrationRequest":{"type":"object","properties":{"config":{"type":"object","additionalProperties":{}},"credentials":{"type":"object","additionalProperties":{}}},"additionalProperties":false},"ConfluenceSpaceBrowseRequest":{"type":"object","properties":{"query":{"type":"string","maxLength":200},"spaceKey":{"type":"string","minLength":1,"maxLength":50}},"additionalProperties":false},"TestConnectionRequest":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["confluence"]},"config":{"type":"object","properties":{"baseUrl":{"type":"string","format":"uri"}},"required":["baseUrl"],"additionalProperties":false},"credentials":{"type":"object","properties":{"email":{"type":"string","format":"email"},"apiToken":{"type":"string","minLength":1,"maxLength":500}},"required":["email","apiToken"],"additionalProperties":false}},"required":["type","config","credentials"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["web_crawl"]},"config":{"type":"object","properties":{"seedUrl":{"type":"string","format":"uri"},"maxDepth":{"type":"integer","minimum":1,"maximum":5,"default":3},"maxPages":{"type":"integer","minimum":1,"maximum":500,"default":100},"allowedPathPatterns":{"type":"array","items":{"type":"string","maxLength":200},"maxItems":20,"default":[]},"excludePatterns":{"type":"array","items":{"type":"string","maxLength":200},"maxItems":20,"default":[]},"scheduleIntervalMinutes":{"type":"integer","minimum":15,"maximum":10080}},"required":["seedUrl"]}},"required":["type","config"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["sharepoint"]},"config":{"type":"object","properties":{"tenantId":{"type":"string","format":"uuid"},"clientId":{"type":"string","format":"uuid"}},"required":["tenantId","clientId"],"additionalProperties":false},"credentials":{"type":"object","properties":{"clientSecret":{"type":"string","minLength":1,"maxLength":500}},"required":["clientSecret"],"additionalProperties":false}},"required":["type","config","credentials"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["dynamics365"]},"config":{"type":"object","properties":{"environmentUrl":{"type":"string","format":"uri"},"tenantId":{"type":"string","format":"uuid"},"clientId":{"type":"string","format":"uuid"}},"required":["environmentUrl","tenantId","clientId"],"additionalProperties":false},"credentials":{"type":"object","properties":{"clientSecret":{"type":"string","minLength":1,"maxLength":500}},"required":["clientSecret"],"additionalProperties":false}},"required":["type","config","credentials"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["salesforce"]},"config":{"type":"object","properties":{"loginUrl":{"type":"string","format":"uri"},"apiVersion":{"type":"string","pattern":"^v\\d{2}\\.\\d$","default":"v65.0"}},"required":["loginUrl"],"additionalProperties":false},"credentials":{"type":"object","properties":{"clientId":{"type":"string","minLength":1,"maxLength":255},"clientSecret":{"type":"string","minLength":1,"maxLength":500}},"required":["clientId","clientSecret"],"additionalProperties":false}},"required":["type","config","credentials"],"additionalProperties":false}]},"ValidatedTtsRequest":{"type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":4096},"voice":{"anyOf":[{"type":"string","enum":["alloy","echo","fable","onyx","nova","shimmer"]},{"type":"string","enum":["marin","cedar","alloy","ash","ballad","coral","echo","fable","onyx","nova","sage","shimmer","verse"]}],"default":"nova"},"speed":{"type":"number","minimum":0.25,"maximum":4,"default":1}},"required":["text"]},"RealtimeVoiceModelsResponse":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","const":true},"data":{"type":"array","items":{"type":"object","required":["id","label","protocol","ownedBy","created"],"properties":{"id":{"type":"string"},"label":{"type":"string"},"protocol":{"type":"string","enum":["realtime","live"]},"ownedBy":{"type":["string","null"]},"created":{"type":["integer","null"]}}}}}},"RealtimeSessionRequest":{"type":"object","properties":{"agentId":{"type":"string","format":"uuid"},"conversationId":{"type":"string","format":"uuid"},"sdp":{"type":"string","minLength":1,"maxLength":100000}},"required":["agentId","sdp"]},"RealtimeControlRequest":{"type":"object","properties":{"agentId":{"type":"string","format":"uuid"},"close":{"type":"boolean"}},"required":["agentId","close"],"additionalProperties":false},"RealtimeEventRequest":{"type":"object","properties":{"conversationId":{"type":"string","format":"uuid"},"sessionId":{"type":"string","minLength":1,"maxLength":200},"role":{"type":"string","enum":["visitor","bot"]},"text":{"type":"string","minLength":1,"maxLength":5000}},"required":["conversationId","role","text"]},"EmailTranscriptRequest":{"type":"object","properties":{"recipientEmail":{"type":"string","maxLength":254,"format":"email"},"subject":{"type":"string","maxLength":200},"includeRawPII":{"type":"boolean","default":false}},"required":["recipientEmail"]},"TranscriptEmailResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"message":{"type":"string","enum":["Transcript email queued"]}},"required":["message"]}},"required":["success","data"]},"VerifyVisitorIdentityRequest":{"type":"object","properties":{"email":{"type":"string","maxLength":254,"format":"email"}},"required":["email"]},"CreateWhatsAppChannelRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"agentId":{"type":"string","format":"uuid"},"provider":{"type":"string","enum":["baileys","meta"],"default":"baileys"},"metaPhoneNumberId":{"type":"string","minLength":1,"maxLength":64},"metaBusinessAccountId":{"type":"string","minLength":1,"maxLength":64},"metaAppSecret":{"type":"string","minLength":8,"maxLength":500},"metaAccessToken":{"type":"string","minLength":1,"maxLength":2000},"metaWebhookVerifyToken":{"type":"string","minLength":1,"maxLength":255},"responseMode":{"type":"string","enum":["all","direct","groups","specific"],"default":"direct"},"allowedContacts":{"type":"array","items":{"type":"string","minLength":1,"maxLength":50},"maxItems":100,"default":[]},"inactivityTimeoutMinutes":{"type":["integer","null"],"minimum":1,"maximum":1440,"default":null}},"required":["name","agentId"]},"UpdateWhatsAppChannelRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"provider":{"type":"string","enum":["baileys","meta"]},"metaPhoneNumberId":{"type":"string","minLength":1,"maxLength":64},"metaBusinessAccountId":{"type":"string","minLength":1,"maxLength":64},"metaAppSecret":{"type":"string","minLength":8,"maxLength":500},"metaAccessToken":{"type":"string","minLength":1,"maxLength":2000},"metaWebhookVerifyToken":{"type":"string","minLength":1,"maxLength":255},"responseMode":{"type":"string","enum":["all","direct","groups","specific"]},"allowedContacts":{"type":"array","items":{"type":"string","minLength":1,"maxLength":50},"maxItems":100},"inactivityTimeoutMinutes":{"type":["integer","null"],"minimum":1,"maximum":1440},"isActive":{"type":"boolean"}}},"SendWhatsAppMessageRequest":{"type":"object","properties":{"to":{"type":"string","minLength":7,"maxLength":50},"message":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["text"]},"text":{"type":"string","minLength":1,"maxLength":4096},"previewUrl":{"type":"boolean"}},"required":["type","text"]},{"type":"object","properties":{"type":{"type":"string","enum":["buttons"]},"body":{"type":"string","minLength":1,"maxLength":1024},"buttons":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":256},"title":{"type":"string","minLength":1,"maxLength":20}},"required":["id","title"]},"minItems":1,"maxItems":3},"header":{"type":"string","maxLength":60},"footer":{"type":"string","maxLength":60}},"required":["type","body","buttons"]},{"type":"object","properties":{"type":{"type":"string","enum":["list"]},"body":{"type":"string","minLength":1,"maxLength":1024},"buttonText":{"type":"string","minLength":1,"maxLength":20},"rows":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":200},"title":{"type":"string","minLength":1,"maxLength":24},"description":{"type":"string","maxLength":72}},"required":["id","title"]},"minItems":1,"maxItems":10},"sectionTitle":{"type":"string","maxLength":24},"header":{"type":"string","maxLength":60},"footer":{"type":"string","maxLength":60}},"required":["type","body","buttonText","rows"]},{"type":"object","properties":{"type":{"type":"string","enum":["image","video","audio","document","sticker"]},"link":{"type":"string","format":"uri"},"mediaId":{"type":"string","minLength":1,"maxLength":256},"caption":{"type":"string","maxLength":1024},"filename":{"type":"string","maxLength":240}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","enum":["location"]},"latitude":{"type":"number","minimum":-90,"maximum":90},"longitude":{"type":"number","minimum":-180,"maximum":180},"name":{"type":"string","maxLength":100},"address":{"type":"string","maxLength":300}},"required":["type","latitude","longitude"]},{"type":"object","properties":{"type":{"type":"string","enum":["contacts"]},"contacts":{"type":"array","items":{"type":"object","additionalProperties":{}},"minItems":1,"maxItems":10}},"required":["type","contacts"]},{"type":"object","properties":{"type":{"type":"string","enum":["reaction"]},"messageId":{"type":"string","minLength":1,"maxLength":512},"emoji":{"type":"string","maxLength":16}},"required":["type","messageId","emoji"]},{"type":"object","properties":{"type":{"type":"string","enum":["template"]},"name":{"type":"string","maxLength":512,"pattern":"^[a-z0-9_]+$"},"language":{"type":"string","minLength":2,"maxLength":20},"components":{"type":"array","items":{"type":"object","additionalProperties":{}},"maxItems":20}},"required":["type","name","language"]},{"type":"object","properties":{"type":{"type":"string","enum":["product"]},"catalogId":{"type":"string","minLength":1,"maxLength":128},"productRetailerId":{"type":"string","minLength":1,"maxLength":256},"body":{"type":"string","maxLength":1024},"footer":{"type":"string","maxLength":60}},"required":["type","catalogId","productRetailerId"]},{"type":"object","properties":{"type":{"type":"string","enum":["product_list"]},"catalogId":{"type":"string","minLength":1,"maxLength":128},"header":{"type":"string","minLength":1,"maxLength":60},"body":{"type":"string","minLength":1,"maxLength":1024},"sections":{"type":"array","items":{"type":"object","additionalProperties":{}},"minItems":1,"maxItems":10},"footer":{"type":"string","maxLength":60}},"required":["type","catalogId","header","body","sections"]},{"type":"object","properties":{"type":{"type":"string","enum":["flow"]},"flowId":{"type":"string","minLength":1,"maxLength":128},"flowToken":{"type":"string","minLength":1,"maxLength":512},"cta":{"type":"string","minLength":1,"maxLength":20},"body":{"type":"string","minLength":1,"maxLength":1024},"header":{"type":"string","maxLength":60},"footer":{"type":"string","maxLength":60},"screen":{"type":"string","maxLength":200},"data":{"type":"object","additionalProperties":{}}},"required":["type","flowId","flowToken","cta","body"]}]}},"required":["to","message"]},"WhatsAppOnboardingConfigResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"enabled":{"type":"boolean"},"coexistence":{"type":"boolean"}},"required":["enabled","coexistence"]}},"required":["success","data"]},"WhatsAppOnboardingConnectionsResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"type":"object","properties":{"channel_id":{"type":"string","format":"uuid"},"mode":{"type":"string","enum":["cloud","coexistence"]},"state":{"type":"string","enum":["provisioning","connected","review","revoked"]},"registration":{"type":"string","enum":["pending","attempted","done","skipped"]},"token_expires_at":{"type":["string","null"],"format":"date-time"},"history_sync":{"type":"object","additionalProperties":{},"description":"Synchronization status metadata, not imported message history."},"contacts_sync":{"type":"object","additionalProperties":{},"description":"Synchronization status metadata, not contact records."}},"required":["channel_id","mode","state","registration","token_expires_at","history_sync","contacts_sync"]}}},"required":["success","data"]},"StartWhatsAppOnboardingRequest":{"type":"object","properties":{"agentId":{"type":"string","format":"uuid"},"name":{"type":"string","minLength":1,"maxLength":100},"mode":{"type":"string","enum":["cloud","coexistence"]},"channelId":{"type":"string","format":"uuid"}},"required":["agentId","name","mode"],"additionalProperties":false},"WhatsAppOnboardingStartResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"sessionId":{"type":"string","pattern":"^[\\w-]{43}$"},"appId":{"type":"string"},"configId":{"type":"string"},"graphVersion":{"type":"string"},"mode":{"type":"string","enum":["cloud","coexistence"]}},"required":["sessionId","appId","configId","graphVersion","mode"]}},"required":["success","data"]},"WhatsAppOnboardingSessionResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"phase":{"type":"string","enum":["pending","exchanging","ready","connecting","complete","failed"]},"agentId":{"type":"string","format":"uuid"},"channelId":{"type":"string","format":"uuid"},"phones":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"wabaId":{"type":"string"},"displayPhone":{"type":"string"},"name":{"type":"string"},"coexistence":{"type":"boolean"}},"required":["id","wabaId","displayPhone","name","coexistence"]},"description":"Populated only in the ready phase; otherwise an empty array."}},"required":["phase","agentId","phones"]}},"required":["success","data"]},"ExchangeWhatsAppOnboardingRequest":{"type":"object","properties":{"code":{"type":"string","minLength":1,"maxLength":8192}},"required":["code"],"additionalProperties":false},"WhatsAppOnboardingExchangeResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"phones":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"wabaId":{"type":"string"},"displayPhone":{"type":"string"},"name":{"type":"string"},"coexistence":{"type":"boolean"}},"required":["id","wabaId","displayPhone","name","coexistence"]}}},"required":["phones"]}},"required":["success","data"]},"CompleteWhatsAppOnboardingRequest":{"type":"object","properties":{"phoneId":{"type":"string","pattern":"^\\d{5,30}$"},"pin":{"type":"string","pattern":"^\\d{6}$"}},"required":["phoneId"],"additionalProperties":false},"WhatsAppOnboardingCompleteResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"channelId":{"type":"string","format":"uuid"}},"required":["channelId"]}},"required":["success","data"]},"AttachmentUploadRequest":{"type":"object","required":["file","conversationId"],"properties":{"file":{"type":"string","format":"binary"},"conversationId":{"type":"string","format":"uuid"},"messageId":{"type":"string","format":"uuid"}}},"CreateEmailChannelRequest":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"agentId":{"type":"string","format":"uuid"},"inboundAddress":{"type":"string","maxLength":255,"format":"email"},"fromName":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[^\\r\\n\\0]*$"},"fromAddress":{"type":"string","maxLength":255,"format":"email"},"replyMode":{"type":"string","enum":["draft_only","auto_send","manual_only"],"default":"draft_only"},"maxAutoRepliesPerThread":{"type":"integer","minimum":1,"maximum":20,"default":3},"authType":{"type":"string","enum":["smtp"]},"smtpHost":{"type":"string","minLength":1,"maxLength":255},"smtpPort":{"type":"integer","minimum":1,"maximum":65535,"default":587},"smtpSecure":{"type":"boolean","default":false},"smtpUser":{"type":"string","minLength":1,"maxLength":255},"smtpPassword":{"type":"string","minLength":1,"maxLength":500}},"required":["name","agentId","inboundAddress","fromName","fromAddress","authType","smtpHost","smtpUser","smtpPassword"]},{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"agentId":{"type":"string","format":"uuid"},"inboundAddress":{"type":"string","maxLength":255,"format":"email"},"fromName":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[^\\r\\n\\0]*$"},"fromAddress":{"type":"string","maxLength":255,"format":"email"},"replyMode":{"type":"string","enum":["draft_only","auto_send","manual_only"],"default":"draft_only"},"maxAutoRepliesPerThread":{"type":"integer","minimum":1,"maximum":20,"default":3},"authType":{"type":"string","enum":["microsoft_oauth"]},"tenantId":{"type":"string","format":"uuid"},"clientId":{"type":"string","format":"uuid"},"clientSecret":{"type":"string","minLength":1,"maxLength":500},"senderEmail":{"type":"string","maxLength":255,"format":"email"}},"required":["name","agentId","inboundAddress","fromName","fromAddress","authType","tenantId","clientId","clientSecret","senderEmail"]},{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"agentId":{"type":"string","format":"uuid"},"inboundAddress":{"type":"string","maxLength":255,"format":"email"},"fromName":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[^\\r\\n\\0]*$"},"fromAddress":{"type":"string","maxLength":255,"format":"email"},"replyMode":{"type":"string","enum":["draft_only","auto_send","manual_only"],"default":"draft_only"},"maxAutoRepliesPerThread":{"type":"integer","minimum":1,"maximum":20,"default":3},"authType":{"type":"string","enum":["google_oauth"]},"clientId":{"type":"string","minLength":1,"maxLength":500},"clientSecret":{"type":"string","minLength":1,"maxLength":500},"refreshToken":{"type":"string","minLength":1,"maxLength":2000},"senderEmail":{"type":"string","maxLength":255,"format":"email"}},"required":["name","agentId","inboundAddress","fromName","fromAddress","authType","clientId","clientSecret","refreshToken","senderEmail"]}]},"UpdateEmailChannelRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"smtpHost":{"type":"string","minLength":1,"maxLength":255},"smtpPort":{"type":"integer","minimum":1,"maximum":65535},"smtpSecure":{"type":"boolean"},"smtpUser":{"type":"string","minLength":1,"maxLength":255},"smtpPassword":{"type":"string","minLength":1,"maxLength":500},"tenantId":{"type":"string","format":"uuid"},"clientId":{"type":"string","minLength":1,"maxLength":500},"clientSecret":{"type":"string","minLength":1,"maxLength":500},"senderEmail":{"type":"string","maxLength":255,"format":"email"},"refreshToken":{"type":"string","minLength":1,"maxLength":2000},"fromName":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[^\\r\\n\\0]*$"},"fromAddress":{"type":"string","maxLength":255,"format":"email"},"replyMode":{"type":"string","enum":["draft_only","auto_send","manual_only"]},"maxAutoRepliesPerThread":{"type":"integer","minimum":1,"maximum":20},"isActive":{"type":"boolean"}}},"ReviewEmailDraftRequest":{"type":"object","properties":{"content":{"type":"string","minLength":1,"maxLength":50000},"templateId":{"type":"string","format":"uuid"},"attachmentIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":5,"uniqueItems":true},"idempotencyKey":{"type":"string","format":"uuid"}}},"TestEmailTemplateRequest":{"type":"object","properties":{"templateId":{"type":"string","format":"uuid"}},"required":["templateId"]},"SendEmailChannelReplyRequest":{"type":"object","properties":{"conversationId":{"type":"string","format":"uuid"},"content":{"type":"string","minLength":1,"maxLength":50000},"subject":{"type":"string","maxLength":500,"pattern":"^[^\\r\\n]*$"},"templateId":{"type":"string","format":"uuid"},"attachmentIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":5,"uniqueItems":true},"idempotencyKey":{"type":"string","format":"uuid"}},"required":["conversationId","content"]},"SendEmailDraftRequest":{"type":"object","properties":{"conversationId":{"type":"string","format":"uuid"},"content":{"type":"string","minLength":1,"maxLength":50000}},"required":["conversationId","content"],"additionalProperties":false},"CreateEmailTemplateRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"category":{"type":"string","enum":["human_reply","agent_reply","transcript_email"],"default":"human_reply"},"subject":{"type":"string","minLength":1,"maxLength":500,"pattern":"^[^\\r\\n]*$"},"htmlBody":{"type":"string","minLength":1,"maxLength":100000},"textBody":{"type":["string","null"],"maxLength":100000},"agentId":{"type":["string","null"],"format":"uuid"},"channelId":{"type":["string","null"],"format":"uuid"},"isDefault":{"type":"boolean","default":false},"status":{"type":"string","enum":["draft","published"],"default":"draft"}},"required":["name","subject","htmlBody"],"additionalProperties":false},"PreviewEmailTemplateRequest":{"type":"object","properties":{"subject":{"type":"string","minLength":1,"maxLength":500,"pattern":"^[^\\r\\n]*$"},"htmlBody":{"type":"string","minLength":1,"maxLength":100000},"textBody":{"type":["string","null"],"maxLength":100000},"variables":{"type":"object","additionalProperties":{"type":"string","maxLength":10000}}},"required":["subject","htmlBody"]},"UpdateEmailTemplateRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"category":{"type":"string","enum":["human_reply","agent_reply","transcript_email"]},"subject":{"type":"string","minLength":1,"maxLength":500,"pattern":"^[^\\r\\n]*$"},"htmlBody":{"type":"string","minLength":1,"maxLength":100000},"textBody":{"type":["string","null"],"maxLength":100000},"agentId":{"type":["string","null"],"format":"uuid"},"channelId":{"type":["string","null"],"format":"uuid"},"isDefault":{"type":"boolean","default":false},"status":{"type":"string","enum":["draft","published","archived"]},"version":{"type":"integer","exclusiveMinimum":0,"maximum":2147483646}},"required":["version"],"additionalProperties":false},"ArchiveEmailTemplateRequest":{"type":"object","properties":{"version":{"type":"integer","exclusiveMinimum":0,"maximum":2147483646}},"required":["version"],"additionalProperties":false},"RollbackEmailTemplateRequest":{"type":"object","properties":{"version":{"type":"integer","exclusiveMinimum":0,"maximum":2147483646},"revisionVersion":{"type":"integer","exclusiveMinimum":0,"maximum":2147483646}},"required":["version","revisionVersion"],"additionalProperties":false},"CreateTelephonyChannelRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"agentId":{"type":"string","format":"uuid"},"provider":{"type":"string","enum":["twilio"],"default":"twilio"},"phoneNumber":{"type":"string","minLength":3,"maxLength":50,"pattern":"^\\+?[0-9 ()\\-.]+$"},"providerAccountSid":{"type":"string","maxLength":100},"providerAuthToken":{"type":"string","minLength":1,"maxLength":500},"voice":{"type":"string","minLength":1,"maxLength":50,"default":"alice"},"language":{"type":"string","minLength":2,"maxLength":20,"default":"en-US"},"consentMessage":{"type":"string","minLength":1,"maxLength":500,"default":"This call may be transcribed so our AI assistant can help you."},"isActive":{"type":"boolean","default":true}},"required":["name","agentId","phoneNumber"]},"UpdateTelephonyChannelRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"phoneNumber":{"type":"string","minLength":3,"maxLength":50,"pattern":"^\\+?[0-9 ()\\-.]+$"},"providerAccountSid":{"type":"string","maxLength":100},"providerAuthToken":{"type":"string","minLength":1,"maxLength":500},"voice":{"type":"string","minLength":1,"maxLength":50,"default":"alice"},"language":{"type":"string","minLength":2,"maxLength":20,"default":"en-US"},"consentMessage":{"type":"string","minLength":1,"maxLength":500,"default":"This call may be transcribed so our AI assistant can help you."},"isActive":{"type":"boolean","default":true},"status":{"type":"string","enum":["disconnected","connected","error"]}}},"InboundPhoneListResponse":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","const":true},"data":{"type":"object","required":["connections","configured","sipHost","callingAvailable","callingUnavailableReason","billing"],"properties":{"connections":{"type":"array","items":{"type":"object","additionalProperties":true},"description":"Permitted connections, excluding SIP username and encrypted SIP password."},"configured":{"type":"boolean"},"sipHost":{"type":["string","null"]},"callingAvailable":{"type":"boolean"},"callingUnavailableReason":{"type":["string","null"],"enum":["gateway_not_configured","release_not_approved","speech_metering_unsupported","billing_not_ready","legacy_balance_review",null]},"billing":{"type":"object","required":["mode","tariff"],"properties":{"mode":{"type":"string","enum":["legacy_seconds","wallet_service_v1","native_ai_v1"]},"tariff":{"type":["object","null"],"required":["creditsPerSecond","publicationId"],"properties":{"creditsPerSecond":{"type":"number","minimum":0},"publicationId":{"type":"string","format":"uuid"}}},"aiTariffs":{"type":["array","null"],"description":"Present in native_ai_v1 only; null means unavailable, not free usage. Current published token tariffs, not a pinned per-call quote.","items":{"type":"object","additionalProperties":false,"required":["actionKey","unit","creditsPerUnit","publicationId"],"properties":{"actionKey":{"type":"string","pattern":"^ai\\."},"unit":{"type":"string","const":"token"},"creditsPerUnit":{"type":"number","exclusiveMinimum":0},"publicationId":{"type":"string","format":"uuid"}}}}}}}}}},"CreateInboundPhoneRequest":{"type":"object","properties":{"agentId":{"type":"string","format":"uuid"},"name":{"type":"string","minLength":1,"maxLength":100},"providerLabel":{"type":"string","minLength":1,"maxLength":100},"numbers":{"type":"array","items":{"type":"string","pattern":"^\\+[1-9]\\d{6,14}$"},"minItems":1,"maxItems":20},"greeting":{"type":"string","minLength":1,"maxLength":1000,"default":"Hello! How can I help you today?"},"consentMessage":{"type":"string","minLength":1,"maxLength":1000,"default":"You are speaking with an AI assistant. This call may be transcribed."},"language":{"type":"string","pattern":"^[a-z]{2,3}(?:-[A-Za-z]{2,4})?$","default":"en"},"voice":{"type":"string","enum":["alloy","ash","ballad","coral","echo","fable","nova","onyx","sage","shimmer","verse","marin","cedar"],"default":"alloy"},"ownershipConfirmed":{"type":"boolean","default":false},"authorizationReference":{"type":"string","maxLength":2000,"default":""},"maxConcurrentCalls":{"type":"integer","minimum":1,"maximum":10,"default":2},"maxDurationSeconds":{"type":"integer","minimum":60,"maximum":3600,"default":600}},"required":["agentId","name","providerLabel","numbers"],"additionalProperties":false},"InboundPhoneBalanceResponse":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","const":true},"data":{"type":"object","required":["availableSeconds","billingMode"],"properties":{"availableSeconds":{"type":"integer","minimum":0},"billingMode":{"type":"string","enum":["legacy_seconds","wallet_service_v1","native_ai_v1"]}}}}},"UpdateInboundPhoneRequest":{"type":"object","properties":{"agentId":{"type":"string","format":"uuid"},"name":{"type":"string","minLength":1,"maxLength":100},"providerLabel":{"type":"string","minLength":1,"maxLength":100},"numbers":{"type":"array","items":{"type":"string","pattern":"^\\+[1-9]\\d{6,14}$"},"minItems":1,"maxItems":20},"greeting":{"type":"string","minLength":1,"maxLength":1000},"consentMessage":{"type":"string","minLength":1,"maxLength":1000},"language":{"type":"string","pattern":"^[a-z]{2,3}(?:-[A-Za-z]{2,4})?$"},"voice":{"type":"string","enum":["alloy","ash","ballad","coral","echo","fable","nova","onyx","sage","shimmer","verse","marin","cedar"]},"ownershipConfirmed":{"type":"boolean"},"authorizationReference":{"type":"string","maxLength":2000},"maxConcurrentCalls":{"type":"integer","minimum":1,"maximum":10},"maxDurationSeconds":{"type":"integer","minimum":60,"maximum":3600},"status":{"type":"string","enum":["disabled"]}},"additionalProperties":false},"InboundPhoneActionRequest":{"type":"object","properties":{},"additionalProperties":false},"InboundPhoneCallsResponse":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","const":true},"data":{"type":"object","required":["sessions"],"properties":{"sessions":{"type":"array","items":{"type":"object","required":["id","billingMode","speechState","speechServiceSeconds"],"properties":{"id":{"type":"string","format":"uuid"},"billingMode":{"type":"string","enum":["legacy_seconds","wallet_service_v1","native_ai_v1"]},"speechState":{"type":["string","null"],"enum":["intent","reserved","starting","started","settled","review",null]},"speechServiceSeconds":{"type":["integer","null"],"minimum":0,"maximum":3600,"description":"Wallet service-time outcome, not provider usage or carrier duration. For confirmed dispatched usage, calculate elapsed time from server dispatch to min(confirmed stop receipt, session.started_at + reserved_seconds seconds), then round up to whole seconds and cap at reserved_seconds. Stop-ack network delay cannot extend billing past the admission-based absolute deadline. A null outcome is unknown, not zero; neither deadline expiry nor a recorded outcome alone proves speech stop or wallet settlement."}},"additionalProperties":true}}}}}},"SlackChannelBrowseRequest":{"type":"object","properties":{"botToken":{"type":"string","minLength":1,"maxLength":500}},"required":["botToken"],"additionalProperties":false},"CreateSlackChannelRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"agentId":{"type":"string","format":"uuid"},"slackChannelId":{"type":"string","minLength":1,"maxLength":100},"botToken":{"type":"string","minLength":1,"maxLength":500},"signingSecret":{"type":"string","minLength":1,"maxLength":500}},"required":["name","agentId","slackChannelId","botToken","signingSecret"]},"UpdateSlackChannelRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"slackChannelId":{"type":"string","minLength":1,"maxLength":100},"botToken":{"type":"string","minLength":1,"maxLength":500},"signingSecret":{"type":"string","minLength":1,"maxLength":500},"status":{"type":"string","enum":["disconnected","connected","error"]},"isActive":{"type":"boolean"}}},"PersonalTokenListResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"organizationId":{"type":"string","format":"uuid"},"userId":{"type":"string","format":"uuid"},"name":{"type":"string"},"tokenPrefix":{"type":"string"},"lastUsedAt":{"type":["string","null"],"format":"date-time"},"expiresAt":{"type":["string","null"],"format":"date-time"},"isActive":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","organizationId","userId","name","tokenPrefix","lastUsedAt","expiresAt","isActive","createdAt","updatedAt"]}}},"required":["success","data"]},"PersonalTokenCreateRequest":{"type":"object","required":["name"],"properties":{"name":{"type":"string","minLength":1,"maxLength":100},"expiresAt":{"type":"string","format":"date-time"}}},"PersonalTokenCreateResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"token":{"type":"string"},"tokenPrefix":{"type":"string"},"expiresAt":{"type":["string","null"],"format":"date-time"},"createdAt":{"type":"string","format":"date-time"}},"required":["id","name","token","tokenPrefix","expiresAt","createdAt"]},"message":{"type":"string"}},"required":["success","data","message"]},"WebhookListResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"organizationId":{"type":"string","format":"uuid"},"name":{"type":"string"},"url":{"type":"string","format":"uri"},"events":{"type":"array","items":{"type":"string"}},"hasSecret":{"type":"boolean","enum":[true]},"isActive":{"type":"boolean"},"failureCount":{"type":"integer"},"lastDeliveredAt":{"type":["string","null"],"format":"date-time"},"lastError":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","organizationId","name","url","events","hasSecret","isActive","failureCount","lastDeliveredAt","lastError","createdAt","updatedAt"]}},"eventTypes":{"type":"array","items":{"type":"string","enum":["message.created","conversation.created","conversation.resolved","tool.executed","integration.sync.completed","integration.sync.failed"]}}},"required":["success","data","eventTypes"]},"CreateWebhookRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"url":{"type":"string","format":"uri"},"events":{"type":"array","items":{"type":"string","enum":["message.created","conversation.created","conversation.resolved","tool.executed","integration.sync.completed","integration.sync.failed"]},"minItems":1,"maxItems":20},"secret":{"type":"string","minLength":16,"maxLength":500},"isActive":{"type":"boolean","default":true}},"required":["name","url","events"]},"WebhookCreateResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"organizationId":{"type":"string","format":"uuid"},"name":{"type":"string"},"url":{"type":"string","format":"uri"},"events":{"type":"array","items":{"type":"string"}},"hasSecret":{"type":"boolean","enum":[true]},"isActive":{"type":"boolean"},"failureCount":{"type":"integer"},"lastDeliveredAt":{"type":["string","null"],"format":"date-time"},"lastError":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","organizationId","name","url","events","hasSecret","isActive","failureCount","lastDeliveredAt","lastError","createdAt","updatedAt"]},"signingSecret":{"type":"string","description":"Returned once only when generated; omitted when you supplied secret."}},"required":["success","data"]},"UpdateWebhookRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"url":{"type":"string","format":"uri"},"events":{"type":"array","items":{"type":"string","enum":["message.created","conversation.created","conversation.resolved","tool.executed","integration.sync.completed","integration.sync.failed"]},"minItems":1,"maxItems":20},"secret":{"type":"string","minLength":16,"maxLength":500},"isActive":{"type":"boolean","default":true}}},"WebhookResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"organizationId":{"type":"string","format":"uuid"},"name":{"type":"string"},"url":{"type":"string","format":"uri"},"events":{"type":"array","items":{"type":"string"}},"hasSecret":{"type":"boolean","enum":[true]},"isActive":{"type":"boolean"},"failureCount":{"type":"integer"},"lastDeliveredAt":{"type":["string","null"],"format":"date-time"},"lastError":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","organizationId","name","url","events","hasSecret","isActive","failureCount","lastDeliveredAt","lastError","createdAt","updatedAt"]}},"required":["success","data"]},"WebhookTestResponse":{"type":"object","properties":{"success":{"type":"boolean"},"data":{"type":"object","properties":{"success":{"type":"boolean"},"statusCode":{"type":["integer","null"]},"error":{"type":["string","null"]},"durationMs":{"type":"integer"}},"required":["success","statusCode","error","durationMs"]}},"required":["success","data"]},"WebhookDeliveriesResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"Delivery-log record ID; not the X-Tuolen-Delivery event ID."},"organizationId":{"type":"string","format":"uuid"},"endpointId":{"type":"string","format":"uuid"},"event":{"type":"string"},"statusCode":{"type":["integer","null"]},"success":{"type":"boolean"},"durationMs":{"type":"integer"},"error":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"}},"required":["id","organizationId","endpointId","event","statusCode","success","durationMs","error","createdAt"]},"maxItems":100}},"required":["success","data"]},"ConnectionListResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"organizationId":{"type":"string","format":"uuid"},"name":{"type":"string"},"type":{"type":"string","enum":["api_key","bearer","basic","oauth2_client"]},"config":{"type":"object","additionalProperties":{}},"status":{"type":"string","enum":["connected","error"]},"lastError":{"type":["string","null"]},"hasCredentials":{"type":"boolean","enum":[true]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","organizationId","name","type","config","status","lastError","hasCredentials","createdAt","updatedAt"]}}},"required":["success","data"]},"ConnectionRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"type":{"type":"string","enum":["api_key","bearer","basic","oauth2_client"]},"config":{"type":"object","additionalProperties":{},"default":{}},"credentials":{"type":"string","minLength":1,"maxLength":10000}},"required":["name","type","credentials"]},"ConnectionResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"organizationId":{"type":"string","format":"uuid"},"name":{"type":"string"},"type":{"type":"string","enum":["api_key","bearer","basic","oauth2_client"]},"config":{"type":"object","additionalProperties":{}},"status":{"type":"string","enum":["connected","error"]},"lastError":{"type":["string","null"]},"hasCredentials":{"type":"boolean","enum":[true]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","organizationId","name","type","config","status","lastError","hasCredentials","createdAt","updatedAt"]}},"required":["success","data"]},"CreateNewsPostRequest":{"type":"object","properties":{"title":{"type":"string","maxLength":200},"summary":{"type":"string","maxLength":500,"default":""},"content":{"type":"string","maxLength":100000},"coverImageUrl":{"type":["string","null"],"maxLength":2048,"format":"uri","default":null},"authorName":{"type":"string","maxLength":100},"authorAvatarUrl":{"type":["string","null"],"maxLength":2048,"format":"uri","default":null},"category":{"type":"string","maxLength":80,"default":""},"status":{"type":"string","enum":["draft","published","archived"],"default":"draft"},"publishAt":{"type":["string","null"],"format":"date-time","default":null},"agentIds":{"type":"array","items":{"type":"string","format":"uuid"},"minItems":1,"maxItems":100},"audience":{"type":"string","enum":["all","identified","anonymous"],"default":"all"},"reactionsEnabled":{"type":"boolean","default":true}},"required":["title","content","agentIds"],"additionalProperties":false},"UpdateNewsPostRequest":{"type":"object","properties":{"title":{"type":"string","maxLength":200},"summary":{"type":"string","maxLength":500,"default":""},"content":{"type":"string","maxLength":100000},"coverImageUrl":{"type":["string","null"],"maxLength":2048,"format":"uri","default":null},"authorName":{"type":"string","maxLength":100},"authorAvatarUrl":{"type":["string","null"],"maxLength":2048,"format":"uri","default":null},"category":{"type":"string","maxLength":80,"default":""},"status":{"type":"string","enum":["draft","published","archived"],"default":"draft"},"publishAt":{"type":["string","null"],"format":"date-time","default":null},"agentIds":{"type":"array","items":{"type":"string","format":"uuid"},"minItems":1,"maxItems":100},"audience":{"type":"string","enum":["all","identified","anonymous"],"default":"all"},"reactionsEnabled":{"type":"boolean","default":true}},"additionalProperties":false},"NewsEventRequest":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["view"]}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["reaction"]},"reaction":{"type":"string","enum":["like","love","celebrate"]}},"required":["type","reaction"],"additionalProperties":false}]},"HealthResponse":{"type":"object","required":["status","timestamp"],"properties":{"status":{"type":"string","const":"ok"},"timestamp":{"type":"string","format":"date-time"}}},"PublicConversationListResponse":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","const":true},"data":{"type":"object","required":["items","total","page","limit","totalPages"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/PublicConversation"}},"total":{"type":"integer","minimum":0},"page":{"type":"integer","minimum":1},"limit":{"type":"integer","minimum":1},"totalPages":{"type":"integer","minimum":0},"messageContentIncluded":{"type":"boolean"},"messageMetadataIncluded":{"type":"boolean"}}}}},"PublicConversation":{"type":"object","required":["id","agentId","status","createdAt","updatedAt"],"description":"Allowlisted reporting fields. Visitor identity, title, feedback and arbitrary conversation metadata are never returned.","properties":{"id":{"type":"string","format":"uuid"},"agentId":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["active","waiting_handoff","human_assigned","resolved"]},"rating":{"type":["number","null"]},"source":{"type":"string","enum":["web_widget","whatsapp","email","mobile_sdk","telephony","instagram","facebook","x","linkedin"]},"resolvedAt":{"type":["string","null"],"format":"date-time"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"messages":{"type":"array","items":{"$ref":"#/components/schemas/PublicMessage"}}}},"PublicMessage":{"type":"object","required":["id","sender","content","createdAt"],"properties":{"id":{"type":"string","format":"uuid"},"sender":{"type":"string","enum":["visitor","bot","human","system"]},"content":{"type":"string"},"metadata":{"type":"object","additionalProperties":true},"createdAt":{"type":"string","format":"date-time"}}},"PublicConversationResponse":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","const":true},"data":{"$ref":"#/components/schemas/PublicConversation"}}},"PublicCsatResponse":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","const":true},"data":{"type":"object","required":["agentId","avgRating","ratingCount","distribution"],"properties":{"agentId":{"type":"string","format":"uuid"},"avgRating":{"type":"number"},"ratingCount":{"type":"integer","minimum":0},"distribution":{"type":"array","items":{"type":"object","properties":{"rating":{"type":"integer","minimum":1,"maximum":5},"count":{"type":"integer","minimum":0}}}}}}}},"PublicOverviewResponse":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","const":true},"data":{"type":"object","required":["agentId","totalConversations","resolvedConversations","resolutionRate","avgRating"],"properties":{"agentId":{"type":"string","format":"uuid"},"totalConversations":{"type":"integer","minimum":0},"resolvedConversations":{"type":"integer","minimum":0},"resolutionRate":{"type":"number","minimum":0,"maximum":100},"avgRating":{"type":"number","minimum":0,"maximum":5}}}}}}},"paths":{"/api/billing/x":{"get":{"tags":["Prepaid Billing"],"operationId":"get_api_billing_x","summary":"Read X consent, rates, eligible funds and UTC spending limits","description":"Fresh workspace administrator identity required. Returns the exact offer fingerprint, DM-only and explicitly priced optional public-text offers, saved scope consent, purchased-funds balance, budget warnings, settlement counts and verified subscription-stop status. Connection authorization is not billing consent. Supplier costs and operator explanations are not exposed.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"WorkspaceJwtAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"put":{"tags":["Prepaid Billing"],"operationId":"put_api_billing_x","summary":"Accept or pause paid X DM interactions","description":"Workspace administrator only. Active requires explicit acknowledgment, current offer fingerprint/publication/rate version, finite positive daily/monthly USD-micro limits with daily <= monthly, eligible purchased funds and an active X plan/capacity. Pause requires only status:paused and blocks new admission without requiring enabled charging, funds or a publication. Provider shutdown is asynchronous and remains stopping until verified; already accepted/in-flight liabilities still settle. No retrobilling or public/media/polling authorization.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"WorkspaceJwtAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/XBillingControlsRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/support/entitlement":{"get":{"tags":["Support Agent Workspace"],"operationId":"get_api_support_entitlement","summary":"Read Support Agent access and included, purchased, total, active and reserved seats","description":"Available without the add-on so the caller can discover billing requirements. Every active Enterprise workspace has five included human seats, including complimentary and linked platform-owner access; purchased seats are additional.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/support/availability":{"get":{"tags":["Support Agent Workspace"],"operationId":"get_api_support_availability","summary":"Read own support availability and global conversation load","description":"Returns availability, live connection presence, active conversations, reserved offers, missed offers and maxActive. Conversation capacity is shared across every queue; it is separate from purchased seats.","security":[{"BearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupportAvailabilityResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"put":{"tags":["Support Agent Workspace"],"operationId":"put_api_support_availability","summary":"Set own support availability","description":"Strict body {availability: available|away|offline}. Requires a current entitled Support Agent seat. Caller identity cannot be overridden. Available agents also need a live authenticated socket heartbeat, Assistant membership and queue or team membership. Two expired offers switch the agent to away; setting availability resets the missed-offer count. Existing assignments are preserved.","security":[{"BearerAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupportAvailabilityRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupportAvailabilityResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/support/people/{id}/capacity":{"put":{"tags":["Support Agent Workspace"],"operationId":"put_api_support_people_id_capacity","summary":"Set a support agent’s global conversation capacity","description":"Organization administrator only. Strict body {maxActive: 1..100}; default 3. Each accepted conversation and pending offer occupies one slot across all queues. Reducing capacity revokes excess pending offers but never removes existing assignments or admitted customers.","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupportCapacityRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupportAvailabilityResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/support/configuration":{"get":{"tags":["Support Agent Workspace"],"operationId":"get_api_support_configuration","summary":"Read Support Agent teams, queues and eligible members","description":"Requires active Enterprise included seats or prepaid Support Agent workspace access. Tenant and role restrictions apply; management roles do not grant a free frontline seat.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/support/teams":{"post":{"tags":["Support Agent Workspace"],"operationId":"post_api_support_teams","summary":"Create a support team","description":"Requires active Enterprise included seats or prepaid Support Agent workspace access. Tenant and role restrictions apply; management roles do not grant a free frontline seat.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupportTeamRequest"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/support/teams/{id}":{"patch":{"tags":["Support Agent Workspace"],"operationId":"patch_api_support_teams_id","summary":"Update a support team","description":"Requires active Enterprise included seats or prepaid Support Agent workspace access. Tenant and role restrictions apply; management roles do not grant a free frontline seat.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupportTeamRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["Support Agent Workspace"],"operationId":"delete_api_support_teams_id","summary":"Delete a support team","description":"Requires active Enterprise included seats or prepaid Support Agent workspace access. Tenant and role restrictions apply; management roles do not grant a free frontline seat.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/support/teams/{id}/members":{"put":{"tags":["Support Agent Workspace"],"operationId":"put_api_support_teams_id_members","summary":"Replace support team membership","description":"Requires active Enterprise included seats or prepaid Support Agent workspace access. Tenant and role restrictions apply; management roles do not grant a free frontline seat.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupportMembershipRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/support/queues":{"post":{"tags":["Support Agent Workspace"],"operationId":"post_api_support_queues","summary":"Create a capacity-aware support queue","description":"Organization administrator only with entitled Support Agent workspace access. maxActive is an optional queue-wide active-plus-offered ceiling; null uses shared per-person capacity. maxWaiting defaults to 100, excluding reserved offers; 0 admits immediate offers only. Optional waitingPerAgent caps waiting admission at min(maxWaiting, available connected eligible agents × multiplier). offerTimeoutSeconds defaults to 30, range 10..120. slaMinutes is an internal response target, never a customer wait prediction.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupportQueueRequest"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/support/queues/{id}":{"patch":{"tags":["Support Agent Workspace"],"operationId":"patch_api_support_queues_id","summary":"Update queue routing limits and settings","description":"Organization administrator only with entitled Support Agent workspace access. Accepts the queue configuration, including required name. Omitted maxActive, maxWaiting, waitingPerAgent and offerTimeoutSeconds preserve saved limits; null clears maxActive or waitingPerAgent. Changes revalidate pending offers without ejecting admitted customers or existing assignments. An SLA is not a customer ETA.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupportQueueRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["Support Agent Workspace"],"operationId":"delete_api_support_queues_id","summary":"Delete a support queue","description":"Requires active Enterprise included seats or prepaid Support Agent workspace access. Tenant and role restrictions apply; management roles do not grant a free frontline seat.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/support/queues/{id}/routing":{"put":{"tags":["Support Agent Workspace"],"operationId":"put_api_support_queues_id_routing","summary":"Replace queue members and Assistant routing","description":"Requires active Enterprise included seats or prepaid Support Agent workspace access. Tenant and role restrictions apply; management roles do not grant a free frontline seat.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupportQueueRoutingRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/support/inbox":{"get":{"tags":["Support Agent Workspace"],"operationId":"get_api_support_inbox","summary":"Read up to 200 own offers and assigned conversations","description":"view=available returns pending unexpired offers addressed to the caller; mine returns assigned work; all combines both, never a tenant-wide claimable backlog. Offer rows include offerId, offerExpiresAt and serverTime for countdowns. Pending offers reserve capacity but do not announce an agent as joined. Tenant, entitlement, role and membership restrictions apply.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"view","in":"query","schema":{"type":"string","enum":["available","mine","all"],"default":"available"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/support/inbox/{id}/claim":{"post":{"tags":["Support Agent Workspace"],"operationId":"post_api_support_inbox_id_claim","summary":"Accept the exact support offer addressed to you","description":"Strict body {offerId: UUID}. Atomically revalidates offer recipient, expiry, episode, availability, connection, entitled seat, membership and capacity. Administrators cannot accept on another person’s behalf. An expired, cancelled or changed offer returns 409. Joined notice is committed only with acceptance.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupportOfferRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/support/inbox/{id}/decline":{"post":{"tags":["Support Agent Workspace"],"operationId":"post_api_support_inbox_id_decline","summary":"Decline the exact support offer addressed to you","description":"Strict body {offerId: UUID}. Releases the pending reservation without removing the customer or resetting their waiting time. The same person is excluded for this episode for 60 seconds; other eligible agents may receive the offer. Expired or changed offers return 409.","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupportOfferRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcknowledgementResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/support/inbox/{id}/release":{"post":{"tags":["Support Agent Workspace"],"operationId":"post_api_support_inbox_id_release","summary":"Release assigned local support back to its queue","description":"Assigned agent with Assistant access or administrator only. Clears acceptance and first-reply timestamps while retaining queue position and original waiting time. Commits a release notice, then reroutes within available capacity. External Slack, ticket or Dynamics handovers cannot use this local queue operation.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/billing/plans":{"get":{"tags":["Service Plans"],"operationId":"get_api_billing_plans","summary":"Read workspace catalogue, plan, invoices and billing details","description":"supportAgentSeats reports current included, purchased and total human-seat capacity separately from saved invoice terms. Both wallet and invoice options are available to every workspace. Identity and billing management permission are read from current membership, never request tenant IDs. enterpriseAddOns is null or {catalogVersion,plan,addOns,basePeriodUsdCents} from the active paid Enterprise agreement and its pinned catalogue, not current list prices. This read context does not authorize purchase or bypass complimentary access, revision, expiry or pending-change checks.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"WorkspaceJwtAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/billing/plans/catalog":{"get":{"tags":["Service Plans"],"operationId":"get_api_billing_plans_catalog","summary":"Read approved prices and eligible connected or saved draft services","description":"Draft prices are not customer prices. Saved draft connections require explicit selection and payment before connection; this API never connects them.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"WorkspaceJwtAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/billing/plans/invoices":{"get":{"tags":["Service Plans"],"operationId":"get_api_billing_plans_invoices","summary":"Read paginated workspace invoices","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"WorkspaceJwtAuth":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"offset","in":"query","required":false,"schema":{"type":["integer","null"],"minimum":0,"maximum":10000,"default":0}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/billing/plans/quote":{"post":{"tags":["Service Plans"],"operationId":"post_api_billing_plans_quote","summary":"Create an immutable itemised quote","description":"Standard plans use published prices, allowances and optional priced add-ons. Customers cannot submit Enterprise workspace overrides, even an empty object; Enterprise agreements require a platform owner. Legacy selections retain decimal-MB storage, automation and deduplicated channel pricing. NGN settlement at 1400 NGN/USD; no charge at quote time.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"WorkspaceJwtAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServicePlanSelectionRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/billing/plans/enterprise/add-ons/quote":{"post":{"tags":["Service Plans"],"operationId":"post_api_billing_plans_enterprise_add_ons_quote","summary":"Quote recurring add-ons for an active paid Enterprise agreement","description":"Billing manager required. Strict body {expectedRevision,addOns}; quantities replace the full desired recurring selection, not increments. No customer overrides of base prices, capabilities, limits, metering caps, billing period or AI allowance. Pins the original catalogue and negotiated agreement; available add-ons include paid Support Agent seats separately from AI agents and team members. Rejects complimentary, expired/inactive, stale-revision or already-scheduled agreements. Quote expires after 15 minutes, binds the subscription/revision and requires explicit consent through /api/billing/plans/change. New quantities activate only after the next period invoice is paid; no charge at quote time.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"WorkspaceJwtAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServicePlanEnterpriseAddOnsRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/billing/plans/accept":{"post":{"tags":["Service Plans"],"operationId":"post_api_billing_plans_accept","summary":"Accept reviewed terms and create an unpaid invoice","description":"Billing manager required. Requires explicit consent, fresh revision and UUID idempotency key. Requires charging gate, approved prices and compatible credit denomination across publications and open/paid service invoices. Services activate only after verified settlement; no postpaid credit.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"WorkspaceJwtAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServicePlanAcceptRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/billing/plans/change":{"post":{"tags":["Service Plans"],"operationId":"post_api_billing_plans_change","summary":"Schedule a reviewed plan change at the next billing boundary","description":"Billing manager required. Accepts standard-plan changes or server-issued Enterprise add-on quotes with explicit consent, expected revision and payload-bound idempotency. Enterprise add-on acceptance rechecks actor, tenant, subscription provenance, quote expiry, current eligibility and unchanged pinned terms. Existing paid period is immutable; changed terms activate only after the next period invoice is paid. No immediate prorated upgrade or automatic card debit. Wallet renewal requires consent and sufficient purchased funds; otherwise an unpaid invoice requires payment.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"WorkspaceJwtAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServicePlanAcceptRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/billing/plans/details":{"put":{"tags":["Service Plans"],"operationId":"put_api_billing_plans_details","summary":"Update workspace legal billing details and preferred payment method","description":"Billing manager required with expectedRevision. Billing contact email is not an automatically verified notification recipient.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"WorkspaceJwtAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServicePlanDetailsRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/billing/plans/cancel":{"post":{"tags":["Service Plans"],"operationId":"post_api_billing_plans_cancel","summary":"Cancel renewal without deleting the paid service period","description":"Billing manager required with expectedRevision and idempotency key. Existing knowledge remains retrievable after expiry.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"WorkspaceJwtAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServicePlanCancelRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/billing/plans/invoices/{id}/pay-wallet":{"post":{"tags":["Service Plans"],"operationId":"post_api_billing_plans_invoices_id_pay_wallet","summary":"Settle a service invoice from unreserved purchased credits","description":"Billing manager required. Promotional credits cannot buy service plans. Debit covers services only; optional AI allowance retains existing purchased balance instead of re-crediting it. New debit requires the invoice credit denomination to match all publications and open/paid invoices, not only current pricing. Unpaid BYON snapshots are rechecked before debit; disabled or unsupported speech billing blocks new payment. Historical phone snapshots with unresolved source IDs require operator review. Paid retries remain idempotent.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"WorkspaceJwtAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServicePlanWalletRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/billing/plans/invoices/{id}/checkout":{"post":{"tags":["Service Plans"],"operationId":"post_api_billing_plans_invoices_id_checkout","summary":"Create or resume a Paystack invoice checkout","description":"Billing manager required. Charge full pinned NGN invoice, not the wallet top-up minimum. No balance or access changes until verified. Credit denomination must match all publications and open/paid invoices. BYON readiness and exact source IDs are rechecked before initialization or returning a checkout URL, including after provider awaits. This cannot revoke a URL already issued by the provider; already-initialized verified payments remain reconcilable at their original terms even if new admission becomes incompatible.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"WorkspaceJwtAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmptyBillingRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/billing/plans/invoices/{id}/verify":{"post":{"tags":["Service Plans"],"operationId":"post_api_billing_plans_invoices_id_verify","summary":"Verify and settle a workspace invoice once","description":"Independent provider verification checks reference, amount, currency, email, metadata and environment. Services do not mint credits. Only the invoice AI allowance adds credits, once per paid period, not monthly for annual agreements. Existing obligations remain verifiable when new charging is disabled or new denomination admission is blocked. Original invoice conversion and balances are never rebased; over-capacity verified receipts wait for reconciliation instead of being partially credited.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"WorkspaceJwtAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmptyBillingRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/billing/storage":{"get":{"tags":["Knowledge Storage"],"operationId":"get_api_billing_storage","summary":"Read measured logical knowledge storage and allowance","description":"UTF-8 knowledge content, embedding payload and metadata; original file bytes shown separately. Does not bill PostgreSQL indexes, replicas, backups or temporary data. Service-specific grandfathering preserves existing unpurchased services.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"WorkspaceJwtAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/notifications":{"get":{"tags":["Notifications"],"operationId":"get_api_notifications","summary":"Read own persistent notifications and unread count","description":"Paginated, tenant- and user-scoped inbox for support, reviews, channels and billing. Available to support agents without a billing-management role or active seat; individual items still require current source access.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"WorkspaceJwtAuth":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"offset","in":"query","required":false,"schema":{"type":["integer","null"],"minimum":0,"maximum":100000,"default":0}},{"name":"unreadOnly","in":"query","required":false,"schema":{"type":"string","enum":["true","false"],"default":"false"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/notifications/preferences":{"get":{"tags":["Notifications"],"operationId":"get_api_notifications_preferences","summary":"Read own notification preferences and category settings","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"WorkspaceJwtAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"put":{"tags":["Notifications"],"operationId":"put_api_notifications_preferences","summary":"Update own in-app, email and browser-push preferences","description":"Support, reviews and channels default to in-app only. Email/push require both category opt-in and the master preference. Existing billing consent is preserved. External delivery also requires configured platform SMTP/VAPID and the rollout gate; customer support mailboxes are never used. Opt-out cancels pending deliveries and re-enabling does not replay them.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"WorkspaceJwtAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingNotificationPreferencesRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/notifications/read-all":{"post":{"tags":["Notifications"],"operationId":"post_api_notifications_read_all","summary":"Mark own accessible inbox as read","description":"Cancels pending operational reminders, not billing receipts.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"WorkspaceJwtAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmptyBillingRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/notifications/{id}/read":{"patch":{"tags":["Notifications"],"operationId":"patch_api_notifications_id_read","summary":"Change read state on an own accessible notification","description":"Marking read cancels pending operational reminders; marking unread does not resend them.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"WorkspaceJwtAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingNotificationReadRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/notifications/conversations/{id}/viewed":{"post":{"tags":["Notifications"],"operationId":"post_api_notifications_conversations_id_viewed","summary":"Acknowledge visible customer messages in an accessible conversation","description":"Accepts up to 100 actual visitor-message UUIDs in messageIds, never a client timestamp. Only acknowledge messages rendered in a focused, visible transcript viewport. Tenant/source access is checked; unrelated messages are ignored. Marks matching customer-reply alerts read and cancels their pending deliveries, including when viewing precedes event processing.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"WorkspaceJwtAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationViewedRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/notifications/push/config":{"get":{"tags":["Notifications"],"operationId":"get_api_notifications_push_config","summary":"Read safe notification delivery availability and public VAPID key","description":"Private VAPID key and SMTP credentials are never returned. Unconfigured delivery is reported, not fabricated.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"WorkspaceJwtAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/notifications/push/subscriptions":{"get":{"tags":["Notifications"],"operationId":"get_api_notifications_push_subscriptions","summary":"Read own registered browser devices without push secrets","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"WorkspaceJwtAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"tags":["Notifications"],"operationId":"post_api_notifications_push_subscriptions","summary":"Register a browser push subscription after explicit consent","description":"Validates keys, expiration, allowed push provider and public DNS. Endpoint and encryption keys are stored encrypted. Request notification permission only after user action. Web push, not native mobile push.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"WorkspaceJwtAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingNotificationSubscriptionRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["Notifications"],"operationId":"delete_api_notifications_push_subscriptions","summary":"Remove an own subscription by browser endpoint","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"WorkspaceJwtAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingNotificationUnsubscribeRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/notifications/push/subscriptions/{id}":{"delete":{"tags":["Notifications"],"operationId":"delete_api_notifications_push_subscriptions_id","summary":"Remove an own registered browser subscription","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"WorkspaceJwtAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/social-channels":{"get":{"tags":["Social Channels"],"operationId":"get_api_social_channels","summary":"List connected, disconnected and pending-setup social accounts","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"agentId","in":"query","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"tags":["Social Channels"],"operationId":"post_api_social_channels","summary":"Connect or reconnect a provider-validated account using an encrypted token","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSocialChannelRequest"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/social-channels/capabilities":{"get":{"tags":["Social Channels"],"operationId":"get_api_social_channels_capabilities","summary":"Read rollout readiness, supported surfaces and approval gates","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/social-channels/oauth/{platform}/start":{"post":{"tags":["Social Channels"],"operationId":"post_api_social_channels_oauth_platform_start","summary":"Begin tenant and administrator bound provider authorization","description":"New connections default private and public replies to draft review. When channelId is supplied, reconnect renews credentials without changing the existing public response mode. LinkedIn is Coming soon: authorization returns 503 and no setup path is available in this release.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"platform","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StartSocialOAuthRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/social-channels/oauth/sessions/{sessionId}":{"get":{"tags":["Social Channels"],"operationId":"get_api_social_channels_oauth_sessions_sessionId","summary":"Read own pending authorization and selectable accounts without credentials","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"sessionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/social-channels/oauth/sessions/{sessionId}/complete":{"post":{"tags":["Social Channels"],"operationId":"post_api_social_channels_oauth_sessions_sessionId_complete","summary":"Connect selected authorized account and subscribe Meta webhooks","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"sessionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompleteSocialOAuthRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/social-channels/{id}/test":{"post":{"tags":["Social Channels"],"operationId":"post_api_social_channels_id_test","summary":"Check account authorization and subscription without sending a message","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/social-channels/{id}":{"get":{"tags":["Social Channels"],"operationId":"get_api_social_channels_id","summary":"Read social account metadata without credentials","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"patch":{"tags":["Social Channels"],"operationId":"patch_api_social_channels_id","summary":"Update name, private-message mode or public-reply mode independently","description":"responseMode controls private messages. publicResponseMode separately controls comments and mentions; reconnecting OAuth does not change the current public mode. LinkedIn rejects auto_send and requires publicResponseMode=manual_only; editing settings never activates a pending channel.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateSocialChannelRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["Social Channels"],"operationId":"delete_api_social_channels_id","summary":"Disconnect verified accounts or remove history-free pending LinkedIn settings","description":"Verified accounts retain ownership and conversation history after credentials are erased. Pending LinkedIn settings are deleted only if no conversation thread exists; they never reserve global account ownership.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/social-channels/{id}/drafts":{"get":{"tags":["Social Channels"],"operationId":"get_api_social_channels_id_drafts","summary":"List drafts and delivery review items","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/social-channels/{id}/drafts/{eventId}/send":{"post":{"tags":["Social Channels"],"operationId":"post_api_social_channels_id_drafts_eventId_send","summary":"Approve and send the current draft; ambiguous delivery is never retried automatically","description":"LinkedIn sending is unavailable and returns 503 before changing conversation assignment or delivery state.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"eventId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendSocialDraftRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/social-channels/{id}/x/publications":{"get":{"tags":["Social Channels"],"operationId":"get_api_social_channels_id_x_publications","summary":"Inspect retained X publication history; no publishing capability","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/social-channels/{id}/x/usage":{"get":{"tags":["Social Channels"],"operationId":"get_api_social_channels_id_x_usage","summary":"Read saved X usage summary without contacting X","description":"Requires tenant and agent access. Available for disconnected accounts and inactive agents; no provider credentials are required.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/social-channels/{id}/x/activity":{"get":{"tags":["Social Channels"],"operationId":"get_api_social_channels_id_x_activity","summary":"Read X Activity subscription status without contacting X","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/XActivityResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"put":{"tags":["Social Channels"],"operationId":"put_api_social_channels_id_x_activity","summary":"Opt in to paid X Activity subscriptions or stop renewing 24-hour leases","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["enabled"],"properties":{"enabled":{"type":"boolean"},"acknowledgeCosts":{"type":"boolean","enum":[true]}},"description":"Enabling requires acknowledgeCosts=true. Disabling stops renewal, not immediate provider deletion; outstanding leases expire within 24 hours."}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/XActivityResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/social-channels/{id}/x/chat":{"put":{"tags":["Social Channels"],"operationId":"put_api_social_channels_id_x_chat","summary":"Approve or disable encrypted text processing for a bot with existing keys","description":"Administrator and agent access required. Existing bot keys must first be unlocked locally and installed in the server secret store. This endpoint never accepts a PIN or key blob, never rotates keys, and does not start stopped acquisition. Chat readiness is included in GET x/activity.","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["enabled"],"properties":{"enabled":{"type":"boolean"},"acknowledgeBotKeyAccess":{"type":"boolean","enum":[true]}},"description":"Enabling requires acknowledgeBotKeyAccess=true and an already installed owner-bound bot key. Never send a PIN, private key, key blob or Juicebox configuration to this endpoint."}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/XActivityResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/social-channels/{id}/x/publications/{publicationId}/cancel":{"post":{"tags":["Social Channels"],"operationId":"post_api_social_channels_id_x_publications_publicationId_cancel","summary":"Cancel an unattempted publication","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"publicationId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/social-channels/{id}/x/media":{"post":{"tags":["Social Channels"],"operationId":"post_api_social_channels_id_x_media","summary":"Upload a reply image for a persisted eligible inbound X event; returns an account-bound expiring attachment ID","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","additionalProperties":false,"properties":{"file":{"type":"string","format":"binary"},"eventId":{"type":"string","format":"uuid","description":"Persisted eligible inbound event owned by this tenant, account and conversation; the server derives its surface."},"surface":{"type":"string","enum":["dm","mention"],"description":"Optional assertion; must match the persisted event surface."},"altText":{"type":"string","minLength":1,"maxLength":1000}},"required":["file","eventId","altText"]}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/social-channels/{id}/public-knowledge":{"get":{"tags":["Social Channels"],"operationId":"get_api_social_channels_id_public_knowledge","summary":"List knowledge bases and explicit public-use permissions","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"put":{"tags":["Social Channels"],"operationId":"put_api_social_channels_id_public_knowledge","summary":"Replace public knowledge permissions and invalidate pending public drafts","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialPublicKnowledgeRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/billing":{"get":{"tags":["Prepaid Billing"],"operationId":"get_api_billing","summary":"Read own workspace prepaid billing","description":"Fresh revision-bound customer JWT, not PAT or staff token. Workspace derived from current identity; no caller tenant override. Includes limit/offset payment and reservation histories. Balance and caps remain integer service_credit; displayUnit:USD, balanceCreditsPerUsd and limitsCreditsPerUsd expose dollar-unit conversion. 1 public unit equals US$1. Unknown/mixed aggregate denomination is null; clients must not use current pricing to revalue it. Historical rows include their original creditsPerUsd; payments also include locked minorUnitsPerUsd. Usage rows retain agentId and agentName. agentUsage aggregates all workspace usage independently of pagination; chargedTotals and reservedTotals group {credits:string,creditsPerUsd:number|null} by the original denomination. Convert each group before summing dollar units; a nonzero unknown-rate group makes that total unavailable. Customer usage details show action names, not providers, models or native token counts.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"WorkspaceJwtAuth":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"offset","in":"query","required":false,"schema":{"type":["integer","null"],"minimum":0,"maximum":10000,"default":0}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/billing/invoices":{"get":{"tags":["Prepaid Billing"],"operationId":"get_api_billing_invoices","summary":"List own workspace monthly invoices","description":"Tenant administrators only; returns monthly prepaid activity records, not unpaid service-plan debt. Monetary paymentTotals remain separated by currency. creditsPurchased and creditsUsed remain internal-credit totals; purchasedUnitTotals and usedUnitTotals are arrays of {credits:string,creditsPerUsd:number|null} grouped by the original denomination. Compute public USD-unit totals per group with exact arithmetic; null nonzero groups mean conversion is unavailable, never use the latest rate for historical totals.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"WorkspaceJwtAuth":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"offset","in":"query","required":false,"schema":{"type":["integer","null"],"minimum":0,"maximum":10000,"default":0}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/billing/topups":{"post":{"tags":["Prepaid Billing"],"operationId":"post_api_billing_topups","summary":"Initialize an idempotent Paystack top-up","description":"Fresh customer JWT; server pins amount, currency and credit conversion to published pricing. Responses include original creditsPerUsd and minorUnitsPerUsd for dollar-equivalent units, including after reload or later FX changes: credits=floor(amountMinor*creditsPerUsd/minorUnitsPerUsd), public units=credits/creditsPerUsd. Retry exactly the same UUID key after uncertain initialization. Payment gates apply; no credit until server-side verification. Individual top-ups are capped at 100,000,000 internal credits; aggregate wallet headroom is 2,000,000,000. At most 20 unsettled intents per rolling 24h; old references remain verifiable.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"WorkspaceJwtAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingTopupRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/billing/topups/{reference}/verify":{"post":{"tags":["Prepaid Billing"],"operationId":"post_api_billing_topups_reference_verify","summary":"Verify own workspace payment and credit once","description":"Fresh customer JWT; only references belonging to own workspace. Provider response must match amount, currency, email, metadata and test/live domain. Verification and settlement of existing payments remain possible when new-payment gates are disabled.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"WorkspaceJwtAuth":[]}],"parameters":[{"name":"reference","in":"path","required":true,"schema":{"type":"string","pattern":"^vc-[0-9a-f-]{36}$"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/currency-estimates":{"get":{"tags":["Currency Estimates"],"operationId":"get_api_currency_estimates","summary":"Display-only USD conversion; amountUsd and currency query required; never a checkout quote","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/agents/model-options":{"get":{"tags":["Agents"],"operationId":"get_api_agents_model_options","summary":"Enabled platform model choices; metadata only","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/wallet":{"get":{"tags":["Credit Wallet"],"operationId":"get_api_wallet","summary":"Own tenant service-credit balance and history; fresh account JWT, no PAT or tenant override","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":500,"default":100}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"default":0}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/auth/login":{"post":{"tags":["Auth"],"operationId":"post_api_auth_login","summary":"Sign in with email and password","security":[],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/auth/logout":{"post":{"tags":["Auth"],"operationId":"post_api_auth_logout","summary":"Invalidate the current session","security":[{"BearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcknowledgementResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/auth/me":{"get":{"tags":["Auth"],"operationId":"get_api_auth_me","summary":"Get the current authenticated user","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/organizations":{"get":{"tags":["Organizations"],"operationId":"get_api_organizations","summary":"List organizations","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/organizations/{id}":{"get":{"tags":["Organizations"],"operationId":"get_api_organizations_id","summary":"Get an organization by ID","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"patch":{"tags":["Organizations"],"operationId":"patch_api_organizations_id","summary":"Update an organization","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateOrganizationRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/organizations/{id}/business-profile":{"get":{"tags":["Organizations"],"operationId":"get_api_organizations_id_business_profile","summary":"Read own organization business profile","description":"Active accepted members only, including strict own-tenant scope for super_admin. Admins receive eligible contact options; other members receive only the eligible selected contact. Unset/ineligible contact and incomplete legacy fields are null. updatedAt preserves microseconds: pass it back verbatim.","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BusinessProfileResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"put":{"tags":["Organizations"],"operationId":"put_api_organizations_id_business_profile","summary":"Save own organization business profile","description":"Fresh transactional org_admin/super_admin membership required. Strict full object and required eligible same-tenant primary contact; unknown keys rejected. expectedUpdatedAt and expectedContactVersion conflicts return 409; refresh before retrying. Returns the same full profile as GET. Completes onboarding once; audits changed field names only. Preserves slug, IDs, restrictions, credits, AI and integrations.","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BusinessProfileUpdateRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BusinessProfileResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/users":{"get":{"tags":["Users"],"operationId":"get_api_users","summary":"List organization users","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"search","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"tags":["Users"],"operationId":"post_api_users","summary":"Invite a user to the organization","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InviteUserRequest"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/users/{id}":{"get":{"tags":["Users"],"operationId":"get_api_users_id","summary":"Get a user by ID","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"patch":{"tags":["Users"],"operationId":"patch_api_users_id","summary":"Update a user","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateUserRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["Users"],"operationId":"delete_api_users_id","summary":"Deactivate a user","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/users/{id}/invitation/resend":{"post":{"tags":["Users"],"operationId":"post_api_users_id_invitation_resend","summary":"Rotate and resend a pending user invitation","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/users/{id}/invitation":{"delete":{"tags":["Users"],"operationId":"delete_api_users_id_invitation","summary":"Revoke a pending user invitation","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/users/{id}/agents":{"get":{"tags":["Users"],"operationId":"get_api_users_id_agents","summary":"List agents assigned to a user","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"put":{"tags":["Users"],"operationId":"put_api_users_id_agents","summary":"Replace agents assigned to a user","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateUserAgentsRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/agents":{"get":{"tags":["Agents"],"operationId":"get_api_agents","summary":"List agents","description":"Returns an unpaginated data array of accessible agents, newest created first. No page/limit parameters. Identity secrets are omitted; hasIdentitySecret indicates configuration.","security":[{"BearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentListResponse"},"examples":{"sample":{"summary":"Synthetic example, not live workspace data","value":{"success":true,"data":[{"id":"11111111-1111-4111-8111-111111111111","organizationId":"22222222-2222-4222-8222-222222222222","name":"Support","description":"Customer support assistant","systemPrompt":"You are a helpful assistant.","emailSignature":"","emailSignatureHtml":"","model":null,"provider":null,"temperature":0.7,"maxTokens":2048,"welcomeMessage":"Hello! How can I help you today?","ratingEnabled":false,"inactivityTimeoutMinutes":null,"handoffMode":"human","ticketProvider":null,"handoffFallbackMinutes":null,"requireIdentityVerification":false,"initialForm":null,"isActive":true,"hasIdentitySecret":false,"createdAt":"2026-10-04T12:00:00.000Z","updatedAt":"2026-10-04T12:00:00.000Z"}]}}}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"tags":["Agents"],"operationId":"post_api_agents","summary":"Create an agent","description":"org_admin only. Legacy email handoff is read-only. Ticket mode requires ticketProvider. Fallback requires a supported live handoff mode and CRM provider. Runtime validates the complete escalation policy; model/provider availability depends on workspace configuration.","security":[{"BearerAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAgentRequest"},"examples":{"sample":{"summary":"Illustrative input; replace example resource IDs","value":{"name":"Support","systemPrompt":"You are a helpful assistant.","handoffMode":"human"}}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentResponse"},"examples":{"sample":{"summary":"Synthetic example, not live workspace data","value":{"success":true,"data":{"id":"11111111-1111-4111-8111-111111111111","organizationId":"22222222-2222-4222-8222-222222222222","name":"Support","description":"Customer support assistant","systemPrompt":"You are a helpful assistant.","emailSignature":"","emailSignatureHtml":"","model":null,"provider":null,"temperature":0.7,"maxTokens":2048,"welcomeMessage":"Hello! How can I help you today?","ratingEnabled":false,"inactivityTimeoutMinutes":null,"handoffMode":"human","ticketProvider":null,"handoffFallbackMinutes":null,"requireIdentityVerification":false,"initialForm":null,"isActive":true,"hasIdentitySecret":false,"createdAt":"2026-10-04T12:00:00.000Z","updatedAt":"2026-10-04T12:00:00.000Z"}}}}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/agents/import":{"post":{"tags":["Agents"],"operationId":"post_api_agents_import","summary":"Import an agent bundle","security":[{"BearerAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentTransferBundle"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentImportResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/agents/{id}":{"get":{"tags":["Agents"],"operationId":"get_api_agents_id","summary":"Get an agent by ID","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentResponse"},"examples":{"sample":{"summary":"Synthetic example, not live workspace data","value":{"success":true,"data":{"id":"11111111-1111-4111-8111-111111111111","organizationId":"22222222-2222-4222-8222-222222222222","name":"Support","description":"Customer support assistant","systemPrompt":"You are a helpful assistant.","emailSignature":"","emailSignatureHtml":"","model":null,"provider":null,"temperature":0.7,"maxTokens":2048,"welcomeMessage":"Hello! How can I help you today?","ratingEnabled":false,"inactivityTimeoutMinutes":null,"handoffMode":"human","ticketProvider":null,"handoffFallbackMinutes":null,"requireIdentityVerification":false,"initialForm":null,"isActive":true,"hasIdentitySecret":false,"createdAt":"2026-10-04T12:00:00.000Z","updatedAt":"2026-10-04T12:00:00.000Z"}}}}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"patch":{"tags":["Agents"],"operationId":"patch_api_agents_id","summary":"Update an agent","description":"Runtime validates the merged escalation policy. Legacy email handoff cannot be newly selected; ticket mode requires ticketProvider. Model and provider availability depends on workspace configuration.","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAgentRequest"},"examples":{"sample":{"summary":"Illustrative input; replace example resource IDs","value":{"welcomeMessage":"Hi! How can we help?"}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["Agents"],"operationId":"delete_api_agents_id","summary":"Soft-delete an agent","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcknowledgementResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/agents/{id}/export":{"get":{"tags":["Agents"],"operationId":"get_api_agents_id_export","summary":"Export an agent bundle","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentTransferBundle"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/agents/{id}/email-signature/preview":{"post":{"tags":["Agents"],"operationId":"post_api_agents_id_email_signature_preview","summary":"Preview a sanitized email signature without sending email","description":"Requires access to this agent in the current workspace. Returns data.text and data.html for the signature only. Rich HTML is sanitized without variable interpolation; only HTTPS images survive. Remote images are not fetched by the server. Blank plain text derives a fallback from rich text, link destinations and image alt text. No settings are changed.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"emailSignature":{"type":"string","maxLength":2000},"emailSignatureHtml":{"type":"string","maxLength":20000}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/agents/{id}/email-signature/images":{"post":{"tags":["Agents"],"operationId":"post_api_agents_id_email_signature_images","summary":"Upload an image for an agent email signature","description":"Administrators with agent access only. Multipart image field: PNG, JPEG, GIF or WebP, up to 2 MiB and 12 megapixels. Decoded, stripped of metadata and re-encoded as a static PNG up to 1600 pixels per side; animations use the first frame. Returns a stable HTTPS URL readable without login by anyone who has the link. Upload does not change the signature; insert the URL into emailSignatureHtml and save the agent. Images are retained across signature edits; maximum 100 images / 50 MiB per agent.","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","additionalProperties":false,"properties":{"image":{"type":"string","format":"binary"}},"required":["image"]}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"const":true},"data":{"type":"object","required":["url","width","height"],"properties":{"url":{"type":"string","format":"uri"},"width":{"type":"integer","minimum":1,"maximum":1600},"height":{"type":"integer","minimum":1,"maximum":1600}}}}}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/email-signature-images/{id}.png":{"get":{"tags":["Agents"],"operationId":"get_api_email_signature_images_id_png","summary":"Read a published signature image","description":"Public by design for email clients. Only dedicated uploaded signature images are served, never private conversation attachments. The opaque UUID identifies immutable PNG content. Returns 404 for unknown images.","security":[],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"image/png":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/agents/{id}/permanent":{"delete":{"tags":["Agents"],"operationId":"delete_api_agents_id_permanent","summary":"Permanently delete an agent","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcknowledgementResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/agents/{id}/identity-secret":{"post":{"tags":["Agents"],"operationId":"post_api_agents_id_identity_secret","summary":"Create or rotate an agent identity secret","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdentitySecretResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["Agents"],"operationId":"delete_api_agents_id_identity_secret","summary":"Delete an agent identity secret","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcknowledgementResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/agents/{agentId}/members":{"get":{"tags":["Agent Members"],"operationId":"get_api_agents_agentId_members","summary":"List members assigned to an agent","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"agentId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"tags":["Agent Members"],"operationId":"post_api_agents_agentId_members","summary":"Add a member to an agent","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"agentId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddAgentMemberRequest"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/agents/{agentId}/members/{userId}":{"delete":{"tags":["Agent Members"],"operationId":"delete_api_agents_agentId_members_userId","summary":"Remove a member from an agent","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"agentId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"userId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/agents/{agentId}/tools":{"get":{"tags":["Agent Tools"],"operationId":"get_api_agents_agentId_tools","summary":"List tools configured for an agent","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"agentId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"tags":["Agent Tools"],"operationId":"post_api_agents_agentId_tools","summary":"Create an agent tool","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"agentId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAgentToolRequest"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/agents/{agentId}/tools/export":{"get":{"tags":["Agent Tools"],"operationId":"get_api_agents_agentId_tools_export","summary":"Export tools as JSON","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"agentId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/agents/{agentId}/tools/import-openapi":{"post":{"tags":["Agent Tools"],"operationId":"post_api_agents_agentId_tools_import_openapi","summary":"Import tools from an OpenAPI document","description":"Imports selected operations; does not invoke them. Public endpoint, tool-count and authentication checks apply. An empty or omitted operationIds selection follows the importer defaults.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"agentId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenApiToolImportRequest"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/agents/{agentId}/tools/import-mcp":{"post":{"tags":["Agent Tools"],"operationId":"post_api_agents_agentId_tools_import_mcp","summary":"Import tools from an MCP server","description":"Discovers tools at a public MCP server. Keep token server-side. Tool-count and endpoint validation apply.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"agentId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/McpToolImportRequest"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/agents/{agentId}/tools/validate-import":{"post":{"tags":["Agent Tools"],"operationId":"post_api_agents_agentId_tools_validate_import","summary":"Validate a tool import bundle","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"agentId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"description":"Diagnostic input, intentionally accepts arbitrary JSON, including invalid candidates. Preferred forms: a tool array, {tools: [...]} or {data: [...]}. The response reports validation results without importing. Use the import operation for the validated tool contract.","x-tuolen-unstructured-reason":"Accepts invalid input to return per-tool diagnostics."}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/agents/{agentId}/tools/import":{"post":{"tags":["Agent Tools"],"operationId":"post_api_agents_agentId_tools_import","summary":"Import tools from JSON","description":"Accepts an array, {tools: [...]} or {data: [...]}, 1–50 tools. Use one form; if data is an array, it takes precedence over tools. Credentials are not imported. Public endpoint and tool-specific authentication validation still applies; there is a 100-tool per-agent cap.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"agentId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportAgentToolsRequest"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/agents/{agentId}/tools/copy-from/{sourceAgentId}":{"post":{"tags":["Agent Tools"],"operationId":"post_api_agents_agentId_tools_copy_from_sourceAgentId","summary":"Copy tools from another agent","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"agentId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"sourceAgentId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CopyAgentToolsRequest"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/agents/{agentId}/tools/{toolId}":{"get":{"tags":["Agent Tools"],"operationId":"get_api_agents_agentId_tools_toolId","summary":"Get one agent tool","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"agentId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"toolId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"patch":{"tags":["Agent Tools"],"operationId":"patch_api_agents_agentId_tools_toolId","summary":"Update an agent tool","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"agentId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"toolId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAgentToolRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["Agent Tools"],"operationId":"delete_api_agents_agentId_tools_toolId","summary":"Delete an agent tool","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"agentId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"toolId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/agents/{agentId}/tools/{toolId}/test":{"post":{"tags":["Agent Tools"],"operationId":"post_api_agents_agentId_tools_toolId_test","summary":"Test an agent tool","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"agentId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"toolId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestAgentToolRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/api-keys/agent/{agentId}":{"get":{"tags":["API Keys"],"operationId":"get_api_api_keys_agent_agentId","summary":"List API keys for an agent","security":[{"BearerAuth":[]}],"parameters":[{"name":"agentId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyListResponse"},"examples":{"sample":{"summary":"Synthetic example, not live workspace data","value":{"success":true,"data":[]}}}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/api-keys":{"post":{"tags":["API Keys"],"operationId":"post_api_api_keys","summary":"Create an API key","description":"expiresAt, when supplied, must be a future ISO date-time. The raw key is returned once only. Widget keys have widget:chat scope; reporting keys have reporting:read scope and must stay server-side.","security":[{"BearerAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyCreateRequest"},"examples":{"sample":{"summary":"Illustrative input; replace example resource IDs","value":{"name":"Reporting service","agentId":"11111111-1111-4111-8111-111111111111","audience":"reporting"}}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyCreateResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/api-keys/{id}/rotate":{"post":{"tags":["API Keys"],"operationId":"post_api_api_keys_id_rotate","summary":"Rotate an API key","description":"No request body. Revokes the old key and returns the new key once, preserving audience and expiry. Rotation does not extend an expired credential.","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyCreateResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/api-keys/{id}":{"delete":{"tags":["API Keys"],"operationId":"delete_api_api_keys_id","summary":"Revoke an API key","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcknowledgementResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/widget-configs/public/{agentId}":{"get":{"tags":["Widget Configs"],"operationId":"get_api_widget_configs_public_agentId","summary":"Get public widget configuration","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"agentId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"assetCache","in":"query","schema":{"type":"string","enum":["1"]},"description":"Opt in to decorative asset hash negotiation. Session and config remain no-store and fully authorized."},{"name":"iconUrlHash","in":"query","schema":{"type":"string","pattern":"^[a-f0-9]{64}$"},"description":"SHA-256 of locally held data URI. On exact match the corresponding asset is omitted; assetHashes confirms which local bytes to reuse."},{"name":"launcherIconHash","in":"query","schema":{"type":"string","pattern":"^[a-f0-9]{64}$"},"description":"SHA-256 of locally held data URI. On exact match the corresponding asset is omitted; assetHashes confirms which local bytes to reuse."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/widget-configs/{agentId}/origin-check":{"get":{"tags":["Widget Configs"],"operationId":"get_api_widget_configs_agentId_origin_check","summary":"Check whether an origin may embed a widget","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"agentId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"origin","in":"query","required":true,"schema":{"type":"string","format":"uri"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/widget-configs/{agentId}":{"get":{"tags":["Widget Configs"],"operationId":"get_api_widget_configs_agentId","summary":"Get widget configuration for an agent","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"agentId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"patch":{"tags":["Widget Configs"],"operationId":"patch_api_widget_configs_agentId","summary":"Update widget configuration for an agent","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"agentId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateWidgetConfigRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/widget-configs/{agentId}/upload-icon":{"post":{"tags":["Widget Configs"],"operationId":"post_api_widget_configs_agentId_upload_icon","summary":"Upload widget icon or launcher asset","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"agentId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"}},"required":["file"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/knowledge-bases/agent/{agentId}":{"get":{"tags":["Knowledge Bases"],"operationId":"get_api_knowledge_bases_agent_agentId","summary":"List knowledge bases for an agent","description":"Offset pagination with a data array and top-level pagination {limit, offset}. No total count. Default limit 100, maximum 200. Sorted by createdAt descending.","security":[{"BearerAuth":[]}],"parameters":[{"name":"agentId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":200,"default":100}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"default":0}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KnowledgeBaseListResponse"},"examples":{"sample":{"summary":"Synthetic example, not live workspace data","value":{"success":true,"data":[{"id":"55555555-5555-4555-8555-555555555555","organizationId":"22222222-2222-4222-8222-222222222222","agentId":"11111111-1111-4111-8111-111111111111","name":"Help center","embeddingModel":"text-embedding-3-small","chunkSize":512,"chunkOverlap":50,"widgetPublic":false,"createdAt":"2026-10-04T12:00:00.000Z","updatedAt":"2026-10-04T12:00:00.000Z"}],"pagination":{"limit":100,"offset":0}}}}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/knowledge-bases/{id}":{"get":{"tags":["Knowledge Bases"],"operationId":"get_api_knowledge_bases_id","summary":"Get a knowledge base by ID","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KnowledgeBaseResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["Knowledge Bases"],"operationId":"delete_api_knowledge_bases_id","summary":"Delete a knowledge base","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcknowledgementResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/knowledge-bases":{"post":{"tags":["Knowledge Bases"],"operationId":"post_api_knowledge_bases","summary":"Create a knowledge base","security":[{"BearerAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateKnowledgeBaseRequest"},"examples":{"sample":{"summary":"Illustrative input; replace example resource IDs","value":{"name":"Help center","agentId":"11111111-1111-4111-8111-111111111111"}}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KnowledgeBaseResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/knowledge-bases/{id}/widget-publication":{"patch":{"tags":["Knowledge Bases"],"operationId":"patch_api_knowledge_bases_id_widget_publication","summary":"Change widget publication status","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WidgetPublicationRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KnowledgeBaseResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/documents/knowledge-base/{kbId}":{"get":{"tags":["Documents"],"operationId":"get_api_documents_knowledge_base_kbId","summary":"List documents in a knowledge base","description":"Offset pagination with a data array and top-level pagination {limit, offset}. No total count. Default limit 100, maximum 500. Sorted by createdAt descending.","security":[{"BearerAuth":[]}],"parameters":[{"name":"kbId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":500,"default":100}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"default":0}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentListResponse"},"examples":{"sample":{"summary":"Synthetic example, not live workspace data","value":{"success":true,"data":[],"pagination":{"limit":100,"offset":0}}}}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/documents/upload":{"post":{"tags":["Documents"],"operationId":"post_api_documents_upload","summary":"Upload a file document","security":[{"BearerAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/DocumentUploadRequest"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/documents/url":{"post":{"tags":["Documents"],"operationId":"post_api_documents_url","summary":"Add a document from a URL","security":[{"BearerAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentUrlRequest"},"examples":{"sample":{"summary":"Illustrative input; replace example resource IDs","value":{"knowledgeBaseId":"55555555-5555-4555-8555-555555555555","sourceUrl":"https://example.com/help","title":"Help center"}}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/documents/text":{"post":{"tags":["Documents"],"operationId":"post_api_documents_text","summary":"Add a text document","security":[{"BearerAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentTextRequest"},"examples":{"sample":{"summary":"Illustrative input; replace example resource IDs","value":{"knowledgeBaseId":"55555555-5555-4555-8555-555555555555","title":"Contact support","content":"Contact your workspace administrator for help."}}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/documents/{id}":{"get":{"tags":["Documents"],"operationId":"get_api_documents_id","summary":"Get document metadata","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["Documents"],"operationId":"delete_api_documents_id","summary":"Delete a document","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcknowledgementResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/documents/{id}/widget-publication":{"patch":{"tags":["Documents"],"operationId":"patch_api_documents_id_widget_publication","summary":"Change widget publication status","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WidgetPublicationRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/conversations":{"get":{"tags":["Conversations"],"operationId":"get_api_conversations","summary":"List dashboard conversations","description":"Page-based pagination: data.items, total, page, limit and totalPages. Sorted by updatedAt descending. Results can move between pages as conversations change; deduplicate by id.","security":[{"BearerAuth":[]}],"parameters":[{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1,"maximum":10000}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"search","in":"query","schema":{"type":"string","maxLength":200}},{"name":"agentId","in":"query","schema":{"type":"string","format":"uuid"}},{"name":"rated","in":"query","schema":{"type":"boolean"}},{"name":"source","in":"query","schema":{"type":"string","enum":["web_widget","whatsapp","email","mobile_sdk","telephony","instagram","facebook","x","linkedin"]}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationListResponse"},"examples":{"sample":{"summary":"Synthetic example, not live workspace data","value":{"success":true,"data":{"items":[],"total":0,"page":1,"limit":20,"totalPages":0}}}}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/conversations/visitor/history":{"get":{"tags":["Conversations"],"operationId":"get_api_conversations_visitor_history","summary":"List visitor conversation history","security":[{"ApiKeyAuth":[],"VisitorTokenAuth":[]}],"parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":50,"default":20}},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Opaque data.nextCursor from the previous response. Omit for the first page."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VisitorHistoryResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/conversations/visitor/conversations/{conversationId}":{"get":{"tags":["Conversations"],"operationId":"get_api_conversations_visitor_conversations_conversationId","summary":"Get a visitor conversation","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"ApiKeyAuth":[],"VisitorTokenAuth":[]}],"parameters":[{"name":"conversationId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/conversations/visitor/conversations/{conversationId}/read":{"post":{"tags":["Conversations"],"operationId":"post_api_conversations_visitor_conversations_conversationId_read","summary":"Mark a visitor conversation as read","security":[{"ApiKeyAuth":[],"VisitorTokenAuth":[]}],"parameters":[{"name":"conversationId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VisitorConversationReadRequest"},"examples":{"sample":{"summary":"Illustrative input; replace example resource IDs","value":{"lastReadMessageId":null}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcknowledgementResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/conversations/{id}":{"get":{"tags":["Conversations"],"operationId":"get_api_conversations_id","summary":"Get a dashboard conversation","description":"Returns the conversation and at most its latest 200 messages in chronological order. Message attachments use signed URLs; do not treat these as permanent public links.","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationDetailResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/conversations/visitor/current":{"get":{"tags":["Conversations"],"operationId":"get_api_conversations_visitor_current","summary":"Get the current visitor conversation","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"ApiKeyAuth":[],"VisitorTokenAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/conversations/visitor/conversations/{conversationId}/support":{"get":{"tags":["Conversations"],"operationId":"get_api_conversations_visitor_conversations_conversationId_support","summary":"Read the visitor-owned support queue state","description":"No-store polling endpoint scoped to the API key’s Assistant, workspace and authenticated visitor. data is null or the public queue state, with sibling conversationStatus. queuedAt and serverTime support elapsed waiting time across reconnects. position is null for ambiguous multi-Assistant queues. estimatedWaitSeconds is currently always null; display “Wait estimate unavailable”, never the SLA as an ETA. No internal offer IDs or staff IDs are returned.","security":[{"ApiKeyAuth":[],"VisitorTokenAuth":[]}],"parameters":[{"name":"conversationId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicSupportQueueResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/conversations/visitor/conversations/{conversationId}/support/leave":{"post":{"tags":["Conversations"],"operationId":"post_api_conversations_visitor_conversations_conversationId_support_leave","summary":"Leave the waiting queue and return to the Assistant","description":"Strict empty JSON body. Visitor-owned waiting conversations only, including a pending offer. Atomically cancels pending offers and clears local queue state. If a support agent already accepted, returns 409 rather than removing their assignment. Adds a durable transcript notice; does not generate an automatic Assistant reply or send email.","security":[{"ApiKeyAuth":[],"VisitorTokenAuth":[]}],"parameters":[{"name":"conversationId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeaveSupportQueueRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeaveSupportQueueResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/conversations/visitor/{visitorId}":{"get":{"tags":["Conversations"],"operationId":"get_api_conversations_visitor_visitorId","summary":"Get or create a visitor conversation","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"ApiKeyAuth":[],"VisitorTokenAuth":[]}],"parameters":[{"name":"visitorId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/conversations/{id}/rate":{"post":{"tags":["Conversations"],"operationId":"post_api_conversations_id_rate","summary":"Rate a conversation from the widget","security":[{"ApiKeyAuth":[],"VisitorTokenAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateConversationRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/conversations/{id}/assign":{"post":{"tags":["Conversations"],"operationId":"post_api_conversations_id_assign","summary":"Accept your routed support offer","description":"Requires offerId (UUID). Optional userId must match the authenticated caller. Uses the same atomic capacity, entitlement, recipient and expiry checks as the support inbox claim endpoint; no forced assignment or administrator bypass.","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationAssignmentRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/conversations/{id}/resolve":{"post":{"tags":["Conversations"],"operationId":"post_api_conversations_id_resolve","summary":"Resolve a conversation","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/conversations/{id}/takeover":{"post":{"tags":["Conversations"],"operationId":"post_api_conversations_id_takeover","summary":"Take over an active Assistant conversation within available support capacity","description":"Caller needs an entitled Support Agent seat, availability, a live connection, Assistant membership and a global free slot. Any queue ceiling and membership also apply. Waiting conversations must instead accept their exact routed offer.","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/conversations/{id}/handback":{"post":{"tags":["Conversations"],"operationId":"post_api_conversations_id_handback","summary":"Return a support handover to the Assistant","description":"Bearer-authenticated local transition from waiting_handoff or human_assigned. Empty JSON body. Returns { success: true, data: updated conversation }. Support Agents require a current entitled seat, Assistant membership and their own assignment; scoped admins require Assistant membership, while organization/super admins use management access. Tenant, user, membership, seat and assignment are revalidated under the transition lock. Busy or uncertain external deliveries require retry or staff reconciliation (409), including unreserved sending messages and unresolved social sends without a transcript. Atomically closes local D365 links, retains case audit, cancels pending offers, clears queue and escalation state, rejects unsent external-support/cycle email drafts and retires never-dispatched outbound social external-support drafts (including public-review replies); unrelated drafts and delivery evidence are preserved. Emits content-free support-inbox invalidation and conversation status updates after commit. Does not resolve or delete external cases, send remotely, or enqueue work: no Assistant reply is generated. Subsequent customer input follows the configured channel policy.","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"const":true},"data":{"type":"object","additionalProperties":true,"required":["id","organizationId","agentId","status","assignedUserId","queueId","handoffRequestedAt","metadata"],"properties":{"id":{"type":"string","format":"uuid"},"organizationId":{"type":"string","format":"uuid"},"agentId":{"type":"string","format":"uuid"},"status":{"const":"active"},"assignedUserId":{"type":"null"},"queueId":{"type":"null"},"handoffRequestedAt":{"type":"null"},"resolvedAt":{"type":"null"},"updatedAt":{"type":"string","format":"date-time"},"metadata":{"type":"object","additionalProperties":true}}}}}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Not in human handover, busy conversation, or uncertain external delivery requiring staff reconciliation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/conversations/{id}/summarize":{"post":{"tags":["Conversations"],"operationId":"post_api_conversations_id_summarize","summary":"Generate a conversation summary","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/conversations/{id}/transcript":{"get":{"tags":["Conversations"],"operationId":"get_api_conversations_id_transcript","summary":"Export a conversation transcript","description":"Response field coverage is incomplete: only export formats are documented. JSON downloads do not use the common success envelope; do not infer their fields from a generated sample.","x-tuolen-response-coverage":"format-only","security":[{"BearerAuth":[]},{"ApiKeyAuth":[],"VisitorTokenAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"format","in":"query","schema":{"type":"string","enum":["txt","csv","json"],"default":"txt"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"description":"JSON export file, not the common success envelope. Field-level schema coverage is incomplete."}},"text/csv":{"schema":{"type":"string"}},"text/plain":{"schema":{"type":"string"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/analytics/overview":{"get":{"tags":["Analytics"],"operationId":"get_api_analytics_overview","summary":"Get overview metrics","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"startDate","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"endDate","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"agentId","in":"query","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/analytics/widget":{"post":{"tags":["Analytics"],"operationId":"post_api_analytics_widget","summary":"Record a widget analytics event","description":"Accepts only listed telemetry events and scalar props. For realtime_voice_turn_timing, props must satisfy RealtimeVoiceTimingProperties. Never send transcript content or credentials.","security":[{"ApiKeyAuth":[],"VisitorTokenAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/WidgetAnalyticsRequest"},{"if":{"properties":{"event":{"const":"realtime_voice_turn_timing"}},"required":["event"]},"then":{"properties":{"props":{"$ref":"#/components/schemas/RealtimeVoiceTimingProperties"}},"required":["props"]}}]}}}},"responses":{"204":{"description":"No content"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/analytics/widget-events":{"get":{"tags":["Analytics"],"operationId":"get_api_analytics_widget_events","summary":"List widget analytics events","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"startDate","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"endDate","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"agentId","in":"query","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/analytics/volume":{"get":{"tags":["Analytics"],"operationId":"get_api_analytics_volume","summary":"Get message/conversation volume metrics","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"startDate","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"endDate","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"agentId","in":"query","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/analytics/csat":{"get":{"tags":["Analytics"],"operationId":"get_api_analytics_csat","summary":"Get CSAT metrics","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"startDate","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"endDate","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"agentId","in":"query","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/analytics/resolution-rate":{"get":{"tags":["Analytics"],"operationId":"get_api_analytics_resolution_rate","summary":"Get resolution-rate metrics","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"startDate","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"endDate","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"agentId","in":"query","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/analytics/response-times":{"get":{"tags":["Analytics"],"operationId":"get_api_analytics_response_times","summary":"Get response-time metrics","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"startDate","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"endDate","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"agentId","in":"query","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/analytics/agent-performance":{"get":{"tags":["Analytics"],"operationId":"get_api_analytics_agent_performance","summary":"Get per-agent performance metrics","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"startDate","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"endDate","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"agentId","in":"query","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/analytics/topics":{"get":{"tags":["Analytics"],"operationId":"get_api_analytics_topics","summary":"Get conversation topic metrics","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"startDate","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"endDate","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"agentId","in":"query","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/analytics/summary":{"get":{"tags":["Analytics"],"operationId":"get_api_analytics_summary","summary":"Get consolidated dashboard metrics (one round-trip)","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"startDate","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"endDate","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"agentId","in":"query","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/integrations/organization":{"get":{"tags":["Integrations"],"operationId":"get_api_integrations_organization","summary":"List organization-level integrations","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":500,"default":100}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"default":0}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/integrations/knowledge-base/{kbId}":{"get":{"tags":["Integrations"],"operationId":"get_api_integrations_knowledge_base_kbId","summary":"List knowledge-base integrations","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"kbId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":500,"default":100}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"default":0}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/integrations":{"post":{"tags":["Integrations"],"operationId":"post_api_integrations","summary":"Create an integration","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateIntegrationRequest"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/integrations/{id}":{"put":{"tags":["Integrations"],"operationId":"put_api_integrations_id","summary":"Update an integration","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateIntegrationRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["Integrations"],"operationId":"delete_api_integrations_id","summary":"Delete an integration","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/integrations/{id}/sync":{"post":{"tags":["Integrations"],"operationId":"post_api_integrations_id_sync","summary":"Start integration sync","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/integrations/{id}/runs":{"get":{"tags":["Integrations"],"operationId":"get_api_integrations_id_runs","summary":"List integration sync runs","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"default":0}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/integrations/{id}/status":{"get":{"tags":["Integrations"],"operationId":"get_api_integrations_id_status","summary":"Get integration sync status","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/integrations/confluence/spaces":{"post":{"tags":["Integrations"],"operationId":"post_api_integrations_confluence_spaces","summary":"Browse Confluence spaces","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfluenceSpaceBrowseRequest"},"examples":{"sample":{"summary":"Illustrative input; replace example resource IDs","value":{"query":"Support"}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/integrations/sharepoint/sites":{"get":{"tags":["Integrations"],"operationId":"get_api_integrations_sharepoint_sites","summary":"Browse SharePoint sites","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/integrations/sharepoint/sites/{siteId}/drives":{"get":{"tags":["Integrations"],"operationId":"get_api_integrations_sharepoint_sites_siteId_drives","summary":"Browse SharePoint drives","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"siteId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/integrations/sharepoint/drives/{driveId}/items":{"get":{"tags":["Integrations"],"operationId":"get_api_integrations_sharepoint_drives_driveId_items","summary":"Browse SharePoint drive items","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"driveId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/integrations/test-connection":{"post":{"tags":["Integrations"],"operationId":"post_api_integrations_test_connection","summary":"Test integration credentials","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestConnectionRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/transcribe":{"post":{"tags":["Voice"],"operationId":"post_api_transcribe","summary":"Transcribe uploaded audio","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]},{"ApiKeyAuth":[],"VisitorTokenAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"}},"required":["file"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/tts":{"post":{"tags":["Voice"],"operationId":"post_api_tts","summary":"Generate text-to-speech audio","security":[{"BearerAuth":[]},{"ApiKeyAuth":[],"VisitorTokenAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidatedTtsRequest"}}}},"responses":{"200":{"description":"Success","content":{"audio/mpeg":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/realtime-voice/models":{"get":{"tags":["Voice"],"operationId":"get_api_realtime_voice_models","summary":"List Live and Realtime voice models available to the organization","security":[{"BearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RealtimeVoiceModelsResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/realtime-voice/readiness":{"get":{"tags":["Voice"],"operationId":"get_api_realtime_voice_readiness","summary":"Check voice admission before requesting microphone access","description":"Requires agentId (UUID). Checks agent access, enabled voice, plan entitlement, supported billing and provider configuration without creating a conversation or provider session. Session creation repeats admission checks. Returns {success:true,data:{available:true}} or the normal admission error. Responses are not cached.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]},{"ApiKeyAuth":[],"VisitorTokenAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/realtime-voice/sessions":{"post":{"tags":["Voice"],"operationId":"post_api_realtime_voice_sessions","summary":"Create a realtime voice session","description":"Metered GPT-Live requires explicit rollout, published pricing and a healthy billing supervisor. Reserves 10 minutes of wallet and plan quota before dispatch. Metered responses include metered=true, deadlineAt, warningAt and remainingDurationMs. Only authenticated final provider usage is billed, capped at 10 minutes; missing evidence remains reserved for reconciliation.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]},{"ApiKeyAuth":[],"VisitorTokenAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RealtimeSessionRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/realtime-voice/sessions/{sessionId}/control":{"post":{"tags":["Voice"],"operationId":"post_api_realtime_voice_sessions_sessionId_control","summary":"Heartbeat or stop an owned metered voice session","description":"Strict body: {agentId: UUID, close: boolean}. Send close=false every 10 seconds while active; close=true requests irreversible shutdown. Tenant, agent and visitor/user ownership are checked durably. Returns {success:true,data:{closed:boolean}}. Accepts no client usage or pricing. Available even when new voice admission is disabled.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]},{"ApiKeyAuth":[],"VisitorTokenAuth":[]}],"parameters":[{"name":"sessionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RealtimeControlRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/realtime-voice/events":{"post":{"tags":["Voice"],"operationId":"post_api_realtime_voice_events","summary":"Record a realtime voice event","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]},{"ApiKeyAuth":[],"VisitorTokenAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RealtimeEventRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/knowledge-graph/freshness":{"get":{"tags":["Knowledge Graph"],"operationId":"get_api_knowledge_graph_freshness","summary":"Get knowledge freshness report","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/knowledge-graph/gaps":{"get":{"tags":["Knowledge Graph"],"operationId":"get_api_knowledge_graph_gaps","summary":"Get retrieval gap report","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/knowledge-graph/gaps/{queryHash}/related":{"get":{"tags":["Knowledge Graph"],"operationId":"get_api_knowledge_graph_gaps_queryHash_related","summary":"Get closest documents to an unanswered query","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"queryHash","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/knowledge-graph/sources":{"get":{"tags":["Knowledge Graph"],"operationId":"get_api_knowledge_graph_sources","summary":"Get knowledge source coverage","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/knowledge-graph/edges":{"get":{"tags":["Knowledge Graph"],"operationId":"get_api_knowledge_graph_edges","summary":"Get document-to-KB graph edges","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/knowledge-graph/overview":{"get":{"tags":["Knowledge Graph"],"operationId":"get_api_knowledge_graph_overview","summary":"Get knowledge health overview totals","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/exports/conversations":{"get":{"tags":["Exports"],"operationId":"get_api_exports_conversations","summary":"Export conversations","description":"Response field coverage is incomplete: only export formats are documented. JSON downloads do not use the common success envelope; do not infer their fields from a generated sample.","x-tuolen-response-coverage":"format-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"format","in":"query","schema":{"type":"string","enum":["csv","json"],"default":"csv"}},{"name":"agentId","in":"query","schema":{"type":"string","format":"uuid"}},{"name":"startDate","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"endDate","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"status","in":"query","schema":{"type":"string","enum":["active","waiting_handoff","human_assigned","resolved"]}},{"name":"includeMessages","in":"query","schema":{"type":"boolean","default":false}},{"name":"includeRawPII","in":"query","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"description":"JSON export file, not the common success envelope. Field-level schema coverage is incomplete."}},"text/csv":{"schema":{"type":"string"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/exports/conversations/{id}":{"get":{"tags":["Exports"],"operationId":"get_api_exports_conversations_id","summary":"Export one conversation","description":"Response field coverage is incomplete: only export formats are documented. JSON downloads do not use the common success envelope; do not infer their fields from a generated sample.","x-tuolen-response-coverage":"format-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"format","in":"query","schema":{"type":"string","enum":["txt","csv","json"],"default":"txt"}},{"name":"includeRawPII","in":"query","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"description":"JSON export file, not the common success envelope. Field-level schema coverage is incomplete."}},"text/csv":{"schema":{"type":"string"}},"text/plain":{"schema":{"type":"string"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/exports/conversations/{id}/email":{"post":{"tags":["Exports"],"operationId":"post_api_exports_conversations_id_email","summary":"Email a conversation transcript","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailTranscriptRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TranscriptEmailResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/exports/analytics":{"get":{"tags":["Exports"],"operationId":"get_api_exports_analytics","summary":"Export analytics data","description":"Response field coverage is incomplete: only export formats are documented. JSON downloads do not use the common success envelope; do not infer their fields from a generated sample.","x-tuolen-response-coverage":"format-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"format","in":"query","schema":{"type":"string","enum":["csv","json"],"default":"csv"}},{"name":"agentId","in":"query","schema":{"type":"string","format":"uuid"}},{"name":"startDate","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"endDate","in":"query","schema":{"type":"string","format":"date-time"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"description":"JSON export file, not the common success envelope. Field-level schema coverage is incomplete."}},"text/csv":{"schema":{"type":"string"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/visitor/verify-identity":{"post":{"tags":["Visitor Identity"],"operationId":"post_api_visitor_verify_identity","summary":"Link a signed-in widget visitor to a CRM contact","description":"Requires a live visitor session with host-signed email ownership proof. A CRM email match or an ID-only userHash cannot verify email ownership. Missing proof returns 403; the submitted email must match the signed address.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"ApiKeyAuth":[],"VisitorTokenAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyVisitorIdentityRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/whatsapp-channels":{"get":{"tags":["WhatsApp Channels"],"operationId":"get_api_whatsapp_channels","summary":"List WhatsApp channels","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"tags":["WhatsApp Channels"],"operationId":"post_api_whatsapp_channels","summary":"Create a WhatsApp channel","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWhatsAppChannelRequest"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/whatsapp-channels/{id}":{"get":{"tags":["WhatsApp Channels"],"operationId":"get_api_whatsapp_channels_id","summary":"Get a WhatsApp channel","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"patch":{"tags":["WhatsApp Channels"],"operationId":"patch_api_whatsapp_channels_id","summary":"Update a WhatsApp channel","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateWhatsAppChannelRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["WhatsApp Channels"],"operationId":"delete_api_whatsapp_channels_id","summary":"Delete a WhatsApp channel","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/whatsapp-channels/connect":{"post":{"tags":["WhatsApp Channels"],"operationId":"post_api_whatsapp_channels_connect","summary":"Create and connect a WhatsApp channel","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWhatsAppChannelRequest"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/whatsapp-channels/{id}/connect":{"post":{"tags":["WhatsApp Channels"],"operationId":"post_api_whatsapp_channels_id_connect","summary":"Connect a WhatsApp channel","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/whatsapp-channels/{id}/meta/setup":{"post":{"tags":["WhatsApp Channels"],"operationId":"post_api_whatsapp_channels_id_meta_setup","summary":"Validate Meta credentials and set up WhatsApp subscriptions without replacing an existing callback","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/whatsapp-channels/{id}/disconnect":{"post":{"tags":["WhatsApp Channels"],"operationId":"post_api_whatsapp_channels_id_disconnect","summary":"Disconnect a WhatsApp channel","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/whatsapp-channels/{id}/status":{"get":{"tags":["WhatsApp Channels"],"operationId":"get_api_whatsapp_channels_id_status","summary":"Get WhatsApp channel status","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/whatsapp-channels/{id}/meta/insights":{"get":{"tags":["WhatsApp Channels"],"operationId":"get_api_whatsapp_channels_id_meta_insights","summary":"Get 30-day Meta delivery insights","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/whatsapp-channels/{id}/meta/templates":{"get":{"tags":["WhatsApp Channels"],"operationId":"get_api_whatsapp_channels_id_meta_templates","summary":"List Meta message templates","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/whatsapp-channels/{id}/meta/flows":{"get":{"tags":["WhatsApp Channels"],"operationId":"get_api_whatsapp_channels_id_meta_flows","summary":"List Meta WhatsApp Flows","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/whatsapp-channels/{id}/meta/messages":{"post":{"tags":["WhatsApp Channels"],"operationId":"post_api_whatsapp_channels_id_meta_messages","summary":"Send a native Meta WhatsApp message","description":"Media messages require link or mediaId; links must use HTTPS. Provider rules, configured channel state and paid feature access still apply. Sending is a real external side effect.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendWhatsAppMessageRequest"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/whatsapp-channels/{id}/meta/messages/{messageId}/retry":{"post":{"tags":["WhatsApp Channels"],"operationId":"post_api_whatsapp_channels_id_meta_messages_messageId_retry","summary":"Retry a failed Meta WhatsApp message","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"messageId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/whatsapp-onboarding/config":{"get":{"tags":["WhatsApp Onboarding"],"operationId":"get_api_whatsapp_onboarding_config","summary":"Read guided signup availability","description":"Fresh workspace administrator JWT required; PATs are not accepted. Returns enabled and coexistence booleans only. Unconfigured deployments keep advanced manual setup available.","security":[{"WorkspaceJwtAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhatsAppOnboardingConfigResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/whatsapp-onboarding/connections":{"get":{"tags":["WhatsApp Onboarding"],"operationId":"get_api_whatsapp_onboarding_connections","summary":"Read guided connection and synchronization states for an accessible agent","description":"Requires agentId. Returns channel_id, mode, state, registration, token_expires_at, history_sync and contacts_sync. Never returns credentials. Available even when admission is disabled.","security":[{"WorkspaceJwtAuth":[]}],"parameters":[{"name":"agentId","in":"query","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhatsAppOnboardingConnectionsResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/whatsapp-onboarding/sessions":{"post":{"tags":["WhatsApp Onboarding"],"operationId":"post_api_whatsapp_onboarding_sessions","summary":"Prepare a tenant- and user-bound Meta Embedded Signup session","description":"Fresh administrator JWT, accessible active agent, WhatsApp entitlement and rollout required. Rate limited to one start per user/workspace per ten seconds. Returns sessionId, appId, configId, graphVersion and mode. Session expires in ten minutes. Optional channelId reauthorizes only an existing guided channel with the same agent and mode; manual channels are never adopted.","security":[{"WorkspaceJwtAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StartWhatsAppOnboardingRequest"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhatsAppOnboardingStartResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/whatsapp-onboarding/sessions/{sessionId}":{"get":{"tags":["WhatsApp Onboarding"],"operationId":"get_api_whatsapp_onboarding_sessions_sessionId","summary":"Read own authorization progress without credentials","description":"Rechecks current agent access. Returns phase, agentId, optional completed channelId, and phones only in ready phase. No authorization codes, tokens or PINs.","security":[{"WorkspaceJwtAuth":[]}],"parameters":[{"name":"sessionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhatsAppOnboardingSessionResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/whatsapp-onboarding/sessions/{sessionId}/exchange":{"post":{"tags":["WhatsApp Onboarding"],"operationId":"post_api_whatsapp_onboarding_sessions_sessionId_exchange","summary":"Exchange the Meta login callback code once","description":"Send immediately after the Meta login callback, without waiting for a FINISH browser event. Verifies app identity, permissions, authorized accounts and phone mode on the server. Returns phones with id, wabaId, displayPhone, name and coexistence; client-supplied asset IDs or access tokens are not accepted. Never automatically retry an uncertain code exchange.","security":[{"WorkspaceJwtAuth":[]}],"parameters":[{"name":"sessionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExchangeWhatsAppOnboardingRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhatsAppOnboardingExchangeResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/whatsapp-onboarding/sessions/{sessionId}/complete":{"post":{"tags":["WhatsApp Onboarding"],"operationId":"post_api_whatsapp_onboarding_sessions_sessionId_complete","summary":"Connect an authorized number or reauthorize its existing guided channel","description":"Select phoneId from the server-verified session. Cloud registration requires a six-digit PIN, which is never retained. Coexistence skips registration and requests contacts/history sync at most once. Rechecks assets and transactionally reserves capacity before provider writes. Returns channelId; completed session replays return the saved result. Uncertain registration or sync requires support review, not automatic retries or a duplicate channel. No customer test message is sent.","security":[{"WorkspaceJwtAuth":[]}],"parameters":[{"name":"sessionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompleteWhatsAppOnboardingRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhatsAppOnboardingCompleteResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/attachments/upload":{"post":{"tags":["Attachments"],"operationId":"post_api_attachments_upload","summary":"Upload a conversation attachment","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]},{"ApiKeyAuth":[],"VisitorTokenAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/AttachmentUploadRequest"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/attachments/{id}":{"get":{"tags":["Attachments"],"operationId":"get_api_attachments_id","summary":"Download or view an attachment","security":[{"BearerAuth":[]},{"ApiKeyAuth":[],"VisitorTokenAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/email-channels/oauth/zoho/capabilities":{"get":{"tags":["Email Channels"],"operationId":"get_api_email_channels_oauth_zoho_capabilities","summary":"Read Zoho US mail connector readiness","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/email-channels/oauth/zoho/start":{"post":{"tags":["Email Channels"],"operationId":"post_api_email_channels_oauth_zoho_start","summary":"Start administrator-owned Zoho mail read and reply authorization","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["agentId"],"properties":{"agentId":{"type":"string","format":"uuid"}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/email-channels/oauth/zoho/sessions/{sessionId}":{"get":{"tags":["Email Channels"],"operationId":"get_api_email_channels_oauth_zoho_sessions_sessionId","summary":"Read own authorization status and verified mailboxes without tokens","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"sessionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/email-channels/oauth/zoho/sessions/{sessionId}/complete":{"post":{"tags":["Email Channels"],"operationId":"post_api_email_channels_oauth_zoho_sessions_sessionId_complete","summary":"Save selected mailbox authorization with processing and sending disabled","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"sessionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["accountId"],"properties":{"accountId":{"type":"string","pattern":"^[0-9]{1,30}$"}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/email-channels/oauth/zoho/authorizations":{"get":{"tags":["Email Channels"],"operationId":"get_api_email_channels_oauth_zoho_authorizations","summary":"List saved authorizations and inbox status for an accessible agent","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"agentId","in":"query","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/email-channels/oauth/zoho/authorizations/{id}/enable":{"post":{"tags":["Email Channels"],"operationId":"post_api_email_channels_oauth_zoho_authorizations_id_enable","summary":"Activate or resume verified Zoho inbox; new mailboxes default to approval drafts","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/email-channels/oauth/zoho/authorizations/{id}":{"delete":{"tags":["Email Channels"],"operationId":"delete_api_email_channels_oauth_zoho_authorizations_id","summary":"Disconnect Zoho mailbox and remove local credentials","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/email-channels/{id}/zoho-inbound/sync":{"post":{"tags":["Email Channels"],"operationId":"post_api_email_channels_id_zoho_inbound_sync","summary":"Synchronize an active Zoho inbox with tenant and billing safeguards","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/email-channels":{"get":{"tags":["Email Channels"],"operationId":"get_api_email_channels","summary":"List email channels","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"tags":["Email Channels"],"operationId":"post_api_email_channels","summary":"Create an email channel","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateEmailChannelRequest"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/email-channels/{id}":{"get":{"tags":["Email Channels"],"operationId":"get_api_email_channels_id","summary":"Get an email channel","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"patch":{"tags":["Email Channels"],"operationId":"patch_api_email_channels_id","summary":"Update an email channel","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateEmailChannelRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["Email Channels"],"operationId":"delete_api_email_channels_id","summary":"Delete an email channel","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/email-channels/{id}/test":{"post":{"tags":["Email Channels"],"operationId":"post_api_email_channels_id_test","summary":"Test an email channel","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/email-channels/{id}/gmail-inbound":{"post":{"tags":["Email Channels"],"operationId":"post_api_email_channels_id_gmail_inbound","summary":"Enable or pause opt-in Gmail inbox synchronization","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["enabled"],"properties":{"enabled":{"type":"boolean"},"lookbackMinutes":{"type":"integer","minimum":0,"maximum":60,"default":0}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/email-channels/{id}/gmail-inbound/sync":{"post":{"tags":["Email Channels"],"operationId":"post_api_email_channels_id_gmail_inbound_sync","summary":"Synchronize one page of incoming Gmail messages","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"retryQuarantined":{"type":"boolean","description":"Explicitly retry held malformed messages within their original import boundary."}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/email-channels/{id}/drafts/{messageId}/approve":{"post":{"tags":["Email Channels"],"operationId":"post_api_email_channels_id_drafts_messageId_approve","summary":"Approve and queue an email draft","description":"Persists approval and queues durable delivery; provider acceptance occurs later.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"messageId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReviewEmailDraftRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/email-channels/{id}/drafts/{messageId}/reject":{"post":{"tags":["Email Channels"],"operationId":"post_api_email_channels_id_drafts_messageId_reject","summary":"Reject an email draft without sending","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"messageId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReviewEmailDraftRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/email-channels/{id}/test-template":{"post":{"tags":["Email Channels"],"operationId":"post_api_email_channels_id_test_template","summary":"Send a published template preview to the authenticated user","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestEmailTemplateRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/email-channels/{id}/send":{"post":{"tags":["Email Channels"],"operationId":"post_api_email_channels_id_send","summary":"Send an outbound email through a channel","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendEmailChannelReplyRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/email-channels/{id}/drafts/{messageId}/send":{"post":{"tags":["Email Channels"],"operationId":"post_api_email_channels_id_drafts_messageId_send","summary":"Approve and send an existing AI email draft","description":"Same roles and agent membership as channel send. Requires an email conversation bound to this organization, agent and exact channel; unbound legacy conversations need one unambiguous channel. First approval wins: retries return the same Message, ignoring subsequent content changes. Recipient, sender and subject are fixed at approval. deliveryStatus is queued, sending, sent (provider accepted), or delivery_failed with draftStatus needs_review. Uncertain delivery uses failureCode delivery_outcome_unknown and is never automatically retried. Queue outage or a three-second acknowledgement timeout returns HTTP 202 with the original approved Message, deliveryStatus queued, draftStatus approved, queueStatus pending, approvedBy and approvedAt. Pending means queue acknowledgement is unknown, not that sending is impossible. Retry queueing must POST the same IDs and stored approved content; the same deterministic job ID is republished and a durable worker claim prevents resending even after queue job removal. It may return sending, sent or delivery_failed if work advanced. Do not retry delivery_failed/needs_review. No automatic reservation dispatcher is installed. Subject matches the draft emailSubject, falling back to conversation.title and then Your message. Unverifiable, incomplete, or missing-source attachment sets return HTTP 400 VALIDATION_ERROR before any approval or content change; attachments are never silently omitted. Validated attachments are rechecked by the worker. The private emailReview reservation is not part of message responses.","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"messageId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendEmailDraftRequest"}}}},"responses":{"202":{"description":"Accepted","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","const":true},"data":{"type":"object","required":["id","conversationId","sender","content","metadata","createdAt","updatedAt"],"properties":{"id":{"type":"string","format":"uuid"},"conversationId":{"type":"string","format":"uuid"},"sender":{"type":"string","const":"bot"},"senderUserId":{"type":["string","null"]},"content":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"metadata":{"type":"object","additionalProperties":true,"properties":{"emailReplySource":{"const":"ai"},"approvedBy":{"type":"string","format":"uuid"},"approvedAt":{"type":"string","format":"date-time"},"deliveryStatus":{"enum":["queued","sending","sent","delivery_failed"]},"draftStatus":{"enum":["approved","needs_review"]},"queueStatus":{"enum":["pending","enqueued"]},"failureCode":{"enum":["delivery_outcome_unknown","reviewed_send_blocked"]},"failureReason":{"type":"string"},"attachmentDelivery":{"enum":["included","none"]}}}}}}}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/email-templates":{"get":{"tags":["Email Templates"],"operationId":"get_api_email_templates","summary":"List email templates","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"tags":["Email Templates"],"operationId":"post_api_email_templates","summary":"Create an email template","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateEmailTemplateRequest"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/email-templates/capabilities":{"get":{"tags":["Email Templates"],"operationId":"get_api_email_templates_capabilities","summary":"Read email template permissions and supported capabilities","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/email-templates/preview":{"post":{"tags":["Email Templates"],"operationId":"post_api_email_templates_preview","summary":"Preview an email template payload","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreviewEmailTemplateRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/email-templates/{id}":{"patch":{"tags":["Email Templates"],"operationId":"patch_api_email_templates_id","summary":"Update an email template","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateEmailTemplateRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["Email Templates"],"operationId":"delete_api_email_templates_id","summary":"Delete an email template","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ArchiveEmailTemplateRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/email-templates/{id}/history":{"get":{"tags":["Email Templates"],"operationId":"get_api_email_templates_id_history","summary":"Read immutable email template revisions","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"offset","in":"query","required":false,"schema":{"type":["integer","null"],"minimum":0,"maximum":100000,"default":0}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/email-templates/{id}/rollback":{"post":{"tags":["Email Templates"],"operationId":"post_api_email_templates_id_rollback","summary":"Rollback an email template to a prior revision","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RollbackEmailTemplateRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/email-templates/{id}/preview":{"post":{"tags":["Email Templates"],"operationId":"post_api_email_templates_id_preview","summary":"Preview a saved email template","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/telephony-channels":{"get":{"tags":["Telephony Channels"],"operationId":"get_api_telephony_channels","summary":"List telephony channels","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"tags":["Telephony Channels"],"operationId":"post_api_telephony_channels","summary":"Create a telephony channel","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTelephonyChannelRequest"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/telephony-channels/{id}":{"get":{"tags":["Telephony Channels"],"operationId":"get_api_telephony_channels_id","summary":"Get a telephony channel","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"patch":{"tags":["Telephony Channels"],"operationId":"patch_api_telephony_channels_id","summary":"Update a telephony channel","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTelephonyChannelRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["Telephony Channels"],"operationId":"delete_api_telephony_channels_id","summary":"Delete a telephony channel","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/telephony-channels/{id}/calls":{"get":{"tags":["Telephony Channels"],"operationId":"get_api_telephony_channels_id_calls","summary":"List calls for a telephony channel","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/inbound-phone":{"get":{"tags":["Inbound Phone"],"operationId":"get_api_inbound_phone","summary":"List permitted BYON connections and calling readiness","description":"Returns {success:true,data:{connections,configured,sipHost,callingAvailable,callingUnavailableReason,billing}} with billing: {mode, tariff, aiTariffs?}. mode is legacy_seconds, wallet_service_v1 or native_ai_v1. Native mode includes aiTariffs: null when unavailable, otherwise [{actionKey,unit:token,creditsPerUnit,publicationId}] from a valid current publication and current STT/TTS policies. Native tariff is null: STT, TTS and all agent processing belong to AI usage, with no separate Tuolen call-time charge; channel and knowledge charges remain separate, and carrier charges are external. No rates are supplied by this contract. Historical wallet-service tariff remains {creditsPerSecond:number,publicationId:UUID} when published, even though new production wallet-service calls are unsupported; legacy and native tariff are null. aiTariffs is omitted outside native mode. This is display/readiness information, not a per-call price guarantee (reservations pin their terms). configured describes gateway configuration only. callingUnavailableReason is gateway_not_configured, release_not_approved, speech_metering_unsupported (including missing, invalid or expired native policies, disabled AI metering, or production wallet mode), billing_not_ready (no usable published speech tariff), legacy_balance_review, or null, in that gate order. Wallet mode reviews positive legacy seconds or pending/active legacy calls; native mode reviews pending/active non-native calls, not positive historical seconds alone. callingAvailable only clears these runtime configuration gates; it does not certify number approval, paid entitlement, wallet funds, worker health, transport enforcement or a successful audio test. INBOUND_PHONE_ENABLED and INBOUND_PHONE_RELEASE_APPROVED default false; INBOUND_PHONE_BILLING_MODE defaults blocked. When speech metering is unsupported, calls are blocked; payment and prepaid allocations do not override this safeguard.","security":[{"BearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InboundPhoneListResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"tags":["Inbound Phone"],"operationId":"post_api_inbound_phone","summary":"Create inbound-only connection; organization admin required","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateInboundPhoneRequest"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/inbound-phone/balance":{"get":{"tags":["Inbound Phone"],"operationId":"get_api_inbound_phone_balance","summary":"Get legacy prepaid available seconds and current billing mode","description":"Returns {success:true,data:{availableSeconds:integer,billingMode}}. billingMode is legacy_seconds, wallet_service_v1 or native_ai_v1. availableSeconds always reports unreserved historical legacy prepaid seconds, not wallet credits, native AI credits or a free speech allowance; active legacy reservations are excluded. Neither wallet nor native mode converts this balance or changes its units.","security":[{"BearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InboundPhoneBalanceResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/inbound-phone/{id}":{"patch":{"tags":["Inbound Phone"],"operationId":"patch_api_inbound_phone_id","summary":"Edit or disable connection; number/provider changes revoke operator approval","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateInboundPhoneRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/inbound-phone/{id}/provision":{"post":{"tags":["Inbound Phone"],"operationId":"post_api_inbound_phone_id_provision","summary":"Provision approved authenticated SIP trunk and isolated dispatch; admin only","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InboundPhoneActionRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/inbound-phone/{id}/rotate-credentials":{"post":{"tags":["Inbound Phone"],"operationId":"post_api_inbound_phone_id_rotate_credentials","summary":"Rotate SIP credentials and require another test call; admin only","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InboundPhoneActionRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/inbound-phone/{id}/setup":{"get":{"tags":["Inbound Phone"],"operationId":"get_api_inbound_phone_id_setup","summary":"Reveal provider routing credentials; admin-only, audited, never cached","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/inbound-phone/{id}/calls":{"get":{"tags":["Inbound Phone"],"operationId":"get_api_inbound_phone_id_calls","summary":"List permitted inbound sessions; optional limit 1–100 (default 50)","description":"Returns {success:true,data:{sessions:[...]}} in newest-first order, scoped to the organization and permitted historical agents. Each session includes billingMode (legacy_seconds, wallet_service_v1 or native_ai_v1), speechState (intent, reserved, starting, started, settled, review, or null) and speechServiceSeconds (integer 0–3600 or null). Speech service seconds are the capped, rounded-up server-authorized service-time outcome, not measured STT/TTS usage or carrier duration. Confirmed wallet usage runs from server dispatch to the earlier of confirmed stop receipt and the admission-based absolute deadline (session.started_at + reserved_seconds seconds), not dispatch plus the reserved cap. Clamp the stop timestamp before calculating elapsed time, round up to whole seconds, and cap at reserved_seconds. Stop-ack network delay cannot extend billing past this deadline. Missing speech records (including legacy calls) yield null state/outcome; an outcome may also be unknown or awaiting reconciliation, and null is not zero. Do not infer wallet settlement from session status or legacy billedSeconds; inspect speechState separately. For native calls, speechServiceSeconds is null and no elapsed-time charge is inferred; per-request native token receipts settle independently, so call status and speechState alone do not certify all native operations settled. Existing session fields remain available; the worker token hash is omitted.","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":50}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InboundPhoneCallsResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/slack-channels/oauth/capabilities":{"get":{"tags":["Slack Channels"],"operationId":"get_api_slack_channels_oauth_capabilities","summary":"Read shared Slack app authorization readiness","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/slack-channels/oauth/start":{"post":{"tags":["Slack Channels"],"operationId":"post_api_slack_channels_oauth_start","summary":"Start administrator-owned Slack workspace authorization","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["agentId"],"properties":{"agentId":{"type":"string","format":"uuid"}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/slack-channels/oauth/sessions/{sessionId}":{"get":{"tags":["Slack Channels"],"operationId":"get_api_slack_channels_oauth_sessions_sessionId","summary":"Read own Slack authorization status without credentials","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"sessionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/slack-channels/oauth/sessions/{sessionId}/channels":{"post":{"tags":["Slack Channels"],"operationId":"post_api_slack_channels_oauth_sessions_sessionId_channels","summary":"Refresh eligible support channels for an authorized Slack workspace","description":"No request body. Refreshes eligible channels for your own authorized OAuth session. Does not accept or return a bot token.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"sessionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/slack-channels/oauth/sessions/{sessionId}/complete":{"post":{"tags":["Slack Channels"],"operationId":"post_api_slack_channels_oauth_sessions_sessionId_complete","summary":"Connect the selected Slack support channel without overwriting existing connections","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"sessionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["channelId"],"properties":{"channelId":{"type":"string","pattern":"^[CG][A-Z0-9]{8,}$"}}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/slack-channels/available-channels":{"post":{"tags":["Slack Channels"],"operationId":"post_api_slack_channels_available_channels","summary":"Browse available Slack channels","description":"Manual bot-token setup; org_admin/admin and Slack entitlement required. The server also validates Slack bot-token format. Keep botToken on your server; prefer the managed OAuth flow when available.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackChannelBrowseRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/slack-channels":{"get":{"tags":["Slack Channels"],"operationId":"get_api_slack_channels","summary":"List Slack channels","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"tags":["Slack Channels"],"operationId":"post_api_slack_channels","summary":"Create a Slack channel","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSlackChannelRequest"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/slack-channels/{id}":{"get":{"tags":["Slack Channels"],"operationId":"get_api_slack_channels_id","summary":"Get a Slack channel","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"patch":{"tags":["Slack Channels"],"operationId":"patch_api_slack_channels_id","summary":"Update a Slack channel","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateSlackChannelRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["Slack Channels"],"operationId":"delete_api_slack_channels_id","summary":"Delete a Slack channel","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/slack-channels/{id}/test":{"post":{"tags":["Slack Channels"],"operationId":"post_api_slack_channels_id_test","summary":"Test a Slack channel","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/d365-handoff/links":{"get":{"tags":["D365 Handoff"],"operationId":"get_api_d365_handoff_links","summary":"List D365 handoff links","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":200,"default":50}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"default":0}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/audit-logs/agent/{agentId}":{"get":{"tags":["Audit Logs"],"operationId":"get_api_audit_logs_agent_agentId","summary":"List audit logs for an agent","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"agentId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":30}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/personal-tokens":{"get":{"tags":["Personal Access Tokens"],"operationId":"get_api_personal_tokens","summary":"List personal access tokens","security":[{"BearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersonalTokenListResponse"},"examples":{"sample":{"summary":"Synthetic example, not live workspace data","value":{"success":true,"data":[]}}}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"tags":["Personal Access Tokens"],"operationId":"post_api_personal_tokens","summary":"Create a personal access token","description":"Requires org_admin, admin or developer with fresh credential validation. At most 10 active tokens per user. expiresAt must be a future ISO date-time. The raw token is returned once only.","security":[{"BearerAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersonalTokenCreateRequest"},"examples":{"sample":{"summary":"Illustrative input; replace example resource IDs","value":{"name":"Server integration"}}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersonalTokenCreateResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["Personal Access Tokens"],"operationId":"delete_api_personal_tokens","summary":"Revoke all personal access tokens","security":[{"BearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcknowledgementResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/personal-tokens/{id}":{"delete":{"tags":["Personal Access Tokens"],"operationId":"delete_api_personal_tokens_id","summary":"Revoke a personal access token","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcknowledgementResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/webhooks":{"get":{"tags":["Webhooks"],"operationId":"get_api_webhooks","summary":"List outbound webhook endpoints","security":[{"BearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookListResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"tags":["Webhooks"],"operationId":"post_api_webhooks","summary":"Create an outbound webhook endpoint","description":"Registers an outbound receiver. A generated signingSecret is returned once at the top level. Deliveries are single best-effort attempts with a 10-second timeout; no automatic retry, replay or ordering guarantee. See the Webhooks guide.","security":[{"BearerAuth":[]}],"parameters":[],"requestBody":{"required":true,"description":"URL must be a public HTTP(S) endpoint. Creating or enabling a webhook requires the paid webhook feature. PATCH requires at least one supported field. If secret is omitted on creation, signingSecret is returned once; store it securely.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWebhookRequest"},"examples":{"sample":{"summary":"Illustrative input; replace example resource IDs","value":{"name":"Conversation events","url":"https://example.com/webhooks/tuolen","events":["conversation.created","conversation.resolved"],"isActive":true}}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookCreateResponse"},"examples":{"sample":{"summary":"Synthetic example, not live workspace data","value":{"success":true,"data":{"id":"44444444-4444-4444-8444-444444444444","organizationId":"22222222-2222-4222-8222-222222222222","name":"Conversation events","url":"https://example.com/webhooks/tuolen","events":["conversation.created","conversation.resolved"],"isActive":true,"hasSecret":true,"failureCount":0,"lastDeliveredAt":null,"lastError":null,"createdAt":"2026-10-04T12:00:00.000Z","updatedAt":"2026-10-04T12:00:00.000Z"},"signingSecret":"EXAMPLE_ONLY_REPLACE_WITH_YOUR_GENERATED_SECRET"}}}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/webhooks/{id}":{"patch":{"tags":["Webhooks"],"operationId":"patch_api_webhooks_id","summary":"Update an outbound webhook endpoint","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"description":"URL must be a public HTTP(S) endpoint. Creating or enabling a webhook requires the paid webhook feature. PATCH requires at least one supported field. If secret is omitted on creation, signingSecret is returned once; store it securely.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateWebhookRequest"},"examples":{"sample":{"summary":"Illustrative input; replace example resource IDs","value":{"isActive":false}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["Webhooks"],"operationId":"delete_api_webhooks_id","summary":"Delete an outbound webhook endpoint","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcknowledgementResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/webhooks/{id}/test":{"post":{"tags":["Webhooks"],"operationId":"post_api_webhooks_id_test","summary":"Send a test webhook delivery","description":"No request body. Sends a real tool.executed test event with data {test: true, organizationId}, even if that event is not selected. Returns HTTP 200 for a receiver 2xx, otherwise HTTP 502 with a delivery result, not the usual ErrorResponse.","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookTestResponse"},"examples":{"sample":{"summary":"Synthetic example, not live workspace data","value":{"success":true,"data":{"success":true,"statusCode":204,"error":null,"durationMs":85}}}}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Receiver failed, timed out, redirected or returned a non-2xx status","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookTestResponse"},"examples":{"failure":{"value":{"success":false,"data":{"success":false,"statusCode":503,"error":"Endpoint returned 503","durationMs":85}}}}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/webhooks/{id}/deliveries":{"get":{"tags":["Webhooks"],"operationId":"get_api_webhooks_id_deliveries","summary":"List webhook deliveries","description":"Returns up to the latest 100 delivery-log records, newest first, with no pagination or replay API. The log record id is not the X-Tuolen-Delivery ID. Logging itself is best-effort.","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookDeliveriesResponse"},"examples":{"sample":{"summary":"Synthetic example, not live workspace data","value":{"success":true,"data":[]}}}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/connections":{"get":{"tags":["Connections"],"operationId":"get_api_connections","summary":"List reusable connections","security":[{"BearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectionListResponse"},"examples":{"sample":{"summary":"Synthetic example, not live workspace data","value":{"success":true,"data":[]}}}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"tags":["Connections"],"operationId":"post_api_connections","summary":"Create a reusable connection","security":[{"BearerAuth":[]}],"parameters":[],"requestBody":{"required":true,"description":"Full connection input, including credentials, is required for both POST and PUT. For api_key, config.headerName is required. For oauth2_client, config.tokenUrl and config.clientId are required; the token URL must be public. Credentials are encrypted and never returned.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectionRequest"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectionResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/connections/{id}":{"put":{"tags":["Connections"],"operationId":"put_api_connections_id","summary":"Replace a reusable connection","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"description":"Full connection input, including credentials, is required for both POST and PUT. For api_key, config.headerName is required. For oauth2_client, config.tokenUrl and config.clientId are required; the token URL must be public. Credentials are encrypted and never returned.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectionRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectionResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["Connections"],"operationId":"delete_api_connections_id","summary":"Delete a reusable connection","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcknowledgementResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/widget/visitors/anonymous-session":{"post":{"tags":["Widget Visitor"],"operationId":"post_api_widget_visitors_anonymous_session","summary":"Create an anonymous recovery session","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"ApiKeyAuth":[],"VisitorTokenAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/widget/visitors/recover":{"post":{"tags":["Widget Visitor"],"operationId":"post_api_widget_visitors_recover","summary":"Recover an anonymous visitor session","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"ApiKeyAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["recoveryToken"],"properties":{"recoveryToken":{"type":"string","minLength":10,"description":"Previously issued anonymous recovery credential. Replace it with the rotated token after successful recovery."}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/widget/visitors/revoke":{"post":{"tags":["Widget Visitor"],"operationId":"post_api_widget_visitors_revoke","summary":"Revoke an anonymous recovery credential","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"ApiKeyAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["recoveryToken"],"properties":{"recoveryToken":{"type":"string","minLength":10}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/widget/availability/{agentId}":{"get":{"tags":["Widget Runtime"],"operationId":"get_api_widget_availability_agentId","summary":"Get widget team availability","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"ApiKeyAuth":[],"VisitorTokenAuth":[]}],"parameters":[{"name":"agentId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/news":{"get":{"tags":["News"],"operationId":"get_api_news","summary":"List accessible organization news posts","description":"News is included on every plan. Optional agentId narrows the list; organization and agent access still apply.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"agentId","in":"query","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"tags":["News"],"operationId":"post_api_news","summary":"Create a news draft or publication","description":"Explicitly target agents in the same organization. Content is plain text, not executable HTML. Future publishAt dates schedule visibility without a background publishing job.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateNewsPostRequest"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/news/{id}":{"get":{"tags":["News"],"operationId":"get_api_news_id","summary":"Read an accessible news post including drafts","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"patch":{"tags":["News"],"operationId":"patch_api_news_id","summary":"Edit, publish, unpublish or archive a news post","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateNewsPostRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["News"],"operationId":"delete_api_news_id","summary":"Delete a news post and its readership records","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/news/{id}/analytics":{"get":{"tags":["News"],"operationId":"get_api_news_id_analytics","summary":"Read aggregate news readership and reactions","description":"Returns aggregate counts, never visitor contact details. Duplicate reader events are deduplicated.","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","const":true},"data":{"type":"object","required":["views","uniqueReaders","reactions"],"properties":{"views":{"type":"integer","minimum":0},"uniqueReaders":{"type":"integer","minimum":0},"reactions":{"type":"object","required":["like","love","celebrate"],"properties":{"like":{"type":"integer","minimum":0},"love":{"type":"integer","minimum":0},"celebrate":{"type":"integer","minimum":0}}}}}}}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/widget/news/{agentId}":{"get":{"tags":["Widget News"],"operationId":"get_api_widget_news_agentId","summary":"Read the published news feed for this visitor","description":"Requires News enabled and an allowed widget origin. Excludes drafts, archived posts, future publications and nonmatching audiences. Identified audiences require verified visitor identity. Available on all plans.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"ApiKeyAuth":[],"VisitorTokenAuth":[]}],"parameters":[{"name":"agentId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":50,"default":20}},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Opaque nextCursor returned by the previous feed response."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/widget/news/{agentId}/{postId}":{"get":{"tags":["Widget News"],"operationId":"get_api_widget_news_agentId_postId","summary":"Read a visible news article","description":"Response field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"ApiKeyAuth":[],"VisitorTokenAuth":[]}],"parameters":[{"name":"agentId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"postId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/widget/news/{agentId}/{postId}/events":{"post":{"tags":["Widget News"],"operationId":"post_api_widget_news_agentId_postId_events","summary":"Record a news view or reaction","description":"Only currently visible posts accept events. Reactions also require reactionsEnabled. Reader identity is derived from the authenticated visitor session, never from the request body.\n\nResponse field coverage is incomplete: only the common envelope is documented. Do not infer a data shape from the generated sample or use this operation for generated-SDK models without verifying its runtime response.","x-tuolen-response-coverage":"envelope-only","security":[{"ApiKeyAuth":[],"VisitorTokenAuth":[]}],"parameters":[{"name":"agentId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"postId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewsEventRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/public/health":{"get":{"tags":["Public API"],"operationId":"get_api_public_health","summary":"Public API health","security":[],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/public/v1/conversations":{"get":{"tags":["Public API"],"operationId":"get_api_public_v1_conversations","summary":"List public API conversations","security":[{"ReportingKeyAuth":[]}],"parameters":[{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1,"maximum":100000}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"startDate","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"endDate","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"status","in":"query","schema":{"type":"string","enum":["active","waiting_handoff","human_assigned","resolved"]}},{"name":"ratedOnly","in":"query","schema":{"type":"boolean","default":false}},{"name":"includeMessages","in":"query","schema":{"type":"boolean","default":false}},{"name":"includeMessageContent","in":"query","schema":{"type":"boolean","default":false}},{"name":"includeMessageMetadata","in":"query","schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicConversationListResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/public/v1/conversations/{conversationId}":{"get":{"tags":["Public API"],"operationId":"get_api_public_v1_conversations_conversationId","summary":"Get one public API conversation","security":[{"ReportingKeyAuth":[]}],"parameters":[{"name":"conversationId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"startDate","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"endDate","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"includeMessages","in":"query","schema":{"type":"boolean","default":true}},{"name":"includeMessageContent","in":"query","schema":{"type":"boolean","default":false}},{"name":"includeMessageMetadata","in":"query","schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicConversationResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/public/v1/csat":{"get":{"tags":["Public API"],"operationId":"get_api_public_v1_csat","summary":"Get public API CSAT metrics","security":[{"ReportingKeyAuth":[]}],"parameters":[{"name":"startDate","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"endDate","in":"query","schema":{"type":"string","format":"date-time"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicCsatResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/public/v1/overview":{"get":{"tags":["Public API"],"operationId":"get_api_public_v1_overview","summary":"Get public API overview metrics","security":[{"ReportingKeyAuth":[]}],"parameters":[{"name":"startDate","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"endDate","in":"query","schema":{"type":"string","format":"date-time"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicOverviewResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Operation-specific state, version, entitlement or billing conflict. Idempotency applies only where the operation explicitly documents it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited. Honor Retry-After when present. Route-specific limits may be stricter than the general API budget.","headers":{"Retry-After":{"description":"Wait this many seconds before retrying when supplied by a limiter.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimit":{"value":{"success":false,"error":"Too many requests, please try again later."}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Required collection, billing publication or provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}}}