{"basePath":"/","definitions":{"api.AdminUsageEventsPage":{"properties":{"has_more":{"description":"HasMore indicates whether more rows are available after this page.","example":true,"type":"boolean"},"items":{"description":"Items is the list of usage events in this page.","items":{"$ref":"#/definitions/api.usageEventResponse"},"type":"array"},"limit":{"description":"Limit is the page size used for this request.","example":100,"type":"integer"},"next_after_id":{"description":"NextAfterID is the tie-breaker ID to use together with NextFrom.","example":"usage_evt_123","type":"string"},"next_from":{"description":"NextFrom is the next checkpoint time for incremental polling.","example":"2026-03-25T08:30:00Z","type":"string"},"profile_id":{"description":"UserID is the target user's identifier.","example":"user_123","type":"string"}},"type":"object"},"api.AdminUsageEventsResponseDoc":{"properties":{"code":{"description":"Code is the business status code (0 = success).","example":0,"type":"integer"},"data":{"allOf":[{"$ref":"#/definitions/api.AdminUsageEventsPage"}],"description":"Data contains the paginated usage events for the user."},"message":{"description":"Message is a human-readable status description.","example":"ok","type":"string"}},"type":"object"},"api.AdminUsageSummaryData":{"properties":{"items":{"description":"Items lists per-usage-type aggregated summaries for the user.","items":{"$ref":"#/definitions/api.usageAggregateResponse"},"type":"array"},"month":{"description":"Month is the target month in \"YYYY-MM\" format.","example":"2026-03","type":"string"},"profile_id":{"description":"UserID is the target user's identifier.","example":"user_123","type":"string"}},"type":"object"},"api.AdminUsageSummaryResponseDoc":{"properties":{"code":{"description":"Code is the business status code (0 = success).","example":0,"type":"integer"},"data":{"allOf":[{"$ref":"#/definitions/api.AdminUsageSummaryData"}],"description":"Data contains the user's monthly usage summary."},"message":{"description":"Message is a human-readable status description.","example":"ok","type":"string"}},"type":"object"},"api.AgentAPIResponseDoc":{"properties":{"code":{"description":"Code is the business status code (0 = success).","example":0,"type":"integer"},"data":{"description":"Data is the newly created instance ID.","example":"demoinstance","type":"string"},"message":{"description":"Message is a human-readable status description.","example":"ok","type":"string"}},"type":"object"},"api.AgentInfo":{"properties":{"agent_id":{"description":"AgentID is the agent identifier for the instance.","type":"string"},"mailboxes":{"description":"Mailboxes is the list of mailboxes for the instance.","items":{"type":"string"},"type":"array"}},"type":"object"},"api.AgentMaintenanceRequest":{"properties":{"action":{"description":"Action is the maintenance command name. Currently only \"doctor\" is supported.","type":"string"}},"type":"object"},"api.AgentMaintenanceResponseDoc":{"properties":{"code":{"description":"Code is the business status code (0 = success).","example":0,"type":"integer"},"data":{"allOf":[{"$ref":"#/definitions/api.AgentMaintenanceResultDoc"}],"description":"Data contains the maintenance result."},"message":{"description":"Message is a human-readable status description.","example":"ok","type":"string"}},"type":"object"},"api.AgentMaintenanceResultDoc":{"properties":{"action":{"description":"Action echoes back the executed maintenance action.","example":"doctor","type":"string"},"output":{"description":"Output is the combined stdout+stderr from the remote command.","example":"OpenClaw doctor: all checks passed.\nGateway restarted.","type":"string"}},"type":"object"},"api.BackupJobData":{"properties":{"file":{"description":"File is the backup archive filename on the remote instance (e.g. \"backup-20260325.tar.gz\"); empty while pending/running.","type":"string"},"job_id":{"description":"JobID is the unique identifier for this backup job (server-generated random token).","type":"string"},"path":{"description":"Path is the full remote path to the archive (openclaw backup dir + File); empty while pending/running.","type":"string"},"status":{"description":"Status is the job lifecycle state: \"pending\", \"running\", \"completed\", or \"failed\" (from repository.BackupJob.Status).","type":"string"}},"type":"object"},"api.BackupJobResponseDoc":{"properties":{"code":{"description":"Code is the business status code (0 = success).","example":0,"type":"integer"},"data":{"allOf":[{"$ref":"#/definitions/api.BackupJobData"}],"description":"Data contains the backup job detail."},"message":{"description":"Message is a human-readable status description.","example":"ok","type":"string"}},"type":"object"},"api.BandwidthInfo":{"properties":{"inbound_bytes":{"description":"InboundBytes is the cumulative inbound transfer in bytes for this month (record-only, not enforced).","type":"integer"},"inbound_mb":{"description":"InboundMB is the human-readable inbound transfer, formatted as \"%.2f MB\".","type":"string"},"last_checked":{"description":"LastChecked is the last bandwidth poll time in RFC 3339 format; empty string if never checked.","type":"string"},"limit_bytes":{"description":"LimitBytes is the per-instance bandwidth cap in bytes, derived from InstanceState.BandwidthLimitBytes; 0 means the global monitor default applies.","type":"integer"},"month":{"description":"Month is the calendar month in \"YYYY-MM\" format (e.g. \"2026-03\"), derived from the 1st of the month.","type":"string"},"outbound_bytes":{"description":"OutboundBytes is the cumulative outbound transfer in bytes for this month (from BandwidthUsage.OutboundBytes).","type":"integer"},"outbound_mb":{"description":"OutboundMB is the human-readable outbound transfer, formatted as \"%.2f MB\".","type":"string"},"status":{"description":"Status is the bandwidth enforcement state: \"normal\" or \"throttled\" (from BandwidthUsage.Status).","type":"string"}},"type":"object"},"api.ChannelConfig":{"properties":{"botToken":{"description":"BotToken is the platform bot credential (from repository.Channel.BotToken).","type":"string"},"type":{"description":"Type is the channel platform, e.g. \"telegram\" (from repository.Channel.Type).","type":"string"}},"type":"object"},"api.Channels":{"properties":{"bot_token":{"description":"BotToken is the platform-specific bot credential (e.g. Telegram Bot API token).","type":"string"},"type":{"description":"Type is the channel platform, e.g. \"telegram\".","type":"string"}},"type":"object"},"api.CoboWalletSecretsOptions":{"properties":{"config_json":{"type":"string"},"credentials_json":{"type":"string"},"onboard_state_json":{"type":"string"},"profile_name":{"type":"string"}},"type":"object"},"api.CreateAgentRequest":{"properties":{"agent_id":{"description":"AgentID is the agent identifier used for mailbox registration; required when mail is enabled.","type":"string"},"agent_type":{"description":"AgentType selects the agent runtime. Default: \"openclaw\". Allowed: \"openclaw\", \"hermes\".","type":"string"},"backup_file_id":{"description":"BackupFileID references a previously uploaded backup archive to restore on first boot.","type":"string"},"bandwidth_limit_bytes":{"description":"BandwidthLimitBytes is derived automatically from the resolved Droplet plan\nand should not be set by callers. Kept for backward compatibility but ignored.","type":"integer"},"cloud_provider":{"description":"CloudProvider selects the infrastructure backend. Default: \"digitalocean-droplet\".","type":"string"},"env":{"description":"Env is the HAST deployment tier (DigitalOcean tag hast_env:…). Omit or empty → \"dev\". Allowed: dev, stg, prod.","enum":["dev","stg","prod"],"example":"dev","type":"string"},"experts":{"description":"Experts optionally queues Hermes experts during initial agent creation.","items":{"$ref":"#/definitions/api.CreateExpertRequest"},"type":"array"},"id":{"description":"ID is the caller-chosen unique instance identifier (will be normalized via utils.FormatID).","type":"string"},"mail":{"allOf":[{"$ref":"#/definitions/api.MailOptions"}],"description":"Mail configures optional mailbox integration for the instance."},"model":{"description":"Model is the raw primary LLM model name; each runtime maps it to its own effective config value.","type":"string"},"name":{"description":"Name is an optional human-readable display name for the instance.","type":"string"},"openrouterApiKey":{"description":"OpenrouterApiKey is the OpenRouter API key injected into the WAF proxy headers. Required.","type":"string"},"region":{"description":"Region is the cloud-provider region slug (e.g. \"sgp1\"). Empty = provider default.","type":"string"},"resources":{"allOf":[{"$ref":"#/definitions/api.Resources"}],"description":"Resources specifies the desired CPU / Memory / Storage for the Droplet."},"runtime":{"allOf":[{"$ref":"#/definitions/api.RuntimeEnvironment"}],"description":"Runtime configures host timezone and browser language defaults."},"vnc":{"allOf":[{"$ref":"#/definitions/api.VNC"}],"description":"VNC configures optional Chrome for the instance."},"voice":{"allOf":[{"$ref":"#/definitions/api.Voice"}],"description":"Voice configures optional TTS and STT for the instance."},"wallet":{"allOf":[{"$ref":"#/definitions/api.WalletOptions"}],"description":"Wallet configures optional agent wallet integration for the instance."}},"required":["id","model","resources"],"type":"object"},"api.CreateBackupRequest":{"properties":{"mode":{"description":"Mode is the backup strategy; normalized by openclaw.NormalizeBackupMode (e.g. \"full\", \"data\").","type":"string"}},"type":"object"},"api.CreateExpertRequest":{"properties":{"create_inputs":{"additionalProperties":{"type":"string"},"description":"CreateInputs maps metadata-declared ids to URLs or finalized upload file_id values.","type":"object"},"id":{"type":"string"},"type_id":{"type":"string"}},"required":["id","type_id"],"type":"object"},"api.CreateExpertResponseDoc":{"properties":{"code":{"description":"Code is the business status code (0 = success).","example":0,"type":"integer"},"data":{"allOf":[{"$ref":"#/definitions/api.ExpertSummaryDTO"}],"description":"Data contains the new expert summary (install may still be in progress)."},"message":{"description":"Message is a human-readable status description.","example":"ok","type":"string"}},"type":"object"},"api.CreateStoragePresignedUploadRequest":{"properties":{"content_type":{"description":"ContentType is the MIME type for the upload (default \"application/gzip\" if omitted).","type":"string"},"filename":{"description":"Filename is the archive name; must end with \".tar.gz\".","type":"string"},"size_bytes":{"description":"SizeBytes is the expected file size in bytes (must be \u003e 0).","type":"integer"}},"type":"object"},"api.CreateTestUsageEventResponseDoc":{"properties":{"code":{"description":"Code is the business status code (0 = success).","example":0,"type":"integer"},"data":{"allOf":[{"$ref":"#/definitions/api.usageEventResponse"}],"description":"Data contains the created usage event."},"message":{"description":"Message is a human-readable status description.","example":"ok","type":"string"}},"type":"object"},"api.DeleteAgentExpertResponseDoc":{"properties":{"code":{"description":"Code is the business status code (0 = success).","example":0,"type":"integer"},"message":{"description":"Message is a human-readable status description.","example":"ok","type":"string"}},"type":"object"},"api.ExpertCreateInputDTO":{"properties":{"accept":{"items":{"type":"string"},"type":"array"},"description":{"type":"string"},"format":{"type":"string"},"id":{"type":"string"},"kind":{"type":"string"},"label":{"type":"string"},"required":{"type":"boolean"},"required_group":{"type":"string"}},"type":"object"},"api.ExpertSummaryDTO":{"properties":{"chat_base_api":{"type":"string"},"expert_type":{"$ref":"#/definitions/api.ExpertTypeEmbedDTO"},"id":{"type":"string"},"status":{"type":"string"}},"type":"object"},"api.ExpertTypeDTO":{"properties":{"bundle_url":{"type":"string"},"create_inputs":{"items":{"$ref":"#/definitions/api.ExpertCreateInputDTO"},"type":"array"},"description":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"}},"type":"object"},"api.ExpertTypeEmbedDTO":{"properties":{"description":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"}},"type":"object"},"api.GetAgentExpertResponseDoc":{"properties":{"code":{"description":"Code is the business status code (0 = success).","example":0,"type":"integer"},"data":{"allOf":[{"$ref":"#/definitions/api.ExpertSummaryDTO"}],"description":"Data contains the expert summary (same envelope shape as GET /api/v1/agents/{id})."},"message":{"description":"Message is a human-readable status description.","example":"ok","type":"string"}},"type":"object"},"api.GetAgentStatusResponse":{"properties":{"code":{"description":"Code is the business status code (0 = success; see pkg/utils/errors.go).","type":"integer"},"data":{"description":"Data contains the instance detail, or for GET .../experts/:expertId an ExpertSummaryDTO; nil when the request fails."},"message":{"description":"Message is a human-readable status or error description.","type":"string"}},"type":"object"},"api.HealthResponse":{"properties":{"status":{"description":"Status is always \"ok\" when the server is running.","example":"ok","type":"string"}},"type":"object"},"api.ListAgentExpertsResponseDoc":{"properties":{"code":{"description":"Code is the business status code (0 = success).","example":0,"type":"integer"},"data":{"description":"Data lists expert summaries for the Hermes instance.","items":{"$ref":"#/definitions/api.ExpertSummaryDTO"},"type":"array"},"message":{"description":"Message is a human-readable status description.","example":"ok","type":"string"}},"type":"object"},"api.ListAgentsResponse":{"properties":{"code":{"description":"Code is the business status code (0 = success).","type":"integer"},"data":{"description":"Data is the current page of instance rows (same shape as GET /api/v1/agents/{id} data).","items":{"$ref":"#/definitions/api.StatusData"},"type":"array"},"message":{"description":"Message is a human-readable status or error description.","type":"string"},"page":{"description":"Page is the current 1-based page number.","type":"integer"},"page_size":{"description":"PageSize is the number of items per page (default 10, max 100).","type":"integer"},"total":{"description":"Total is the total number of instances matching the filter (before pagination).","type":"integer"},"total_pages":{"description":"TotalPages is the total number of pages based on Total and PageSize.","type":"integer"}},"type":"object"},"api.ListExpertTypesResponseDoc":{"properties":{"code":{"description":"Code is the business status code (0 = success).","example":0,"type":"integer"},"data":{"description":"Data lists catalog rows for installable expert types.","items":{"$ref":"#/definitions/api.ExpertTypeDTO"},"type":"array"},"message":{"description":"Message is a human-readable status description.","example":"ok","type":"string"}},"type":"object"},"api.MailOptions":{"properties":{"addresses":{"description":"Addresses lists mailbox local parts to provision under the configured mail domain.","items":{"type":"string"},"type":"array"},"enabled":{"description":"Enabled activates mailbox registration (requires agent_id and server-side MailGatewayURL).","type":"boolean"},"inject_skill":{"description":"InjectSkill additionally injects a mail-handling skill into the openclaw agent.","type":"boolean"}},"type":"object"},"api.MailboxOccupancyDataDoc":{"properties":{"agent_id":{"allOf":[{"$ref":"#/definitions/api.MailboxOccupancyStatusDoc"}],"description":"AgentID reports occupancy for the requested agent_id."},"mailboxes":{"description":"Mailboxes reports occupancy for each requested mailbox address.","items":{"$ref":"#/definitions/api.MailboxOccupancyResultDoc"},"type":"array"}},"type":"object"},"api.MailboxOccupancyResponseDoc":{"properties":{"code":{"description":"Code is the business status code (0 = success).","example":0,"type":"integer"},"data":{"allOf":[{"$ref":"#/definitions/api.MailboxOccupancyDataDoc"}],"description":"Data contains the occupancy results for the requested mailbox and/or agent_id."},"message":{"description":"Message is a human-readable status description.","example":"ok","type":"string"}},"type":"object"},"api.MailboxOccupancyResultDoc":{"properties":{"address":{"description":"Address is the normalized mailbox address that was queried.","example":"foo@agent.hast.so","type":"string"},"occupied":{"description":"Occupied reports whether a row already exists for the queried value.","example":true,"type":"boolean"},"owned_by_current_user":{"description":"OwnedByCurrentUser reports whether the existing occupancy belongs to the authenticated user.","example":false,"type":"boolean"}},"type":"object"},"api.MailboxOccupancyStatusDoc":{"properties":{"occupied":{"description":"Occupied reports whether a row already exists for the queried value.","example":true,"type":"boolean"},"owned_by_current_user":{"description":"OwnedByCurrentUser reports whether the existing occupancy belongs to the authenticated user.","example":false,"type":"boolean"}},"type":"object"},"api.MarkUsageEventsPaidData":{"properties":{"paid_at":{"description":"PaidAt is the RFC 3339 UTC timestamp applied to all marked events.","example":"2026-03-25T12:34:56Z","type":"string"},"updated_count":{"description":"UpdatedCount is the number of usage events that were marked paid.","example":24,"type":"integer"}},"type":"object"},"api.MarkUsageEventsPaidRequestDoc":{"properties":{"from":{"description":"From is the inclusive start date (\"YYYY-MM-DD\") for period_start filtering.","example":"2026-03-01","type":"string"},"ids":{"description":"IDs explicitly lists usage event IDs to mark paid; when non-empty, filter fields are ignored.","example":["usage_evt_1","usage_evt_2"],"items":{"type":"string"},"type":"array"},"month":{"description":"Month filters events by calendar month (\"YYYY-MM\"); takes precedence over From/To.","example":"2026-03","type":"string"},"profile_id":{"description":"UserID optionally restricts the batch to a specific user.","example":"user_123","type":"string"},"status":{"description":"Status filters by billing status (e.g. \"pending\").","example":"pending","type":"string"},"to":{"description":"To is the exclusive end date (\"YYYY-MM-DD\") for period_start filtering.","example":"2026-03-02","type":"string"},"type":{"description":"Type filters by usage type (e.g. \"mail_inbound\").","example":"mail_inbound","type":"string"}},"type":"object"},"api.MarkUsageEventsPaidResponseDoc":{"properties":{"code":{"description":"Code is the business status code (0 = success).","example":0,"type":"integer"},"data":{"allOf":[{"$ref":"#/definitions/api.MarkUsageEventsPaidData"}],"description":"Data contains the batch result."},"message":{"description":"Message is a human-readable status description.","example":"ok","type":"string"}},"type":"object"},"api.OpenAPISpecDocument":{"additionalProperties":{},"type":"object"},"api.OpenAPISpecErrorResponse":{"properties":{"error":{"description":"Error describes why the OpenAPI spec could not be returned.","example":"unsupported app \"proxy\" (supported: mailgateway, serve)","type":"string"}},"type":"object"},"api.PairRequest":{"properties":{"code":{"description":"Code is the pairing approval code (alphanumeric, hyphen, underscore only; sanitized server-side).","type":"string"},"id":{"description":"ID is the instance identifier to pair with. Optional when the URL contains :id.","type":"string"},"type":{"description":"Type is the channel platform, e.g. telegram, slack.","type":"string"}},"required":["code"],"type":"object"},"api.PairResponse":{"properties":{"code":{"description":"Code is the business status code (0 = success; see pkg/utils/errors.go).","type":"integer"},"message":{"description":"Message is a human-readable status or error description.","type":"string"}},"type":"object"},"api.PublicCRMWriteDoc":{"properties":{"request_id":{"description":"Stable UUID required on create. Reuse it only for the identical create request.","type":"string"},"updated_at":{"description":"Required on update; use updatedAt from the last record readback.","type":"string"},"values":{"additionalProperties":{},"description":"Only writable fields from GET /business-resources/{resource_id}/crm/schema.","type":"object"}},"required":["values"],"type":"object"},"api.PublicChannelAuthorizationDoc":{"properties":{"code":{"type":"string"},"require_admission":{"type":"boolean"},"state":{"type":"string"}},"required":["code","state"],"type":"object"},"api.PublicChannelConnectionDoc":{"properties":{"inbox_id":{"type":"integer"},"name":{"type":"string"},"require_admission":{"type":"boolean"}},"required":["inbox_id","name"],"type":"object"},"api.PublicChannelStatusDoc":{"properties":{"status":{"type":"string"}},"required":["status"],"type":"object"},"api.PublicChatMemoryProjectDoc":{"properties":{"customer_connection_id":{"type":"string"},"customer_id":{"type":"integer"},"name":{"type":"string"}},"required":["name"],"type":"object"},"api.PublicDomainVerificationDoc":{"properties":{"content":{"type":"string"},"filename":{"type":"string"}},"required":["content","filename"],"type":"object"},"api.PublicFacebookConnectDoc":{"properties":{"page_id":{"type":"string"},"require_admission":{"type":"boolean"},"token":{"type":"string"}},"required":["page_id","token"],"type":"object"},"api.PublicFacebookPagesDoc":{"properties":{"token":{"type":"string"}},"required":["token"],"type":"object"},"api.PublicMessageChannelDoc":{"properties":{"account_id":{"type":"string"},"account_sid":{"type":"string"},"api_key":{"type":"string"},"api_secret":{"type":"string"},"application_id":{"type":"string"},"auth_token":{"type":"string"},"bot_token":{"type":"string"},"callback_token":{"type":"string"},"corp_id":{"type":"string"},"corp_secret":{"type":"string"},"email":{"type":"string"},"encoding_aes_key":{"type":"string"},"imap_address":{"type":"string"},"imap_login":{"type":"string"},"imap_password":{"type":"string"},"line_channel_id":{"type":"string"},"line_channel_secret":{"type":"string"},"line_channel_token":{"type":"string"},"medium":{"type":"string"},"name":{"type":"string"},"open_kfid":{"type":"string"},"phone_number":{"type":"string"},"platform":{"type":"string"},"require_admission":{"type":"boolean"},"signing_secret":{"type":"string"},"slack_trigger_rules":{"$ref":"#/definitions/channel.SlackTriggerRules"},"smtp_address":{"type":"string"},"smtp_login":{"type":"string"},"smtp_password":{"type":"string"},"website_url":{"type":"string"}},"type":"object"},"api.PublicTaskAgentAPIKeyCreateRequestDoc":{"properties":{"name":{"example":"CI automation","type":"string"},"scopes":{"example":["prompts:write","sessions:read"],"items":{"type":"string"},"type":"array"}},"type":"object"},"api.PublicTaskAgentAPIKeyDoc":{"properties":{"created_at":{"format":"date-time","type":"string"},"id":{"example":"pak_123","type":"string"},"last_used_at":{"format":"date-time","type":"string"},"name":{"example":"CI automation","type":"string"},"prefix":{"example":"hast_pk_ab12cd34","type":"string"},"revoked_at":{"format":"date-time","type":"string"},"scopes":{"example":["prompts:write","sessions:read"],"items":{"type":"string"},"type":"array"}},"type":"object"},"api.PublicTaskAgentAPIKeyEnvelopeDoc":{"properties":{"api_key":{"example":"hast_pk_...","type":"string"},"created_at":{"format":"date-time","type":"string"},"id":{"example":"pak_123","type":"string"},"name":{"example":"CI automation","type":"string"},"prefix":{"example":"hast_pk_ab12cd34","type":"string"},"scopes":{"example":["prompts:write","sessions:read"],"items":{"type":"string"},"type":"array"}},"type":"object"},"api.PublicTaskAgentAPIKeyListEnvelopeDoc":{"properties":{"api_keys":{"items":{"$ref":"#/definitions/api.PublicTaskAgentAPIKeyDoc"},"type":"array"}},"type":"object"},"api.PublicTaskAgentAPIKeyUpdateRequestDoc":{"properties":{"name":{"example":"CI automation","type":"string"}},"type":"object"},"api.PublicTaskAgentPromptEnvelopeDoc":{"properties":{"request_id":{"example":"client-turn-1","type":"string"},"session_id":{"example":"sess_abc123","type":"string"},"status":{"example":"dispatch_pending","type":"string"}},"type":"object"},"api.PublicTaskAgentPromptRequestDoc":{"properties":{"dynamic_tools":{"items":{"additionalProperties":{},"type":"object"},"type":"array"},"files":{"items":{"type":"string"},"type":"array"},"model":{"example":"hast/auto","type":"string"},"prompt":{"example":"Summarize the release notes.","type":"string"},"reasoning_effort":{"example":"medium","type":"string"},"request_id":{"example":"client-turn-1","type":"string"},"secret_bindings":{"items":{"additionalProperties":{},"type":"object"},"type":"array"},"session_id":{"example":"sess_abc123","type":"string"},"skill_ids":{"items":{"type":"string"},"type":"array"},"system_prompt":{"type":"string"}},"type":"object"},"api.PublicTaskAgentSessionDoc":{"properties":{"event_cursor":{"type":"integer"},"mode":{"type":"string"},"runtime_provider":{"type":"string"},"session_id":{"example":"sess_abc123","type":"string"},"status":{"example":"running","type":"string"},"task_origin":{"example":"session","type":"string"}},"type":"object"},"api.PublicTaskAgentSessionEnvelopeDoc":{"properties":{"session":{"$ref":"#/definitions/api.PublicTaskAgentSessionDoc"}},"type":"object"},"api.PublicTaskAgentSessionListEnvelopeDoc":{"properties":{"has_more":{"type":"boolean"},"next_cursor":{"type":"string"},"sessions":{"items":{"$ref":"#/definitions/api.PublicTaskAgentSessionDoc"},"type":"array"}},"type":"object"},"api.PublicTaskAgentUploadEnvelopeDoc":{"properties":{"file":{"$ref":"#/definitions/api.PublicTaskAgentWorkspaceItemDoc"}},"type":"object"},"api.PublicTaskAgentWorkspaceFilesEnvelopeDoc":{"properties":{"has_more":{"type":"boolean"},"items":{"items":{"$ref":"#/definitions/api.PublicTaskAgentWorkspaceItemDoc"},"type":"array"},"next_cursor":{"type":"string"}},"type":"object"},"api.PublicTaskAgentWorkspaceItemDoc":{"properties":{"file_id":{"example":"opaque-file-id","type":"string"},"id":{"example":"opaque-file-id","type":"string"},"name":{"example":"report.csv","type":"string"},"path":{"example":"uploads/upload-id/report.csv","type":"string"},"relative_path":{"example":"uploads/upload-id/report.csv","type":"string"},"session_id":{"type":"string"},"size_bytes":{"example":1024,"type":"integer"},"type":{"example":"file","type":"string"}},"type":"object"},"api.PublicWeChatCompleteDoc":{"properties":{"corp_secret":{"type":"string"},"open_kfid":{"type":"string"}},"required":["corp_secret","open_kfid"],"type":"object"},"api.PublicWebhookInvocationDoc":{"properties":{"action":{"enum":["created","prompted"],"type":"string"},"payload":{"$ref":"#/definitions/api.postTaskAgentWebhookRequest"}},"required":["action","payload"],"type":"object"},"api.ResourceLimit":{"properties":{"cpu":{"description":"CPU is the number of vCPUs as a string (converted from InstanceInfo.VCPU via strconv.Itoa).","type":"string"},"memory":{"description":"Memory is the memory in GB as a string (converted from InstanceInfo.MemoryGB via strconv.Itoa).","type":"string"},"storage":{"description":"Storage is the storage in GB as a string (converted from InstanceInfo.StorageGB via strconv.Itoa).","type":"string"}},"type":"object"},"api.Resources":{"properties":{"cpu":{"description":"CPU is the number of vCPUs, as a string (e.g. \"2\"). Must be 1–10.","type":"string"},"memory":{"description":"Memory is the memory size in GB, as a string (e.g. \"4\"). Must be 1–10.","type":"string"},"storage":{"description":"Storage is the disk size in GB, as a string (e.g. \"80\"). Must be 1–200. Only used for resize.","type":"string"}},"type":"object"},"api.ResourcesConfig":{"properties":{"limit":{"allOf":[{"$ref":"#/definitions/api.ResourceLimit"}],"description":"Limit contains the actual CPU and memory ceiling of the running Droplet."}},"type":"object"},"api.RestoreInfo":{"properties":{"message":{"description":"Message is the error description from the failed restore attempt (from RestoreJob.Error).","type":"string"},"status":{"description":"Status is the restore job status, always \"failed\" when this object is present (from RestoreJob.Status).","type":"string"},"valid_until":{"description":"ValidUntil is the RFC 3339 timestamp after which this error info expires (ErrorAt + 1 hour).","type":"string"}},"type":"object"},"api.RuntimeEnvironment":{"properties":{"browser_accept_languages":{"description":"BrowserAcceptLanguages is the browser language preference list, e.g. \"id-ID,id,en-US,en\".","type":"string"},"browser_language":{"description":"BrowserLanguage is a BCP 47 language tag, e.g. \"id-ID\".","type":"string"},"timezone":{"description":"Timezone is an IANA timezone, e.g. \"Asia/Jakarta\".","type":"string"}},"type":"object"},"api.ServeErrorResponse":{"properties":{"code":{"description":"Code is the business status code (0 = success; see pkg/utils/errors.go).","example":0,"type":"integer"},"message":{"description":"Message is a human-readable status or error description.","example":"ok","type":"string"}},"type":"object"},"api.StatusData":{"properties":{"agent":{"allOf":[{"$ref":"#/definitions/api.AgentInfo"}],"description":"Agent contains the agent information for the instance, nil if no agent is registered."},"agent_type":{"description":"AgentType is the agent runtime for this instance (from InstanceState.AgentType), e.g. \"openclaw\", \"hermes\". Empty stored values are returned as \"openclaw\".","type":"string"},"bandwidth":{"allOf":[{"$ref":"#/definitions/api.BandwidthInfo"}],"description":"Bandwidth is the current-month bandwidth usage summary; nil if no bandwidth record exists yet."},"channels":{"description":"Channels lists the configured messaging channels (from InstanceState.Channels).","items":{"$ref":"#/definitions/api.ChannelConfig"},"type":"array"},"experts":{"description":"Experts lists Hermes expert summaries for this instance (populated only when agent_type is hermes).","items":{"$ref":"#/definitions/api.ExpertSummaryDTO"},"type":"array"},"gateway_url":{"description":"GateWayUrl is the public HTTPS gateway URL for this instance. When the instance token is set,\nOpenClaw URLs append #token=\u003ctoken\u003e (fragment); Hermes URLs include ?token=\u003ctoken\u003e (query).\nEmpty if no IP is assigned yet.","type":"string"},"id":{"description":"ID is the unique instance identifier (from InstanceState.ID).","type":"string"},"machine_id":{"description":"MachineID is the cloud provider instance id (DigitalOcean Droplet id), same as provider_instance_id.","type":"string"},"model":{"description":"Model is the current primary LLM model name (from InstanceState.Model).","type":"string"},"name":{"description":"Name is the optional display name (from InstanceState.Name).","type":"string"},"resources":{"allOf":[{"$ref":"#/definitions/api.ResourcesConfig"}],"description":"Resources reports the current Droplet CPU and memory limits (from provider.InstanceInfo.VCPU / MemoryGB)."},"restore":{"allOf":[{"$ref":"#/definitions/api.RestoreInfo"}],"description":"Restore contains the latest failed restore-job info (shown only within 1 hour of the failure); nil otherwise."},"status":{"description":"Status is the application-level status: \"running\" (gateway /health responds \u003c 500) or \"waiting\" (provider not active / no IP / gateway unreachable).","type":"string"},"vnc":{"$ref":"#/definitions/api.VNCConfig"},"voice":{"allOf":[{"$ref":"#/definitions/api.Voice"}],"description":"Voice contains the voice configuration for the instance."}},"type":"object"},"api.StoragePresignedUploadData":{"properties":{"expires_at":{"description":"ExpiresAt is the RFC 3339 timestamp after which the presigned URL is no longer valid.","type":"string"},"file_id":{"description":"FileID is the server-generated unique identifier for this backup file record.","type":"string"},"filename":{"description":"Filename echoes back the validated filename.","type":"string"},"method":{"description":"Method is the HTTP method to use with UploadURL (typically \"PUT\").","type":"string"},"object_key":{"description":"ObjectKey is the storage object path (e.g. \"restore/{fileID}/{filename}\").","type":"string"},"required_headers":{"additionalProperties":{"type":"string"},"description":"RequiredHeaders are HTTP headers the client must include in the upload request (e.g. Content-Type).","type":"object"},"status":{"description":"Status is the initial file status, always \"uploading\" at creation time.","type":"string"},"upload_strategy":{"description":"UploadStrategy is always \"presigned-put\", indicating the client should HTTP PUT to UploadURL.","type":"string"},"upload_url":{"description":"UploadURL is the short-lived presigned URL the client must PUT the archive to.","type":"string"}},"type":"object"},"api.StoragePresignedUploadResponseDoc":{"properties":{"code":{"description":"Code is the business status code (0 = success).","example":0,"type":"integer"},"data":{"allOf":[{"$ref":"#/definitions/api.StoragePresignedUploadData"}],"description":"Data contains the presigned upload details."},"message":{"description":"Message is a human-readable status description.","example":"ok","type":"string"}},"type":"object"},"api.TaskAgentConnectorAccountEnvelopeDoc":{"properties":{"connector_account":{"additionalProperties":{},"type":"object"}},"type":"object"},"api.TaskAgentConnectorAccountListEnvelopeDoc":{"properties":{"connector_accounts":{"items":{"additionalProperties":{},"type":"object"},"type":"array"}},"type":"object"},"api.TaskAgentConnectorAccountRequestDoc":{"properties":{"external_account_ref":{"example":"connected-account-id","type":"string"},"metadata":{"additionalProperties":{},"type":"object"},"provider":{"example":"github","type":"string"},"status":{"example":"connected","type":"string"}},"type":"object"},"api.TaskAgentConnectorStartEnvelopeDoc":{"properties":{"auth_url":{"type":"string"},"connected_account_id":{"type":"string"}},"type":"object"},"api.TaskAgentConnectorStatusDoc":{"properties":{"account_label":{"type":"string"},"description":{"type":"string"},"label":{"example":"GitHub","type":"string"},"logo":{"type":"string"},"provider":{"example":"github","type":"string"},"runtime_provider":{"example":"composio","type":"string"},"start_url":{"type":"string"},"status":{"example":"connected","type":"string"}},"type":"object"},"api.TaskAgentConnectorStatusEnvelopeDoc":{"properties":{"agent_id":{"type":"string"},"connection_scope":{"type":"string"},"connectors":{"items":{"$ref":"#/definitions/api.TaskAgentConnectorStatusDoc"},"type":"array"},"has_more":{"type":"boolean"},"limit":{"example":20,"type":"integer"},"next_cursor":{"type":"string"},"profile_id":{"type":"string"},"search":{"example":"github","type":"string"}},"type":"object"},"api.TaskAgentCreateTaskRequestDoc":{"properties":{"config":{"additionalProperties":{},"type":"object"},"mode":{"example":"agent_run","type":"string"},"prompt":{"example":"Write a validation report.","type":"string"},"taskId":{"example":"task-agent-123","type":"string"},"title":{"example":"Release validation","type":"string"}},"type":"object"},"api.TaskAgentEventContextCompactedDataDoc":{"allOf":[{"$ref":"#/definitions/api.TaskAgentEventDataDoc"},{"required":["reason"],"type":"object"}]},"api.TaskAgentEventDataDoc":{"properties":{"attempt":{"minimum":1,"type":"integer"},"attempts":{"minimum":1,"type":"integer"},"channel":{"enum":["stdout","stderr","progress"],"type":"string"},"code":{"type":"string"},"context_window":{"minimum":0,"type":"integer"},"cost":{},"delta":{"type":"string"},"duration_ms":{"minimum":0,"type":"integer"},"error":{"type":"string"},"exit_code":{"type":"integer"},"files":{"items":{"type":"string"},"type":"array"},"final_message_id":{"type":"string"},"finish_reason":{"type":"string"},"input":{},"is_error":{"type":"boolean"},"kind":{"type":"string"},"last":{"$ref":"#/definitions/api.TaskAgentEventTokenUsageDoc"},"message":{"type":"string"},"message_id":{"type":"string"},"model":{"type":"string"},"model_config":{"$ref":"#/definitions/api.TaskAgentModelSelectionDoc"},"model_source":{"type":"string"},"modified_at":{"format":"date-time","type":"string"},"name":{"type":"string"},"operation":{"enum":["update","delete"],"type":"string"},"options":{"items":{},"type":"array"},"output":{},"parent_tool_call_id":{"type":"string"},"path":{"type":"string"},"plan_id":{"type":"string"},"prompt":{"type":"string"},"reason":{"type":"string"},"reasoning_id":{"type":"string"},"request_id":{"type":"string"},"retryable":{"type":"boolean"},"role":{"enum":["user","assistant","system"],"type":"string"},"scope":{"type":"string"},"size_bytes":{"minimum":0,"type":"integer"},"status":{"enum":["starting","ready","failed","released","succeeded","interrupted"],"type":"string"},"steps":{"items":{"$ref":"#/definitions/api.TaskAgentEventPlanStepDoc"},"type":"array"},"text":{"type":"string"},"tokens_after":{"minimum":0,"type":"integer"},"tokens_before":{"minimum":0,"type":"integer"},"tool_call_id":{"type":"string"},"total":{"$ref":"#/definitions/api.TaskAgentEventTokenUsageDoc"},"turn_type":{"type":"string"}},"type":"object"},"api.TaskAgentEventDoc":{"discriminator":"type","properties":{"created_at":{"example":"2026-08-16T12:00:00Z","format":"date-time","type":"string"},"data":{"allOf":[{"$ref":"#/definitions/api.TaskAgentEventDataDoc"}],"description":"Data is the HAST-owned payload union; Type selects its required shape as\ndefined in docs/reference/task-agent-event-v2.md."},"engine":{"enum":["codex_cli","pi_agent_cli"],"example":"codex_cli","type":"string"},"event_id":{"example":"evt_123","type":"string"},"replayable":{"example":true,"type":"boolean"},"run_id":{"example":"run_123","type":"string"},"schema_version":{"enum":[2],"example":2,"type":"integer"},"sequence":{"description":"Sequence is a positive durable order, or null for volatile events.","example":42,"minimum":1,"type":"integer","x-nullable":true},"session_id":{"example":"session_123","type":"string"},"source":{"enum":["runtime","backplane","workspace"],"example":"runtime","type":"string"},"task_id":{"example":"task_123","type":"string"},"type":{"enum":["runtime.status","run.queued","run.started","run.retrying","run.completed","run.failed","run.interrupted","message.started","message.delta","message.completed","reasoning.started","reasoning.delta","reasoning.completed","tool.started","tool.updated","tool.completed","plan.updated","plan.completed","usage.updated","file.changed","input.requested","context.compacted","warning","error"],"example":"message.completed","type":"string"}},"required":["created_at","data","engine","event_id","replayable","schema_version","sequence","source","task_id","type"],"type":"object","x-hast-event-variants":{"context.compacted":{"$ref":"#/definitions/context.compacted"},"error":{"$ref":"#/definitions/error"},"file.changed":{"$ref":"#/definitions/file.changed"},"input.requested":{"$ref":"#/definitions/input.requested"},"message.completed":{"$ref":"#/definitions/message.completed"},"message.delta":{"$ref":"#/definitions/message.delta"},"message.started":{"$ref":"#/definitions/message.started"},"plan.completed":{"$ref":"#/definitions/plan.completed"},"plan.updated":{"$ref":"#/definitions/plan.updated"},"reasoning.completed":{"$ref":"#/definitions/reasoning.completed"},"reasoning.delta":{"$ref":"#/definitions/reasoning.delta"},"reasoning.started":{"$ref":"#/definitions/reasoning.started"},"run.completed":{"$ref":"#/definitions/run.completed"},"run.failed":{"$ref":"#/definitions/run.failed"},"run.interrupted":{"$ref":"#/definitions/run.interrupted"},"run.queued":{"$ref":"#/definitions/run.queued"},"run.retrying":{"$ref":"#/definitions/run.retrying"},"run.started":{"$ref":"#/definitions/run.started"},"runtime.status":{"$ref":"#/definitions/runtime.status"},"tool.completed":{"$ref":"#/definitions/tool.completed"},"tool.started":{"$ref":"#/definitions/tool.started"},"tool.updated":{"$ref":"#/definitions/tool.updated"},"usage.updated":{"$ref":"#/definitions/usage.updated"},"warning":{"$ref":"#/definitions/warning"}}},"api.TaskAgentEventErrorDataDoc":{"allOf":[{"$ref":"#/definitions/api.TaskAgentEventDataDoc"},{"required":["scope","code","message","retryable"],"type":"object"}]},"api.TaskAgentEventFileChangedDataDoc":{"allOf":[{"$ref":"#/definitions/api.TaskAgentEventDataDoc"},{"required":["path","operation"],"type":"object"}]},"api.TaskAgentEventInputRequestedDataDoc":{"allOf":[{"$ref":"#/definitions/api.TaskAgentEventDataDoc"},{"required":["request_id","kind","prompt"],"type":"object"}]},"api.TaskAgentEventListEnvelopeDoc":{"properties":{"events":{"items":{"$ref":"#/definitions/api.TaskAgentEventDoc"},"type":"array"},"has_more":{"example":true,"type":"boolean"},"next_after":{"example":42,"format":"int64","type":"integer","x-nullable":true}},"type":"object"},"api.TaskAgentEventMessageCompletedDataDoc":{"allOf":[{"$ref":"#/definitions/api.TaskAgentEventDataDoc"},{"required":["message_id","role","text"],"type":"object"}]},"api.TaskAgentEventMessageDeltaDataDoc":{"allOf":[{"$ref":"#/definitions/api.TaskAgentEventDataDoc"},{"required":["message_id","role","delta"],"type":"object"}]},"api.TaskAgentEventMessageStartedDataDoc":{"allOf":[{"$ref":"#/definitions/api.TaskAgentEventDataDoc"},{"required":["message_id","role"],"type":"object"}]},"api.TaskAgentEventPlanCompletedDataDoc":{"allOf":[{"$ref":"#/definitions/api.TaskAgentEventDataDoc"},{"required":["plan_id"],"type":"object"}]},"api.TaskAgentEventPlanStepDoc":{"properties":{"status":{"enum":["pending","in_progress","completed"],"example":"in_progress","type":"string"},"step":{"type":"string"}},"required":["status","step"],"type":"object"},"api.TaskAgentEventPlanUpdatedDataDoc":{"allOf":[{"$ref":"#/definitions/api.TaskAgentEventDataDoc"},{"required":["plan_id"],"type":"object"}]},"api.TaskAgentEventReasoningCompletedDataDoc":{"allOf":[{"$ref":"#/definitions/api.TaskAgentEventDataDoc"},{"required":["reasoning_id","text"],"type":"object"}]},"api.TaskAgentEventReasoningDeltaDataDoc":{"allOf":[{"$ref":"#/definitions/api.TaskAgentEventDataDoc"},{"required":["reasoning_id","delta"],"type":"object"}]},"api.TaskAgentEventReasoningStartedDataDoc":{"allOf":[{"$ref":"#/definitions/api.TaskAgentEventDataDoc"},{"required":["reasoning_id"],"type":"object"}]},"api.TaskAgentEventRunCompletedDataDoc":{"allOf":[{"$ref":"#/definitions/api.TaskAgentEventDataDoc"},{"required":["final_message_id","finish_reason","attempts"],"type":"object"}]},"api.TaskAgentEventRunFailedDataDoc":{"allOf":[{"$ref":"#/definitions/api.TaskAgentEventDataDoc"},{"required":["code","message","retryable","attempts"],"type":"object"}]},"api.TaskAgentEventRunInterruptedDataDoc":{"allOf":[{"$ref":"#/definitions/api.TaskAgentEventDataDoc"},{"required":["reason"],"type":"object"}]},"api.TaskAgentEventRunQueuedDataDoc":{"allOf":[{"$ref":"#/definitions/api.TaskAgentEventDataDoc"},{"required":["request_id","turn_type"],"type":"object"}]},"api.TaskAgentEventRunRetryingDataDoc":{"allOf":[{"$ref":"#/definitions/api.TaskAgentEventDataDoc"},{"required":["attempt","code","message"],"type":"object"}]},"api.TaskAgentEventRunStartedDataDoc":{"allOf":[{"$ref":"#/definitions/api.TaskAgentEventDataDoc"},{"required":["request_id","turn_type"],"type":"object"}]},"api.TaskAgentEventRuntimeStatusDataDoc":{"allOf":[{"$ref":"#/definitions/api.TaskAgentEventDataDoc"},{"properties":{"status":{"enum":["starting","ready","failed","released"],"type":"string"}},"required":["status"],"type":"object"}]},"api.TaskAgentEventTokenUsageDoc":{"properties":{"cache_read_tokens":{"minimum":0,"type":"integer"},"cache_write_tokens":{"minimum":0,"type":"integer"},"input_tokens":{"minimum":0,"type":"integer"},"output_tokens":{"minimum":0,"type":"integer"},"reasoning_tokens":{"minimum":0,"type":"integer"},"total_tokens":{"minimum":0,"type":"integer"}},"required":["cache_read_tokens","cache_write_tokens","input_tokens","output_tokens","reasoning_tokens","total_tokens"],"type":"object"},"api.TaskAgentEventToolCompletedDataDoc":{"allOf":[{"$ref":"#/definitions/api.TaskAgentEventDataDoc"},{"properties":{"status":{"enum":["succeeded","failed","interrupted"],"type":"string"}},"required":["tool_call_id","kind","name","status","is_error"],"type":"object"}]},"api.TaskAgentEventToolStartedDataDoc":{"allOf":[{"$ref":"#/definitions/api.TaskAgentEventDataDoc"},{"required":["tool_call_id","kind","name"],"type":"object"}]},"api.TaskAgentEventToolUpdatedDataDoc":{"allOf":[{"$ref":"#/definitions/api.TaskAgentEventDataDoc"},{"required":["tool_call_id","channel","delta"],"type":"object"}]},"api.TaskAgentEventUsageUpdatedDataDoc":{"allOf":[{"$ref":"#/definitions/api.TaskAgentEventDataDoc"},{"required":["model","context_window","total"],"type":"object"}]},"api.TaskAgentEventWarningDataDoc":{"allOf":[{"$ref":"#/definitions/api.TaskAgentEventDataDoc"},{"required":["scope","code","message","retryable"],"type":"object"}]},"api.TaskAgentFileDoc":{"properties":{"content_hash":{"type":"string"},"id":{"type":"string"},"relative_path":{"example":"reports/e2e.md","type":"string"},"size_bytes":{"example":1024,"type":"integer"},"task_id":{"type":"string"}},"type":"object"},"api.TaskAgentFileListEnvelopeDoc":{"properties":{"files":{"items":{"$ref":"#/definitions/api.TaskAgentFileDoc"},"type":"array"}},"type":"object"},"api.TaskAgentGTMPromptEnvelopeDoc":{"properties":{"request_id":{"type":"string"},"session_id":{"type":"string"},"status":{"example":"dispatch_pending","type":"string"},"task":{"$ref":"#/definitions/api.TaskAgentTaskDoc"}},"type":"object"},"api.TaskAgentGTMPromptRequestDoc":{"properties":{"model":{"example":"gpt-5","type":"string"},"profile_id":{"example":"user_123","type":"string"},"prompt":{"example":"Continue the account research.","type":"string"},"reasoning_effort":{"example":"high","type":"string"},"request_id":{"example":"turn-2","type":"string"},"session_id":{"example":"gtm-9d124d0acee32abf7e9f65e02f7ec986","type":"string"},"signal":{"enum":["stop"],"example":"stop","type":"string"},"skills":{"items":{"$ref":"#/definitions/api.TaskAgentGTMSkillDoc"},"type":"array"},"system_prompt":{"type":"string"},"toolRuntime":{"additionalProperties":{},"type":"object"},"tools":{"items":{"additionalProperties":{},"type":"object"},"type":"array"}},"type":"object"},"api.TaskAgentGTMSessionDoc":{"properties":{"can_continue":{"type":"boolean"},"created_at":{"type":"string"},"event_cursor":{"type":"integer"},"session_id":{"type":"string"},"status":{"example":"needs_input","type":"string"},"title":{"type":"string"},"updated_at":{"type":"string"}},"type":"object"},"api.TaskAgentGTMSessionListEnvelopeDoc":{"properties":{"sessions":{"items":{"$ref":"#/definitions/api.TaskAgentGTMSessionDoc"},"type":"array"}},"type":"object"},"api.TaskAgentGTMSkillDoc":{"properties":{"content":{"example":"# Account research\nUse the CRM tool before answering.","type":"string"},"name":{"example":"account-research","type":"string"}},"type":"object"},"api.TaskAgentKnowledgeBaseCreateRequestDoc":{"properties":{"description":{"example":"Public product documentation","type":"string"},"metadata":{"additionalProperties":{},"type":"object"},"name":{"example":"Product docs","type":"string"},"source_type":{"example":"url","type":"string"},"url":{"example":"https://example.com/docs.md","type":"string"}},"type":"object"},"api.TaskAgentKnowledgeBaseDoc":{"properties":{"cloudflare_instance_id":{"example":"hast-kb-product-docs","type":"string"},"cloudflare_mcp_url":{"example":"https://hast-kb-product-docs.search.ai.cloudflare.com/mcp","type":"string"},"cloudflare_public_endpoint_id":{"example":"hast-kb-product-docs","type":"string"},"created_at":{"type":"string"},"description":{"type":"string"},"error_message":{"type":"string"},"id":{"example":"kb_123","type":"string"},"metadata":{"additionalProperties":{},"type":"object"},"name":{"example":"Product docs","type":"string"},"source_content_type":{"example":"text/markdown","type":"string"},"source_filename":{"example":"docs.md","type":"string"},"source_type":{"example":"url","type":"string"},"source_uri":{"example":"https://example.com/docs.md","type":"string"},"status":{"example":"indexed","type":"string"},"updated_at":{"type":"string"}},"type":"object"},"api.TaskAgentKnowledgeBaseEnvelopeDoc":{"properties":{"knowledge_base":{"$ref":"#/definitions/api.TaskAgentKnowledgeBaseDoc"}},"type":"object"},"api.TaskAgentKnowledgeBaseListEnvelopeDoc":{"properties":{"knowledge_bases":{"items":{"$ref":"#/definitions/api.TaskAgentKnowledgeBaseDoc"},"type":"array"},"pagination":{"$ref":"#/definitions/api.TaskAgentKnowledgeBasePaginationDoc"}},"type":"object"},"api.TaskAgentKnowledgeBasePaginationDoc":{"properties":{"has_more":{"example":false,"type":"boolean"},"limit":{"example":20,"type":"integer"},"offset":{"example":0,"type":"integer"},"page":{"example":1,"type":"integer"},"page_size":{"example":20,"type":"integer"},"total":{"example":1,"type":"integer"}},"type":"object"},"api.TaskAgentKnowledgeBaseUpdateRequestDoc":{"properties":{"description":{"example":"Updated description","type":"string"},"metadata":{"additionalProperties":{},"type":"object"},"name":{"example":"Updated product docs","type":"string"}},"type":"object"},"api.TaskAgentMemoryDoc":{"properties":{"content":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"string"},"metadata":{"additionalProperties":{},"type":"object"},"name":{"type":"string"},"scope_id":{"example":"","type":"string"},"scope_type":{"enum":["task_agent","webhook"],"example":"task_agent","type":"string"},"updated_at":{"type":"string"}},"type":"object"},"api.TaskAgentMemoryEnvelopeDoc":{"properties":{"memory":{"$ref":"#/definitions/api.TaskAgentMemoryDoc"}},"type":"object"},"api.TaskAgentMemoryListEnvelopeDoc":{"properties":{"memories":{"items":{"$ref":"#/definitions/api.TaskAgentMemoryDoc"},"type":"array"}},"type":"object"},"api.TaskAgentMemoryRequestDoc":{"properties":{"content":{"example":"Prefer concise validation notes.","type":"string"},"metadata":{"additionalProperties":{},"type":"object"},"name":{"example":"project-preferences","type":"string"},"scope_id":{"example":"","type":"string"},"scope_type":{"enum":["task_agent","webhook"],"example":"task_agent","type":"string"}},"type":"object"},"api.TaskAgentModelDoc":{"properties":{"created_at":{"type":"string"},"description":{"type":"string"},"id":{"example":"hast/openai/gpt-5","type":"string"},"input_price":{"example":2.5,"type":"number"},"is_active":{"example":true,"type":"boolean"},"model_id":{"example":"hast/openai/gpt-5","type":"string"},"model_source":{"example":"hast","type":"string"},"name":{"example":"GPT 5","type":"string"},"output_price":{"example":10,"type":"number"},"provider":{"example":"OpenAI","type":"string"},"reasoning":{"$ref":"#/definitions/api.TaskAgentReasoningDoc"},"sort_order":{"example":10,"type":"integer"}},"type":"object"},"api.TaskAgentModelListEnvelopeDoc":{"properties":{"models":{"items":{"$ref":"#/definitions/api.TaskAgentModelDoc"},"type":"array"}},"type":"object"},"api.TaskAgentModelSelectionDoc":{"properties":{"model":{"type":"string"},"model_source":{"enum":["hast","codex_account"],"type":"string"},"reasoning_effort":{"type":"string"}},"type":"object"},"api.TaskAgentOKEnvelopeDoc":{"properties":{"ok":{"example":true,"type":"boolean"}},"type":"object"},"api.TaskAgentPromptAcceptedEnvelopeDoc":{"properties":{"request_id":{"example":"task-agent-turn-1710000000000000000","type":"string"},"status":{"example":"queued","type":"string"}},"type":"object"},"api.TaskAgentPromptRequestDoc":{"properties":{"files":{"example":["uploads/11111111-1111-1111-1111-111111111111/report.csv"],"items":{"type":"string"},"type":"array"},"message":{"example":"Continue with the validation report.","type":"string"},"model_config":{"additionalProperties":{},"type":"object"},"request_id":{"example":"turn-1","type":"string"},"turn_type":{"example":"execute","type":"string"},"watch_run":{"type":"boolean"}},"type":"object"},"api.TaskAgentReasoningDoc":{"properties":{"default_effort":{"example":"medium","type":"string"},"supported":{"type":"boolean"},"supported_efforts":{"example":["low","medium","high"],"items":{"type":"string"},"type":"array"}},"type":"object"},"api.TaskAgentScheduleDoc":{"properties":{"config":{"additionalProperties":{},"type":"object"},"cron_spec":{"type":"string"},"id":{"type":"string"},"last_run_at":{"type":"string"},"last_task_id":{"type":"string"},"mode":{"type":"string"},"next_run_at":{"type":"string"},"prompt":{"type":"string"},"status":{"type":"string"},"timezone":{"type":"string"},"title":{"type":"string"}},"type":"object"},"api.TaskAgentScheduleEnvelopeDoc":{"properties":{"schedule":{"$ref":"#/definitions/api.TaskAgentScheduleDoc"}},"type":"object"},"api.TaskAgentScheduleListEnvelopeDoc":{"properties":{"schedules":{"items":{"$ref":"#/definitions/api.TaskAgentScheduleDoc"},"type":"array"}},"type":"object"},"api.TaskAgentScheduleRequestDoc":{"properties":{"config":{"additionalProperties":{},"type":"object"},"cron_spec":{"example":"0 15 * * 1","type":"string"},"interval_seconds":{"type":"integer"},"mode":{"example":"direct_execute","type":"string"},"next_run_at":{"example":"2026-09-15T01:00:00Z","type":"string"},"prompt":{"example":"Summarize the workspace.","type":"string"},"status":{"example":"active","type":"string"},"timezone":{"example":"Asia/Shanghai","type":"string"},"title":{"example":"Weekly workspace report","type":"string"}},"type":"object"},"api.TaskAgentScheduleRunDoc":{"properties":{"id":{"type":"string"},"metadata":{"additionalProperties":{},"type":"object"},"run_at":{"type":"string"},"schedule_id":{"type":"string"},"status":{"type":"string"},"task_id":{"type":"string"}},"type":"object"},"api.TaskAgentScheduleRunListEnvelopeDoc":{"properties":{"runs":{"items":{"$ref":"#/definitions/api.TaskAgentScheduleRunDoc"},"type":"array"}},"type":"object"},"api.TaskAgentSkillFileDoc":{"properties":{"content":{"type":"string"},"path":{"example":"SKILL.md","type":"string"}},"type":"object"},"api.TaskAgentTaskDoc":{"properties":{"client_id":{"example":"client-main-user-123","type":"string"},"config":{"additionalProperties":{},"type":"object"},"created_at":{"type":"string"},"event_cursor":{"example":42,"type":"integer"},"id":{"example":"task-agent-123","type":"string"},"mode":{"example":"agent_run","type":"string"},"profile_id":{"example":"user_123","type":"string"},"prompt":{"type":"string"},"runtime_provider":{"example":"cubesandbox","type":"string"},"sandbox_id":{"example":"sandbox-main-user-123","type":"string"},"sandbox_scope":{"example":"main","type":"string"},"status":{"example":"needs_input","type":"string"},"task_origin":{"example":"session","type":"string"},"title":{"example":"Release validation","type":"string"},"updated_at":{"type":"string"},"workspace_object_prefix":{"type":"string"}},"type":"object"},"api.TaskAgentTaskEnvelopeDoc":{"properties":{"task":{"$ref":"#/definitions/api.TaskAgentTaskDoc"}},"type":"object"},"api.TaskAgentTaskListEnvelopeDoc":{"properties":{"tasks":{"items":{"$ref":"#/definitions/api.TaskAgentTaskDoc"},"type":"array"}},"type":"object"},"api.TaskAgentUpdateTaskRequestDoc":{"properties":{"title":{"example":"Renamed task","type":"string"}},"type":"object"},"api.TaskAgentUserSecretCreateRequestDoc":{"properties":{"name":{"example":"kubeconfig","type":"string"},"value":{"example":"write-only","type":"string"}},"type":"object"},"api.TaskAgentUserSecretDoc":{"properties":{"created_at":{"type":"string"},"id":{"example":"sec_123","type":"string"},"name":{"example":"kubeconfig","type":"string"},"updated_at":{"type":"string"}},"type":"object"},"api.TaskAgentUserSecretEnvelopeDoc":{"properties":{"secret":{"$ref":"#/definitions/api.TaskAgentUserSecretDoc"}},"type":"object"},"api.TaskAgentUserSecretListEnvelopeDoc":{"properties":{"secrets":{"items":{"$ref":"#/definitions/api.TaskAgentUserSecretDoc"},"type":"array"}},"type":"object"},"api.TaskAgentUserSecretUpdateRequestDoc":{"properties":{"value":{"example":"write-only","type":"string"}},"type":"object"},"api.TaskAgentUserSkillDoc":{"properties":{"capability_id":{"type":"string"},"description":{"type":"string"},"directory_name":{"example":"e2e-summary","type":"string"},"display_name":{"type":"string"},"enabled":{"type":"boolean"},"entrypoint_path":{"example":"SKILL.md","type":"string"},"files":{"items":{"$ref":"#/definitions/api.TaskAgentSkillFileDoc"},"type":"array"},"hash":{"example":"sha256:abc123","type":"string"},"skill_id":{"example":"e2e-summary","type":"string"},"source":{"example":"user","type":"string"},"status":{"example":"active","type":"string"},"url":{"type":"string"}},"type":"object"},"api.TaskAgentUserSkillEnvelopeDoc":{"properties":{"skill":{"$ref":"#/definitions/api.TaskAgentUserSkillDoc"}},"type":"object"},"api.TaskAgentUserSkillListEnvelopeDoc":{"properties":{"skills":{"items":{"$ref":"#/definitions/api.TaskAgentUserSkillDoc"},"type":"array"}},"type":"object"},"api.TaskAgentUserSkillRequestDoc":{"properties":{"description":{"type":"string"},"directory_name":{"example":"e2e-summary","type":"string"},"display_name":{"example":"E2E Summary","type":"string"},"enabled":{"type":"boolean"},"entrypoint_path":{"example":"SKILL.md","type":"string"},"expected_checksum_sha256":{"type":"string"},"files":{"items":{"$ref":"#/definitions/api.TaskAgentSkillFileDoc"},"type":"array"},"skill_id":{"example":"e2e-summary","type":"string"},"source_type":{"example":"upload","type":"string"},"url":{"type":"string"}},"type":"object"},"api.TaskAgentUserUploadDoc":{"properties":{"id":{"example":"11111111-1111-1111-1111-111111111111","type":"string"},"name":{"example":"report.csv","type":"string"},"path":{"example":"uploads/11111111-1111-1111-1111-111111111111/report.csv","type":"string"},"relative_path":{"example":"uploads/11111111-1111-1111-1111-111111111111/report.csv","type":"string"},"size_bytes":{"example":1024,"type":"integer"}},"type":"object"},"api.TaskAgentUserUploadEnvelopeDoc":{"properties":{"file":{"$ref":"#/definitions/api.TaskAgentUserUploadDoc"}},"type":"object"},"api.TaskAgentWebhookDoc":{"properties":{"communication_knowledge_base_ids":{"items":{"type":"string"},"type":"array"},"created_at":{"type":"string"},"crm_ids":{"items":{"type":"string"},"type":"array"},"description":{"type":"string"},"dynamic_tools":{"items":{"additionalProperties":{},"type":"object"},"type":"array"},"hook_id":{"example":"hook_123","type":"string"},"knowledge_base_list":{"items":{"type":"string"},"type":"array"},"memory":{"$ref":"#/definitions/api.TaskAgentWebhookMemoryConfigDoc"},"model":{"type":"string"},"model_source":{"type":"string"},"policies":{"items":{"type":"string"},"type":"array"},"reasoning_effort":{"type":"string"},"runtime_tools":{"items":{"additionalProperties":{},"type":"object"},"type":"array"},"sandbox_mode":{"type":"string"},"secret_bindings":{"items":{"additionalProperties":{},"type":"object"},"type":"array"},"secrets":{"items":{"$ref":"#/definitions/api.TaskAgentWebhookSecretDoc"},"type":"array"},"selected_skills":{"items":{"$ref":"#/definitions/api.TaskAgentWebhookSelectedSkillDoc"},"type":"array"},"status":{"type":"string"},"system_prompt":{"type":"string"},"title":{"type":"string"},"updated_at":{"type":"string"},"url":{"type":"string"}},"type":"object"},"api.TaskAgentWebhookEnvelopeDoc":{"properties":{"hook":{"$ref":"#/definitions/api.TaskAgentWebhookDoc"},"policy_options":{"items":{"additionalProperties":{},"type":"object"},"type":"array"}},"type":"object"},"api.TaskAgentWebhookListEnvelopeDoc":{"properties":{"hooks":{"items":{"$ref":"#/definitions/api.TaskAgentWebhookDoc"},"type":"array"},"pagination":{"additionalProperties":{},"type":"object"},"policy_options":{"items":{"additionalProperties":{},"type":"object"},"type":"array"}},"type":"object"},"api.TaskAgentWebhookMemoryConfigDoc":{"properties":{"read_scope":{"enum":["self","webhook","all"],"example":"self","type":"string"},"write_scope":{"enum":["self","shared"],"example":"self","type":"string"}},"type":"object"},"api.TaskAgentWebhookRequestDoc":{"properties":{"communication_knowledge_base_ids":{"items":{"type":"string"},"type":"array"},"crm_ids":{"items":{"type":"string"},"type":"array"},"description":{"type":"string"},"dynamic_tools":{"items":{"additionalProperties":{},"type":"object"},"type":"array"},"hook_id":{"example":"hook_123","type":"string"},"http_request":{"additionalProperties":{},"type":"object"},"knowledge_base_list":{"items":{"type":"string"},"type":"array"},"memory":{"$ref":"#/definitions/api.TaskAgentWebhookMemoryConfigDoc"},"model":{"example":"hast/auto","type":"string"},"model_source":{"type":"string"},"policies":{"items":{"type":"string"},"type":"array"},"reasoning_effort":{"example":"medium","type":"string"},"runtime_tools":{"items":{"additionalProperties":{},"type":"object"},"type":"array"},"sandbox_mode":{"example":"read_only","type":"string"},"secret_bindings":{"items":{"additionalProperties":{},"type":"object"},"type":"array"},"secrets":{"items":{"$ref":"#/definitions/api.TaskAgentWebhookSecretInputDoc"},"type":"array"},"selected_skills":{"items":{"$ref":"#/definitions/api.TaskAgentWebhookSelectedSkillDoc"},"type":"array"},"status":{"example":"active","type":"string"},"system_prompt":{"type":"string"},"title":{"example":"Support Agent","type":"string"}},"type":"object"},"api.TaskAgentWebhookSecretDoc":{"properties":{"name":{"example":"CRM_TOKEN","type":"string"}},"type":"object"},"api.TaskAgentWebhookSecretInputDoc":{"properties":{"name":{"example":"CRM_TOKEN","type":"string"},"value":{"example":"write-only","type":"string"}},"type":"object"},"api.TaskAgentWebhookSelectedSkillDoc":{"properties":{"enabled":{"type":"boolean"},"skill_id":{"example":"usr_123","type":"string"},"source":{"example":"user","type":"string"}},"type":"object"},"api.UpdateAgentRequest":{"properties":{"channels":{"description":"Channels optionally replaces the messaging channel list (e.g. Telegram bot).","items":{"$ref":"#/definitions/api.Channels"},"type":"array"},"mail":{"allOf":[{"$ref":"#/definitions/api.UpdateMailOptions"}],"description":"Mail optionally disables mailbox access for downgrade/freeze handling."},"model":{"description":"Model optionally changes the primary LLM model in openclaw.json.","type":"string"},"resources":{"allOf":[{"$ref":"#/definitions/api.Resources"}],"description":"Resources optionally resizes the Droplet (CPU/Memory/Storage). Empty fields are left unchanged."},"vnc":{"allOf":[{"$ref":"#/definitions/api.VNC"}],"description":"VNC optionally updates persisted Chrome VNC flag for the instance."},"voice":{"allOf":[{"$ref":"#/definitions/api.Voice"}],"description":"Voice optionally updates persisted TTS/STT flags for the instance (see also VNC)."},"wallet":{"allOf":[{"$ref":"#/definitions/api.UpdateWalletOptions"}],"description":"Wallet optionally disconnects wallet integration for the instance."}},"type":"object"},"api.UpdateMailOptions":{"properties":{"enabled":{"description":"Enabled only supports `false` on update, which freezes mailbox access for the instance.","type":"boolean"}},"type":"object"},"api.UpdateWalletOptions":{"properties":{"enabled":{"description":"Enabled disconnects when false and synchronizes runtime bootstrap when true.","type":"boolean"},"inject_skill":{"description":"InjectSkill controls whether the wallet skill should be installed into the runtime.","type":"boolean"},"provider":{"description":"Provider is required when enabling wallet integration on an existing machine.","type":"string"},"secrets":{"allOf":[{"$ref":"#/definitions/api.WalletSecretsOptions"}],"description":"Secrets seeds or refreshes provider runtime state on the target machine."}},"type":"object"},"api.UpgradeMachineRequest":{"properties":{"agent_id":{"description":"AgentID is required when mail is enabled (mailbox registration).","type":"string"},"cloud_provider":{"description":"CloudProvider is accepted for forward compatibility; the upgrade path uses the instances' provider.","type":"string"},"env":{"description":"Env is the HAST deployment tier (DigitalOcean tag hast_env:…). Omit or empty → \"dev\".","enum":["dev","stg","prod"],"example":"dev","type":"string"},"from_id":{"type":"string"},"mail":{"allOf":[{"$ref":"#/definitions/api.MailOptions"}],"description":"Mail configures optional mailbox integration (same semantics as create)."},"openrouterApiKey":{"description":"OpenrouterApiKey optionally replaces keys on instances after upgrade; omit to keep existing keys.","type":"string"},"region":{"description":"Region is the cloud-provider region slug (e.g. \"sgp1\"). Empty uses the from_id instance region, then provider default.","type":"string"},"resources":{"allOf":[{"$ref":"#/definitions/api.Resources"}],"description":"Resources specifies the desired CPU / Memory / Storage for the new Droplet."},"runtime":{"allOf":[{"$ref":"#/definitions/api.RuntimeEnvironment"}],"description":"Runtime configures host timezone and browser language defaults."},"user_email":{"description":"UserEmail is persisted on every instance on this machine and on the upgrade job record (not read from JWT).","type":"string"},"vnc":{"allOf":[{"$ref":"#/definitions/api.VNC"}],"description":"VNC configures optional Chrome VNC userdata."},"voice":{"allOf":[{"$ref":"#/definitions/api.Voice"}],"description":"Voice configures optional TTS and STT for the new Droplet userdata."},"wallet":{"allOf":[{"$ref":"#/definitions/api.WalletOptions"}],"description":"Wallet configures optional agent wallet integration (same semantics as create)."}},"required":["from_id","resources"],"type":"object"},"api.UsageEventsPage":{"properties":{"has_more":{"description":"HasMore indicates whether more rows are available after this page.","example":true,"type":"boolean"},"items":{"description":"Items is the list of usage events in this page.","items":{"$ref":"#/definitions/api.usageEventResponse"},"type":"array"},"limit":{"description":"Limit is the page size used for this request.","example":100,"type":"integer"},"next_after_id":{"description":"NextAfterID is the tie-breaker ID to use together with NextFrom.","example":"usage_evt_123","type":"string"},"next_from":{"description":"NextFrom is the next checkpoint time for incremental polling.","example":"2026-03-25T08:30:00Z","type":"string"}},"type":"object"},"api.UsageEventsResponseDoc":{"properties":{"code":{"description":"Code is the business status code (0 = success).","example":0,"type":"integer"},"data":{"allOf":[{"$ref":"#/definitions/api.UsageEventsPage"}],"description":"Data contains the paginated usage events."},"message":{"description":"Message is a human-readable status description.","example":"ok","type":"string"}},"type":"object"},"api.UsageSummaryData":{"properties":{"items":{"description":"Items lists per-usage-type aggregated summaries.","items":{"$ref":"#/definitions/api.usageAggregateResponse"},"type":"array"},"month":{"description":"Month is the target month in \"YYYY-MM\" format.","example":"2026-03","type":"string"}},"type":"object"},"api.UsageSummaryResponseDoc":{"properties":{"code":{"description":"Code is the business status code (0 = success).","example":0,"type":"integer"},"data":{"allOf":[{"$ref":"#/definitions/api.UsageSummaryData"}],"description":"Data contains the monthly usage summary."},"message":{"description":"Message is a human-readable status description.","example":"ok","type":"string"}},"type":"object"},"api.VNC":{"properties":{"chrome":{"type":"boolean"}},"type":"object"},"api.VNCConfig":{"properties":{"chrome_url":{"description":"ChromeUrl is the public HTTPS Chrome VNC URL for this instance, formatted as \"https://{id}.{VNCBaseDomain}/\". Empty if no IP is assigned yet or VNC is not enabled.","type":"string"}},"type":"object"},"api.Voice":{"properties":{"stt":{"description":"STT configures optional STT for the instance.","type":"boolean"},"tts":{"description":"TTS configures optional TTS for the instance.","type":"boolean"}},"type":"object"},"api.WalletOptions":{"properties":{"enabled":{"description":"Enabled activates wallet integration for the instance.","type":"boolean"},"inject_skill":{"description":"InjectSkill additionally injects the wallet skill into the runtime.","type":"boolean"},"provider":{"description":"Provider selects the wallet provider; currently only cobo is supported.","type":"string"},"secrets":{"allOf":[{"$ref":"#/definitions/api.WalletSecretsOptions"}],"description":"Secrets seeds provider runtime state onto a fresh machine when available."}},"type":"object"},"api.WalletSecretsOptions":{"properties":{"cobo":{"$ref":"#/definitions/api.CoboWalletSecretsOptions"}},"type":"object"},"api.channelCRMCreateRequest":{"properties":{"name":{"type":"string"},"request_id":{"type":"string"}},"type":"object"},"api.createTestUsageEventRequest":{"properties":{"id":{"type":"string"},"instance_id":{"type":"string"},"period_end":{"type":"string"},"period_start":{"type":"string"},"profile_id":{"type":"string"},"provider_instance_id":{"type":"string"},"quantity_delta":{"type":"integer"},"quantity_total":{"type":"integer"},"source_count":{"type":"integer"},"source_refs":{"items":{"type":"string"},"type":"array"},"unit":{"type":"string"},"usage_type":{"type":"string"}},"type":"object"},"api.createWhatsAppChannelRequest":{"properties":{"app_secret_id":{"type":"string"},"business_account_id":{"type":"string"},"name":{"type":"string"},"phone_number":{"type":"string"},"phone_number_id":{"type":"string"},"require_admission":{"type":"boolean"},"token_secret_id":{"type":"string"}},"type":"object"},"api.postTaskAgentWebhookRequest":{"properties":{"after_event_id":{"type":"integer"},"context":{},"knowledge_base_list":{"items":{"type":"string"},"type":"array"},"metadata":{"$ref":"#/definitions/repository.TaskAgentJSON"},"model_config":{"$ref":"#/definitions/repository.TaskAgentJSON"},"prompt":{"type":"string"},"request_id":{"type":"string"},"session_id":{"type":"string"},"signal":{"type":"string"},"system_prompt":{"type":"string"}},"type":"object"},"api.reauthorizeWhatsAppChannelRequest":{"properties":{"app_secret_id":{"type":"string"},"business_account_id":{"type":"string"},"phone_number_id":{"type":"string"},"token_secret_id":{"type":"string"}},"type":"object"},"api.taskAgentChannelBindingRequest":{"properties":{"expected_binding_version":{"type":"integer"},"expected_hook_id":{"type":"string"},"require_admission":{"type":"boolean"},"target_hook_id":{"type":"string"}},"type":"object"},"api.taskAgentHookChannelConfigRequest":{"properties":{"connection_ids":{"items":{"type":"string"},"type":"array"},"memory_project_ids":{"items":{"type":"string"},"type":"array"},"reply_to_origin":{"type":"boolean"}},"type":"object"},"api.taskAgentWebhookAcceptedEnvelope":{"properties":{"after_event_id":{"type":"integer"},"event_url":{"type":"string"},"request_id":{"type":"string"},"run_id":{"type":"string"},"session_id":{"type":"string"}},"type":"object"},"api.usageAggregateResponse":{"properties":{"paid_quantity":{"description":"PaidQuantity is the portion of TotalQuantity already marked paid.","type":"integer"},"pending_quantity":{"description":"PendingQuantity is the portion of TotalQuantity not yet marked paid.","type":"integer"},"record_count":{"description":"RecordCount is the number of individual usage events aggregated.","type":"integer"},"total_quantity":{"description":"TotalQuantity is the sum of all event quantities (pending + paid) in the period.","type":"integer"},"unit":{"description":"Unit is the measurement unit for the quantities (e.g. \"bytes\", \"messages\").","type":"string"},"usage_type":{"description":"UsageType is the metered category (e.g. \"bandwidth_outbound\", \"mail_inbound\").","type":"string"}},"type":"object"},"api.usageEventResponse":{"properties":{"id":{"description":"ID is the unique usage event identifier.","type":"string"},"instance_id":{"description":"InstanceID is the logical openclaw instance identifier.","type":"string"},"paid_at":{"description":"PaidAt is the UTC timestamp when the event was marked paid; nil while pending.","type":"string"},"period_end":{"description":"PeriodEnd is the exclusive end of the metering period (UTC).","type":"string"},"period_start":{"description":"PeriodStart is the inclusive start of the metering period (UTC).","type":"string"},"profile_id":{"description":"UserID is the owning user's identifier.","type":"string"},"provider_instance_id":{"description":"ProviderInstanceID is the cloud-provider's own identifier for the instance.","type":"string"},"quantity_delta":{"description":"QuantityDelta is the incremental quantity recorded in this event.","type":"integer"},"quantity_total":{"description":"QuantityTotal is the cumulative quantity up to this event.","type":"integer"},"recorded_at":{"description":"RecordedAt is the UTC timestamp when the event was originally recorded.","type":"string"},"source_count":{"description":"SourceCount is the number of raw source records aggregated into this event.","type":"integer"},"source_refs":{"description":"SourceRefs lists opaque references to the underlying source records.","items":{"type":"string"},"type":"array"},"status":{"description":"Status is the billing state: \"pending\" or \"paid\".","type":"string"},"unit":{"description":"Unit is the measurement unit for quantities (e.g. \"bytes\", \"messages\").","type":"string"},"usage_type":{"description":"UsageType categorises the event (e.g. \"bandwidth_outbound\", \"mail_inbound\", \"mail_outbound\").","type":"string"}},"type":"object"},"channel.CRMMember":{"properties":{"email":{"type":"string"},"first_name":{"type":"string"},"id":{"type":"string"},"last_name":{"type":"string"}},"type":"object"},"channel.CRMMemberInput":{"properties":{"email":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"}},"required":["email","first_name"],"type":"object"},"channel.CRMMemberPage":{"properties":{"has_more":{"type":"boolean"},"members":{"items":{"$ref":"#/definitions/channel.CRMMember"},"type":"array"},"next_cursor":{"type":"string"}},"type":"object"},"channel.SlackTriggerRules":{"properties":{"auto_reply_channel_ids":{"items":{"type":"string"},"type":"array"},"auto_reply_sender_ids":{"items":{"type":"string"},"type":"array"},"require_mention":{"type":"boolean"}},"required":["require_mention"],"type":"object"},"context.compacted":{"allOf":[{"$ref":"#/definitions/api.TaskAgentEventDoc"},{"properties":{"data":{"$ref":"#/definitions/api.TaskAgentEventContextCompactedDataDoc"},"type":{"enum":["context.compacted"],"type":"string"}},"required":["type","data"],"type":"object"}]},"error":{"allOf":[{"$ref":"#/definitions/api.TaskAgentEventDoc"},{"properties":{"data":{"$ref":"#/definitions/api.TaskAgentEventErrorDataDoc"},"type":{"enum":["error"],"type":"string"}},"required":["type","data"],"type":"object"}]},"file.changed":{"allOf":[{"$ref":"#/definitions/api.TaskAgentEventDoc"},{"properties":{"data":{"$ref":"#/definitions/api.TaskAgentEventFileChangedDataDoc"},"type":{"enum":["file.changed"],"type":"string"}},"required":["type","data"],"type":"object"}]},"input.requested":{"allOf":[{"$ref":"#/definitions/api.TaskAgentEventDoc"},{"properties":{"data":{"$ref":"#/definitions/api.TaskAgentEventInputRequestedDataDoc"},"type":{"enum":["input.requested"],"type":"string"}},"required":["type","data"],"type":"object"}]},"message.completed":{"allOf":[{"$ref":"#/definitions/api.TaskAgentEventDoc"},{"properties":{"data":{"$ref":"#/definitions/api.TaskAgentEventMessageCompletedDataDoc"},"type":{"enum":["message.completed"],"type":"string"}},"required":["type","data"],"type":"object"}]},"message.delta":{"allOf":[{"$ref":"#/definitions/api.TaskAgentEventDoc"},{"properties":{"data":{"$ref":"#/definitions/api.TaskAgentEventMessageDeltaDataDoc"},"type":{"enum":["message.delta"],"type":"string"}},"required":["type","data"],"type":"object"}]},"message.started":{"allOf":[{"$ref":"#/definitions/api.TaskAgentEventDoc"},{"properties":{"data":{"$ref":"#/definitions/api.TaskAgentEventMessageStartedDataDoc"},"type":{"enum":["message.started"],"type":"string"}},"required":["type","data"],"type":"object"}]},"plan.completed":{"allOf":[{"$ref":"#/definitions/api.TaskAgentEventDoc"},{"properties":{"data":{"$ref":"#/definitions/api.TaskAgentEventPlanCompletedDataDoc"},"type":{"enum":["plan.completed"],"type":"string"}},"required":["type","data"],"type":"object"}]},"plan.updated":{"allOf":[{"$ref":"#/definitions/api.TaskAgentEventDoc"},{"properties":{"data":{"$ref":"#/definitions/api.TaskAgentEventPlanUpdatedDataDoc"},"type":{"enum":["plan.updated"],"type":"string"}},"required":["type","data"],"type":"object"}]},"reasoning.completed":{"allOf":[{"$ref":"#/definitions/api.TaskAgentEventDoc"},{"properties":{"data":{"$ref":"#/definitions/api.TaskAgentEventReasoningCompletedDataDoc"},"type":{"enum":["reasoning.completed"],"type":"string"}},"required":["type","data"],"type":"object"}]},"reasoning.delta":{"allOf":[{"$ref":"#/definitions/api.TaskAgentEventDoc"},{"properties":{"data":{"$ref":"#/definitions/api.TaskAgentEventReasoningDeltaDataDoc"},"type":{"enum":["reasoning.delta"],"type":"string"}},"required":["type","data"],"type":"object"}]},"reasoning.started":{"allOf":[{"$ref":"#/definitions/api.TaskAgentEventDoc"},{"properties":{"data":{"$ref":"#/definitions/api.TaskAgentEventReasoningStartedDataDoc"},"type":{"enum":["reasoning.started"],"type":"string"}},"required":["type","data"],"type":"object"}]},"repository.ChannelResource":{"properties":{"base_url":{"type":"string"},"created_at":{"type":"string"},"credential_expires_at":{"type":"string"},"id":{"type":"string"},"kind":{"$ref":"#/definitions/repository.ChannelResourceKind"},"managed":{"type":"boolean"},"name":{"type":"string"},"reference_id":{"type":"string"},"scope_type":{"type":"string"},"secret_id":{"type":"string"},"status":{"type":"string"}},"type":"object"},"repository.ChannelResourceKind":{"enum":["hast_memory","cloudflare","hindsight","twenty","tool","schedule"],"type":"string","x-enum-varnames":["ChannelResourceMemory","ChannelResourceKnowledge","ChannelResourceFacts","ChannelResourceCRM","ChannelResourceTool","ChannelResourceSchedule"]},"repository.TaskAgentJSON":{"additionalProperties":{},"type":"object"},"run.completed":{"allOf":[{"$ref":"#/definitions/api.TaskAgentEventDoc"},{"properties":{"data":{"$ref":"#/definitions/api.TaskAgentEventRunCompletedDataDoc"},"type":{"enum":["run.completed"],"type":"string"}},"required":["type","data"],"type":"object"}]},"run.failed":{"allOf":[{"$ref":"#/definitions/api.TaskAgentEventDoc"},{"properties":{"data":{"$ref":"#/definitions/api.TaskAgentEventRunFailedDataDoc"},"type":{"enum":["run.failed"],"type":"string"}},"required":["type","data"],"type":"object"}]},"run.interrupted":{"allOf":[{"$ref":"#/definitions/api.TaskAgentEventDoc"},{"properties":{"data":{"$ref":"#/definitions/api.TaskAgentEventRunInterruptedDataDoc"},"type":{"enum":["run.interrupted"],"type":"string"}},"required":["type","data"],"type":"object"}]},"run.queued":{"allOf":[{"$ref":"#/definitions/api.TaskAgentEventDoc"},{"properties":{"data":{"$ref":"#/definitions/api.TaskAgentEventRunQueuedDataDoc"},"type":{"enum":["run.queued"],"type":"string"}},"required":["type","data"],"type":"object"}]},"run.retrying":{"allOf":[{"$ref":"#/definitions/api.TaskAgentEventDoc"},{"properties":{"data":{"$ref":"#/definitions/api.TaskAgentEventRunRetryingDataDoc"},"type":{"enum":["run.retrying"],"type":"string"}},"required":["type","data"],"type":"object"}]},"run.started":{"allOf":[{"$ref":"#/definitions/api.TaskAgentEventDoc"},{"properties":{"data":{"$ref":"#/definitions/api.TaskAgentEventRunStartedDataDoc"},"type":{"enum":["run.started"],"type":"string"}},"required":["type","data"],"type":"object"}]},"runtime.status":{"allOf":[{"$ref":"#/definitions/api.TaskAgentEventDoc"},{"properties":{"data":{"$ref":"#/definitions/api.TaskAgentEventRuntimeStatusDataDoc"},"type":{"enum":["runtime.status"],"type":"string"}},"required":["type","data"],"type":"object"}]},"tool.completed":{"allOf":[{"$ref":"#/definitions/api.TaskAgentEventDoc"},{"properties":{"data":{"$ref":"#/definitions/api.TaskAgentEventToolCompletedDataDoc"},"type":{"enum":["tool.completed"],"type":"string"}},"required":["type","data"],"type":"object"}]},"tool.started":{"allOf":[{"$ref":"#/definitions/api.TaskAgentEventDoc"},{"properties":{"data":{"$ref":"#/definitions/api.TaskAgentEventToolStartedDataDoc"},"type":{"enum":["tool.started"],"type":"string"}},"required":["type","data"],"type":"object"}]},"tool.updated":{"allOf":[{"$ref":"#/definitions/api.TaskAgentEventDoc"},{"properties":{"data":{"$ref":"#/definitions/api.TaskAgentEventToolUpdatedDataDoc"},"type":{"enum":["tool.updated"],"type":"string"}},"required":["type","data"],"type":"object"}]},"usage.updated":{"allOf":[{"$ref":"#/definitions/api.TaskAgentEventDoc"},{"properties":{"data":{"$ref":"#/definitions/api.TaskAgentEventUsageUpdatedDataDoc"},"type":{"enum":["usage.updated"],"type":"string"}},"required":["type","data"],"type":"object"}]},"warning":{"allOf":[{"$ref":"#/definitions/api.TaskAgentEventDoc"},{"properties":{"data":{"$ref":"#/definitions/api.TaskAgentEventWarningDataDoc"},"type":{"enum":["warning"],"type":"string"}},"required":["type","data"],"type":"object"}]}},"host":"","info":{"contact":{},"description":"HTTP API exposed by the `hast-backplane serve` subcommand.\nThis document includes public `/api/v1/*` endpoints plus `/health`.\nThe legacy `/internal/v1/waf/verify` compatibility route remains runtime-only during WAF migration and is intentionally excluded from this OpenAPI document.","title":"HAST Backplane Serve API","version":"1.0"},"paths":{"/api/public/v1/business-resources":{"get":{"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"additionalProperties":true,"type":"object"}}},"security":[{"PublicBearer":[]}],"summary":"List CRM and customer communication knowledge bases","tags":["public-task-agents"]}},"/api/public/v1/business-resources/communication-knowledge":{"post":{"consumes":["application/json"],"parameters":[{"description":"Create a customer communication knowledge base request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.channelCRMCreateRequest"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"additionalProperties":true,"type":"object"}}},"security":[{"PublicBearer":[]}],"summary":"Create a customer communication knowledge base","tags":["public-task-agents"]}},"/api/public/v1/business-resources/crm":{"post":{"consumes":["application/json"],"parameters":[{"description":"Create an optional Twenty workspace request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.channelCRMCreateRequest"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"additionalProperties":true,"type":"object"}}},"security":[{"PublicBearer":[]}],"summary":"Create an optional Twenty workspace","tags":["public-task-agents"]}},"/api/public/v1/business-resources/{resource_id}":{"delete":{"parameters":[{"description":"resource_id","in":"path","name":"resource_id","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"additionalProperties":true,"type":"object"}}},"security":[{"PublicBearer":[]}],"summary":"Delete an unused channel resource configuration","tags":["public-task-agents"]},"get":{"parameters":[{"description":"resource_id","in":"path","name":"resource_id","required":true,"type":"string"},{"description":"CRM object (default people); use CRM schema for supported objects","in":"query","name":"object","type":"string"},{"description":"CRM next-page cursor","in":"query","name":"cursor","type":"string"},{"description":"Communication knowledge search (maximum 2000 bytes); omit to browse sources","in":"query","name":"query","type":"string"},{"description":"Communication document pagination cursor","in":"query","name":"before","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"additionalProperties":true,"type":"object"}}},"security":[{"PublicBearer":[]}],"summary":"Browse CRM records or communication knowledge source documents","tags":["public-task-agents"]}},"/api/public/v1/business-resources/{resource_id}/crm/schema":{"get":{"parameters":[{"description":"resource_id","in":"path","name":"resource_id","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"additionalProperties":true,"type":"object"}}},"security":[{"PublicBearer":[]}],"summary":"Read CRM business objects and field schema","tags":["public-task-agents"]}},"/api/public/v1/business-resources/{resource_id}/crm/{object}":{"get":{"parameters":[{"description":"resource_id","in":"path","name":"resource_id","required":true,"type":"string"},{"description":"object","in":"path","name":"object","required":true,"type":"string"},{"description":"Search (maximum 300 bytes, no quotes or line breaks)","in":"query","name":"query","type":"string"},{"description":"Provider cursor returned by the previous page","in":"query","name":"cursor","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"additionalProperties":true,"type":"object"}}},"security":[{"PublicBearer":[]}],"summary":"Search CRM records","tags":["public-task-agents"]},"post":{"consumes":["application/json"],"description":"Discover objects and writable fields using the CRM schema endpoint before writing. Read back on uncertain errors before retrying.","parameters":[{"description":"resource_id","in":"path","name":"resource_id","required":true,"type":"string"},{"description":"object","in":"path","name":"object","required":true,"type":"string"},{"description":"Create a CRM record request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.PublicCRMWriteDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"additionalProperties":true,"type":"object"}}},"security":[{"PublicBearer":[]}],"summary":"Create a CRM record","tags":["public-task-agents"]}},"/api/public/v1/business-resources/{resource_id}/crm/{object}/{record_id}":{"delete":{"parameters":[{"description":"resource_id","in":"path","name":"resource_id","required":true,"type":"string"},{"description":"object","in":"path","name":"object","required":true,"type":"string"},{"description":"record_id","in":"path","name":"record_id","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"additionalProperties":true,"type":"object"}}},"security":[{"PublicBearer":[]}],"summary":"Delete a CRM record","tags":["public-task-agents"]},"get":{"parameters":[{"description":"resource_id","in":"path","name":"resource_id","required":true,"type":"string"},{"description":"object","in":"path","name":"object","required":true,"type":"string"},{"description":"record_id","in":"path","name":"record_id","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"additionalProperties":true,"type":"object"}}},"security":[{"PublicBearer":[]}],"summary":"Read CRM record details","tags":["public-task-agents"]},"patch":{"consumes":["application/json"],"description":"Discover objects and writable fields using the CRM schema endpoint before writing. Read back on uncertain errors before retrying.","parameters":[{"description":"resource_id","in":"path","name":"resource_id","required":true,"type":"string"},{"description":"object","in":"path","name":"object","required":true,"type":"string"},{"description":"record_id","in":"path","name":"record_id","required":true,"type":"string"},{"description":"Update a CRM record request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.PublicCRMWriteDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"additionalProperties":true,"type":"object"}}},"security":[{"PublicBearer":[]}],"summary":"Update a CRM record","tags":["public-task-agents"]}},"/api/public/v1/business-resources/{resource_id}/crm/{object}/{record_id}/files/{field}/{file_id}":{"get":{"parameters":[{"description":"resource_id","in":"path","name":"resource_id","required":true,"type":"string"},{"description":"object","in":"path","name":"object","required":true,"type":"string"},{"description":"record_id","in":"path","name":"record_id","required":true,"type":"string"},{"description":"field","in":"path","name":"field","required":true,"type":"string"},{"description":"file_id","in":"path","name":"file_id","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"additionalProperties":true,"type":"object"}}},"security":[{"PublicBearer":[]}],"summary":"Download a file attached to a CRM record","tags":["public-task-agents"]}},"/api/public/v1/business-resources/{resource_id}/crm/{object}/{record_id}/relations/{field}":{"get":{"parameters":[{"description":"resource_id","in":"path","name":"resource_id","required":true,"type":"string"},{"description":"object","in":"path","name":"object","required":true,"type":"string"},{"description":"record_id","in":"path","name":"record_id","required":true,"type":"string"},{"description":"field","in":"path","name":"field","required":true,"type":"string"},{"description":"Provider cursor returned by the previous page","in":"query","name":"cursor","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"additionalProperties":true,"type":"object"}}},"security":[{"PublicBearer":[]}],"summary":"Browse related CRM records","tags":["public-task-agents"]}},"/api/public/v1/business-resources/{resource_id}/members":{"get":{"parameters":[{"description":"Owned CRM resource ID","in":"path","name":"resource_id","required":true,"type":"string"},{"description":"Next cursor from the previous member page","in":"query","name":"cursor","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/channel.CRMMemberPage"}}},"security":[{"PublicBearer":[]}],"summary":"List CRM member identities for owner and assignee fields","tags":["public-task-agents"]},"post":{"consumes":["application/json"],"description":"Uses the selected managed workspace's existing registration flow. No invitation is sent. Generated passwords are discarded. Does not reset accounts outside this CRM; provider email-verification settings still apply.","parameters":[{"description":"Owned platform-managed CRM resource ID","in":"path","name":"resource_id","required":true,"type":"string"},{"description":"Actual email and name; never a password","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/channel.CRMMemberInput"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/channel.CRMMember"}}},"security":[{"PublicBearer":[]}],"summary":"Create or reuse a CRM member without retaining a password","tags":["public-task-agents"]}},"/api/public/v1/business-resources/{resource_id}/provision":{"post":{"parameters":[{"description":"resource_id","in":"path","name":"resource_id","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"additionalProperties":true,"type":"object"}}},"security":[{"PublicBearer":[]}],"summary":"Retry an incomplete CRM provisioning operation","tags":["public-task-agents"]}},"/api/public/v1/channels":{"get":{"produces":["application/json"],"responses":{},"security":[{"PublicBearer":[]}],"summary":"List user channel connections","tags":["Task Agent Channels"]},"post":{"parameters":[{"description":"Request body","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.PublicChannelConnectionDoc"}}],"produces":["application/json"],"responses":{},"security":[{"PublicBearer":[]}],"summary":"Connect a verified existing Chatwoot message inbox","tags":["Task Agent Channels"]}},"/api/public/v1/channels/account":{"post":{"produces":["application/json"],"responses":{},"security":[{"PublicBearer":[]}],"summary":"Initialize a user channel account","tags":["Task Agent Channels"]}},"/api/public/v1/channels/agents":{"get":{"parameters":[{"description":"Page number","in":"query","name":"page","type":"integer"},{"description":"Page size, maximum 100","in":"query","name":"page_size","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"additionalProperties":true,"type":"object"}}},"security":[{"PublicBearer":[]}],"summary":"List Agents available for channel assignment","tags":["public-task-agents"]}},"/api/public/v1/channels/authorizations/{provider}":{"post":{"parameters":[{"description":"provider","in":"path","name":"provider","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"additionalProperties":true,"type":"object"}}},"security":[{"PublicBearer":[]}],"summary":"Begin channel authorization","tags":["public-task-agents"]}},"/api/public/v1/channels/authorizations/{provider}/complete":{"post":{"consumes":["application/json"],"parameters":[{"description":"provider","in":"path","name":"provider","required":true,"type":"string"},{"description":"Complete channel authorization request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.PublicChannelAuthorizationDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"additionalProperties":true,"type":"object"}}},"security":[{"PublicBearer":[]}],"summary":"Complete channel authorization","tags":["public-task-agents"]}},"/api/public/v1/channels/facebook":{"post":{"consumes":["application/json"],"parameters":[{"description":"Connect a Facebook page request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.PublicFacebookConnectDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"additionalProperties":true,"type":"object"}}},"security":[{"PublicBearer":[]}],"summary":"Connect a Facebook page","tags":["public-task-agents"]}},"/api/public/v1/channels/facebook/pages":{"post":{"consumes":["application/json"],"parameters":[{"description":"List authorized Facebook pages request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.PublicFacebookPagesDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"additionalProperties":true,"type":"object"}}},"security":[{"PublicBearer":[]}],"summary":"List authorized Facebook pages","tags":["public-task-agents"]}},"/api/public/v1/channels/inboxes":{"get":{"produces":["application/json"],"responses":{},"security":[{"PublicBearer":[]}],"summary":"List available Chatwoot message inboxes","tags":["Task Agent Channels"]}},"/api/public/v1/channels/resources":{"get":{"produces":["application/json"],"responses":{},"security":[{"PublicBearer":[]}],"summary":"List channel resources and operations","tags":["Task Agent Channels"]},"post":{"consumes":["application/json"],"parameters":[{"description":"Resource reference","in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/repository.ChannelResource"}}],"produces":["application/json"],"responses":{},"security":[{"PublicBearer":[]}],"summary":"Register an independently bindable channel resource","tags":["Task Agent Channels"]}},"/api/public/v1/channels/resources/crm":{"post":{"consumes":["application/json"],"parameters":[{"description":"CRM name and stable request ID","in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/api.channelCRMCreateRequest"}}],"produces":["application/json"],"responses":{},"security":[{"PublicBearer":[]}],"summary":"Create an optional Twenty workspace","tags":["Task Agent Channels"]}},"/api/public/v1/channels/resources/{resource_id}":{"delete":{"parameters":[{"description":"Resource ID","in":"path","name":"resource_id","required":true,"type":"string"}],"produces":["application/json"],"responses":{},"security":[{"PublicBearer":[]}],"summary":"Delete an unused channel resource configuration","tags":["Task Agent Channels"]}},"/api/public/v1/channels/resources/{resource_id}/provision":{"post":{"parameters":[{"description":"CRM resource ID","in":"path","name":"resource_id","required":true,"type":"string"}],"produces":["application/json"],"responses":{},"security":[{"PublicBearer":[]}],"summary":"Retry an incomplete CRM provisioning operation","tags":["Task Agent Channels"]}},"/api/public/v1/channels/resources/{resource_id}/status":{"put":{"consumes":["application/json"],"parameters":[{"description":"CRM resource ID","in":"path","name":"resource_id","required":true,"type":"string"},{"description":"Request body","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.PublicChannelStatusDoc"}}],"produces":["application/json"],"responses":{},"security":[{"PublicBearer":[]}],"summary":"Disable or reverify a CRM resource","tags":["Task Agent Channels"]}},"/api/public/v1/channels/resources/{resource_id}/verify":{"post":{"parameters":[{"description":"CRM resource ID","in":"path","name":"resource_id","required":true,"type":"string"}],"produces":["application/json"],"responses":{},"security":[{"PublicBearer":[]}],"summary":"Verify a Twenty resource credential and workspace","tags":["Task Agent Channels"]}},"/api/public/v1/channels/schedule_sources":{"get":{"produces":["application/json"],"responses":{},"security":[{"PublicBearer":[]}],"summary":"List verified Webhook Schedule destinations","tags":["Task Agent Channels"]}},"/api/public/v1/channels/sends":{"get":{"produces":["application/json"],"responses":{},"security":[{"PublicBearer":[]}],"summary":"List user channel sends and provider statuses","tags":["Task Agent Channels"]}},"/api/public/v1/channels/setup":{"get":{"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"additionalProperties":true,"type":"object"}}},"security":[{"PublicBearer":[]}],"summary":"Read channel setup configuration","tags":["public-task-agents"]},"post":{"description":"Slack accepts optional slack_trigger_rules with require_mention, auto_reply_channel_ids and auto_reply_sender_ids. Omit it for mention-required defaults. Channel and sender exceptions are OR conditions; obtain actual IDs from the authorized Slack workspace.","parameters":[{"description":"Request body","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.PublicMessageChannelDoc"}}],"produces":["application/json"],"responses":{},"security":[{"PublicBearer":[]}],"summary":"Create a message channel","tags":["Task Agent Channels"]}},"/api/public/v1/channels/whatsapp":{"post":{"consumes":["application/json"],"parameters":[{"description":"Create an official WhatsApp Cloud connection request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.createWhatsAppChannelRequest"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"additionalProperties":true,"type":"object"}}},"security":[{"PublicBearer":[]}],"summary":"Create an official WhatsApp Cloud connection","tags":["public-task-agents"]}},"/api/public/v1/channels/{connection_id}":{"delete":{"parameters":[{"description":"Connection ID","in":"path","name":"connection_id","required":true,"type":"string"}],"produces":["application/json"],"responses":{},"security":[{"PublicBearer":[]}],"summary":"Disconnect a user channel","tags":["Task Agent Channels"]}},"/api/public/v1/channels/{connection_id}/binding":{"put":{"consumes":["application/json"],"parameters":[{"description":"Channel connection ID","in":"path","name":"connection_id","required":true,"type":"string"},{"description":"Expected and target Webhook IDs; empty target releases binding","in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/api.taskAgentChannelBindingRequest"}}],"produces":["application/json"],"responses":{},"security":[{"PublicBearer":[]}],"summary":"Atomically rebind a channel","tags":["Task Agent Channels"]}},"/api/public/v1/channels/{connection_id}/installation":{"get":{"description":"WeChat installation includes wechat_trusted_ips, the configured public egress IP list. An empty array means the deployment has not configured it; other platforms omit this field.\nSlack installation includes slack_trigger_rules and the callback URL. Use the returned rules to preserve existing exceptions when updating a Slack channel.","responses":{},"security":[{"PublicBearer":[]}],"summary":"Read channel installation information","tags":["Task Agent Channels"]}},"/api/public/v1/channels/{connection_id}/slack":{"patch":{"consumes":["application/json"],"description":"Replace the complete Slack trigger rules. Mentions, exempt channel IDs and exempt user or bot IDs independently trigger replies. Both ID arrays support multiple values (up to 100 unique IDs each). Direct messages trigger normally and own-bot echoes are ignored. Requires an owned Slack channel; read /channels/{connection_id}/installation before editing and after saving.","parameters":[{"description":"Channel ID","in":"path","name":"connection_id","required":true,"type":"string"},{"description":"Complete Slack trigger rules","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/channel.SlackTriggerRules"}}],"produces":["application/json"],"responses":{},"security":[{"PublicBearer":[]}],"summary":"Set Slack mention requirements and automatic reply exceptions","tags":["Task Agent Channels"]}},"/api/public/v1/channels/{connection_id}/wechat-kf":{"patch":{"consumes":["application/json"],"parameters":[{"description":"connection_id","in":"path","name":"connection_id","required":true,"type":"string"},{"description":"Complete WeChat customer service setup request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.PublicWeChatCompleteDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"additionalProperties":true,"type":"object"}}},"security":[{"PublicBearer":[]}],"summary":"Complete WeChat customer service setup","tags":["public-task-agents"]}},"/api/public/v1/channels/{connection_id}/wechat-kf/domain-verification":{"post":{"consumes":["application/json"],"parameters":[{"description":"connection_id","in":"path","name":"connection_id","required":true,"type":"string"},{"description":"Upload a WeCom domain verification file request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.PublicDomainVerificationDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"additionalProperties":true,"type":"object"}}},"security":[{"PublicBearer":[]}],"summary":"Upload a WeCom domain verification file","tags":["public-task-agents"]}},"/api/public/v1/channels/{connection_id}/whatsapp":{"patch":{"consumes":["application/json"],"parameters":[{"description":"connection_id","in":"path","name":"connection_id","required":true,"type":"string"},{"description":"Reauthorize an official WhatsApp Cloud connection request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.reauthorizeWhatsAppChannelRequest"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"additionalProperties":true,"type":"object"}}},"security":[{"PublicBearer":[]}],"summary":"Reauthorize an official WhatsApp Cloud connection","tags":["public-task-agents"]}},"/api/public/v1/chat_memory_projects":{"get":{"produces":["application/json"],"responses":{},"security":[{"PublicBearer":[]}],"summary":"List user chat memory projects","tags":["Task Agent Channels"]},"post":{"parameters":[{"description":"Request body","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.PublicChatMemoryProjectDoc"}}],"produces":["application/json"],"responses":{},"security":[{"PublicBearer":[]}],"summary":"Create a user chat memory project","tags":["Task Agent Channels"]}},"/api/public/v1/chat_memory_projects/writes":{"get":{"produces":["application/json"],"responses":{},"security":[{"PublicBearer":[]}],"summary":"List user chat memory indexing operations","tags":["Task Agent Channels"]}},"/api/public/v1/connectors/accounts":{"get":{"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentConnectorAccountListEnvelopeDoc"}}},"security":[{"PublicBearer":[]}],"summary":"List public connector accounts","tags":["public-task-agents"]}},"/api/public/v1/connectors/accounts/{id}":{"delete":{"consumes":["application/json"],"parameters":[{"description":"Connector account ID","in":"path","name":"id","required":true,"type":"string"},{"description":"Connector account request","in":"body","name":"request","schema":{"$ref":"#/definitions/api.TaskAgentConnectorAccountRequestDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentConnectorAccountEnvelopeDoc"}}},"security":[{"PublicBearer":[]}],"summary":"Read, update, or delete a public connector account","tags":["public-task-agents"]},"get":{"consumes":["application/json"],"parameters":[{"description":"Connector account ID","in":"path","name":"id","required":true,"type":"string"},{"description":"Connector account request","in":"body","name":"request","schema":{"$ref":"#/definitions/api.TaskAgentConnectorAccountRequestDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentConnectorAccountEnvelopeDoc"}}},"security":[{"PublicBearer":[]}],"summary":"Read, update, or delete a public connector account","tags":["public-task-agents"]},"patch":{"consumes":["application/json"],"parameters":[{"description":"Connector account ID","in":"path","name":"id","required":true,"type":"string"},{"description":"Connector account request","in":"body","name":"request","schema":{"$ref":"#/definitions/api.TaskAgentConnectorAccountRequestDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentConnectorAccountEnvelopeDoc"}}},"security":[{"PublicBearer":[]}],"summary":"Read, update, or delete a public connector account","tags":["public-task-agents"]},"put":{"consumes":["application/json"],"parameters":[{"description":"Connector account ID","in":"path","name":"id","required":true,"type":"string"},{"description":"Connector account request","in":"body","name":"request","schema":{"$ref":"#/definitions/api.TaskAgentConnectorAccountRequestDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentConnectorAccountEnvelopeDoc"}}},"security":[{"PublicBearer":[]}],"summary":"Read, update, or delete a public connector account","tags":["public-task-agents"]}},"/api/public/v1/connectors/catalog":{"get":{"parameters":[{"description":"Search toolkits","in":"query","name":"search","type":"string"},{"description":"Next cursor","in":"query","name":"cursor","type":"string"},{"description":"Page size, maximum 100","in":"query","name":"limit","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentConnectorStatusEnvelopeDoc"}}},"security":[{"PublicBearer":[]}],"summary":"List public connector catalog","tags":["public-task-agents"]}},"/api/public/v1/connectors/status":{"get":{"parameters":[{"description":"Search connector catalog","in":"query","name":"search","type":"string"},{"description":"Next cursor","in":"query","name":"cursor","type":"string"},{"description":"Page size, maximum 100","in":"query","name":"limit","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentConnectorStatusEnvelopeDoc"}}},"security":[{"PublicBearer":[]}],"summary":"List public connector status","tags":["public-task-agents"]}},"/api/public/v1/connectors/{provider}/oauth/authorize":{"post":{"consumes":["application/json"],"parameters":[{"description":"Connector provider","in":"path","name":"provider","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentConnectorStartEnvelopeDoc"}}},"security":[{"PublicBearer":[]}],"summary":"Start public connector OAuth authorization","tags":["public-task-agents"]}},"/api/public/v1/files":{"get":{"parameters":[{"description":"Session ID","in":"query","name":"session_id","type":"string"},{"description":"Workspace directory path","in":"query","name":"path","type":"string"},{"description":"Workspace scope","in":"query","name":"scope","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.PublicTaskAgentWorkspaceFilesEnvelopeDoc"}}},"security":[{"PublicBearer":[]}],"summary":"List, download, or delete public workspace files","tags":["public-task-agents"]},"post":{"parameters":[{"description":"File","in":"formData","name":"file","required":true,"type":"file"}],"produces":["application/json"],"responses":{"201":{"description":"Created","schema":{"$ref":"#/definitions/api.PublicTaskAgentUploadEnvelopeDoc"}}},"security":[{"PublicBearer":[]}],"summary":"Upload a public Task Agent file","tags":["public-task-agents"]}},"/api/public/v1/files.zip":{"get":{"parameters":[{"description":"Session ID","in":"query","name":"session_id","type":"string"},{"description":"Workspace scope","in":"query","name":"scope","type":"string"}],"produces":["application/zip"],"responses":{"200":{"description":"Workspace ZIP","schema":{"type":"file"}}},"security":[{"PublicBearer":[]}],"summary":"Download a public workspace ZIP","tags":["public-task-agents"]}},"/api/public/v1/files/{relativePath}":{"delete":{"parameters":[{"description":"Workspace relative path","in":"path","name":"relativePath","required":true,"type":"string"},{"description":"Session ID","in":"query","name":"session_id","type":"string"},{"description":"Opaque file ID","in":"query","name":"file_id","required":true,"type":"string"},{"description":"Workspace scope","in":"query","name":"scope","type":"string"}],"produces":["application/octet-stream"],"responses":{"200":{"description":"Workspace file","schema":{"type":"file"}}},"security":[{"PublicBearer":[]}],"summary":"Download or delete a public workspace file","tags":["public-task-agents"]},"get":{"parameters":[{"description":"Workspace relative path","in":"path","name":"relativePath","required":true,"type":"string"},{"description":"Session ID","in":"query","name":"session_id","type":"string"},{"description":"Opaque file ID","in":"query","name":"file_id","required":true,"type":"string"},{"description":"Workspace scope","in":"query","name":"scope","type":"string"}],"produces":["application/octet-stream"],"responses":{"200":{"description":"Workspace file","schema":{"type":"file"}}},"security":[{"PublicBearer":[]}],"summary":"Download or delete a public workspace file","tags":["public-task-agents"]}},"/api/public/v1/guides":{"get":{"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"additionalProperties":true,"type":"object"}}},"security":[{"PublicBearer":[]}],"summary":"Discover Agent-facing Hast AIP guides","tags":["public-task-agents"]}},"/api/public/v1/guides/{topic}":{"get":{"parameters":[{"description":"Topic from GET /guides","in":"path","name":"topic","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"additionalProperties":true,"type":"object"}}},"security":[{"PublicBearer":[]}],"summary":"Read a detailed Hast AIP guide for Agents","tags":["public-task-agents"]}},"/api/public/v1/knowledge-bases":{"get":{"parameters":[{"description":"Page number, default 1","in":"query","name":"page","type":"integer"},{"description":"Page size, default 20 and max 100","in":"query","name":"page_size","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentKnowledgeBaseListEnvelopeDoc"}}},"security":[{"PublicBearer":[]}],"summary":"List public Task Agent Knowledge Bases","tags":["public-task-agents"]},"post":{"consumes":["application/json"],"description":"Creates a URL Knowledge Base with JSON or a file Knowledge Base with multipart/form-data. Indexing continues asynchronously.","parameters":[{"description":"URL Knowledge Base request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.TaskAgentKnowledgeBaseCreateRequestDoc"}}],"produces":["application/json"],"responses":{"201":{"description":"Created","schema":{"$ref":"#/definitions/api.TaskAgentKnowledgeBaseEnvelopeDoc"}},"400":{"description":"Bad Request","schema":{"$ref":"#/definitions/api.ServeErrorResponse"}}},"security":[{"PublicBearer":[]}],"summary":"Create a public Task Agent Knowledge Base","tags":["public-task-agents"]}},"/api/public/v1/knowledge-bases/{id}":{"delete":{"description":"Deletes the Cloudflare AI Search instance first when one exists, then deletes the local row.","parameters":[{"description":"Knowledge Base ID","in":"path","name":"id","required":true,"type":"string"}],"produces":["application/json"],"responses":{"204":{"description":"No Content"},"404":{"description":"Not Found","schema":{"$ref":"#/definitions/api.ServeErrorResponse"}},"502":{"description":"Bad Gateway","schema":{"$ref":"#/definitions/api.ServeErrorResponse"}}},"security":[{"PublicBearer":[]}],"summary":"Delete a public Task Agent Knowledge Base","tags":["public-task-agents"]},"get":{"parameters":[{"description":"Knowledge Base ID","in":"path","name":"id","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentKnowledgeBaseEnvelopeDoc"}},"404":{"description":"Not Found","schema":{"$ref":"#/definitions/api.ServeErrorResponse"}}},"security":[{"PublicBearer":[]}],"summary":"Read a public Task Agent Knowledge Base","tags":["public-task-agents"]},"patch":{"consumes":["application/json"],"parameters":[{"description":"Knowledge Base ID","in":"path","name":"id","required":true,"type":"string"},{"description":"Knowledge Base update request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.TaskAgentKnowledgeBaseUpdateRequestDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentKnowledgeBaseEnvelopeDoc"}},"404":{"description":"Not Found","schema":{"$ref":"#/definitions/api.ServeErrorResponse"}}},"security":[{"PublicBearer":[]}],"summary":"Update a public Task Agent Knowledge Base","tags":["public-task-agents"]},"put":{"consumes":["application/json"],"parameters":[{"description":"Knowledge Base ID","in":"path","name":"id","required":true,"type":"string"},{"description":"Knowledge Base update request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.TaskAgentKnowledgeBaseUpdateRequestDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentKnowledgeBaseEnvelopeDoc"}},"404":{"description":"Not Found","schema":{"$ref":"#/definitions/api.ServeErrorResponse"}}},"security":[{"PublicBearer":[]}],"summary":"Update a public Task Agent Knowledge Base","tags":["public-task-agents"]}},"/api/public/v1/memories":{"get":{"parameters":[{"description":"Filter memory category","enum":["task_agent","webhook"],"in":"query","name":"scope_type","type":"string"},{"description":"Webhook ID; empty selects shared, omitted selects all in the category","in":"query","name":"scope_id","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentMemoryListEnvelopeDoc"}}},"security":[{"PublicBearer":[]}],"summary":"List public Task Agent memories","tags":["public-task-agents"]},"post":{"consumes":["application/json"],"parameters":[{"description":"Memory request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.TaskAgentMemoryRequestDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentMemoryEnvelopeDoc"}}},"security":[{"PublicBearer":[]}],"summary":"Create a public Task Agent memory","tags":["public-task-agents"]}},"/api/public/v1/memories/by-id/{memoryID}":{"delete":{"parameters":[{"description":"Memory ID","in":"path","name":"memoryID","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentOKEnvelopeDoc"}}},"security":[{"PublicBearer":[]}],"summary":"Delete a memory by ID within the authenticated user","tags":["public-task-agents"]},"get":{"parameters":[{"description":"Memory ID","in":"path","name":"memoryID","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentMemoryEnvelopeDoc"}}},"security":[{"PublicBearer":[]}],"summary":"Read a memory by ID within the authenticated user","tags":["public-task-agents"]},"patch":{"consumes":["application/json"],"parameters":[{"description":"Memory ID","in":"path","name":"memoryID","required":true,"type":"string"},{"description":"Memory update","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.TaskAgentMemoryRequestDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentMemoryEnvelopeDoc"}},"404":{"description":"Not Found","schema":{"$ref":"#/definitions/api.ServeErrorResponse"}}},"security":[{"PublicBearer":[]}],"summary":"Update a memory by ID, optionally moving its scope","tags":["public-task-agents"]},"put":{"consumes":["application/json"],"parameters":[{"description":"Memory ID","in":"path","name":"memoryID","required":true,"type":"string"},{"description":"Memory update","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.TaskAgentMemoryRequestDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentMemoryEnvelopeDoc"}},"404":{"description":"Not Found","schema":{"$ref":"#/definitions/api.ServeErrorResponse"}}},"security":[{"PublicBearer":[]}],"summary":"Update a memory by ID, optionally moving its scope","tags":["public-task-agents"]}},"/api/public/v1/memories/{name}":{"delete":{"consumes":["application/json"],"parameters":[{"description":"Memory name","in":"path","name":"name","required":true,"type":"string"},{"description":"Memory request","in":"body","name":"request","schema":{"$ref":"#/definitions/api.TaskAgentMemoryRequestDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentMemoryEnvelopeDoc"}}},"security":[{"PublicBearer":[]}],"summary":"Read, update, or delete a public Task Agent memory","tags":["public-task-agents"]},"get":{"consumes":["application/json"],"parameters":[{"description":"Memory name","in":"path","name":"name","required":true,"type":"string"},{"description":"Memory request","in":"body","name":"request","schema":{"$ref":"#/definitions/api.TaskAgentMemoryRequestDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentMemoryEnvelopeDoc"}}},"security":[{"PublicBearer":[]}],"summary":"Read, update, or delete a public Task Agent memory","tags":["public-task-agents"]},"patch":{"consumes":["application/json"],"parameters":[{"description":"Memory name","in":"path","name":"name","required":true,"type":"string"},{"description":"Memory request","in":"body","name":"request","schema":{"$ref":"#/definitions/api.TaskAgentMemoryRequestDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentMemoryEnvelopeDoc"}}},"security":[{"PublicBearer":[]}],"summary":"Read, update, or delete a public Task Agent memory","tags":["public-task-agents"]},"put":{"consumes":["application/json"],"parameters":[{"description":"Memory name","in":"path","name":"name","required":true,"type":"string"},{"description":"Memory request","in":"body","name":"request","schema":{"$ref":"#/definitions/api.TaskAgentMemoryRequestDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentMemoryEnvelopeDoc"}}},"security":[{"PublicBearer":[]}],"summary":"Read, update, or delete a public Task Agent memory","tags":["public-task-agents"]}},"/api/public/v1/models":{"get":{"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"additionalProperties":true,"type":"object"}}},"security":[{"PublicBearer":[]}],"summary":"List Task Agent Models","tags":["public-task-agents"]}},"/api/public/v1/prompts":{"post":{"consumes":["application/json"],"description":"Creates a normal conversational Task Agent session when session_id is omitted, or appends a turn to an existing session. request_id is idempotent.","parameters":[{"description":"Public prompt request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.PublicTaskAgentPromptRequestDoc"}}],"produces":["application/json"],"responses":{"202":{"description":"Accepted","schema":{"$ref":"#/definitions/api.PublicTaskAgentPromptEnvelopeDoc"}},"401":{"description":"Unauthorized","schema":{"$ref":"#/definitions/api.ServeErrorResponse"}},"409":{"description":"Conflict","schema":{"$ref":"#/definitions/api.ServeErrorResponse"}},"413":{"description":"Request Entity Too Large","schema":{"$ref":"#/definitions/api.ServeErrorResponse"}}},"security":[{"PublicBearer":[]}],"summary":"Submit a public Task Agent prompt","tags":["public-task-agents"]}},"/api/public/v1/schedules":{"get":{"parameters":[{"description":"Schedule page size","in":"query","name":"limit","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentScheduleListEnvelopeDoc"}}},"security":[{"PublicBearer":[]}],"summary":"List Task Agent schedules","tags":["task-agent-schedules"]},"post":{"consumes":["application/json"],"parameters":[{"description":"Schedule request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.TaskAgentScheduleRequestDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentScheduleEnvelopeDoc"}}},"security":[{"PublicBearer":[]}],"summary":"Create Task Agent schedule","tags":["task-agent-schedules"]}},"/api/public/v1/schedules/{scheduleID}":{"delete":{"parameters":[{"description":"Schedule ID","in":"path","name":"scheduleID","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentOKEnvelopeDoc"}}},"security":[{"PublicBearer":[]}],"summary":"Delete Task Agent schedule","tags":["task-agent-schedules"]},"get":{"parameters":[{"description":"Schedule ID","in":"path","name":"scheduleID","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentScheduleEnvelopeDoc"}}},"security":[{"PublicBearer":[]}],"summary":"Get Task Agent schedule","tags":["task-agent-schedules"]},"patch":{"consumes":["application/json"],"parameters":[{"description":"Schedule ID","in":"path","name":"scheduleID","required":true,"type":"string"},{"description":"Schedule request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.TaskAgentScheduleRequestDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentScheduleEnvelopeDoc"}}},"security":[{"PublicBearer":[]}],"summary":"Update Task Agent schedule","tags":["task-agent-schedules"]},"put":{"consumes":["application/json"],"parameters":[{"description":"Schedule ID","in":"path","name":"scheduleID","required":true,"type":"string"},{"description":"Schedule request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.TaskAgentScheduleRequestDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentScheduleEnvelopeDoc"}}},"security":[{"PublicBearer":[]}],"summary":"Update Task Agent schedule","tags":["task-agent-schedules"]}},"/api/public/v1/schedules/{scheduleID}/runs":{"get":{"parameters":[{"description":"Schedule ID","in":"path","name":"scheduleID","required":true,"type":"string"},{"description":"Run page size","in":"query","name":"limit","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentScheduleRunListEnvelopeDoc"}}},"security":[{"PublicBearer":[]}],"summary":"List Task Agent schedule runs","tags":["task-agent-schedules"]}},"/api/public/v1/secrets":{"get":{"description":"Lists owned User Secret metadata. Secret values are write-only and are never returned.","produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentUserSecretListEnvelopeDoc"}}},"security":[{"PublicBearer":[]}],"summary":"List User Secrets","tags":["public-task-agents"]},"post":{"consumes":["application/json"],"description":"Creates a write-only User Secret. The response returns metadata only.","parameters":[{"description":"Secret request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.TaskAgentUserSecretCreateRequestDoc"}}],"produces":["application/json"],"responses":{"201":{"description":"Created","schema":{"$ref":"#/definitions/api.TaskAgentUserSecretEnvelopeDoc"}}},"security":[{"PublicBearer":[]}],"summary":"Create a User Secret","tags":["public-task-agents"]}},"/api/public/v1/secrets/{secretID}":{"delete":{"parameters":[{"description":"Secret ID","in":"path","name":"secretID","required":true,"type":"string"}],"produces":["application/json"],"responses":{"204":{"description":"No Content"},"404":{"description":"Not Found","schema":{"$ref":"#/definitions/api.ServeErrorResponse"}},"409":{"description":"Conflict","schema":{"$ref":"#/definitions/api.ServeErrorResponse"}}},"security":[{"PublicBearer":[]}],"summary":"Delete a User Secret","tags":["public-task-agents"]},"patch":{"consumes":["application/json"],"description":"Replaces the write-only Secret value. The response returns metadata only.","parameters":[{"description":"Secret ID","in":"path","name":"secretID","required":true,"type":"string"},{"description":"Secret request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.TaskAgentUserSecretUpdateRequestDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentUserSecretEnvelopeDoc"}},"404":{"description":"Not Found","schema":{"$ref":"#/definitions/api.ServeErrorResponse"}}},"security":[{"PublicBearer":[]}],"summary":"Update a User Secret value","tags":["public-task-agents"]}},"/api/public/v1/sessions":{"get":{"parameters":[{"description":"Page size (1-100, default 50)","in":"query","name":"limit","type":"integer"},{"description":"Opaque cursor returned by the previous page","in":"query","name":"cursor","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.PublicTaskAgentSessionListEnvelopeDoc"}}},"security":[{"PublicBearer":[]}],"summary":"List public Task Agent sessions","tags":["public-task-agents"]}},"/api/public/v1/sessions/{id}":{"delete":{"parameters":[{"description":"Session ID","in":"path","name":"id","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentTaskEnvelopeDoc"}}},"security":[{"PublicBearer":[]}],"summary":"Delete a public Task Agent session","tags":["public-task-agents"]},"get":{"parameters":[{"description":"Session ID","in":"path","name":"id","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.PublicTaskAgentSessionEnvelopeDoc"}}},"security":[{"PublicBearer":[]}],"summary":"Read a public Task Agent session","tags":["public-task-agents"]}},"/api/public/v1/sessions/{id}/cancel":{"post":{"parameters":[{"description":"Session ID","in":"path","name":"id","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentTaskEnvelopeDoc"}}},"security":[{"PublicBearer":[]}],"summary":"Cancel a public Task Agent session","tags":["public-task-agents"]}},"/api/public/v1/sessions/{id}/events":{"get":{"parameters":[{"description":"Session ID","in":"path","name":"id","required":true,"type":"string"},{"description":"Return persisted events after this sequence","in":"query","name":"after","type":"integer"},{"description":"Event page size, maximum 200","in":"query","name":"limit","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentEventListEnvelopeDoc"}}},"security":[{"PublicBearer":[]}],"summary":"List public Task Agent Event v2 events","tags":["public-task-agents"]}},"/api/public/v1/sessions/{id}/events/stream":{"get":{"description":"Event v2 SSE supports after and Last-Event-ID replay.","parameters":[{"description":"Session ID","in":"path","name":"id","required":true,"type":"string"},{"description":"Return persisted events after this sequence","in":"query","name":"after","type":"integer"}],"produces":["text/event-stream"],"responses":{"200":{"description":"SSE stream","schema":{"type":"string"}}},"security":[{"PublicBearer":[]}],"summary":"Stream public Task Agent events","tags":["public-task-agents"]}},"/api/public/v1/sessions/{id}/interrupt":{"post":{"parameters":[{"description":"Session ID","in":"path","name":"id","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentPromptAcceptedEnvelopeDoc"}},"202":{"description":"Accepted","schema":{"$ref":"#/definitions/api.TaskAgentPromptAcceptedEnvelopeDoc"}}},"security":[{"PublicBearer":[]}],"summary":"Interrupt a public Task Agent turn","tags":["public-task-agents"]}},"/api/public/v1/skills":{"get":{"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentUserSkillListEnvelopeDoc"}}},"security":[{"PublicBearer":[]}],"summary":"List public Task Agent skills","tags":["public-task-agents"]},"post":{"consumes":["application/json"],"parameters":[{"description":"Skill request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.TaskAgentUserSkillRequestDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentUserSkillEnvelopeDoc"}}},"security":[{"PublicBearer":[]}],"summary":"Create a public Task Agent skill","tags":["public-task-agents"]}},"/api/public/v1/skills/{skillID}":{"delete":{"consumes":["application/json"],"parameters":[{"description":"Skill ID","in":"path","name":"skillID","required":true,"type":"string"},{"description":"Skill request","in":"body","name":"request","schema":{"$ref":"#/definitions/api.TaskAgentUserSkillRequestDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentUserSkillEnvelopeDoc"}}},"security":[{"PublicBearer":[]}],"summary":"Read, update, or delete a public Task Agent skill","tags":["public-task-agents"]},"get":{"consumes":["application/json"],"parameters":[{"description":"Skill ID","in":"path","name":"skillID","required":true,"type":"string"},{"description":"Skill request","in":"body","name":"request","schema":{"$ref":"#/definitions/api.TaskAgentUserSkillRequestDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentUserSkillEnvelopeDoc"}}},"security":[{"PublicBearer":[]}],"summary":"Read, update, or delete a public Task Agent skill","tags":["public-task-agents"]},"patch":{"consumes":["application/json"],"parameters":[{"description":"Skill ID","in":"path","name":"skillID","required":true,"type":"string"},{"description":"Skill request","in":"body","name":"request","schema":{"$ref":"#/definitions/api.TaskAgentUserSkillRequestDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentUserSkillEnvelopeDoc"}}},"security":[{"PublicBearer":[]}],"summary":"Read, update, or delete a public Task Agent skill","tags":["public-task-agents"]},"put":{"consumes":["application/json"],"parameters":[{"description":"Skill ID","in":"path","name":"skillID","required":true,"type":"string"},{"description":"Skill request","in":"body","name":"request","schema":{"$ref":"#/definitions/api.TaskAgentUserSkillRequestDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentUserSkillEnvelopeDoc"}}},"security":[{"PublicBearer":[]}],"summary":"Read, update, or delete a public Task Agent skill","tags":["public-task-agents"]}},"/api/public/v1/webhooks":{"get":{"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentWebhookListEnvelopeDoc"}}},"security":[{"PublicBearer":[]}],"summary":"List public Task Agent Webhooks","tags":["public-task-agents"]},"post":{"consumes":["application/json"],"parameters":[{"description":"Webhook request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.TaskAgentWebhookRequestDoc"}}],"produces":["application/json"],"responses":{"201":{"description":"Created","schema":{"$ref":"#/definitions/api.TaskAgentWebhookEnvelopeDoc"}}},"security":[{"PublicBearer":[]}],"summary":"Create a public Task Agent Webhook","tags":["public-task-agents"]}},"/api/public/v1/webhooks/{hook_id}":{"delete":{"parameters":[{"description":"Webhook ID","in":"path","name":"hook_id","required":true,"type":"string"}],"produces":["application/json"],"responses":{"204":{"description":"No Content"}},"security":[{"PublicBearer":[]}],"summary":"Delete a public Task Agent Webhook","tags":["public-task-agents"]},"get":{"parameters":[{"description":"Webhook ID","in":"path","name":"hook_id","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentWebhookEnvelopeDoc"}}},"security":[{"PublicBearer":[]}],"summary":"Read a public Task Agent Webhook","tags":["public-task-agents"]},"patch":{"consumes":["application/json"],"parameters":[{"description":"Webhook ID","in":"path","name":"hook_id","required":true,"type":"string"},{"description":"Webhook request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.TaskAgentWebhookRequestDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentWebhookEnvelopeDoc"}}},"security":[{"PublicBearer":[]}],"summary":"Update a public Task Agent Webhook","tags":["public-task-agents"]},"put":{"consumes":["application/json"],"parameters":[{"description":"Webhook ID","in":"path","name":"hook_id","required":true,"type":"string"},{"description":"Webhook request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.TaskAgentWebhookRequestDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentWebhookEnvelopeDoc"}}},"security":[{"PublicBearer":[]}],"summary":"Update a public Task Agent Webhook","tags":["public-task-agents"]}},"/api/public/v1/webhooks/{hook_id}/channels":{"get":{"parameters":[{"description":"Webhook ID","in":"path","name":"hook_id","required":true,"type":"string"}],"produces":["application/json"],"responses":{},"security":[{"PublicBearer":[]}],"summary":"Read Webhook channels and final reply configuration","tags":["Task Agent Channels"]},"put":{"parameters":[{"description":"Webhook ID","in":"path","name":"hook_id","required":true,"type":"string"},{"description":"Bindings and final reply policy","in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/api.taskAgentHookChannelConfigRequest"}}],"produces":["application/json"],"responses":{},"security":[{"PublicBearer":[]}],"summary":"Replace Webhook channels and final reply configuration","tags":["Task Agent Channels"]}},"/api/public/v1/webhooks/{hook_id}/invoke":{"post":{"consumes":["application/json"],"description":"action=created starts a session; prompted continues or stops it. Poll the session events endpoint for completion. A 202 response means accepted, not completed.","parameters":[{"description":"Owned Agent Hook ID","in":"path","name":"hook_id","required":true,"type":"string"},{"description":"Agent invocation","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.PublicWebhookInvocationDoc"}}],"produces":["application/json"],"responses":{"202":{"description":"Accepted","schema":{"$ref":"#/definitions/api.taskAgentWebhookAcceptedEnvelope"}}},"security":[{"PublicBearer":[]}],"summary":"Run or continue a saved AIP Agent","tags":["public-task-agents"]}},"/api/public/v1/webhooks/{hook_id}/memory":{"patch":{"consumes":["application/json"],"parameters":[{"description":"Webhook ID","in":"path","name":"hook_id","required":true,"type":"string"},{"description":"Memory settings; shared writes require webhook or all reads","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.TaskAgentWebhookMemoryConfigDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentWebhookEnvelopeDoc"}},"400":{"description":"Bad Request","schema":{"$ref":"#/definitions/api.ServeErrorResponse"}},"404":{"description":"Not Found","schema":{"$ref":"#/definitions/api.ServeErrorResponse"}}},"security":[{"PublicBearer":[]}],"summary":"Update only the owned webhook's Memory settings","tags":["public-task-agents"]}},"/api/public/v1/webhooks/{hook_id}/sessions/{session_id}/events":{"get":{"description":"Poll with the returned next_after cursor until run.completed, run.failed or run.interrupted. Match the requested request_id. Reads remain scoped to the key's Profile and selected Agent.","parameters":[{"description":"Owned Agent Hook ID","in":"path","name":"hook_id","required":true,"type":"string"},{"description":"Session ID returned by invoke","in":"path","name":"session_id","required":true,"type":"string"},{"description":"Last consumed event sequence","in":"query","name":"after","type":"integer"},{"description":"Page size (max 200)","in":"query","name":"limit","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentEventListEnvelopeDoc"}}},"security":[{"PublicBearer":[]}],"summary":"Read an AIP Agent session's events","tags":["public-task-agents"]}},"/api/v1/admin/profiles/{id}/usage":{"get":{"parameters":[{"description":"User ID","in":"path","name":"id","required":true,"type":"string"},{"description":"Target month (YYYY-MM, default: current month)","in":"query","name":"month","type":"string"},{"description":"Usage type filter","in":"query","name":"type","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.AdminUsageSummaryResponseDoc"}}},"security":[{"ApiKeyHeader":[]}],"summary":"Admin: get user usage","tags":["admin"]}},"/api/v1/admin/profiles/{id}/usage/events":{"get":{"parameters":[{"description":"User ID","in":"path","name":"id","required":true,"type":"string"},{"description":"Month filter (YYYY-MM)","in":"query","name":"month","type":"string"},{"description":"Start time inclusive (RFC3339; YYYY-MM-DD also accepted)","in":"query","name":"from","type":"string"},{"description":"End time exclusive (RFC3339; YYYY-MM-DD also accepted)","in":"query","name":"to","type":"string"},{"description":"Tie-breaker for incremental polling; requires from and no to/month","in":"query","name":"after_id","type":"string"},{"description":"Usage type filter","in":"query","name":"type","type":"string"},{"description":"Status filter: pending | paid","in":"query","name":"status","type":"string"},{"description":"Max rows to return (default 100, max 200)","in":"query","name":"limit","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.AdminUsageEventsResponseDoc"}}},"security":[{"ApiKeyHeader":[]}],"summary":"Admin: list user usage events","tags":["admin"]}},"/api/v1/admin/test/usage/events":{"post":{"consumes":["application/json"],"description":"Test-only seed endpoint for local/dev harnesses. The route is registered only when SERVE_ENABLE_TEST_ADMIN_API=true and must not be enabled in production.","parameters":[{"description":"Test usage event payload","in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/api.createTestUsageEventRequest"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.CreateTestUsageEventResponseDoc"}}},"security":[{"ApiKeyHeader":[]}],"summary":"Admin: create test usage event","tags":["admin"]}},"/api/v1/admin/usage/events":{"get":{"parameters":[{"description":"Month filter (YYYY-MM)","in":"query","name":"month","type":"string"},{"description":"Start time inclusive (RFC3339; YYYY-MM-DD also accepted)","in":"query","name":"from","type":"string"},{"description":"End time exclusive (RFC3339; YYYY-MM-DD also accepted)","in":"query","name":"to","type":"string"},{"description":"Tie-breaker for incremental polling; requires from and no to/month","in":"query","name":"after_id","type":"string"},{"description":"Usage type filter","in":"query","name":"type","type":"string"},{"description":"Status filter: pending | paid","in":"query","name":"status","type":"string"},{"description":"Optional profile ID filter","in":"query","name":"profile_id","type":"string"},{"description":"Max rows to return (default 100, max 200)","in":"query","name":"limit","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.UsageEventsResponseDoc"}}},"security":[{"ApiKeyHeader":[]}],"summary":"Admin: list usage events across users","tags":["admin"]}},"/api/v1/admin/usage/events/mark-paid":{"post":{"consumes":["application/json"],"parameters":[{"description":"Batch mark-paid request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.MarkUsageEventsPaidRequestDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.MarkUsageEventsPaidResponseDoc"}}},"security":[{"ApiKeyHeader":[]}],"summary":"Admin: batch mark usage events paid","tags":["admin"]}},"/api/v1/admin/usage/events/{id}/mark-paid":{"post":{"parameters":[{"description":"Usage Event ID","in":"path","name":"id","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.ServeErrorResponse"}}},"security":[{"ApiKeyHeader":[]}],"summary":"Admin: mark usage event paid","tags":["admin"]}},"/api/v1/agents":{"get":{"parameters":[{"description":"Comma-separated instance IDs","in":"query","name":"ids","type":"string"},{"default":1,"description":"Page number","in":"query","name":"page","type":"integer"},{"default":10,"description":"Page size","in":"query","name":"page_size","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.ListAgentsResponse"}}},"security":[{"ApiKeyHeader":[]},{"SupabaseJWT":[]}],"summary":"List instances","tags":["instances"]},"post":{"consumes":["application/json"],"parameters":[{"description":"Create request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.CreateAgentRequest"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.AgentAPIResponseDoc"}}},"security":[{"ApiKeyHeader":[]},{"SupabaseJWT":[]}],"summary":"Create instance","tags":["instances"]}},"/api/v1/agents/{id}":{"delete":{"parameters":[{"description":"Instance ID","in":"path","name":"id","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.ServeErrorResponse"}}},"security":[{"ApiKeyHeader":[]}],"summary":"Delete instance","tags":["instances"]},"get":{"parameters":[{"description":"Instance ID","in":"path","name":"id","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.GetAgentStatusResponse"}}},"security":[{"ApiKeyHeader":[]}],"summary":"Get instance","tags":["instances"]},"put":{"consumes":["application/json"],"parameters":[{"description":"Instance ID","in":"path","name":"id","required":true,"type":"string"},{"description":"Update request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.UpdateAgentRequest"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.ServeErrorResponse"}}},"security":[{"ApiKeyHeader":[]},{"SupabaseJWT":[]}],"summary":"Update instance","tags":["instances"]}},"/api/v1/agents/{id}/backup":{"post":{"consumes":["application/json"],"parameters":[{"description":"Instance ID","in":"path","name":"id","required":true,"type":"string"},{"description":"Backup request","in":"body","name":"request","schema":{"$ref":"#/definitions/api.CreateBackupRequest"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.BackupJobResponseDoc"}}},"security":[{"ApiKeyHeader":[]},{"SupabaseJWT":[]}],"summary":"Create backup job","tags":["backup"]}},"/api/v1/agents/{id}/backup/download":{"get":{"parameters":[{"description":"Instance ID","in":"path","name":"id","required":true,"type":"string"},{"description":"Backup filename","in":"query","name":"file","required":true,"type":"string"}],"produces":["application/gzip"],"responses":{"200":{"description":"Backup archive","schema":{"type":"file"}}},"security":[{"ApiKeyHeader":[]},{"SupabaseJWT":[]}],"summary":"Download backup archive","tags":["backup"]}},"/api/v1/agents/{id}/backup/status":{"get":{"parameters":[{"description":"Instance ID","in":"path","name":"id","required":true,"type":"string"},{"description":"Backup job ID","in":"query","name":"job","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.BackupJobResponseDoc"}}},"security":[{"ApiKeyHeader":[]},{"SupabaseJWT":[]}],"summary":"Get backup job status","tags":["backup"]}},"/api/v1/agents/{id}/experts":{"get":{"description":"Lists experts for the given instance. Only Hermes instances support experts.","parameters":[{"description":"Instance ID","in":"path","name":"id","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.ListAgentExpertsResponseDoc"}}},"security":[{"ApiKeyHeader":[]},{"SupabaseJWT":[]}],"summary":"List instance experts","tags":["experts"]},"post":{"consumes":["application/json"],"description":"Queues installation of a new expert on a Hermes instance. The expert id must be unique and match canonical instance id format.","parameters":[{"description":"Instance ID","in":"path","name":"id","required":true,"type":"string"},{"description":"Create expert request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.CreateExpertRequest"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.CreateExpertResponseDoc"}}},"security":[{"ApiKeyHeader":[]},{"SupabaseJWT":[]}],"summary":"Create expert","tags":["experts"]}},"/api/v1/agents/{id}/experts/{expertId}":{"delete":{"description":"Removes the Hermes profile on the Droplet (when SSH is available) and deletes expert plus install-job rows.","parameters":[{"description":"Instance ID","in":"path","name":"id","required":true,"type":"string"},{"description":"Expert ID","in":"path","name":"expertId","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.DeleteAgentExpertResponseDoc"}}},"security":[{"ApiKeyHeader":[]},{"SupabaseJWT":[]}],"summary":"Delete instance expert","tags":["experts"]},"get":{"description":"Returns one expert summary using the same response envelope as GET /api/v1/agents/{id}. Only Hermes instances support experts.","parameters":[{"description":"Instance ID","in":"path","name":"id","required":true,"type":"string"},{"description":"Expert ID","in":"path","name":"expertId","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.GetAgentExpertResponseDoc"}}},"security":[{"ApiKeyHeader":[]},{"SupabaseJWT":[]}],"summary":"Get instance expert","tags":["experts"]}},"/api/v1/agents/{id}/maintenance":{"post":{"consumes":["application/json"],"description":"Connects to the instance as root over SSH and runs a fixed maintenance script for the given action.\nRequires X-API-Key and Supabase session; the instance must belong to the caller.\nFor action `doctor`: runs the runtime-provided maintenance shell for this agent type.\nHTTP status is always 200; inspect `code` (0 success, 100 invalid action, 101 missing id, 200 not found, 201 not ready, 506 SSH or remote command error). On remote failure, `data.output` may still contain captured stdout+stderr.","parameters":[{"description":"Instance ID","in":"path","name":"id","required":true,"type":"string"},{"description":"body","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.AgentMaintenanceRequest"}}],"produces":["application/json"],"responses":{"200":{"description":"Typical success; error cases use the same schema with non-zero code","schema":{"$ref":"#/definitions/api.AgentMaintenanceResponseDoc"}}},"security":[{"ApiKeyHeader":[]},{"SupabaseJWT":[]}],"summary":"Run agent maintenance on instance","tags":["instances"]}},"/api/v1/agents/{id}/pair":{"post":{"consumes":["application/json"],"parameters":[{"description":"Pair request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.PairRequest"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.PairResponse"}}},"security":[{"ApiKeyHeader":[]}],"summary":"Telegram pairing","tags":["pairing"]}},"/api/v1/channel-events/chatwoot":{"post":{"produces":["application/json"],"responses":{},"summary":"Receive signed Chatwoot events","tags":["Task Agent Channels"]}},"/api/v1/channel-files/{taskID}":{"get":{"parameters":[{"description":"Task ID","in":"path","name":"taskID","required":true,"type":"string"},{"description":"Scoped download ticket","in":"query","name":"token","required":true,"type":"string"}],"responses":{},"summary":"Download a message attachment using a short-lived scoped ticket","tags":["Task Agent Channels"]}},"/api/v1/expert-types":{"get":{"description":"Returns expert types from the startup-loaded catalog (empty catalog when EXPERT_BUNDLES_ROOT was unset).","produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.ListExpertTypesResponseDoc"}}},"security":[{"ApiKeyHeader":[]},{"SupabaseJWT":[]}],"summary":"List expert types","tags":["experts"]}},"/api/v1/machines/upgrade":{"post":{"consumes":["application/json"],"parameters":[{"description":"Upgrade request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.UpgradeMachineRequest"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.AgentAPIResponseDoc"}}},"security":[{"ApiKeyHeader":[]},{"SupabaseJWT":[]}],"summary":"Upgrade machine (Droplet)","tags":["machines"]}},"/api/v1/mailboxes/occupancy":{"get":{"parameters":[{"collectionFormat":"csv","description":"Mailbox addresses or local-parts to query; repeat the parameter to check multiple values and local-parts default to the configured mail domain","in":"query","items":{"type":"string"},"name":"address","type":"array"},{"description":"Agent identifier to query","in":"query","name":"agent_id","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.MailboxOccupancyResponseDoc"}}},"security":[{"ApiKeyHeader":[]},{"SupabaseJWT":[]}],"summary":"Get mailbox occupancy","tags":["mailboxes"]}},"/api/v1/openapi/spec":{"get":{"description":"Returns the runtime-current OpenAPI JSON document for one supported app. Use `?app=serve` or `?app=mailgateway`. The `:app` path alias is also accepted.","parameters":[{"description":"App/service name","enum":["serve","mailgateway"],"in":"query","name":"app","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.OpenAPISpecDocument"}},"400":{"description":"Bad Request","schema":{"$ref":"#/definitions/api.OpenAPISpecErrorResponse"}},"404":{"description":"Not Found","schema":{"$ref":"#/definitions/api.OpenAPISpecErrorResponse"}},"500":{"description":"Internal Server Error","schema":{"$ref":"#/definitions/api.OpenAPISpecErrorResponse"}}},"security":[{"ApiKeyHeader":[]}],"summary":"Get OpenAPI spec","tags":["openapi"]}},"/api/v1/openapi/spec/{app}":{"get":{"description":"Returns the runtime-current OpenAPI JSON document for one supported app. Use `?app=serve` or `?app=mailgateway`. The `:app` path alias is also accepted.","parameters":[{"description":"App/service name","enum":["serve","mailgateway"],"in":"query","name":"app","type":"string"},{"description":"App/service name path alias","enum":["serve","mailgateway"],"in":"path","name":"app","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.OpenAPISpecDocument"}},"400":{"description":"Bad Request","schema":{"$ref":"#/definitions/api.OpenAPISpecErrorResponse"}},"404":{"description":"Not Found","schema":{"$ref":"#/definitions/api.OpenAPISpecErrorResponse"}},"500":{"description":"Internal Server Error","schema":{"$ref":"#/definitions/api.OpenAPISpecErrorResponse"}}},"security":[{"ApiKeyHeader":[]}],"summary":"Get OpenAPI spec","tags":["openapi"]}},"/api/v1/storage/expert-knowledge/presigned-upload":{"post":{"produces":["application/json"],"responses":{},"summary":"Expert knowledge upload URL","tags":["storage"]}},"/api/v1/storage/expert-knowledge/upload-complete":{"post":{"produces":["application/json"],"responses":{},"summary":"Confirm expert knowledge upload","tags":["storage"]}},"/api/v1/storage/presigned-upload":{"post":{"consumes":["application/json"],"parameters":[{"description":"Presigned upload request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.CreateStoragePresignedUploadRequest"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.StoragePresignedUploadResponseDoc"}}},"security":[{"ApiKeyHeader":[]},{"SupabaseJWT":[]}],"summary":"Create restore upload URL","tags":["storage"]}},"/api/v1/task-agents/api-keys":{"get":{"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.PublicTaskAgentAPIKeyListEnvelopeDoc"}}},"security":[{"SupabaseJWT":[]}],"summary":"List Personal API keys","tags":["task-agent-api-keys"]},"post":{"consumes":["application/json"],"description":"Cookie-authenticated Hast Web management endpoint. The plaintext key is returned only once. Omit scopes for full access.","parameters":[{"description":"API key name and scopes","in":"body","name":"request","schema":{"$ref":"#/definitions/api.PublicTaskAgentAPIKeyCreateRequestDoc"}}],"produces":["application/json"],"responses":{"201":{"description":"Created","schema":{"$ref":"#/definitions/api.PublicTaskAgentAPIKeyEnvelopeDoc"}}},"security":[{"SupabaseJWT":[]}],"summary":"Create a Personal API key","tags":["task-agent-api-keys"]}},"/api/v1/task-agents/api-keys/{id}":{"delete":{"parameters":[{"description":"API key ID","in":"path","name":"id","required":true,"type":"string"}],"produces":["application/json"],"responses":{"204":{"description":"No Content"},"404":{"description":"Not Found","schema":{"$ref":"#/definitions/api.ServeErrorResponse"}}},"security":[{"SupabaseJWT":[]}],"summary":"Revoke a Personal API key","tags":["task-agent-api-keys"]},"patch":{"consumes":["application/json"],"parameters":[{"description":"API key ID","in":"path","name":"id","required":true,"type":"string"},{"description":"API key name","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.PublicTaskAgentAPIKeyUpdateRequestDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.PublicTaskAgentAPIKeyDoc"}},"404":{"description":"Not Found","schema":{"$ref":"#/definitions/api.ServeErrorResponse"}}},"security":[{"SupabaseJWT":[]}],"summary":"Rename a Personal API key","tags":["task-agent-api-keys"]},"put":{"consumes":["application/json"],"parameters":[{"description":"API key ID","in":"path","name":"id","required":true,"type":"string"},{"description":"API key name","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.PublicTaskAgentAPIKeyUpdateRequestDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.PublicTaskAgentAPIKeyDoc"}},"404":{"description":"Not Found","schema":{"$ref":"#/definitions/api.ServeErrorResponse"}}},"security":[{"SupabaseJWT":[]}],"summary":"Rename a Personal API key","tags":["task-agent-api-keys"]}},"/api/v1/task-agents/connectors/accounts":{"get":{"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentConnectorAccountListEnvelopeDoc"}}},"summary":"List Task Agent connector account refs","tags":["task-agent-connectors"]},"post":{"consumes":["application/json"],"parameters":[{"description":"Connector account request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.TaskAgentConnectorAccountRequestDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentConnectorAccountEnvelopeDoc"}}},"summary":"Upsert Task Agent connector account ref","tags":["task-agent-connectors"]}},"/api/v1/task-agents/connectors/accounts/{id}":{"delete":{"parameters":[{"description":"Connector account ref ID","in":"path","name":"id","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentOKEnvelopeDoc"}}},"summary":"Delete Task Agent connector account ref","tags":["task-agent-connectors"]},"get":{"parameters":[{"description":"Connector account ref ID","in":"path","name":"id","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentConnectorAccountEnvelopeDoc"}}},"summary":"Get Task Agent connector account ref","tags":["task-agent-connectors"]},"patch":{"consumes":["application/json"],"parameters":[{"description":"Connector account ref ID","in":"path","name":"id","required":true,"type":"string"},{"description":"Connector account request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.TaskAgentConnectorAccountRequestDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentConnectorAccountEnvelopeDoc"}}},"summary":"Update Task Agent connector account ref","tags":["task-agent-connectors"]},"put":{"consumes":["application/json"],"parameters":[{"description":"Connector account ref ID","in":"path","name":"id","required":true,"type":"string"},{"description":"Connector account request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.TaskAgentConnectorAccountRequestDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentConnectorAccountEnvelopeDoc"}}},"summary":"Update Task Agent connector account ref","tags":["task-agent-connectors"]}},"/api/v1/task-agents/connectors/status":{"get":{"description":"Returns locally stored connector status and best-effort Composio Toolkit metadata for connected accounts. Local connected accounts remain in the response when the metadata lookup fails.","parameters":[{"description":"Maximum user connector statuses to return, default 20 and max 100","in":"query","name":"limit","type":"integer"},{"description":"User connector status pagination cursor","in":"query","name":"cursor","type":"string"},{"description":"Search user connector statuses","in":"query","name":"search","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentConnectorStatusEnvelopeDoc"}}},"summary":"List Task Agent user connector status","tags":["task-agent-connectors"]}},"/api/v1/task-agents/connectors/toolkits":{"get":{"parameters":[{"description":"Maximum connector toolkits to return, default 20 and max 100","in":"query","name":"limit","type":"integer"},{"description":"Composio toolkit pagination cursor","in":"query","name":"cursor","type":"string"},{"description":"Search Composio toolkits","in":"query","name":"search","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentConnectorStatusEnvelopeDoc"}}},"summary":"List Task Agent available connector toolkits","tags":["task-agent-connectors"]}},"/api/v1/task-agents/connectors/{provider}/composio/callback":{"get":{"parameters":[{"description":"Connector provider","in":"path","name":"provider","required":true,"type":"string"},{"description":"Signed Backplane callback state","in":"query","name":"state","required":true,"type":"string"}],"responses":{"302":{"description":"Found"}},"summary":"Handle Composio connector callback","tags":["task-agent-connectors"]}},"/api/v1/task-agents/connectors/{provider}/composio/start":{"post":{"consumes":["application/json"],"parameters":[{"description":"Connector provider","in":"path","name":"provider","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentConnectorStartEnvelopeDoc"}}},"summary":"Start Composio connector authorization","tags":["task-agent-connectors"]}},"/api/v1/task-agents/gtm/events/stream":{"get":{"parameters":[{"description":"GTM session ID","in":"query","name":"session_id","required":true,"type":"string"},{"description":"Required for API-key callers; ignored for authenticated cookie callers","in":"query","name":"profile_id","type":"string"},{"description":"Return persisted events after this sequence","in":"query","name":"after","type":"integer"}],"produces":["text/event-stream"],"responses":{"200":{"description":"SSE stream","schema":{"type":"string"}}},"summary":"Stream one owned GTM session","tags":["task-agents-gtm"]}},"/api/v1/task-agents/gtm/prompts":{"post":{"consumes":["application/json"],"description":"Omitting session_id creates a session. A prompt for an existing session starts a new turn or automatically steers its active turn. signal=stop interrupts the active turn while preserving the session.","parameters":[{"description":"GTM prompt request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.TaskAgentGTMPromptRequestDoc"}}],"produces":["application/json"],"responses":{"202":{"description":"Accepted","schema":{"$ref":"#/definitions/api.TaskAgentGTMPromptEnvelopeDoc"}},"400":{"description":"Bad Request","schema":{"$ref":"#/definitions/api.ServeErrorResponse"}},"404":{"description":"Not Found","schema":{"$ref":"#/definitions/api.ServeErrorResponse"}},"409":{"description":"Conflict","schema":{"$ref":"#/definitions/api.ServeErrorResponse"}}},"summary":"Create, prompt, or stop a GTM session","tags":["task-agents-gtm"]}},"/api/v1/task-agents/gtm/sessions":{"get":{"parameters":[{"description":"Required for API-key callers; ignored for authenticated cookie callers","in":"query","name":"profile_id","type":"string"},{"description":"Maximum sessions (default 50, maximum 100)","in":"query","name":"limit","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentGTMSessionListEnvelopeDoc"}}},"summary":"List owned GTM sessions","tags":["task-agents-gtm"]}},"/api/v1/task-agents/models":{"get":{"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentModelListEnvelopeDoc"}},"502":{"description":"Bad Gateway","schema":{"$ref":"#/definitions/api.ServeErrorResponse"}},"503":{"description":"Service Unavailable","schema":{"$ref":"#/definitions/api.ServeErrorResponse"}}},"summary":"List Task Agent models","tags":["task-agents"]}},"/api/v1/task-agents/schedules":{"get":{"parameters":[{"description":"Schedule page size","in":"query","name":"limit","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentScheduleListEnvelopeDoc"}}},"summary":"List Task Agent schedules","tags":["task-agent-schedules"]},"post":{"consumes":["application/json"],"parameters":[{"description":"Schedule request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.TaskAgentScheduleRequestDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentScheduleEnvelopeDoc"}}},"summary":"Create Task Agent schedule","tags":["task-agent-schedules"]}},"/api/v1/task-agents/schedules/{scheduleID}":{"delete":{"parameters":[{"description":"Schedule ID","in":"path","name":"scheduleID","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentOKEnvelopeDoc"}}},"summary":"Delete Task Agent schedule","tags":["task-agent-schedules"]},"get":{"parameters":[{"description":"Schedule ID","in":"path","name":"scheduleID","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentScheduleEnvelopeDoc"}}},"summary":"Get Task Agent schedule","tags":["task-agent-schedules"]},"patch":{"consumes":["application/json"],"parameters":[{"description":"Schedule ID","in":"path","name":"scheduleID","required":true,"type":"string"},{"description":"Schedule request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.TaskAgentScheduleRequestDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentScheduleEnvelopeDoc"}}},"summary":"Update Task Agent schedule","tags":["task-agent-schedules"]},"put":{"consumes":["application/json"],"parameters":[{"description":"Schedule ID","in":"path","name":"scheduleID","required":true,"type":"string"},{"description":"Schedule request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.TaskAgentScheduleRequestDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentScheduleEnvelopeDoc"}}},"summary":"Update Task Agent schedule","tags":["task-agent-schedules"]}},"/api/v1/task-agents/schedules/{scheduleID}/runs":{"get":{"parameters":[{"description":"Schedule ID","in":"path","name":"scheduleID","required":true,"type":"string"},{"description":"Run page size","in":"query","name":"limit","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentScheduleRunListEnvelopeDoc"}}},"summary":"List Task Agent schedule runs","tags":["task-agent-schedules"]}},"/api/v1/task-agents/tasks":{"get":{"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentTaskListEnvelopeDoc"}}},"summary":"List Task Agent tasks excluding scheduled runs","tags":["task-agents"]},"post":{"consumes":["application/json"],"description":"Creates a Backplane-owned Task Agent task and binds it to the configured sandbox runtime provider.","parameters":[{"description":"Task create request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.TaskAgentCreateTaskRequestDoc"}}],"produces":["application/json"],"responses":{"202":{"description":"Accepted","schema":{"$ref":"#/definitions/api.TaskAgentTaskEnvelopeDoc"}},"400":{"description":"Bad Request","schema":{"$ref":"#/definitions/api.ServeErrorResponse"}},"500":{"description":"Internal Server Error","schema":{"$ref":"#/definitions/api.ServeErrorResponse"}}},"summary":"Create Task Agent task","tags":["task-agents"]}},"/api/v1/task-agents/tasks/{id}":{"delete":{"parameters":[{"description":"Task ID","in":"path","name":"id","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentTaskEnvelopeDoc"}}},"summary":"Delete Task Agent task","tags":["task-agents"]},"get":{"parameters":[{"description":"Task ID","in":"path","name":"id","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentTaskEnvelopeDoc"}},"404":{"description":"Not Found","schema":{"$ref":"#/definitions/api.ServeErrorResponse"}}},"summary":"Get Task Agent task","tags":["task-agents"]},"patch":{"consumes":["application/json"],"parameters":[{"description":"Task ID","in":"path","name":"id","required":true,"type":"string"},{"description":"Task update request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.TaskAgentUpdateTaskRequestDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentTaskEnvelopeDoc"}},"400":{"description":"Bad Request","schema":{"$ref":"#/definitions/api.ServeErrorResponse"}},"404":{"description":"Not Found","schema":{"$ref":"#/definitions/api.ServeErrorResponse"}}},"summary":"Update Task Agent task title","tags":["task-agents"]}},"/api/v1/task-agents/tasks/{id}/cancel":{"post":{"parameters":[{"description":"Task ID","in":"path","name":"id","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentTaskEnvelopeDoc"}}},"summary":"Cancel Task Agent task","tags":["task-agents"]}},"/api/v1/task-agents/tasks/{id}/events":{"get":{"parameters":[{"description":"Task ID","in":"path","name":"id","required":true,"type":"string"},{"description":"Return events after this sequence","in":"query","name":"after","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentEventListEnvelopeDoc"}}},"summary":"List Task Agent events","tags":["task-agents"]}},"/api/v1/task-agents/tasks/{id}/events/stream":{"get":{"description":"Streams persisted Task Agent events plus live volatile deltas using SSE. Reconnect with after or Last-Event-ID resumes persisted events only.","parameters":[{"description":"Task ID","in":"path","name":"id","required":true,"type":"string"},{"description":"Return events after this sequence","in":"query","name":"after","type":"integer"}],"produces":["text/event-stream"],"responses":{"200":{"description":"SSE stream","schema":{"type":"string"}}},"summary":"Stream Task Agent events","tags":["task-agents"]}},"/api/v1/task-agents/tasks/{id}/files":{"get":{"parameters":[{"description":"Task ID","in":"path","name":"id","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentFileListEnvelopeDoc"}}},"summary":"List Task Agent workspace files","tags":["task-agents"]}},"/api/v1/task-agents/tasks/{id}/files/{relativePath}":{"get":{"parameters":[{"description":"Task ID","in":"path","name":"id","required":true,"type":"string"},{"description":"Workspace relative path","in":"path","name":"relativePath","required":true,"type":"string"}],"produces":["application/octet-stream"],"responses":{"200":{"description":"Workspace file","schema":{"type":"file"}}},"summary":"Download Task Agent workspace file","tags":["task-agents"]}},"/api/v1/task-agents/tasks/{id}/prompts":{"post":{"consumes":["application/json"],"description":"Submits a plan or execute turn and enqueues it for the runtime. Follow progress via GET /events or GET /events/stream.","parameters":[{"description":"Task ID","in":"path","name":"id","required":true,"type":"string"},{"description":"Prompt request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.TaskAgentPromptRequestDoc"}}],"produces":["application/json"],"responses":{"202":{"description":"Accepted","schema":{"$ref":"#/definitions/api.TaskAgentPromptAcceptedEnvelopeDoc"}},"409":{"description":"Conflict","schema":{"$ref":"#/definitions/api.ServeErrorResponse"}}},"summary":"Submit Task Agent prompt turn","tags":["task-agents"]}},"/api/v1/task-agents/user/memories":{"get":{"parameters":[{"description":"Filter memory category","enum":["task_agent","webhook"],"in":"query","name":"scope_type","type":"string"},{"description":"Webhook ID; empty selects shared, omitted selects all in the category","in":"query","name":"scope_id","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentMemoryListEnvelopeDoc"}}},"summary":"List Task Agent memories","tags":["task-agent-capabilities"]},"post":{"consumes":["application/json"],"parameters":[{"description":"Memory request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.TaskAgentMemoryRequestDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentMemoryEnvelopeDoc"}}},"summary":"Upsert named Task Agent memory","tags":["task-agent-capabilities"]}},"/api/v1/task-agents/user/memories/by-id/{memoryID}":{"delete":{"parameters":[{"description":"Memory ID","in":"path","name":"memoryID","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentOKEnvelopeDoc"}}},"summary":"Delete a memory by ID within the authenticated user","tags":["task-agent-capabilities"]},"get":{"parameters":[{"description":"Memory ID","in":"path","name":"memoryID","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentMemoryEnvelopeDoc"}}},"summary":"Read a memory by ID within the authenticated user","tags":["task-agent-capabilities"]},"patch":{"consumes":["application/json"],"parameters":[{"description":"Memory ID","in":"path","name":"memoryID","required":true,"type":"string"},{"description":"Memory update","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.TaskAgentMemoryRequestDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentMemoryEnvelopeDoc"}},"404":{"description":"Not Found","schema":{"$ref":"#/definitions/api.ServeErrorResponse"}}},"summary":"Update a memory by ID, optionally moving its scope","tags":["task-agent-capabilities"]},"put":{"consumes":["application/json"],"parameters":[{"description":"Memory ID","in":"path","name":"memoryID","required":true,"type":"string"},{"description":"Memory update","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.TaskAgentMemoryRequestDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentMemoryEnvelopeDoc"}},"404":{"description":"Not Found","schema":{"$ref":"#/definitions/api.ServeErrorResponse"}}},"summary":"Update a memory by ID, optionally moving its scope","tags":["task-agent-capabilities"]}},"/api/v1/task-agents/user/memories/{name}":{"delete":{"parameters":[{"description":"Memory name","in":"path","name":"name","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentOKEnvelopeDoc"}}},"summary":"Delete named Task Agent memory","tags":["task-agent-capabilities"]},"get":{"parameters":[{"description":"Memory name","in":"path","name":"name","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentMemoryEnvelopeDoc"}}},"summary":"Get named Task Agent memory","tags":["task-agent-capabilities"]},"patch":{"consumes":["application/json"],"parameters":[{"description":"Memory name","in":"path","name":"name","required":true,"type":"string"},{"description":"Memory request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.TaskAgentMemoryRequestDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentMemoryEnvelopeDoc"}}},"summary":"Upsert named Task Agent memory","tags":["task-agent-capabilities"]},"put":{"consumes":["application/json"],"parameters":[{"description":"Memory name","in":"path","name":"name","required":true,"type":"string"},{"description":"Memory request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.TaskAgentMemoryRequestDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentMemoryEnvelopeDoc"}}},"summary":"Upsert named Task Agent memory","tags":["task-agent-capabilities"]}},"/api/v1/task-agents/user/memory":{"delete":{"parameters":[{"description":"Memory name; omit for default memory","in":"query","name":"name","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentOKEnvelopeDoc"}}},"summary":"Delete Task Agent memory","tags":["task-agent-capabilities"]},"get":{"parameters":[{"description":"Memory name; omit for default memory","in":"query","name":"name","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentMemoryEnvelopeDoc"}}},"summary":"Get Task Agent memory","tags":["task-agent-capabilities"]},"patch":{"consumes":["application/json"],"parameters":[{"description":"Memory name; omit for default memory","in":"query","name":"name","type":"string"},{"description":"Memory request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.TaskAgentMemoryRequestDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentMemoryEnvelopeDoc"}}},"summary":"Upsert Task Agent memory","tags":["task-agent-capabilities"]},"put":{"consumes":["application/json"],"parameters":[{"description":"Memory name; omit for default memory","in":"query","name":"name","type":"string"},{"description":"Memory request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.TaskAgentMemoryRequestDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentMemoryEnvelopeDoc"}}},"summary":"Upsert Task Agent memory","tags":["task-agent-capabilities"]}},"/api/v1/task-agents/user/secrets":{"get":{"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentUserSecretListEnvelopeDoc"}}},"summary":"List write-only Task Agent User Secrets","tags":["task-agent-capabilities"]},"post":{"consumes":["application/json"],"parameters":[{"description":"Secret request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.TaskAgentUserSecretCreateRequestDoc"}}],"produces":["application/json"],"responses":{"201":{"description":"Created","schema":{"$ref":"#/definitions/api.TaskAgentUserSecretEnvelopeDoc"}}},"summary":"Create a write-only Task Agent User Secret","tags":["task-agent-capabilities"]}},"/api/v1/task-agents/user/secrets/{secretID}":{"delete":{"parameters":[{"description":"Secret ID","in":"path","name":"secretID","required":true,"type":"string"}],"responses":{"204":{"description":"No Content"}},"summary":"Delete an unreferenced Task Agent User Secret","tags":["task-agent-capabilities"]},"get":{"parameters":[{"description":"Secret ID","in":"path","name":"secretID","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentUserSecretEnvelopeDoc"}}},"summary":"Get Task Agent User Secret metadata","tags":["task-agent-capabilities"]},"patch":{"consumes":["application/json"],"parameters":[{"description":"Secret ID","in":"path","name":"secretID","required":true,"type":"string"},{"description":"Secret request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.TaskAgentUserSecretUpdateRequestDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentUserSecretEnvelopeDoc"}}},"summary":"Replace a write-only Task Agent User Secret value","tags":["task-agent-capabilities"]}},"/api/v1/task-agents/user/skills":{"get":{"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentUserSkillListEnvelopeDoc"}}},"summary":"List Task Agent user and system skills","tags":["task-agent-capabilities"]},"post":{"consumes":["application/json"],"parameters":[{"description":"Skill request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.TaskAgentUserSkillRequestDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentUserSkillEnvelopeDoc"}}},"summary":"Create Task Agent user skill or enable a system skill","tags":["task-agent-capabilities"]}},"/api/v1/task-agents/user/skills/{skillID}":{"delete":{"parameters":[{"description":"Skill ID","in":"path","name":"skillID","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentOKEnvelopeDoc"}}},"summary":"Delete Task Agent user skill or disable a system skill","tags":["task-agent-capabilities"]},"get":{"parameters":[{"description":"Skill ID","in":"path","name":"skillID","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentUserSkillEnvelopeDoc"}}},"summary":"Get Task Agent user or system skill","tags":["task-agent-capabilities"]},"patch":{"consumes":["application/json"],"parameters":[{"description":"Skill ID","in":"path","name":"skillID","required":true,"type":"string"},{"description":"Skill request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.TaskAgentUserSkillRequestDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentUserSkillEnvelopeDoc"}}},"summary":"Update Task Agent user skill or toggle a system skill","tags":["task-agent-capabilities"]},"put":{"consumes":["application/json"],"parameters":[{"description":"Skill ID","in":"path","name":"skillID","required":true,"type":"string"},{"description":"Skill request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.TaskAgentUserSkillRequestDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentUserSkillEnvelopeDoc"}}},"summary":"Update Task Agent user skill or toggle a system skill","tags":["task-agent-capabilities"]}},"/api/v1/task-agents/user/uploads":{"post":{"consumes":["multipart/form-data"],"description":"Persists one file before task creation and returns its path relative to /root. Maximum size is 10 MiB.","parameters":[{"description":"File","in":"formData","name":"file","required":true,"type":"file"}],"produces":["application/json"],"responses":{"201":{"description":"Created","schema":{"$ref":"#/definitions/api.TaskAgentUserUploadEnvelopeDoc"}},"400":{"description":"Bad Request","schema":{"$ref":"#/definitions/api.ServeErrorResponse"}},"413":{"description":"Request Entity Too Large","schema":{"$ref":"#/definitions/api.ServeErrorResponse"}}},"summary":"Upload a Task Agent user file","tags":["task-agents"]}},"/api/v1/task-agents/user/uploads/{uploadID}/{filename}":{"delete":{"parameters":[{"description":"Upload ID","in":"path","name":"uploadID","required":true,"type":"string"},{"description":"Sanitized filename","in":"path","name":"filename","required":true,"type":"string"}],"responses":{"204":{"description":"No Content"},"404":{"description":"Not Found","schema":{"$ref":"#/definitions/api.ServeErrorResponse"}}},"summary":"Delete a Task Agent user upload","tags":["task-agents"]}},"/api/v1/task_agents/business_resources":{"get":{"produces":["application/json"],"responses":{},"summary":"List CRM and customer communication knowledge bases","tags":["Task Agent Channels"]}},"/api/v1/task_agents/business_resources/communication_knowledge":{"post":{"consumes":["application/json"],"parameters":[{"description":"Name and stable request ID","in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/api.channelCRMCreateRequest"}}],"produces":["application/json"],"responses":{},"summary":"Create a customer communication knowledge base","tags":["Task Agent Channels"]}},"/api/v1/task_agents/business_resources/{resource_id}":{"get":{"parameters":[{"description":"Resource ID","in":"path","name":"resource_id","required":true,"type":"string"}],"produces":["application/json"],"responses":{},"summary":"Browse CRM records or communication knowledge source documents","tags":["Task Agent Channels"]}},"/api/v1/task_agents/business_resources/{resource_id}/crm/schema":{"get":{"produces":["application/json"],"responses":{},"summary":"Read CRM business objects and field schema","tags":["Task Agent Channels"]}},"/api/v1/task_agents/business_resources/{resource_id}/crm/{object}":{"get":{"produces":["application/json"],"responses":{},"summary":"Search CRM records","tags":["Task Agent Channels"]},"post":{"consumes":["application/json"],"produces":["application/json"],"responses":{},"summary":"Create a CRM record","tags":["Task Agent Channels"]}},"/api/v1/task_agents/business_resources/{resource_id}/crm/{object}/{record_id}":{"delete":{"produces":["application/json"],"responses":{},"summary":"Delete a CRM record","tags":["Task Agent Channels"]},"get":{"produces":["application/json"],"responses":{},"summary":"Read CRM record details","tags":["Task Agent Channels"]},"patch":{"consumes":["application/json"],"produces":["application/json"],"responses":{},"summary":"Update a CRM record","tags":["Task Agent Channels"]}},"/api/v1/task_agents/business_resources/{resource_id}/crm/{object}/{record_id}/files/{field}/{file_id}":{"get":{"produces":["application/json"],"responses":{},"summary":"Download a file attached to a CRM record","tags":["Task Agent Channels"]}},"/api/v1/task_agents/business_resources/{resource_id}/crm/{object}/{record_id}/relations/{field}":{"get":{"produces":["application/json"],"responses":{},"summary":"Browse related CRM records","tags":["Task Agent Channels"]}},"/api/v1/task_agents/business_resources/{resource_id}/members":{"get":{"parameters":[{"description":"Owned CRM resource ID","in":"path","name":"resource_id","required":true,"type":"string"},{"description":"Next cursor from the previous member page","in":"query","name":"cursor","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/channel.CRMMemberPage"}}},"summary":"List CRM members for owner and assignee fields","tags":["Task Agent Channels"]},"post":{"consumes":["application/json"],"parameters":[{"description":"Owned platform-managed CRM resource ID","in":"path","name":"resource_id","required":true,"type":"string"},{"description":"Actual email and member name","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/channel.CRMMemberInput"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/channel.CRMMember"}}},"summary":"Create a CRM member identity without retaining a password","tags":["Task Agent Channels"]}},"/api/v1/task_agents/business_resources/{resource_id}/provision":{"post":{"parameters":[{"description":"Resource ID","in":"path","name":"resource_id","required":true,"type":"string"}],"produces":["application/json"],"responses":{},"summary":"Retry incomplete business resource creation","tags":["Task Agent Channels"]}},"/api/v1/task_agents/channels":{"get":{"produces":["application/json"],"responses":{},"summary":"List user channel connections","tags":["Task Agent Channels"]},"post":{"parameters":[{"description":"Request body","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.PublicChannelConnectionDoc"}}],"produces":["application/json"],"responses":{},"summary":"Connect a verified existing Chatwoot message inbox","tags":["Task Agent Channels"]}},"/api/v1/task_agents/channels/account":{"post":{"produces":["application/json"],"responses":{},"summary":"Initialize a user channel account","tags":["Task Agent Channels"]}},"/api/v1/task_agents/channels/agents":{"get":{"produces":["application/json"],"responses":{},"summary":"List Agents available for channel assignment","tags":["Task Agent Channels"]}},"/api/v1/task_agents/channels/authorizations/{provider}":{"post":{"responses":{},"summary":"Begin channel authorization","tags":["Task Agent Channels"]}},"/api/v1/task_agents/channels/authorizations/{provider}/complete":{"post":{"responses":{},"summary":"Complete channel authorization","tags":["Task Agent Channels"]}},"/api/v1/task_agents/channels/facebook":{"post":{"responses":{},"summary":"Connect a Facebook page","tags":["Task Agent Channels"]}},"/api/v1/task_agents/channels/facebook/pages":{"post":{"responses":{},"summary":"List authorized Facebook pages","tags":["Task Agent Channels"]}},"/api/v1/task_agents/channels/inboxes":{"get":{"produces":["application/json"],"responses":{},"summary":"List available Chatwoot message inboxes","tags":["Task Agent Channels"]}},"/api/v1/task_agents/channels/resources":{"get":{"produces":["application/json"],"responses":{},"summary":"List channel resources and operations","tags":["Task Agent Channels"]},"post":{"consumes":["application/json"],"parameters":[{"description":"Resource reference","in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/repository.ChannelResource"}}],"produces":["application/json"],"responses":{},"summary":"Register an independently bindable channel resource","tags":["Task Agent Channels"]}},"/api/v1/task_agents/channels/resources/crm":{"post":{"consumes":["application/json"],"parameters":[{"description":"CRM name and stable request ID","in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/api.channelCRMCreateRequest"}}],"produces":["application/json"],"responses":{},"summary":"Create an optional Twenty workspace","tags":["Task Agent Channels"]}},"/api/v1/task_agents/channels/resources/{resource_id}":{"delete":{"parameters":[{"description":"Resource ID","in":"path","name":"resource_id","required":true,"type":"string"}],"produces":["application/json"],"responses":{},"summary":"Delete an unused channel resource configuration","tags":["Task Agent Channels"]}},"/api/v1/task_agents/channels/resources/{resource_id}/provision":{"post":{"parameters":[{"description":"CRM resource ID","in":"path","name":"resource_id","required":true,"type":"string"}],"produces":["application/json"],"responses":{},"summary":"Retry an incomplete CRM provisioning operation","tags":["Task Agent Channels"]}},"/api/v1/task_agents/channels/resources/{resource_id}/status":{"put":{"consumes":["application/json"],"parameters":[{"description":"CRM resource ID","in":"path","name":"resource_id","required":true,"type":"string"},{"description":"Request body","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.PublicChannelStatusDoc"}}],"produces":["application/json"],"responses":{},"summary":"Disable or reverify a CRM resource","tags":["Task Agent Channels"]}},"/api/v1/task_agents/channels/resources/{resource_id}/verify":{"post":{"parameters":[{"description":"CRM resource ID","in":"path","name":"resource_id","required":true,"type":"string"}],"produces":["application/json"],"responses":{},"summary":"Verify a Twenty resource credential and workspace","tags":["Task Agent Channels"]}},"/api/v1/task_agents/channels/schedule_sources":{"get":{"produces":["application/json"],"responses":{},"summary":"List verified Webhook Schedule destinations","tags":["Task Agent Channels"]}},"/api/v1/task_agents/channels/sends":{"get":{"produces":["application/json"],"responses":{},"summary":"List user channel sends and provider statuses","tags":["Task Agent Channels"]}},"/api/v1/task_agents/channels/setup":{"get":{"responses":{},"summary":"Read channel setup configuration","tags":["Task Agent Channels"]},"post":{"description":"Slack accepts optional slack_trigger_rules with require_mention, auto_reply_channel_ids and auto_reply_sender_ids. Omit it for mention-required defaults. Channel and sender exceptions are OR conditions; obtain actual IDs from the authorized Slack workspace.","parameters":[{"description":"Request body","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.PublicMessageChannelDoc"}}],"produces":["application/json"],"responses":{},"summary":"Create a message channel","tags":["Task Agent Channels"]}},"/api/v1/task_agents/channels/whatsapp":{"post":{"consumes":["application/json"],"parameters":[{"description":"WhatsApp identity and owned Secret IDs","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.createWhatsAppChannelRequest"}}],"produces":["application/json"],"responses":{},"summary":"Create an official WhatsApp Cloud connection","tags":["Task Agent Channels"]}},"/api/v1/task_agents/channels/{connection_id}":{"delete":{"parameters":[{"description":"Connection ID","in":"path","name":"connection_id","required":true,"type":"string"}],"produces":["application/json"],"responses":{},"summary":"Disconnect a user channel","tags":["Task Agent Channels"]}},"/api/v1/task_agents/channels/{connection_id}/binding":{"put":{"consumes":["application/json"],"parameters":[{"description":"Channel connection ID","in":"path","name":"connection_id","required":true,"type":"string"},{"description":"Expected and target Webhook IDs; empty target releases binding","in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/api.taskAgentChannelBindingRequest"}}],"produces":["application/json"],"responses":{},"summary":"Atomically rebind a channel","tags":["Task Agent Channels"]}},"/api/v1/task_agents/channels/{connection_id}/installation":{"get":{"description":"WeChat installation includes wechat_trusted_ips, the configured public egress IP list. An empty array means the deployment has not configured it; other platforms omit this field.\nSlack installation includes slack_trigger_rules and the callback URL. Use the returned rules to preserve existing exceptions when updating a Slack channel.","responses":{},"summary":"Read channel installation information","tags":["Task Agent Channels"]}},"/api/v1/task_agents/channels/{connection_id}/slack":{"patch":{"consumes":["application/json"],"description":"Replace the complete Slack trigger rules. Mentions, exempt channel IDs and exempt user or bot IDs independently trigger replies. Both ID arrays support multiple values (up to 100 unique IDs each). Direct messages trigger normally and own-bot echoes are ignored. Requires an owned Slack channel; read /channels/{connection_id}/installation before editing and after saving.","parameters":[{"description":"Channel ID","in":"path","name":"connection_id","required":true,"type":"string"},{"description":"Complete Slack trigger rules","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/channel.SlackTriggerRules"}}],"produces":["application/json"],"responses":{},"summary":"Set Slack mention requirements and automatic reply exceptions","tags":["Task Agent Channels"]}},"/api/v1/task_agents/channels/{connection_id}/wechat-kf":{"patch":{"responses":{},"summary":"Complete WeChat customer service setup","tags":["Task Agent Channels"]}},"/api/v1/task_agents/channels/{connection_id}/wechat-kf/domain-verification":{"post":{"responses":{},"summary":"Upload a WeCom domain verification file","tags":["Task Agent Channels"]}},"/api/v1/task_agents/channels/{connection_id}/whatsapp":{"patch":{"consumes":["application/json"],"parameters":[{"description":"Connection ID","in":"path","name":"connection_id","required":true,"type":"string"},{"description":"Owned Secret IDs; omit app_secret_id to retain the channel signing secret","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.reauthorizeWhatsAppChannelRequest"}}],"produces":["application/json"],"responses":{},"summary":"Reauthorize an official WhatsApp Cloud connection","tags":["Task Agent Channels"]}},"/api/v1/task_agents/chat_memory_projects":{"get":{"produces":["application/json"],"responses":{},"summary":"List user chat memory projects","tags":["Task Agent Channels"]},"post":{"parameters":[{"description":"Request body","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.PublicChatMemoryProjectDoc"}}],"produces":["application/json"],"responses":{},"summary":"Create a user chat memory project","tags":["Task Agent Channels"]}},"/api/v1/task_agents/chat_memory_projects/writes":{"get":{"produces":["application/json"],"responses":{},"summary":"List user chat memory indexing operations","tags":["Task Agent Channels"]}},"/api/v1/task_agents/hooks/{hook_id}/channels":{"get":{"parameters":[{"description":"Webhook ID","in":"path","name":"hook_id","required":true,"type":"string"}],"produces":["application/json"],"responses":{},"summary":"Read Webhook channels and final reply configuration","tags":["Task Agent Channels"]},"put":{"parameters":[{"description":"Webhook ID","in":"path","name":"hook_id","required":true,"type":"string"},{"description":"Bindings and final reply policy","in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/api.taskAgentHookChannelConfigRequest"}}],"produces":["application/json"],"responses":{},"summary":"Replace Webhook channels and final reply configuration","tags":["Task Agent Channels"]}},"/api/v1/task_agents/hooks/{hook_id}/memory":{"patch":{"consumes":["application/json"],"parameters":[{"description":"Webhook ID","in":"path","name":"hook_id","required":true,"type":"string"},{"description":"Memory settings; shared writes require webhook or all reads","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.TaskAgentWebhookMemoryConfigDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentWebhookEnvelopeDoc"}},"400":{"description":"Bad Request","schema":{"$ref":"#/definitions/api.ServeErrorResponse"}},"404":{"description":"Not Found","schema":{"$ref":"#/definitions/api.ServeErrorResponse"}}},"summary":"Update only the owned webhook's Memory settings","tags":["task-agent-capabilities"]}},"/api/v1/task_agents/knowledge_bases":{"get":{"description":"Lists the authenticated user's Knowledge Bases. File upload create is supported by the same runtime endpoint with multipart/form-data; see the reference docs for that request shape.","parameters":[{"description":"Page number, default 1","in":"query","name":"page","type":"integer"},{"description":"Page size, default 20 and max 100","in":"query","name":"page_size","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentKnowledgeBaseListEnvelopeDoc"}}},"summary":"List Task Agent Knowledge Bases","tags":["task-agent-knowledge-bases"]},"post":{"consumes":["application/json"],"description":"Creates a user Knowledge Base and returns status=indexing. URL sources are indexed asynchronously by steward; the same runtime endpoint also accepts multipart/form-data with a file field.","parameters":[{"description":"URL Knowledge Base request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.TaskAgentKnowledgeBaseCreateRequestDoc"}}],"produces":["application/json"],"responses":{"201":{"description":"Created","schema":{"$ref":"#/definitions/api.TaskAgentKnowledgeBaseEnvelopeDoc"}},"400":{"description":"Bad Request","schema":{"$ref":"#/definitions/api.ServeErrorResponse"}},"500":{"description":"Internal Server Error","schema":{"$ref":"#/definitions/api.ServeErrorResponse"}}},"summary":"Create Task Agent Knowledge Base from URL","tags":["task-agent-knowledge-bases"]}},"/api/v1/task_agents/knowledge_bases/{id}":{"delete":{"description":"Deletes the Cloudflare AI Search instance first when one exists, then deletes the local row.","parameters":[{"description":"Knowledge Base ID","in":"path","name":"id","required":true,"type":"string"}],"produces":["application/json"],"responses":{"204":{"description":"No Content"},"404":{"description":"Not Found","schema":{"$ref":"#/definitions/api.ServeErrorResponse"}},"502":{"description":"Bad Gateway","schema":{"$ref":"#/definitions/api.ServeErrorResponse"}}},"summary":"Delete Task Agent Knowledge Base","tags":["task-agent-knowledge-bases"]},"get":{"parameters":[{"description":"Knowledge Base ID","in":"path","name":"id","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentKnowledgeBaseEnvelopeDoc"}},"404":{"description":"Not Found","schema":{"$ref":"#/definitions/api.ServeErrorResponse"}}},"summary":"Get Task Agent Knowledge Base","tags":["task-agent-knowledge-bases"]},"patch":{"consumes":["application/json"],"parameters":[{"description":"Knowledge Base ID","in":"path","name":"id","required":true,"type":"string"},{"description":"Knowledge Base update request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.TaskAgentKnowledgeBaseUpdateRequestDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentKnowledgeBaseEnvelopeDoc"}},"400":{"description":"Bad Request","schema":{"$ref":"#/definitions/api.ServeErrorResponse"}},"404":{"description":"Not Found","schema":{"$ref":"#/definitions/api.ServeErrorResponse"}}},"summary":"Update Task Agent Knowledge Base metadata","tags":["task-agent-knowledge-bases"]},"put":{"consumes":["application/json"],"parameters":[{"description":"Knowledge Base ID","in":"path","name":"id","required":true,"type":"string"},{"description":"Knowledge Base update request","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/api.TaskAgentKnowledgeBaseUpdateRequestDoc"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.TaskAgentKnowledgeBaseEnvelopeDoc"}},"400":{"description":"Bad Request","schema":{"$ref":"#/definitions/api.ServeErrorResponse"}},"404":{"description":"Not Found","schema":{"$ref":"#/definitions/api.ServeErrorResponse"}}},"summary":"Update Task Agent Knowledge Base metadata","tags":["task-agent-knowledge-bases"]}},"/api/v1/usage":{"get":{"parameters":[{"description":"Target month (YYYY-MM, default: current month)","in":"query","name":"month","type":"string"},{"description":"Usage type filter","in":"query","name":"type","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.UsageSummaryResponseDoc"}}},"security":[{"ApiKeyHeader":[]},{"SupabaseJWT":[]}],"summary":"Get usage summary","tags":["usage"]}},"/api/v1/usage/events":{"get":{"parameters":[{"description":"Month filter (YYYY-MM)","in":"query","name":"month","type":"string"},{"description":"Start time inclusive (RFC3339; YYYY-MM-DD also accepted)","in":"query","name":"from","type":"string"},{"description":"End time exclusive (RFC3339; YYYY-MM-DD also accepted)","in":"query","name":"to","type":"string"},{"description":"Tie-breaker for incremental polling; requires from and no to/month","in":"query","name":"after_id","type":"string"},{"description":"Usage type filter","in":"query","name":"type","type":"string"},{"description":"Status filter: pending | paid","in":"query","name":"status","type":"string"},{"description":"Max rows to return (default 100, max 200)","in":"query","name":"limit","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.UsageEventsResponseDoc"}}},"security":[{"ApiKeyHeader":[]},{"SupabaseJWT":[]}],"summary":"List usage events","tags":["usage"]}},"/health":{"get":{"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/api.HealthResponse"}}},"summary":"Health check","tags":["health"]}}},"schemes":["http","https"],"securityDefinitions":{"ApiKeyHeader":{"description":"Shared API key required by serve endpoints under `/api/v1`.","in":"header","name":"X-API-Key","type":"apiKey"},"PublicBearer":{"description":"Personal API key as `Bearer hast_pk_*` for `/api/public/v1`.","in":"header","name":"Authorization","type":"apiKey"},"SupabaseJWT":{"description":"Supabase session cookie. Replace the cookie name with your configured `SUPABASE_COOKIE_NAME` when importing into API tools.","in":"cookie","name":"sb-\u003cproject-ref\u003e-auth-token","type":"apiKey"}},"swagger":"2.0"}