{"openapi":"3.1.0","info":{"title":"GhostMind Developer API","version":"0.9.0","description":"GhostMind public developer API — the /v1 data plane. Authentication: Bearer <GHOSTMIND_API_KEY> header. Base URL: https://ghostmind.optdmsa.com/v1 Full docs: https://docs.ghostmind.optdmsa.com"},"paths":{"/v1/conversations/{conversation_id}/attachments":{"post":{"summary":"Upload Data Plane Attachment","description":"Upload a file for attachment to a conversation.\n\nAccepts a multipart file upload, validates it, stores it locally,\nand uploads it to ChatGPT via the 3-step protocol.  Returns the\nupstream ``file_id`` which can be passed to ``/v1/chat/completions``\nas part of the ``attachment_file_ids`` field.\n\nThe conversation must belong to the tenant identified by the API key.","operationId":"upload_data_plane_attachment_v1_conversations__conversation_id__attachments_post","parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}},{"$ref":"#/components/parameters/XRequestId"}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_data_plane_attachment_v1_conversations__conversation_id__attachments_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Missing, invalid, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Rate limit or tenant quota exceeded (Retry-After header present when applicable).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Upstream provider unavailable or session expired (e.g. NO_HEALTHY_SESSION, ACCOUNT_REAUTH_REQUIRED).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/chat/completions":{"post":{"summary":"Chat Completions","operationId":"chat_completions_v1_chat_completions_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Missing, invalid, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Rate limit or tenant quota exceeded (Retry-After header present when applicable).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Upstream provider unavailable or session expired (e.g. NO_HEALTHY_SESSION, ACCOUNT_REAUTH_REQUIRED).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"parameters":[{"$ref":"#/components/parameters/XRequestId"},{"$ref":"#/components/parameters/XGhostMindConversationId"},{"$ref":"#/components/parameters/XGhostMindUpstreamProject"},{"$ref":"#/components/parameters/XGhostMindUpstreamAccount"},{"$ref":"#/components/parameters/XGhostMindRouteProfile"},{"$ref":"#/components/parameters/XGhostMindProject"}]}},"/v1/messages/{message_id}":{"get":{"summary":"Get Message Status","description":"Get the current status of a message, including its assets.\n\nThis endpoint allows clients to poll for message completion after\na streaming connection ends.  The response includes:\n- message status (streaming, processing_assets, completed, etc.)\n- full text content (if available)\n- list of assets with their individual statuses\n- pending_operations count (assets not yet ready)\n\nThis is the primary way for API clients to check whether assets\nare ready after [DONE] is received.","operationId":"get_message_status_v1_messages__message_id__get","parameters":[{"name":"message_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Message Id"}},{"$ref":"#/components/parameters/XRequestId"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Missing, invalid, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/assets/{asset_id}":{"get":{"summary":"Get Asset Status","description":"Get the current status of a single asset.\n\nAllows clients to poll for individual asset readiness without\nfetching the entire message.","operationId":"get_asset_status_v1_assets__asset_id__get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"$ref":"#/components/parameters/XRequestId"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Missing, invalid, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/assets/{asset_id}/retry":{"post":{"summary":"Retry Asset Ingestion","description":"Retry ingestion of a failed asset.\n\nRe-attempts the download from upstream.  Only assets with status\n'failed' can be retried.  Increments retry_count and performs\na full re-download, re-validation, and re-storage.","operationId":"retry_asset_ingestion_v1_assets__asset_id__retry_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"$ref":"#/components/parameters/XRequestId"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Missing, invalid, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Rate limit or tenant quota exceeded (Retry-After header present when applicable).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/conversations":{"post":{"summary":"Create a conversation","description":"Create a new conversation explicitly.  The upstream ChatGPT conversation is created on the first message sent to this conversation.  Use the returned `id` in the `X-GhostMind-Conversation-Id` header when sending messages via POST /v1/chat/completions to continue in this conversation.","operationId":"create_conversation_v1_conversations_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationCreateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Missing, invalid, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Rate limit or tenant quota exceeded (Retry-After header present when applicable).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"parameters":[{"$ref":"#/components/parameters/XRequestId"}]},"get":{"summary":"List Conversations Data Plane","description":"List conversations owned by this API key, ordered by last activity.\n\nReturns a compact summary suitable for building a conversation sidebar.\n\nFilters:\n  - status_filter: active | archived | etc.\n  - destination_filter: general | project\n  - account_filter: upstream_account_id (UUID)\n  - project_filter: upstream_project_id (UUID)\n  - search: searches title AND message content\n  - pinned_only: only pinned conversations","operationId":"list_conversations_data_plane_v1_conversations_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"status_filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Filter"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"pinned_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Pinned Only"}},{"name":"destination_filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Destination Filter"}},{"name":"account_filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Filter"}},{"name":"project_filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Filter"}},{"$ref":"#/components/parameters/XRequestId"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Missing, invalid, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/conversations/{conversation_id}/messages":{"get":{"summary":"List Conversation Messages Data Plane","description":"Get all messages for a conversation (data plane — API key auth).\n\nEnforces tenant + API key ownership.","operationId":"list_conversation_messages_data_plane_v1_conversations__conversation_id__messages_get","parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}},{"$ref":"#/components/parameters/XRequestId"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Missing, invalid, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/conversations/{conversation_id}":{"get":{"summary":"Get Conversation Data Plane","description":"Get a single conversation with metadata (data plane — API key auth).\n\nEnforces tenant + API key ownership.","operationId":"get_conversation_data_plane_v1_conversations__conversation_id__get","parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}},{"$ref":"#/components/parameters/XRequestId"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Missing, invalid, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}},"patch":{"summary":"Update Conversation Data Plane","description":"Update a conversation's title and/or pinned status (data plane).\n\nEnforces tenant + API key ownership.","operationId":"update_conversation_data_plane_v1_conversations__conversation_id__patch","parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}},{"name":"title","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"}},{"name":"pinned","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Pinned"}},{"$ref":"#/components/parameters/XRequestId"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Missing, invalid, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Rate limit or tenant quota exceeded (Retry-After header present when applicable).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}},"delete":{"summary":"Delete Conversation Data Plane","description":"Soft-delete a conversation (data plane — API key auth).\n\nEnforces tenant + API key ownership.","operationId":"delete_conversation_data_plane_v1_conversations__conversation_id__delete","parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}},{"$ref":"#/components/parameters/XRequestId"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Missing, invalid, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Rate limit or tenant quota exceeded (Retry-After header present when applicable).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/conversations/{conversation_id}/sync":{"post":{"summary":"Sync Conversation Data Plane","description":"Sync a conversation with upstream ChatGPT (data plane — API key auth).\n\nEnforces tenant + API key ownership.","operationId":"sync_conversation_data_plane_v1_conversations__conversation_id__sync_post","parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}},{"$ref":"#/components/parameters/XRequestId"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Missing, invalid, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Rate limit or tenant quota exceeded (Retry-After header present when applicable).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/conversations/{conversation_id}/archive":{"post":{"summary":"Archive Conversation Data Plane","description":"Archive a conversation (data plane — API key auth).","operationId":"archive_conversation_data_plane_v1_conversations__conversation_id__archive_post","parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}},{"$ref":"#/components/parameters/XRequestId"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Missing, invalid, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Rate limit or tenant quota exceeded (Retry-After header present when applicable).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/conversations/{conversation_id}/restore":{"post":{"summary":"Restore Conversation Data Plane","description":"Restore an archived conversation (data plane — API key auth).","operationId":"restore_conversation_data_plane_v1_conversations__conversation_id__restore_post","parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}},{"$ref":"#/components/parameters/XRequestId"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Missing, invalid, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Rate limit or tenant quota exceeded (Retry-After header present when applicable).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/conversations/{conversation_id}/share":{"post":{"summary":"Share Conversation Data Plane","description":"Share a conversation with another user (data plane — API key auth).\n\nThe API key must own the conversation.  Body:\n  {\"user_id\": \"<uuid>\", \"role\": \"viewer\" | \"editor\"}\n\nOnly the owner can share.  Prevents self-share, duplicate participants,\nand cross-tenant sharing.  Audit event: conversation.shared.","operationId":"share_conversation_data_plane_v1_conversations__conversation_id__share_post","parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}},{"$ref":"#/components/parameters/XRequestId"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Missing, invalid, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Rate limit or tenant quota exceeded (Retry-After header present when applicable).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/conversations/{conversation_id}/participants":{"get":{"summary":"List Participants Data Plane","description":"List all participants of a conversation (data plane — API key auth).\n\nReturns the owner and all shared participants with their roles.","operationId":"list_participants_data_plane_v1_conversations__conversation_id__participants_get","parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}},{"$ref":"#/components/parameters/XRequestId"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Missing, invalid, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/conversations/{conversation_id}/participants/{user_id}":{"patch":{"summary":"Update Participant Data Plane","description":"Update a participant's role (data plane — API key auth).\n\nOnly the owner can change roles.  Body:\n  {\"role\": \"viewer\" | \"editor\"}","operationId":"update_participant_data_plane_v1_conversations__conversation_id__participants__user_id__patch","parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}},{"$ref":"#/components/parameters/XRequestId"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Missing, invalid, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Rate limit or tenant quota exceeded (Retry-After header present when applicable).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}},"delete":{"summary":"Remove Participant Data Plane","description":"Remove a participant from a conversation (data plane — API key auth).\n\nOnly the owner can remove participants.  Audit event: conversation.participant_removed.","operationId":"remove_participant_data_plane_v1_conversations__conversation_id__participants__user_id__delete","parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}},{"$ref":"#/components/parameters/XRequestId"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Missing, invalid, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Rate limit or tenant quota exceeded (Retry-After header present when applicable).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/conversations/{conversation_id}/transfer":{"post":{"summary":"Transfer Conversation Data Plane","description":"Transfer ownership of a conversation to another user (data plane).\n\nThe API key must own the conversation.  Body:\n  {\"new_owner_user_id\": \"<uuid>\"}\n\nOnly the owner can transfer.  Prevents self-transfer, cross-tenant\ntransfer, and transfer to disabled users.  The old owner is kept as\nan editor participant after transfer.  Idempotent: transferring to\nthe current owner is a no-op.  Audit event: conversation.ownership_transferred.\n\nNote: GhostMind ownership is access/management ownership within this\nplatform.  The upstream ChatGPT conversation remains in the original\nupstream account — transfer does not move it.","operationId":"transfer_conversation_data_plane_v1_conversations__conversation_id__transfer_post","parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}},{"$ref":"#/components/parameters/XRequestId"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Missing, invalid, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Rate limit or tenant quota exceeded (Retry-After header present when applicable).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/conversations/{conversation_id}/assets":{"get":{"summary":"List Conversation Assets Data Plane","description":"List assets for a conversation (API key auth).\n\nReturns asset metadata only — download requires a separate\nauthenticated call to /v1/assets/{id}/download.","operationId":"list_conversation_assets_data_plane_v1_conversations__conversation_id__assets_get","parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}},{"$ref":"#/components/parameters/XRequestId"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Missing, invalid, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/assets/{asset_id}/download":{"get":{"summary":"Download Asset Data Plane","description":"Download an asset file (API key auth).\n\nTenant isolation enforced: the asset must belong to the tenant\nidentified by the API key.","operationId":"download_asset_data_plane_v1_assets__asset_id__download_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"$ref":"#/components/parameters/XRequestId"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Missing, invalid, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/models":{"get":{"summary":"List Models","description":"List available models.\n\nReturns chat completion models from registered providers.\nAudio generation providers are NOT listed here — they have their own\nendpoint at GET /v1/audio/providers.","operationId":"list_models_v1_models_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"401":{"description":"Missing, invalid, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"parameters":[{"$ref":"#/components/parameters/XRequestId"}]}},"/v1/audio/transcriptions":{"post":{"summary":"Create Transcription","description":"Transcribe audio to text (speech-to-text / voice dictation).\n\nOpenAI-compatible multipart/form-data endpoint. Returns the\ntranscribed text. The text is NOT stored — it's returned to the\nclient as a draft for review and editing before sending as a\nmessage.","operationId":"create_transcription_v1_audio_transcriptions_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_create_transcription_v1_audio_transcriptions_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TranscriptionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Missing, invalid, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Rate limit or tenant quota exceeded (Retry-After header present when applicable).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Upstream provider unavailable or session expired (e.g. NO_HEALTHY_SESSION, ACCOUNT_REAUTH_REQUIRED).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"parameters":[{"$ref":"#/components/parameters/XRequestId"}]}},"/v1/audio/providers":{"get":{"summary":"List Audio Providers","description":"List all available audio generation providers.","operationId":"list_audio_providers_v1_audio_providers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/AudioProviderInfo"},"type":"array","title":"Response List Audio Providers V1 Audio Providers Get"}}}},"401":{"description":"Missing, invalid, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"parameters":[{"$ref":"#/components/parameters/XRequestId"}]}},"/v1/audio/providers/{provider}/capabilities":{"get":{"summary":"Get Provider Capabilities","description":"Get capabilities for a specific provider.","operationId":"get_provider_capabilities_v1_audio_providers__provider__capabilities_get","parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}},{"$ref":"#/components/parameters/XRequestId"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Get Provider Capabilities V1 Audio Providers  Provider  Capabilities Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Missing, invalid, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/audio/providers/{provider}/voices":{"get":{"summary":"List Provider Voices","description":"List available voices for a provider, with optional filters.","operationId":"list_provider_voices_v1_audio_providers__provider__voices_get","parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}},{"name":"dialect","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dialect"}},{"name":"gender","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gender"}},{"name":"age_category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Age Category"}},{"$ref":"#/components/parameters/XRequestId"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AudioVoice"},"title":"Response List Provider Voices V1 Audio Providers  Provider  Voices Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Missing, invalid, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/audio/generations":{"post":{"summary":"Create Audio Generation","description":"Create an async audio generation job.\n\nReturns 202 with job status 'queued' (or 'created' if not yet validated).\nPoll GET /v1/audio/generations/{id} for status updates.","operationId":"create_audio_generation_v1_audio_generations_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AudioGenerationCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AudioGenerationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Missing, invalid, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Rate limit or tenant quota exceeded (Retry-After header present when applicable).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Upstream provider unavailable or session expired (e.g. NO_HEALTHY_SESSION, ACCOUNT_REAUTH_REQUIRED).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"parameters":[{"$ref":"#/components/parameters/XRequestId"},{"$ref":"#/components/parameters/IdempotencyKey"}]},"get":{"summary":"List Audio Generations","description":"List audio generation jobs for the authenticated tenant.","operationId":"list_audio_generations_v1_audio_generations_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"provider","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"$ref":"#/components/parameters/XRequestId"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response List Audio Generations V1 Audio Generations Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Missing, invalid, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Upstream provider unavailable or session expired (e.g. NO_HEALTHY_SESSION, ACCOUNT_REAUTH_REQUIRED).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/audio/generations/{job_id}":{"get":{"summary":"Get Audio Generation","description":"Get the status of an audio generation job.","operationId":"get_audio_generation_v1_audio_generations__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}},{"$ref":"#/components/parameters/XRequestId"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AudioGenerationStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Missing, invalid, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/audio/generations/{job_id}/content":{"get":{"summary":"Get Audio Content","description":"Download the generated audio content.\n\nSupports Range requests for partial content.","operationId":"get_audio_content_v1_audio_generations__job_id__content_get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}},{"$ref":"#/components/parameters/XRequestId"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Missing, invalid, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/audio/generations/{job_id}/cancel":{"post":{"summary":"Cancel Audio Generation","description":"Cancel an audio generation job.","operationId":"cancel_audio_generation_v1_audio_generations__job_id__cancel_post","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}},{"$ref":"#/components/parameters/XRequestId"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AudioGenerationStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Missing, invalid, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Rate limit or tenant quota exceeded (Retry-After header present when applicable).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/audio/generations/{job_id}/retry":{"post":{"summary":"Retry Audio Generation","description":"Retry a failed audio generation job.\n\nCreates a new job with source_job_id pointing to the original.","operationId":"retry_audio_generation_v1_audio_generations__job_id__retry_post","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}},{"$ref":"#/components/parameters/XRequestId"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AudioGenerationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Missing, invalid, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Rate limit or tenant quota exceeded (Retry-After header present when applicable).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/audio/speech":{"post":{"summary":"Create Speech","description":"Sync convenience endpoint — creates a job and waits up to a bounded timeout.\n\nIf the job completes within the timeout, returns the audio directly (200).\nIf not, returns 202 with a job_id for async polling.\n\nThis does NOT kill the job — it continues in the background.\nThis does NOT create a new generation on retry.","operationId":"create_speech_v1_audio_speech_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AudioSpeechRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Missing, invalid, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Rate limit or tenant quota exceeded (Retry-After header present when applicable).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Upstream provider unavailable or session expired (e.g. NO_HEALTHY_SESSION, ACCOUNT_REAUTH_REQUIRED).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"parameters":[{"$ref":"#/components/parameters/XRequestId"}]}},"/v1/projects":{"get":{"summary":"List Projects","description":"List ChatGPT projects available to this API key's workspace.\n\nProjects are ChatGPT upstream projects linked to connected accounts.\nOnly projects on active accounts belonging to the tenant are returned.","operationId":"list_projects_v1_projects_get","parameters":[{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Search"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"$ref":"#/components/parameters/XRequestId"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ghostmind__data_plane__v1__projects__ProjectResponse"},"title":"Response List Projects V1 Projects Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Missing, invalid, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}},"post":{"summary":"Create Project","description":"Create a new ChatGPT project on a connected account.\n\nThe project is created upstream on ChatGPT and linked to the specified\n(or auto-selected) connected account.  Projects can be used as\nconversation destinations via the `X-GhostMind-Project` header or\nthe project routing system.\n\nMemory policy controls ChatGPT's memory scope:\n- `provider_default`: Let ChatGPT choose its default\n- `account_connected`: Shared account-level memory\n- `project_only`: Isolated project memory","operationId":"create_project_v1_projects_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectCreateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Missing, invalid, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Rate limit or tenant quota exceeded (Retry-After header present when applicable).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"parameters":[{"$ref":"#/components/parameters/XRequestId"}]}},"/v1/projects/{project_id}":{"get":{"summary":"Get Project","description":"Get detailed information about a specific project, including its files.","operationId":"get_project_v1_projects__project_id__get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"$ref":"#/components/parameters/XRequestId"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Missing, invalid, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}},"patch":{"summary":"Update Project","description":"Update a ChatGPT project's name and/or instructions.\n\nChanges are pushed upstream to ChatGPT and reflected locally.","operationId":"update_project_v1_projects__project_id__patch","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"$ref":"#/components/parameters/XRequestId"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ghostmind__data_plane__v1__projects__ProjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Missing, invalid, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Rate limit or tenant quota exceeded (Retry-After header present when applicable).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}},"delete":{"summary":"Delete Project","description":"Delete a ChatGPT project.\n\nThe project is deleted upstream on ChatGPT and marked as deleted locally.\nExisting conversations in this project are not deleted but can no longer\nbe continued in the project scope.","operationId":"delete_project_v1_projects__project_id__delete","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"$ref":"#/components/parameters/XRequestId"}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Missing, invalid, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Rate limit or tenant quota exceeded (Retry-After header present when applicable).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/projects/{project_id}/files":{"post":{"summary":"Upload Project File","description":"Upload a file to a ChatGPT project.\n\nThe file is uploaded to ChatGPT's file storage and linked to the project\nfor retrieval.  Supported types include text files, PDFs, and documents\nthat ChatGPT Projects accept.\n\nMaximum file size: 10 MB.","operationId":"upload_project_file_v1_projects__project_id__files_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"$ref":"#/components/parameters/XRequestId"}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_project_file_v1_projects__project_id__files_post"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ghostmind__data_plane__v1__projects__ProjectFileResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Missing, invalid, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Rate limit or tenant quota exceeded (Retry-After header present when applicable).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Upstream provider unavailable or session expired (e.g. NO_HEALTHY_SESSION, ACCOUNT_REAUTH_REQUIRED).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}},"get":{"summary":"List Project Files","description":"List files attached to a ChatGPT project.\n\nReturns locally tracked project sources.  Files are tracked from the\nmoment they are uploaded through this API.","operationId":"list_project_files_v1_projects__project_id__files_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"$ref":"#/components/parameters/XRequestId"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ghostmind__data_plane__v1__projects__ProjectFileResponse"},"title":"Response List Project Files V1 Projects  Project Id  Files Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Missing, invalid, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Upstream provider unavailable or session expired (e.g. NO_HEALTHY_SESSION, ACCOUNT_REAUTH_REQUIRED).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/projects/{project_id}/files/{source_id}":{"delete":{"summary":"Delete Project File","description":"Delete a file from a ChatGPT project.\n\nThe file is removed from ChatGPT's file storage and marked as deleted locally.","operationId":"delete_project_file_v1_projects__project_id__files__source_id__delete","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"source_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Source Id"}},{"$ref":"#/components/parameters/XRequestId"}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Missing, invalid, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Rate limit or tenant quota exceeded (Retry-After header present when applicable).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/capabilities":{"get":{"summary":"Get platform capabilities","description":"Returns a machine-readable manifest of capabilities available to this API key's workspace.  Use this endpoint to discover which features are enabled (chat, streaming, projects, files, audio, transcription, TTS) and which providers are connected.  Each capability distinguishes 'supported' (platform-level) from 'enabled' (effective availability for this workspace).","operationId":"get_capabilities_v1_capabilities_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Get Capabilities V1 Capabilities Get"}}}},"401":{"description":"Missing, invalid, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"parameters":[{"$ref":"#/components/parameters/XRequestId"}]}},"/v1/connections":{"get":{"summary":"List connected accounts","description":"Returns the upstream provider accounts connected to this workspace. Use this to check which providers are available (ChatGPT, Savio TTS) and their health status.  Connection management is done via the GhostMind dashboard.","operationId":"list_connections_v1_connections_get","parameters":[{"name":"provider","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by provider name","title":"Provider"},"description":"Filter by provider name"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status","title":"Status"},"description":"Filter by status"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"$ref":"#/components/parameters/XRequestId"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ConnectionResponse"},"title":"Response List Connections V1 Connections Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Missing, invalid, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/usage":{"get":{"summary":"Get Usage","description":"Aggregated usage for the calling API key over the given period.\n\nScoped keys see only their own records.  This endpoint intentionally\nexposes no cost, quota, or provider internals — only counters the\ncaller produced.","operationId":"get_usage_v1_usage_get","parameters":[{"name":"period","in":"query","required":false,"schema":{"type":"string","pattern":"^(24h|7d|30d)$","default":"7d","title":"Period"}},{"$ref":"#/components/parameters/XRequestId"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsageSummaryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Missing, invalid, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/actions":{"get":{"summary":"List Actions","description":"List published actions for the tenant.","operationId":"list_actions_v1_actions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ActionResponse"},"type":"array","title":"Response List Actions V1 Actions Get"}}}},"401":{"description":"Missing, invalid, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"parameters":[{"$ref":"#/components/parameters/XRequestId"}]}},"/v1/actions/{slug}":{"get":{"summary":"Get Action","description":"Get a published action by slug.","operationId":"get_action_v1_actions__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"$ref":"#/components/parameters/XRequestId"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Missing, invalid, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/actions/{slug}/assets":{"post":{"summary":"Upload Asset","description":"Upload a file for use as a `file` input in a run.\n\nReturns an asset_id. Pass it in the run input:\n{\"input\": {\"photo\": {\"asset_id\": \"<id>\"}}}.\nAssets are single-use (one run consumes them) and expire after\nGHOSTMIND_UAC_ASSET_TTL_HOURS (default 24h). Max size 20 MiB\n(GHOSTMIND_UAC_ASSET_MAX_BYTES).","operationId":"upload_asset_v1_actions__slug__assets_post","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"$ref":"#/components/parameters/XRequestId"}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_asset_v1_actions__slug__assets_post"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Missing, invalid, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Rate limit or tenant quota exceeded (Retry-After header present when applicable).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}},"get":{"summary":"List Assets","description":"List assets uploaded for an action (metadata only, no content).","operationId":"list_assets_v1_actions__slug__assets_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"default":50,"title":"Limit"}},{"$ref":"#/components/parameters/XRequestId"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AssetResponse"},"title":"Response List Assets V1 Actions  Slug  Assets Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Missing, invalid, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/actions/{slug}/runs":{"post":{"summary":"Create Run","description":"Create and execute an action run.\n\nReturns 202 with the run object. Execution is inline (async-first\nwith documented limitation — DUR-010 adds durable orchestration).\nIdempotency: same slug + idempotency_key returns original run.","operationId":"create_run_v1_actions__slug__runs_post","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"$ref":"#/components/parameters/XRequestId"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRunRequest"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ghostmind__data_plane__v1__uac_actions__RunResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Missing, invalid, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Rate limit or tenant quota exceeded (Retry-After header present when applicable).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}},"get":{"summary":"List Runs","description":"List runs for an action.","operationId":"list_runs_v1_actions__slug__runs_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"default":50,"title":"Limit"}},{"$ref":"#/components/parameters/XRequestId"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ghostmind__data_plane__v1__uac_actions__RunResponse"},"title":"Response List Runs V1 Actions  Slug  Runs Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Missing, invalid, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/actions/{slug}/runs/{run_id}":{"get":{"summary":"Get Run","description":"Get a specific run.","operationId":"get_run_v1_actions__slug__runs__run_id__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"run_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Run Id"}},{"$ref":"#/components/parameters/XRequestId"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ghostmind__data_plane__v1__uac_actions__RunResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Missing, invalid, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/actions/{slug}/runs/{run_id}/events":{"get":{"summary":"Get Run Events","description":"SSE stream of run events.\n\nReplays persisted events as Server-Sent Events.","operationId":"get_run_events_v1_actions__slug__runs__run_id__events_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"run_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Run Id"}},{"$ref":"#/components/parameters/XRequestId"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Missing, invalid, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/actions/{slug}/runs/{run_id}/cancel":{"post":{"summary":"Cancel Run","description":"Cancel a run (best-effort pre-commit).","operationId":"cancel_run_v1_actions__slug__runs__run_id__cancel_post","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"run_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Run Id"}},{"$ref":"#/components/parameters/XRequestId"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ghostmind__data_plane__v1__uac_actions__RunResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"description":"Missing, invalid, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Rate limit or tenant quota exceeded (Retry-After header present when applicable).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}}},"components":{"schemas":{"ActionResponse":{"properties":{"slug":{"type":"string","title":"Slug"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"risk_class":{"type":"string","title":"Risk Class","default":"safe"},"status":{"type":"string","title":"Status"}},"type":"object","required":["slug","name","status"],"title":"ActionResponse"},"ActivateResponse":{"properties":{"action_id":{"type":"string","title":"Action Id"},"version_id":{"type":"string","title":"Version Id"},"published":{"type":"boolean","title":"Published","default":true},"api_endpoint":{"type":"string","title":"Api Endpoint"},"message":{"type":"string","title":"Message","default":""}},"type":"object","required":["action_id","version_id","api_endpoint"],"title":"ActivateResponse"},"AnalyzeResponse":{"properties":{"recording_id":{"type":"string","title":"Recording Id"},"steps":{"items":{"type":"object"},"type":"array","title":"Steps","default":[]},"inputs":{"items":{"type":"object"},"type":"array","title":"Inputs","default":[]},"outputs":{"items":{"type":"object"},"type":"array","title":"Outputs","default":[]},"session_dependencies":{"items":{"type":"object"},"type":"array","title":"Session Dependencies","default":[]},"provenance_graph":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Provenance Graph"},"single_recording":{"type":"boolean","title":"Single Recording","default":true},"message":{"type":"string","title":"Message","default":""}},"type":"object","required":["recording_id"],"title":"AnalyzeResponse"},"ApiKeyCreate":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"project_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Project Id"},"user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"},"key_ownership_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Key Ownership Type"},"scopes":{"items":{"type":"string"},"type":"array","title":"Scopes","default":[]},"rate_limit":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Rate Limit"},"concurrency_limit":{"anyOf":[{"type":"integer","exclusiveMinimum":0.0},{"type":"null"}],"title":"Concurrency Limit"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"}},"type":"object","required":["name"],"title":"ApiKeyCreate"},"ApiKeyCreatedResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"prefix":{"type":"string","title":"Prefix"},"api_key":{"type":"string","title":"Api Key"},"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"project_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Project Id"}},"type":"object","required":["id","name","prefix","api_key","tenant_id","project_id"],"title":"ApiKeyCreatedResponse"},"ApiKeyResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"prefix":{"type":"string","title":"Prefix"},"project_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Project Id"},"scopes":{"items":{},"type":"array","title":"Scopes"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"revoked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Revoked At"}},"type":"object","required":["id","name","prefix","project_id","scopes","expires_at","last_used_at","revoked_at"],"title":"ApiKeyResponse"},"ApiKeyUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"scopes":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Scopes"},"rate_limit":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Rate Limit"},"concurrency_limit":{"anyOf":[{"type":"integer","exclusiveMinimum":0.0},{"type":"null"}],"title":"Concurrency Limit"}},"type":"object","title":"ApiKeyUpdate"},"AssetResponse":{"properties":{"asset_id":{"type":"string","title":"Asset Id"},"filename":{"type":"string","title":"Filename"},"content_type":{"type":"string","title":"Content Type"},"size_bytes":{"type":"integer","title":"Size Bytes"},"sha256":{"type":"string","title":"Sha256"},"status":{"type":"string","title":"Status"},"expires_at":{"type":"string","title":"Expires At"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["asset_id","filename","content_type","size_bytes","sha256","status","expires_at"],"title":"AssetResponse"},"AudioGenerationCreateRequest":{"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model","description":"Model name (e.g., 'savio-tts-arabic')"},"input":{"type":"string","maxLength":10000,"minLength":1,"title":"Input","description":"Text to synthesize"},"voice":{"type":"string","maxLength":128,"minLength":1,"title":"Voice","description":"Voice name"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language","description":"ISO-639-1 language hint"},"response_format":{"type":"string","title":"Response Format","description":"Audio format: wav, mp3, flac, pcm","default":"wav"},"provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider","description":"Provider override (default: auto-select)"},"provider_options":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Provider Options","description":"Provider-specific options (dialect, age, gender, settings)"}},"type":"object","required":["input","voice"],"title":"AudioGenerationCreateRequest","description":"Provider-neutral async TTS generation request."},"AudioGenerationResponse":{"properties":{"id":{"type":"string","title":"Id"},"object":{"type":"string","title":"Object","default":"audio.generation"},"status":{"type":"string","title":"Status"},"provider":{"type":"string","title":"Provider"},"voice":{"type":"string","title":"Voice"},"created_at":{"type":"string","title":"Created At"},"status_url":{"type":"string","title":"Status Url"}},"type":"object","required":["id","status","provider","voice","created_at","status_url"],"title":"AudioGenerationResponse","description":"Response for async job creation."},"AudioGenerationStatusResponse":{"properties":{"id":{"type":"string","title":"Id"},"object":{"type":"string","title":"Object","default":"audio.generation"},"status":{"type":"string","title":"Status"},"provider":{"type":"string","title":"Provider"},"voice":{"type":"string","title":"Voice"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language"},"input_length":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Input Length"},"response_format":{"type":"string","title":"Response Format","default":"wav"},"output_mime_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Output Mime Type"},"output_size_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Output Size Bytes"},"duration_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Ms"},"sample_rate":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sample Rate"},"channels":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Channels"},"error_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Code"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"retry_count":{"type":"integer","title":"Retry Count","default":0},"created_at":{"type":"string","title":"Created At"},"queued_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Queued At"},"assigned_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assigned At"},"started_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Started At"},"completed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Completed At"},"expires_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expires At"},"content_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content Url"}},"type":"object","required":["id","status","provider","voice","created_at"],"title":"AudioGenerationStatusResponse","description":"Detailed job status."},"AudioProviderInfo":{"properties":{"provider":{"type":"string","title":"Provider"},"provider_family":{"type":"string","title":"Provider Family"},"provider_implementation":{"type":"string","title":"Provider Implementation"},"execution_mode":{"type":"string","title":"Execution Mode"},"capabilities":{"type":"object","title":"Capabilities"}},"type":"object","required":["provider","provider_family","provider_implementation","execution_mode","capabilities"],"title":"AudioProviderInfo","description":"Provider information."},"AudioSpeechRequest":{"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"input":{"type":"string","maxLength":10000,"minLength":1,"title":"Input"},"voice":{"type":"string","maxLength":128,"minLength":1,"title":"Voice"},"response_format":{"type":"string","title":"Response Format","default":"wav"},"speed":{"anyOf":[{"type":"number","maximum":4.0,"minimum":0.25},{"type":"null"}],"title":"Speed"},"provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider"},"provider_options":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Provider Options"}},"type":"object","required":["input","voice"],"title":"AudioSpeechRequest","description":"OpenAI-compatible sync speech request (convenience endpoint)."},"AudioVoice":{"properties":{"voice":{"type":"string","title":"Voice"},"dialect":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dialect"},"gender":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gender"},"age_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Age Category"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","required":["voice"],"title":"AudioVoice","description":"Voice information."},"AuditEventResponse":{"properties":{"id":{"type":"integer","title":"Id"},"tenant_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Tenant Id"},"actor_type":{"type":"string","title":"Actor Type"},"actor_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Actor Id"},"action":{"type":"string","title":"Action"},"target_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Type"},"target_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Target Id"},"metadata":{"type":"object","title":"Metadata"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","tenant_id","actor_type","actor_id","action","target_type","target_id","metadata","created_at"],"title":"AuditEventResponse"},"BetaFeedbackCreate":{"properties":{"category":{"type":"string","pattern":"^(bug|feature_request|question|praise)$","title":"Category"},"message":{"type":"string","maxLength":2000,"minLength":1,"title":"Message"},"run_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Run Id"}},"type":"object","required":["category","message"],"title":"BetaFeedbackCreate","description":"Beta feedback submission."},"BetaFeedbackResponse":{"properties":{"id":{"type":"string","title":"Id"},"tenant_id":{"type":"string","title":"Tenant Id"},"category":{"type":"string","title":"Category"},"message":{"type":"string","title":"Message"},"run_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Run Id"},"status":{"type":"string","title":"Status"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["id","tenant_id","category","message","run_id","status","created_at"],"title":"BetaFeedbackResponse","description":"Beta feedback response."},"BetaTenantOnboard":{"properties":{"tenant_name":{"type":"string","maxLength":100,"minLength":1,"title":"Tenant Name"},"admin_email":{"type":"string","minLength":1,"title":"Admin Email"},"description":{"type":"string","maxLength":500,"title":"Description","default":""}},"type":"object","required":["tenant_name","admin_email"],"title":"BetaTenantOnboard","description":"Request to onboard a new beta tenant."},"BetaTenantResponse":{"properties":{"tenant_id":{"type":"string","title":"Tenant Id"},"api_key":{"type":"string","title":"Api Key"},"beta_access":{"type":"boolean","title":"Beta Access","default":true},"onboarded_at":{"type":"string","title":"Onboarded At"}},"type":"object","required":["tenant_id","api_key","onboarded_at"],"title":"BetaTenantResponse","description":"Response after onboarding a beta tenant."},"BindingCreate":{"properties":{"ghostmind_project_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Ghostmind Project Id"},"api_key_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Api Key Id"},"upstream_account_id":{"type":"string","format":"uuid","title":"Upstream Account Id"},"upstream_project_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Upstream Project Id"},"route_profile_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Route Profile Id"},"priority":{"type":"integer","title":"Priority","default":100},"weight":{"type":"integer","exclusiveMinimum":0.0,"title":"Weight","default":1},"routing_mode":{"type":"string","title":"Routing Mode","default":"sticky"},"is_default":{"type":"boolean","title":"Is Default","default":false},"fallback_policy":{"type":"string","title":"Fallback Policy","default":"strict"}},"type":"object","required":["upstream_account_id"],"title":"BindingCreate"},"BindingResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"ghostmind_project_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Ghostmind Project Id"},"api_key_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Api Key Id"},"upstream_account_id":{"type":"string","format":"uuid","title":"Upstream Account Id"},"upstream_project_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Upstream Project Id"},"route_profile_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Route Profile Id"},"priority":{"type":"integer","title":"Priority"},"weight":{"type":"integer","title":"Weight"},"routing_mode":{"type":"string","title":"Routing Mode"},"is_default":{"type":"boolean","title":"Is Default"},"fallback_policy":{"type":"string","title":"Fallback Policy"},"status":{"type":"string","title":"Status"}},"type":"object","required":["id","tenant_id","ghostmind_project_id","api_key_id","upstream_account_id","upstream_project_id","route_profile_id","priority","weight","routing_mode","is_default","fallback_policy","status"],"title":"BindingResponse"},"BindingUpdate":{"properties":{"priority":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Priority"},"weight":{"anyOf":[{"type":"integer","exclusiveMinimum":0.0},{"type":"null"}],"title":"Weight"},"routing_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Routing Mode"},"is_default":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Default"},"fallback_policy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fallback Policy"}},"type":"object","title":"BindingUpdate"},"Body_create_transcription_me_v1_workspaces__tenant_id__transcriptions_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language"},"response_format":{"type":"string","title":"Response Format","default":"json"},"conversation_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Conversation Id"}},"type":"object","required":["file"],"title":"Body_create_transcription_me_v1_workspaces__tenant_id__transcriptions_post"},"Body_create_transcription_v1_audio_transcriptions_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"},"model":{"type":"string","title":"Model","default":"ghostmind-transcribe"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language"},"response_format":{"type":"string","title":"Response Format","default":"json"},"conversation_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Conversation Id"}},"type":"object","required":["file"],"title":"Body_create_transcription_v1_audio_transcriptions_post"},"Body_test_lab_upload_attachment_me_v1_workspaces__tenant_id__test_lab_conversations__conversation_id__attachments_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_test_lab_upload_attachment_me_v1_workspaces__tenant_id__test_lab_conversations__conversation_id__attachments_post"},"Body_transcribe_audio_admin_v1_operations_transcribe_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language"},"conversation_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Conversation Id"},"account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Id"}},"type":"object","required":["file"],"title":"Body_transcribe_audio_admin_v1_operations_transcribe_post"},"Body_upload_action_asset_admin_v1_tenants__tenant_id__uac_actions__action_id__assets_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_action_asset_admin_v1_tenants__tenant_id__uac_actions__action_id__assets_post"},"Body_upload_asset_v1_actions__slug__assets_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_asset_v1_actions__slug__assets_post"},"Body_upload_conversation_attachment_endpoint_admin_v1_operations_conversations__conversation_id__attachments_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_conversation_attachment_endpoint_admin_v1_operations_conversations__conversation_id__attachments_post"},"Body_upload_data_plane_attachment_v1_conversations__conversation_id__attachments_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_data_plane_attachment_v1_conversations__conversation_id__attachments_post"},"Body_upload_project_file_admin_v1_upstream_projects__project_id__files_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_project_file_admin_v1_upstream_projects__project_id__files_post"},"Body_upload_project_file_v1_projects__project_id__files_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_project_file_v1_projects__project_id__files_post"},"Body_upload_source_file_admin_v1_upstream_projects__project_id__sources_files_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_source_file_admin_v1_upstream_projects__project_id__sources_files_post"},"Body_upload_uac_asset_me_v1_workspaces__tenant_id__uac_actions__slug__assets_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_uac_asset_me_v1_workspaces__tenant_id__uac_actions__slug__assets_post"},"BrowserAccountCreate":{"properties":{"label":{"type":"string","maxLength":255,"minLength":1,"title":"Label"},"provider":{"type":"string","maxLength":32,"title":"Provider"},"planned_worker_count":{"type":"integer","maximum":2.0,"minimum":1.0,"title":"Planned Worker Count","default":1},"description":{"anyOf":[{"type":"string","maxLength":1024},{"type":"null"}],"title":"Description"}},"type":"object","required":["label","provider"],"title":"BrowserAccountCreate","description":"Create a browser-backed upstream account (no session needed)."},"BrowserAccountResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"provider":{"type":"string","title":"Provider"},"label":{"type":"string","title":"Label"},"status":{"type":"string","title":"Status"},"provider_state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider State"},"planned_worker_count":{"type":"integer","title":"Planned Worker Count","default":1},"upstream_identity_masked":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Upstream Identity Masked"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"},"canonical_profile_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Canonical Profile Status"},"canonical_profile_verified":{"type":"boolean","title":"Canonical Profile Verified","default":false},"canonical_profile_verified_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Canonical Profile Verified At"},"worker_profiles":{"items":{"type":"object"},"type":"array","title":"Worker Profiles"},"active_capture_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Active Capture Id"},"active_capture_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Active Capture Status"}},"type":"object","required":["id","tenant_id","provider","label","status","created_at","updated_at"],"title":"BrowserAccountResponse"},"BulkDeleteRequest":{"properties":{"user_ids":{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":200,"minItems":1,"title":"User Ids"}},"type":"object","required":["user_ids"],"title":"BulkDeleteRequest"},"BulkDeleteResponse":{"properties":{"deleted":{"items":{"$ref":"#/components/schemas/BulkDeleteResultItem"},"type":"array","title":"Deleted"},"deleted_count":{"type":"integer","title":"Deleted Count"}},"type":"object","required":["deleted","deleted_count"],"title":"BulkDeleteResponse"},"BulkDeleteResultItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"status":{"type":"string","title":"Status"}},"type":"object","required":["id","email","status"],"title":"BulkDeleteResultItem"},"ChatMessage":{"properties":{"role":{"type":"string","title":"Role"},"content":{"title":"Content"}},"type":"object","required":["role"],"title":"ChatMessage"},"ChatRequest":{"properties":{"model":{"type":"string","title":"Model","default":"auto"},"messages":{"items":{"$ref":"#/components/schemas/ChatMessage"},"type":"array","title":"Messages"},"stream":{"type":"boolean","title":"Stream","default":false},"attachment_file_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Attachment File Ids"},"trace":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Trace"},"temperature":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Temperature","description":"Accepted for OpenAI SDK compatibility. Ignored — ChatGPT does not expose temperature control."},"top_p":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Top P","description":"Accepted for OpenAI SDK compatibility. Ignored — ChatGPT does not expose top_p control."},"max_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Tokens","description":"Accepted for OpenAI SDK compatibility. Ignored — ChatGPT does not expose max_tokens control."},"tools":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Tools"},"tool_choice":{"anyOf":[{"type":"string"},{"type":"object"},{"type":"null"}],"title":"Tool Choice"},"n":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"N"},"logprobs":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Logprobs"}},"type":"object","required":["messages"],"title":"ChatRequest"},"CircuitBreakerState":{"properties":{"account_id":{"type":"string","format":"uuid","title":"Account Id"},"state":{"type":"string","title":"State"},"failures":{"type":"integer","title":"Failures"},"cooldown_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Cooldown Until"}},"type":"object","required":["account_id","state","failures","cooldown_until"],"title":"CircuitBreakerState"},"ClarificationAnswerRequest":{"properties":{"field_path":{"type":"string","title":"Field Path"},"answer":{"type":"string","title":"Answer"},"question":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Question"}},"type":"object","required":["field_path","answer"],"title":"ClarificationAnswerRequest","description":"Owner answers a focused clarification question (M7-W1)."},"ClarificationResponse":{"properties":{"field_path":{"type":"string","title":"Field Path"},"new_classification":{"type":"string","title":"New Classification"},"new_confidence_level":{"type":"string","title":"New Confidence Level"},"message":{"type":"string","title":"Message"}},"type":"object","required":["field_path","new_classification","new_confidence_level","message"],"title":"ClarificationResponse"},"ConnectionResponse":{"properties":{"id":{"type":"string","title":"Id","description":"Connection/account ID"},"label":{"type":"string","title":"Label","description":"Human-readable account label"},"provider":{"type":"string","title":"Provider","description":"Provider name (chatgpt, google_ai_studio_savio_tts)"},"provider_family":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider Family","description":"Provider family (e.g., google_ai_studio)"},"status":{"type":"string","title":"Status","description":"active | disabled | expired | cooldown | rate_limited | configured | error"},"health":{"type":"string","title":"Health","description":"healthy | unhealthy | rate_limited | cooldown | unknown — NEVER null for active connections. healthy: session is usable for completions. unhealthy: session is NOT usable (expired/disabled/configured). rate_limited: session is valid but temporarily throttled by upstream (429). cooldown: session is valid but circuit breaker is open due to transient failures. unknown: health could not be determined — treat completions as authority."},"is_default":{"type":"boolean","title":"Is Default","default":false},"created_at":{"type":"string","title":"Created At"},"last_used_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Used At"},"cooldown_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cooldown Reason","description":"When status is 'cooldown' or 'rate_limited', the reason (e.g. 'rate_limited', 'failures')"},"cooldown_remaining_seconds":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cooldown Remaining Seconds","description":"When status is 'cooldown' or 'rate_limited', seconds until the account becomes available again"}},"type":"object","required":["id","label","provider","status","health","created_at"],"title":"ConnectionResponse","description":"Public API response for a connected account (redacted)."},"ConversationCreateRequest":{"properties":{"title":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Title","description":"Optional conversation title. If omitted, a default title is used."},"upstream_project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Upstream Project Id","description":"UUID of an existing ChatGPT project to create the conversation in. If omitted, the conversation is created in general space (or auto-resolved based on routing configuration)."},"upstream_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Upstream Account Id","description":"UUID of a specific connected account to use. If omitted, an account is auto-selected from the pool."},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model","description":"Preferred model for this conversation."},"trace":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Trace","description":"Internal caller correlation (e.g. site slug for the site-scoped provider canary). Persisted on later chat requests; never forwarded upstream or echoed publicly."}},"type":"object","title":"ConversationCreateRequest","description":"Request body for creating a conversation."},"ConversationCreateResponse":{"properties":{"id":{"type":"string","title":"Id"},"status":{"type":"string","title":"Status","default":"active"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"upstream_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Upstream Account Id"},"upstream_project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Upstream Project Id"},"destination_type":{"type":"string","title":"Destination Type","description":"general | project — whether the conversation is in general space or a project"},"created_at":{"type":"string","title":"Created At"},"supports_conversation_attachments":{"type":"boolean","title":"Supports Conversation Attachments","description":"Whether the pinned upstream provider supports conversation attachment uploads. False → send file content inline.","default":true}},"type":"object","required":["id","destination_type","created_at"],"title":"ConversationCreateResponse","description":"Response for conversation creation."},"ConversationShare":{"properties":{"target_user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Target User Id"},"target_user_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target User Email"},"role":{"type":"string","pattern":"^(viewer|editor)$","title":"Role","default":"viewer"}},"type":"object","title":"ConversationShare"},"ConversationTransfer":{"properties":{"target_user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Target User Id"},"target_user_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target User Email"}},"type":"object","title":"ConversationTransfer"},"ConversationUpdate":{"properties":{"title":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Title"},"pinned":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Pinned"}},"type":"object","title":"ConversationUpdate"},"CreateRunRequest":{"properties":{"input":{"type":"object","title":"Input","default":{}},"connection_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Connection Id"},"idempotency_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency Key"}},"type":"object","title":"CreateRunRequest"},"CuratedActionResponse":{"properties":{"id":{"type":"string","title":"Id"},"slug":{"type":"string","title":"Slug"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"platform":{"type":"string","title":"Platform"},"category":{"type":"string","title":"Category"},"config_template":{"type":"object","title":"Config Template","default":{}},"icon":{"type":"string","title":"Icon","default":"default"}},"type":"object","required":["id","slug","name","description","platform","category"],"title":"CuratedActionResponse","description":"A curated action in the catalog."},"DashboardOverview":{"properties":{"api_status":{"type":"string","title":"Api Status"},"db_status":{"type":"string","title":"Db Status"},"redis_status":{"type":"string","title":"Redis Status"},"tenants":{"type":"integer","title":"Tenants"},"users":{"type":"integer","title":"Users"},"active_api_keys":{"type":"integer","title":"Active Api Keys"},"upstream_accounts":{"type":"integer","title":"Upstream Accounts"},"session_pools":{"type":"integer","title":"Session Pools"},"requests_today":{"type":"integer","title":"Requests Today"},"requests_this_month":{"type":"integer","title":"Requests This Month"},"success_rate":{"type":"number","title":"Success Rate"},"error_rate":{"type":"number","title":"Error Rate"},"in_flight_streams":{"type":"integer","title":"In Flight Streams"},"max_concurrent":{"type":"integer","title":"Max Concurrent"},"open_circuit_breakers":{"type":"integer","title":"Open Circuit Breakers"},"cooldown_accounts":{"type":"integer","title":"Cooldown Accounts"},"expired_sessions":{"type":"integer","title":"Expired Sessions"}},"type":"object","required":["api_status","db_status","redis_status","tenants","users","active_api_keys","upstream_accounts","session_pools","requests_today","requests_this_month","success_rate","error_rate","in_flight_streams","max_concurrent","open_circuit_breakers","cooldown_accounts","expired_sessions"],"title":"DashboardOverview","description":"Top-level platform overview for the Super Admin dashboard."},"DiscoveryResponse":{"properties":{"recording_id":{"type":"string","title":"Recording Id"},"recording_status":{"type":"string","title":"Recording Status"},"inputs":{"items":{"type":"object"},"type":"array","title":"Inputs"},"outputs":{"items":{"type":"object"},"type":"array","title":"Outputs"},"steps":{"items":{"type":"object"},"type":"array","title":"Steps"},"session_dependencies":{"items":{"type":"object"},"type":"array","title":"Session Dependencies"},"single_recording":{"type":"boolean","title":"Single Recording"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"}},"type":"object","required":["recording_id","recording_status","inputs","outputs","steps","session_dependencies","single_recording"],"title":"DiscoveryResponse","description":"Discovered inputs, outputs, and steps from recording evidence."},"DraftCreate":{"properties":{},"type":"object","title":"DraftCreate"},"DraftResponse":{"properties":{"id":{"type":"string","title":"Id"},"tenant_id":{"type":"string","title":"Tenant Id"},"operator_user_id":{"type":"string","title":"Operator User Id"},"current_step":{"type":"integer","title":"Current Step"},"draft_state":{"type":"object","title":"Draft State"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"}},"type":"object","required":["id","tenant_id","operator_user_id","current_step","draft_state","created_at","updated_at"],"title":"DraftResponse"},"DraftSave":{"properties":{"draft_state":{"type":"object","title":"Draft State","default":{}},"current_step":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Current Step"}},"type":"object","title":"DraftSave"},"EffectivePolicyResponse":{"properties":{"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"plan_name":{"type":"string","title":"Plan Name"},"limits":{"type":"object","title":"Limits"},"features":{"type":"object","title":"Features"},"overrides":{"type":"object","title":"Overrides"}},"type":"object","required":["tenant_id","plan_name","limits","features","overrides"],"title":"EffectivePolicyResponse","description":"Effective policy for a tenant = plan limits + per-key overrides."},"FinishLoginResponse":{"properties":{"connection_id":{"type":"string","title":"Connection Id"},"status":{"type":"string","title":"Status"},"message":{"type":"string","title":"Message","default":""}},"type":"object","required":["connection_id","status"],"title":"FinishLoginResponse"},"FlagFlipRequest":{"properties":{"flag_name":{"type":"string","title":"Flag Name"},"new_value":{"type":"string","title":"New Value"},"reason":{"type":"string","minLength":1,"title":"Reason"}},"type":"object","required":["flag_name","new_value","reason"],"title":"FlagFlipRequest","description":"Request to flip a feature flag (support only)."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"InvitationAccept":{"properties":{"token":{"type":"string","title":"Token"},"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","minLength":8,"title":"Password"}},"type":"object","required":["token","email","password"],"title":"InvitationAccept"},"InvitationCreate":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"role":{"type":"string","pattern":"^(member|viewer|admin|owner)$","title":"Role","default":"member"}},"type":"object","required":["email"],"title":"InvitationCreate"},"InvitationCreatedResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"email":{"type":"string","title":"Email"},"role":{"type":"string","title":"Role"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"accepted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Accepted At"},"revoked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Revoked At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"token":{"type":"string","title":"Token"}},"type":"object","required":["id","tenant_id","email","role","expires_at","accepted_at","revoked_at","created_at","token"],"title":"InvitationCreatedResponse"},"InvitationResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"email":{"type":"string","title":"Email"},"role":{"type":"string","title":"Role"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"accepted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Accepted At"},"revoked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Revoked At"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","tenant_id","email","role","expires_at","accepted_at","revoked_at","created_at"],"title":"InvitationResponse"},"JourneyStart":{"properties":{"action_name":{"type":"string","maxLength":255,"minLength":1,"title":"Action Name","description":"What do you want GhostMind to do?"},"target_url":{"type":"string","maxLength":2048,"minLength":1,"title":"Target Url","description":"Target website URL"},"action_description":{"anyOf":[{"type":"string","maxLength":1024},{"type":"null"}],"title":"Action Description","description":"Optional description"}},"type":"object","required":["action_name","target_url"],"title":"JourneyStart","description":"Start a new automation journey — ONE CTA, minimal fields."},"JourneyStateResponse":{"properties":{"draft_id":{"type":"string","title":"Draft Id"},"stage":{"type":"string","title":"Stage"},"stages":{"additionalProperties":{"type":"string"},"type":"object","title":"Stages"},"visible_stages":{"items":{"type":"string"},"type":"array","title":"Visible Stages","default":[]},"action_name":{"type":"string","title":"Action Name"},"action_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Action Description"},"target_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Url"},"target_origin":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Origin"},"platform_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Platform Id"},"platform_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Platform Name"},"connection_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Connection Id"},"connection_status":{"type":"string","title":"Connection Status","default":"not_connected"},"recording_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Recording Id"},"recording_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Recording Status"},"discovered_steps":{"items":{"type":"object"},"type":"array","title":"Discovered Steps","default":[]},"discovered_inputs":{"items":{"type":"object"},"type":"array","title":"Discovered Inputs","default":[]},"discovered_outputs":{"items":{"type":"object"},"type":"array","title":"Discovered Outputs","default":[]},"session_dependencies":{"items":{"type":"object"},"type":"array","title":"Session Dependencies","default":[]},"provenance_graph":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Provenance Graph"},"compile_result":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Compile Result"},"action_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Action Id"},"version_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Version Id"},"verification_result":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Verification Result"},"test_run_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Test Run Id"},"test_run_result":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Test Run Result"},"published_version_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Published Version Id"},"api_endpoint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Endpoint"},"runs":{"items":{"type":"object"},"type":"array","title":"Runs","default":[]},"demonstration_count":{"type":"integer","title":"Demonstration Count","default":0},"recording_ids":{"items":{"type":"string"},"type":"array","title":"Recording Ids","default":[]},"learning_readiness":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Learning Readiness"},"differential_result":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Differential Result"},"clarification_answers":{"items":{"type":"object"},"type":"array","title":"Clarification Answers","default":[]},"field_evidence":{"items":{"type":"object"},"type":"array","title":"Field Evidence","default":[]},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"}},"type":"object","required":["draft_id","stage","stages","action_name","created_at","updated_at"],"title":"JourneyStateResponse","description":"Server-driven journey state — frontend consumes this."},"JourneyUpdate":{"properties":{"action_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Action Name"},"action_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Action Description"},"target_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Url"},"inputs":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Inputs"},"outputs":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Outputs"},"session_dependencies":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Session Dependencies"},"provenance_graph":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Provenance Graph"},"selected_connection_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Selected Connection Id"},"success_conditions":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Success Conditions"},"field_evidence":{"anyOf":[{"items":{"type":"object"},"type":"array"},{"type":"null"}],"title":"Field Evidence"},"learning_readiness":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Learning Readiness"},"discovered_inputs":{"anyOf":[{"items":{"type":"object"},"type":"array"},{"type":"null"}],"title":"Discovered Inputs"},"discovered_outputs":{"anyOf":[{"items":{"type":"object"},"type":"array"},{"type":"null"}],"title":"Discovered Outputs"}},"type":"object","title":"JourneyUpdate","description":"Update journey state (owner corrections, configuration)."},"LatencyStats":{"properties":{"p50_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"P50 Ms"},"p95_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"P95 Ms"},"p99_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"P99 Ms"},"avg_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avg Ms"},"sample_size":{"type":"integer","title":"Sample Size"}},"type":"object","required":["p50_ms","p95_ms","p99_ms","avg_ms","sample_size"],"title":"LatencyStats"},"LoginRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","minLength":8,"title":"Password"}},"type":"object","required":["email","password"],"title":"LoginRequest"},"LoginStatusResponse":{"properties":{"connection_id":{"type":"string","title":"Connection Id"},"status":{"type":"string","title":"Status"},"step":{"type":"string","title":"Step","default":""},"vnc_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vnc Url"},"message":{"type":"string","title":"Message","default":""}},"type":"object","required":["connection_id","status"],"title":"LoginStatusResponse"},"MeApiKeyCreate":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"scopes":{"items":{"type":"string"},"type":"array","title":"Scopes"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"}},"type":"object","required":["name"],"title":"MeApiKeyCreate"},"MeApiKeyCreatedResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"prefix":{"type":"string","title":"Prefix"},"scopes":{"items":{"type":"string"},"type":"array","title":"Scopes"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"revoked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Revoked At"},"user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"},"key_ownership_type":{"type":"string","title":"Key Ownership Type"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"api_key":{"type":"string","title":"Api Key"}},"type":"object","required":["id","name","prefix","scopes","expires_at","last_used_at","revoked_at","user_id","key_ownership_type","created_at","api_key"],"title":"MeApiKeyCreatedResponse"},"MeApiKeyResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"prefix":{"type":"string","title":"Prefix"},"scopes":{"items":{"type":"string"},"type":"array","title":"Scopes"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"revoked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Revoked At"},"user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"},"key_ownership_type":{"type":"string","title":"Key Ownership Type"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","name","prefix","scopes","expires_at","last_used_at","revoked_at","user_id","key_ownership_type","created_at"],"title":"MeApiKeyResponse"},"MeAssetResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"asset_type":{"type":"string","title":"Asset Type"},"file_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Name"},"mime_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mime Type"},"size_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Size Bytes"},"status":{"type":"string","title":"Status"},"is_previewable":{"type":"boolean","title":"Is Previewable","default":false},"is_downloadable":{"type":"boolean","title":"Is Downloadable","default":true},"error_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Code"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","asset_type","status","created_at"],"title":"MeAssetResponse","description":"A generated asset in a conversation."},"MeAudioGenerationCreateRequest":{"properties":{"input":{"type":"string","maxLength":10000,"minLength":1,"title":"Input"},"voice":{"type":"string","maxLength":128,"minLength":1,"title":"Voice"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language"},"response_format":{"type":"string","title":"Response Format","default":"wav"},"provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider"},"provider_options":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Provider Options"}},"type":"object","required":["input","voice"],"title":"MeAudioGenerationCreateRequest"},"MeAudioJobResponse":{"properties":{"id":{"type":"string","title":"Id"},"status":{"type":"string","title":"Status"},"provider":{"type":"string","title":"Provider"},"voice":{"type":"string","title":"Voice"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["id","status","provider","voice","created_at"],"title":"MeAudioJobResponse"},"MeAudioJobStatusResponse":{"properties":{"id":{"type":"string","title":"Id"},"status":{"type":"string","title":"Status"},"provider":{"type":"string","title":"Provider"},"voice":{"type":"string","title":"Voice"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language"},"input_length":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Input Length"},"response_format":{"type":"string","title":"Response Format","default":"wav"},"output_mime_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Output Mime Type"},"output_size_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Output Size Bytes"},"duration_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Ms"},"error_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Code"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"retry_count":{"type":"integer","title":"Retry Count","default":0},"created_at":{"type":"string","title":"Created At"},"completed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Completed At"},"content_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content Url"}},"type":"object","required":["id","status","provider","voice","created_at"],"title":"MeAudioJobStatusResponse"},"MeAudioProviderInfo":{"properties":{"provider":{"type":"string","title":"Provider"},"provider_family":{"type":"string","title":"Provider Family"},"execution_mode":{"type":"string","title":"Execution Mode"},"capabilities":{"type":"object","title":"Capabilities"}},"type":"object","required":["provider","provider_family","execution_mode","capabilities"],"title":"MeAudioProviderInfo"},"MeAudioVoice":{"properties":{"voice":{"type":"string","title":"Voice"},"dialect":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dialect"},"gender":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gender"},"age_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Age Category"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","required":["voice"],"title":"MeAudioVoice"},"MeCapabilityResponse":{"properties":{"workspace_id":{"type":"string","format":"uuid","title":"Workspace Id"},"role":{"type":"string","title":"Role"},"providers":{"items":{"$ref":"#/components/schemas/MeProviderCapability"},"type":"array","title":"Providers"},"features":{"additionalProperties":{"type":"boolean"},"type":"object","title":"Features"}},"type":"object","required":["workspace_id","role","providers","features"],"title":"MeCapabilityResponse","description":"Workspace capability model — what features are available."},"MeCaptureStatusResponse":{"properties":{"capture_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Capture Id"},"status":{"type":"string","title":"Status"},"detail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Detail"},"novnc_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Novnc Url"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"completed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Completed At"}},"type":"object","required":["status"],"title":"MeCaptureStatusResponse","description":"Session capture status for browser-backed providers (e.g., Google Savio)."},"MeConnectionActionResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"provider":{"type":"string","title":"Provider"},"name":{"type":"string","title":"Name"},"status":{"type":"string","title":"Status"},"provider_state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider State"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","required":["id","provider","name","status"],"title":"MeConnectionActionResponse"},"MeConnectionCreateRequest":{"properties":{"provider":{"type":"string","title":"Provider"},"label":{"type":"string","title":"Label"}},"type":"object","required":["provider","label"],"title":"MeConnectionCreateRequest"},"MeConnectionDetailResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"provider":{"type":"string","title":"Provider"},"name":{"type":"string","title":"Name"},"status":{"type":"string","title":"Status"},"health":{"type":"string","title":"Health","description":"healthy | unhealthy | rate_limited | cooldown | unknown — NEVER null. healthy: session usable. unhealthy: session NOT usable. rate_limited: valid but temporarily throttled (429). cooldown: valid but breaker open (transient failures). unknown: health could not be determined."},"capabilities":{"items":{"type":"string"},"type":"array","title":"Capabilities"},"upstream_identity_masked":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Upstream Identity Masked"},"needs_attention":{"type":"boolean","title":"Needs Attention"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"provider_state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider State"},"last_verified":{"type":"string","format":"date-time","title":"Last Verified"},"can_manage":{"type":"boolean","title":"Can Manage","default":false},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"}},"type":"object","required":["id","provider","name","status","health","capabilities","needs_attention","created_at","last_verified"],"title":"MeConnectionDetailResponse"},"MeConnectionResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"provider":{"type":"string","title":"Provider"},"name":{"type":"string","title":"Name"},"status":{"type":"string","title":"Status"},"health":{"type":"string","title":"Health","description":"healthy | unhealthy | rate_limited | cooldown | unknown — NEVER null. healthy: session usable. unhealthy: session NOT usable. rate_limited: valid but temporarily throttled (429). cooldown: valid but breaker open (transient failures). unknown: health could not be determined."},"capabilities":{"items":{"type":"string"},"type":"array","title":"Capabilities"},"upstream_identity_masked":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Upstream Identity Masked"},"needs_attention":{"type":"boolean","title":"Needs Attention"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","provider","name","status","health","capabilities","needs_attention","created_at"],"title":"MeConnectionResponse"},"MeConversationMessageResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"role":{"type":"string","title":"Role"},"content_type":{"type":"string","title":"Content Type"},"text_content":{"type":"string","title":"Text Content"},"sequence_number":{"type":"integer","title":"Sequence Number"},"status":{"type":"string","title":"Status"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","role","content_type","text_content","sequence_number","status","created_at"],"title":"MeConversationMessageResponse","description":"A single message in a conversation."},"MeConversationResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"title":{"type":"string","title":"Title"},"status":{"type":"string","title":"Status"},"provider":{"type":"string","title":"Provider"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"destination_type":{"type":"string","title":"Destination Type"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"last_activity_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Activity At"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Archived At"}},"type":"object","required":["id","title","status","provider","destination_type","created_at"],"title":"MeConversationResponse","description":"A conversation in the user's library."},"MeLoginRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","title":"Password"}},"type":"object","required":["email","password"],"title":"MeLoginRequest"},"MeMemberResponse":{"properties":{"user_id":{"type":"string","format":"uuid","title":"User Id"},"email":{"type":"string","title":"Email"},"role":{"type":"string","title":"Role"},"joined_at":{"type":"string","format":"date-time","title":"Joined At"}},"type":"object","required":["user_id","email","role","joined_at"],"title":"MeMemberResponse","description":"A workspace member's public profile."},"MeMembershipResponse":{"properties":{"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"tenant_name":{"type":"string","title":"Tenant Name"},"role":{"type":"string","title":"Role"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["tenant_id","tenant_name","role","created_at"],"title":"MeMembershipResponse"},"MeOnboardingResponse":{"properties":{"workspace_id":{"type":"string","format":"uuid","title":"Workspace Id"},"workspace_name":{"type":"string","title":"Workspace Name"},"role":{"type":"string","title":"Role"},"steps":{"items":{"$ref":"#/components/schemas/MeOnboardingStep"},"type":"array","title":"Steps"},"completed_steps":{"type":"integer","title":"Completed Steps"},"total_steps":{"type":"integer","title":"Total Steps"},"next_action":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Action"}},"type":"object","required":["workspace_id","workspace_name","role","steps","completed_steps","total_steps"],"title":"MeOnboardingResponse"},"MeOnboardingStep":{"properties":{"step":{"type":"string","title":"Step"},"title":{"type":"string","title":"Title"},"completed":{"type":"boolean","title":"Completed"},"available":{"type":"boolean","title":"Available"}},"type":"object","required":["step","title","completed","available"],"title":"MeOnboardingStep"},"MeProjectDetailResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"slug":{"type":"string","title":"Slug"},"status":{"type":"string","title":"Status"},"is_default":{"type":"boolean","title":"Is Default"},"instructions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Instructions"},"effective_memory_policy":{"type":"string","title":"Effective Memory Policy"},"memory_policy_status":{"type":"string","title":"Memory Policy Status"},"sources":{"items":{"$ref":"#/components/schemas/MeProjectSourceResponse"},"type":"array","title":"Sources"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","name","slug","status","is_default","effective_memory_policy","memory_policy_status","sources","updated_at"],"title":"MeProjectDetailResponse","description":"Project detail with sources."},"MeProjectResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"slug":{"type":"string","title":"Slug"},"status":{"type":"string","title":"Status"},"is_default":{"type":"boolean","title":"Is Default"},"instructions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Instructions"},"effective_memory_policy":{"type":"string","title":"Effective Memory Policy"},"conversation_count":{"type":"integer","title":"Conversation Count","default":0},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","name","slug","status","is_default","effective_memory_policy","updated_at"],"title":"MeProjectResponse","description":"A project available as a chat destination."},"MeProjectSourceResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"source_type":{"type":"string","title":"Source Type"},"title":{"type":"string","title":"Title"},"status":{"type":"string","title":"Status"},"mime_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mime Type"},"size_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Size Bytes"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","source_type","title","status","created_at"],"title":"MeProjectSourceResponse","description":"A source/file attached to a project."},"MeProviderCapability":{"properties":{"provider":{"type":"string","title":"Provider"},"label":{"type":"string","title":"Label"},"connection_id":{"type":"string","format":"uuid","title":"Connection Id"},"connection_name":{"type":"string","title":"Connection Name"},"capabilities":{"items":{"type":"string"},"type":"array","title":"Capabilities"}},"type":"object","required":["provider","label","connection_id","connection_name","capabilities"],"title":"MeProviderCapability","description":"A provider's capability projection for the user app."},"MeResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"is_platform_owner":{"type":"boolean","title":"Is Platform Owner"}},"type":"object","required":["id","email","is_platform_owner"],"title":"MeResponse"},"MeSessionUploadRequest":{"properties":{"session":{"type":"object","title":"Session"}},"type":"object","required":["session"],"title":"MeSessionUploadRequest","description":"Upload session data for a ChatGPT connection.\n\nThe session is a JSON object captured from the ChatGPT browser session\n(access_token, etc.). It is encrypted server-side and never returned."},"MeTranscriptionResponse":{"properties":{"text":{"type":"string","title":"Text"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language"},"duration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Duration"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"job_id":{"type":"string","title":"Job Id"}},"type":"object","required":["text","job_id"],"title":"MeTranscriptionResponse"},"MeUacActionDetailResponse":{"properties":{"slug":{"type":"string","title":"Slug"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"risk_class":{"type":"string","title":"Risk Class"},"platform_name":{"type":"string","title":"Platform Name"},"status":{"type":"string","title":"Status"},"has_form":{"type":"boolean","title":"Has Form"},"version":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Version"},"input_schema":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Input Schema"},"connection_required":{"type":"boolean","title":"Connection Required","default":false},"available_connections":{"items":{"type":"object"},"type":"array","title":"Available Connections","default":[]}},"type":"object","required":["slug","name","risk_class","platform_name","status","has_form"],"title":"MeUacActionDetailResponse"},"MeUacActionResponse":{"properties":{"slug":{"type":"string","title":"Slug"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"risk_class":{"type":"string","title":"Risk Class"},"platform_name":{"type":"string","title":"Platform Name"},"status":{"type":"string","title":"Status"},"has_form":{"type":"boolean","title":"Has Form"},"version":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Version"}},"type":"object","required":["slug","name","risk_class","platform_name","status","has_form"],"title":"MeUacActionResponse"},"MeUacAssetResponse":{"properties":{"asset_id":{"type":"string","title":"Asset Id"},"filename":{"type":"string","title":"Filename"},"content_type":{"type":"string","title":"Content Type"},"size_bytes":{"type":"integer","title":"Size Bytes"},"sha256":{"type":"string","title":"Sha256"},"status":{"type":"string","title":"Status"},"expires_at":{"type":"string","title":"Expires At"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["asset_id","filename","content_type","size_bytes","sha256","status","expires_at"],"title":"MeUacAssetResponse"},"MeUacConnectionResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"platform_id":{"type":"string","format":"uuid","title":"Platform Id"},"platform_name":{"type":"string","title":"Platform Name"},"label":{"type":"string","title":"Label"},"status":{"type":"string","title":"Status"},"user_facing_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Facing Status"},"needs_attention":{"type":"boolean","title":"Needs Attention"},"required_human_action":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Required Human Action"},"last_verified_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Verified At"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","platform_id","platform_name","label","status","needs_attention","created_at"],"title":"MeUacConnectionResponse"},"MeUacCreateRunRequest":{"properties":{"input":{"type":"object","title":"Input","default":{}},"connection_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Connection Id"},"idempotency_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency Key"}},"type":"object","title":"MeUacCreateRunRequest"},"MeUacRunResponse":{"properties":{"id":{"type":"string","title":"Id"},"status":{"type":"string","title":"Status"},"verdict":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Verdict"},"output":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Output"},"error_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Code"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"idempotency_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency Key"},"correlation_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Correlation Id"},"duration_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Duration Ms"},"started_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Started At"},"finished_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Finished At"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["id","status"],"title":"MeUacRunResponse"},"MeUsageDetail":{"properties":{"id":{"type":"integer","title":"Id"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"tokens_in":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tokens In"},"tokens_out":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tokens Out"},"duration_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Ms"},"status":{"type":"string","title":"Status"},"error_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Code"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["id","model","tokens_in","tokens_out","duration_ms","status","error_code","created_at"],"title":"MeUsageDetail"},"MeUsageSummary":{"properties":{"period":{"type":"string","title":"Period"},"total_requests":{"type":"integer","title":"Total Requests"},"successful":{"type":"integer","title":"Successful"},"errors":{"type":"integer","title":"Errors"},"rate_limited":{"type":"integer","title":"Rate Limited"},"total_tokens_in":{"type":"integer","title":"Total Tokens In"},"total_tokens_out":{"type":"integer","title":"Total Tokens Out"},"total_duration_ms":{"type":"integer","title":"Total Duration Ms"},"by_model":{"items":{"type":"object"},"type":"array","title":"By Model"},"by_day":{"items":{"type":"object"},"type":"array","title":"By Day"}},"type":"object","required":["period","total_requests","successful","errors","rate_limited","total_tokens_in","total_tokens_out","total_duration_ms","by_model","by_day"],"title":"MeUsageSummary"},"MeUserResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"is_platform_owner":{"type":"boolean","title":"Is Platform Owner"},"status":{"type":"string","title":"Status"}},"type":"object","required":["id","email","is_platform_owner","status"],"title":"MeUserResponse"},"MeWorkspaceResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"slug":{"type":"string","title":"Slug"},"role":{"type":"string","title":"Role"},"member_count":{"type":"integer","title":"Member Count"}},"type":"object","required":["id","name","slug","role","member_count"],"title":"MeWorkspaceResponse"},"MeWorkspaceSummaryResponse":{"properties":{"workspace":{"$ref":"#/components/schemas/MeWorkspaceResponse"},"connection_count":{"type":"integer","title":"Connection Count"},"api_key_count":{"type":"integer","title":"Api Key Count"},"conversation_count":{"type":"integer","title":"Conversation Count"}},"type":"object","required":["workspace","connection_count","api_key_count","conversation_count"],"title":"MeWorkspaceSummaryResponse"},"PlanCreate":{"properties":{"name":{"type":"string","maxLength":64,"minLength":1,"title":"Name"},"limits":{"type":"object","title":"Limits","default":{}},"features":{"type":"object","title":"Features","default":{}}},"type":"object","required":["name"],"title":"PlanCreate"},"PlanResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"limits":{"type":"object","title":"Limits"},"features":{"type":"object","title":"Features"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","name","limits","features","created_at"],"title":"PlanResponse"},"PlanUpdate":{"properties":{"limits":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Limits"},"features":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Features"}},"type":"object","title":"PlanUpdate"},"PoolCreate":{"properties":{"name":{"type":"string","maxLength":64,"minLength":1,"title":"Name"},"provider":{"type":"string","maxLength":32,"title":"Provider","default":"chatgpt"},"strategy":{"type":"string","title":"Strategy","default":"weighted_least_busy"},"is_default":{"type":"boolean","title":"Is Default","default":false}},"type":"object","required":["name"],"title":"PoolCreate"},"PoolMemberAdd":{"properties":{"account_id":{"type":"string","format":"uuid","title":"Account Id"},"weight":{"type":"integer","exclusiveMinimum":0.0,"title":"Weight","default":1},"priority":{"type":"integer","title":"Priority","default":100},"max_concurrent":{"anyOf":[{"type":"integer","exclusiveMinimum":0.0},{"type":"null"}],"title":"Max Concurrent"}},"type":"object","required":["account_id"],"title":"PoolMemberAdd"},"PoolMemberResponse":{"properties":{"pool_id":{"type":"string","format":"uuid","title":"Pool Id"},"account_id":{"type":"string","format":"uuid","title":"Account Id"},"weight":{"type":"integer","title":"Weight"},"priority":{"type":"integer","title":"Priority"},"max_concurrent":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Concurrent"}},"type":"object","required":["pool_id","account_id","weight","priority","max_concurrent"],"title":"PoolMemberResponse"},"PoolResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"provider":{"type":"string","title":"Provider"},"name":{"type":"string","title":"Name"},"strategy":{"type":"string","title":"Strategy"},"is_default":{"type":"boolean","title":"Is Default"},"status":{"type":"string","title":"Status"}},"type":"object","required":["id","tenant_id","provider","name","strategy","is_default","status"],"title":"PoolResponse"},"PoolUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":64,"minLength":1},{"type":"null"}],"title":"Name"},"strategy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Strategy"},"is_default":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Default"}},"type":"object","title":"PoolUpdate"},"PrepareTargetRequest":{"properties":{"target_url":{"type":"string","maxLength":2048,"minLength":1,"title":"Target Url"}},"type":"object","required":["target_url"],"title":"PrepareTargetRequest"},"PrepareTargetResponse":{"properties":{"platform_id":{"type":"string","title":"Platform Id"},"platform_name":{"type":"string","title":"Platform Name"},"origin":{"type":"string","title":"Origin"},"hostname":{"type":"string","title":"Hostname"},"is_new_platform":{"type":"boolean","title":"Is New Platform"},"existing_connection_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Existing Connection Id"},"connection_status":{"type":"string","title":"Connection Status","default":"not_connected"}},"type":"object","required":["platform_id","platform_name","origin","hostname","is_new_platform"],"title":"PrepareTargetResponse"},"ProjectCreate":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"slug":{"type":"string","maxLength":64,"minLength":1,"pattern":"^[a-z0-9][a-z0-9-]*$","title":"Slug"}},"type":"object","required":["name","slug"],"title":"ProjectCreate"},"ProjectCreateRequest":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name","description":"Project name"},"instructions":{"anyOf":[{"type":"string","maxLength":8000},{"type":"null"}],"title":"Instructions","description":"Optional project instructions"},"memory_policy":{"type":"string","title":"Memory Policy","description":"Memory isolation: provider_default | account_connected | project_only","default":"provider_default"},"upstream_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Upstream Account Id","description":"Specific connected account to create the project on. If omitted, the first active ChatGPT account is used."}},"type":"object","required":["name"],"title":"ProjectCreateRequest","description":"Request body for creating a new ChatGPT project."},"ProjectCreateResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"slug":{"type":"string","title":"Slug"},"status":{"type":"string","title":"Status"},"effective_memory_policy":{"type":"string","title":"Effective Memory Policy"},"memory_policy_status":{"type":"string","title":"Memory Policy Status"},"upstream_account_id":{"type":"string","title":"Upstream Account Id"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["id","name","slug","status","effective_memory_policy","memory_policy_status","upstream_account_id","created_at"],"title":"ProjectCreateResponse","description":"Response for project creation."},"ProjectDetailResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"slug":{"type":"string","title":"Slug"},"status":{"type":"string","title":"Status","description":"active | unavailable | stale | deleted_upstream"},"is_default":{"type":"boolean","title":"Is Default"},"instructions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Instructions"},"effective_memory_policy":{"type":"string","title":"Effective Memory Policy"},"memory_policy_status":{"type":"string","title":"Memory Policy Status"},"upstream_account_id":{"type":"string","title":"Upstream Account Id"},"conversation_count":{"type":"integer","title":"Conversation Count","default":0},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"},"sources":{"items":{"type":"object"},"type":"array","title":"Sources"}},"type":"object","required":["id","name","slug","status","is_default","effective_memory_policy","memory_policy_status","upstream_account_id","created_at","updated_at"],"title":"ProjectDetailResponse","description":"Detailed project response with sources."},"ProjectInstructionsUpdateRequest":{"properties":{"instructions":{"type":"string","maxLength":10000,"title":"Instructions","description":"New instructions (max 10000 chars)"}},"type":"object","required":["instructions"],"title":"ProjectInstructionsUpdateRequest","description":"Update project instructions."},"ProjectRenameRequest":{"properties":{"name":{"type":"string","maxLength":50,"minLength":1,"title":"Name","description":"New project name (max 50 chars)"}},"type":"object","required":["name"],"title":"ProjectRenameRequest","description":"Rename a project."},"ProjectSourceResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"upstream_project_id":{"type":"string","format":"uuid","title":"Upstream Project Id"},"source_type":{"type":"string","title":"Source Type"},"title":{"type":"string","title":"Title"},"original_file_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original File Name"},"safe_file_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Safe File Name"},"mime_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mime Type"},"detected_mime_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Detected Mime Type"},"size_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Size Bytes"},"checksum":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Checksum"},"status":{"type":"string","title":"Status"},"sync_status":{"type":"string","title":"Sync Status"},"provider_file_id":{"type":"string","title":"Provider File Id"},"provider_source_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider Source Id"},"error_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Code"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"ready_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ready At"},"last_synced_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Synced At"}},"type":"object","required":["id","upstream_project_id","source_type","title","status","sync_status","provider_file_id","created_at","updated_at"],"title":"ProjectSourceResponse","description":"Response schema for a project source."},"ProjectUpdateRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"instructions":{"anyOf":[{"type":"string","maxLength":8000},{"type":"null"}],"title":"Instructions"}},"type":"object","title":"ProjectUpdateRequest","description":"Request body for updating a ChatGPT project."},"ProvisionRequest":{"properties":{"worker_slot":{"type":"integer","maximum":1.0,"minimum":0.0,"title":"Worker Slot"}},"type":"object","required":["worker_slot"],"title":"ProvisionRequest"},"ProvisionResponse":{"properties":{"provisioned":{"type":"boolean","title":"Provisioned"},"worker_slot":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Worker Slot"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"fingerprint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fingerprint"},"checks":{"items":{"type":"object"},"type":"array","title":"Checks"}},"type":"object","required":["provisioned"],"title":"ProvisionResponse"},"RefreshRequest":{"properties":{"refresh_token":{"type":"string","title":"Refresh Token"}},"type":"object","required":["refresh_token"],"title":"RefreshRequest"},"RegisterRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","maxLength":128,"minLength":8,"title":"Password"},"tenant_name":{"type":"string","maxLength":255,"minLength":2,"title":"Tenant Name"},"tenant_slug":{"type":"string","maxLength":64,"minLength":2,"pattern":"^[a-z0-9][a-z0-9-]*[a-z0-9]$","title":"Tenant Slug"},"plan_name":{"type":"string","maxLength":64,"title":"Plan Name","default":"internal_standard"}},"type":"object","required":["email","password","tenant_name","tenant_slug"],"title":"RegisterRequest","description":"Self-service tenant registration (docs/01-architecture.md §5).\nCreates: user + tenant + membership + api_key in one transaction."},"RegisterResponse":{"properties":{"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"api_key":{"type":"string","title":"Api Key"},"message":{"type":"string","title":"Message"}},"type":"object","required":["tenant_id","api_key","message"],"title":"RegisterResponse"},"ReteachRequest":{"properties":{"action_id":{"type":"string","title":"Action Id"}},"type":"object","required":["action_id"],"title":"ReteachRequest","description":"Start a reteach journey from an existing Action (M7-W1)."},"RouteProfileCreate":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"slug":{"type":"string","maxLength":64,"minLength":1,"pattern":"^[a-z0-9][a-z0-9-]*$","title":"Slug"},"config":{"type":"object","title":"Config","default":{}}},"type":"object","required":["name","slug"],"title":"RouteProfileCreate"},"RouteProfileResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"name":{"type":"string","title":"Name"},"slug":{"type":"string","title":"Slug"},"config":{"type":"object","title":"Config"},"status":{"type":"string","title":"Status"}},"type":"object","required":["id","tenant_id","name","slug","config","status"],"title":"RouteProfileResponse"},"RouteProfileUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"config":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Config"}},"type":"object","title":"RouteProfileUpdate"},"RunRequest":{"properties":{"inputs":{"type":"object","title":"Inputs","default":{}}},"type":"object","title":"RunRequest"},"SecondTeachingResponse":{"properties":{"recording_id":{"type":"string","title":"Recording Id"},"vnc_url":{"type":"string","title":"Vnc Url"},"status":{"type":"string","title":"Status"},"demonstration_number":{"type":"integer","title":"Demonstration Number"},"message":{"type":"string","title":"Message"}},"type":"object","required":["recording_id","vnc_url","status","demonstration_number","message"],"title":"SecondTeachingResponse"},"SessionCaptureResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"account_id":{"type":"string","format":"uuid","title":"Account Id"},"status":{"type":"string","title":"Status"},"detail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Detail"},"host_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Host Id"},"created_at":{"type":"string","title":"Created At"},"completed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Completed At"},"verification_results":{"type":"object","title":"Verification Results"},"novnc_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Novnc Url"}},"type":"object","required":["id","account_id","status","created_at"],"title":"SessionCaptureResponse"},"SettingResponse":{"properties":{"key":{"type":"string","title":"Key"},"value":{"type":"object","title":"Value"},"source":{"type":"string","title":"Source"},"changed_by":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Changed By"},"changed_at":{"type":"string","format":"date-time","title":"Changed At"}},"type":"object","required":["key","value","source","changed_by","changed_at"],"title":"SettingResponse"},"SettingUpdate":{"properties":{"value":{"type":"object","title":"Value"}},"type":"object","required":["value"],"title":"SettingUpdate"},"StartCaptureRequest":{"properties":{"target_url":{"type":"string","title":"Target Url"}},"type":"object","required":["target_url"],"title":"StartCaptureRequest","description":"Request body for starting a demonstration browser session."},"StartCaptureResponse":{"properties":{"recording_id":{"type":"string","title":"Recording Id"},"status":{"type":"string","title":"Status"},"vnc_url":{"type":"string","title":"Vnc Url"},"target_url":{"type":"string","title":"Target Url"},"step":{"type":"string","title":"Step"}},"type":"object","required":["recording_id","status","vnc_url","target_url","step"],"title":"StartCaptureResponse","description":"Response for start-capture — includes noVNC URL for operator."},"StartLoginRequest":{"properties":{"target_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Url"}},"type":"object","title":"StartLoginRequest","description":"Open secure browser for owner to log in normally."},"StartLoginResponse":{"properties":{"connection_id":{"type":"string","title":"Connection Id"},"vnc_url":{"type":"string","title":"Vnc Url"},"status":{"type":"string","title":"Status","default":"waiting_for_you"},"message":{"type":"string","title":"Message","default":"Secure browser opened. Please log in normally."}},"type":"object","required":["connection_id","vnc_url"],"title":"StartLoginResponse"},"StartSecondTeachingRequest":{"properties":{"target_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Url"}},"type":"object","title":"StartSecondTeachingRequest","description":"Start a second demonstration for differential learning (M7-W1)."},"StartTeachingRequest":{"properties":{"target_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Url"}},"type":"object","title":"StartTeachingRequest"},"StartTeachingResponse":{"properties":{"recording_id":{"type":"string","title":"Recording Id"},"vnc_url":{"type":"string","title":"Vnc Url"},"status":{"type":"string","title":"Status","default":"recording"},"message":{"type":"string","title":"Message","default":"Teaching started. Demonstrate the action, then click Stop."}},"type":"object","required":["recording_id","vnc_url"],"title":"StartTeachingResponse"},"StopCaptureResponse":{"properties":{"recording_id":{"type":"string","title":"Recording Id"},"status":{"type":"string","title":"Status"},"event_count":{"type":"integer","title":"Event Count"},"network_count":{"type":"integer","title":"Network Count"},"screenshot_count":{"type":"integer","title":"Screenshot Count"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["recording_id","status","event_count","network_count","screenshot_count"],"title":"StopCaptureResponse","description":"Response for stop-capture — includes capture stats."},"StopTeachingResponse":{"properties":{"recording_id":{"type":"string","title":"Recording Id"},"status":{"type":"string","title":"Status"},"event_count":{"type":"integer","title":"Event Count","default":0},"network_count":{"type":"integer","title":"Network Count","default":0},"screenshot_count":{"type":"integer","title":"Screenshot Count","default":0},"analysis":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Analysis"},"message":{"type":"string","title":"Message","default":""}},"type":"object","required":["recording_id","status"],"title":"StopTeachingResponse"},"SupportRunEvidence":{"properties":{"run_id":{"type":"string","title":"Run Id"},"tenant_id":{"type":"string","title":"Tenant Id"},"action_name":{"type":"string","title":"Action Name"},"status":{"type":"string","title":"Status"},"verdict":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Verdict"},"events":{"items":{"type":"object"},"type":"array","title":"Events","default":[]},"error_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Code"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"duration_ms":{"type":"number","title":"Duration Ms","default":0.0}},"type":"object","required":["run_id","tenant_id","action_name","status"],"title":"SupportRunEvidence","description":"Run evidence for support console."},"SyncProjectsRequest":{"properties":{"projects":{"anyOf":[{"items":{"type":"object"},"type":"array"},{"type":"null"}],"title":"Projects"}},"type":"object","title":"SyncProjectsRequest"},"TTSGenerateRequest":{"properties":{"text":{"type":"string","maxLength":1000,"minLength":1,"title":"Text"},"dialect":{"type":"string","title":"Dialect","default":"egyptian"},"age_category":{"type":"string","title":"Age Category","default":"adult"},"gender":{"type":"string","title":"Gender","default":"male"},"voice":{"type":"string","maxLength":50,"minLength":1,"title":"Voice"},"temperature":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Temperature"},"emotion":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Emotion"},"speed":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Speed"},"pitch_depth":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pitch Depth"},"register":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Register"},"dramatic_impact":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dramatic Impact"},"purpose":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Purpose"},"worker_slot":{"type":"integer","maximum":1.0,"minimum":0.0,"title":"Worker Slot","default":0}},"type":"object","required":["text","voice"],"title":"TTSGenerateRequest"},"TTSGenerateResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"audio_base64":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Audio Base64"},"audio_size_bytes":{"type":"integer","title":"Audio Size Bytes","default":0},"mime_type":{"type":"string","title":"Mime Type","default":"audio/wav"},"duration_ms":{"type":"integer","title":"Duration Ms","default":0},"elapsed_seconds":{"type":"number","title":"Elapsed Seconds","default":0.0},"error_code":{"type":"string","title":"Error Code","default":""},"error_message":{"type":"string","title":"Error Message","default":""},"metadata":{"type":"object","title":"Metadata"}},"type":"object","required":["success"],"title":"TTSGenerateResponse"},"TTSVoiceResponse":{"properties":{"voice":{"type":"string","title":"Voice"},"dialect":{"type":"string","title":"Dialect"},"gender":{"type":"string","title":"Gender"},"age_category":{"type":"string","title":"Age Category"},"description":{"type":"string","title":"Description","default":""}},"type":"object","required":["voice","dialect","gender","age_category"],"title":"TTSVoiceResponse"},"TeachingStatusResponse":{"properties":{"recording_id":{"type":"string","title":"Recording Id"},"status":{"type":"string","title":"Status"},"step":{"type":"string","title":"Step","default":""},"vnc_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vnc Url"},"elapsed_seconds":{"type":"number","title":"Elapsed Seconds","default":0},"event_count":{"type":"integer","title":"Event Count","default":0},"network_count":{"type":"integer","title":"Network Count","default":0},"screenshot_count":{"type":"integer","title":"Screenshot Count","default":0},"message":{"type":"string","title":"Message","default":""}},"type":"object","required":["recording_id","status"],"title":"TeachingStatusResponse"},"TenantCreate":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"slug":{"type":"string","maxLength":64,"minLength":1,"pattern":"^[a-z0-9][a-z0-9-]*$","title":"Slug"},"plan_name":{"type":"string","title":"Plan Name","default":"internal_standard"}},"type":"object","required":["name","slug"],"title":"TenantCreate"},"TenantResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"slug":{"type":"string","title":"Slug"},"kind":{"type":"string","title":"Kind"},"plan_id":{"type":"string","format":"uuid","title":"Plan Id"},"status":{"type":"string","title":"Status"}},"type":"object","required":["id","name","slug","kind","plan_id","status"],"title":"TenantResponse"},"TenantUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"plan_name":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Plan Name"},"status":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Status"}},"type":"object","title":"TenantUpdate"},"TestAndVerifyRequest":{"properties":{"inputs":{"type":"object","title":"Inputs","default":{}}},"type":"object","title":"TestAndVerifyRequest","description":"Test with NEW values AND verify real outcome in one user action."},"TestAndVerifyResponse":{"properties":{"run_id":{"type":"string","title":"Run Id"},"status":{"type":"string","title":"Status"},"verdict":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Verdict"},"output":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Output"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"verification_passed":{"type":"boolean","title":"Verification Passed","default":false},"verification_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Verification Mode"},"verification_downgrade_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Verification Downgrade Reason"},"verification_report":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Verification Report"},"message":{"type":"string","title":"Message","default":""}},"type":"object","required":["run_id","status"],"title":"TestAndVerifyResponse","description":"Combined test + verify result — the 'Test your Action' experience."},"TestRequest":{"properties":{"inputs":{"type":"object","title":"Inputs","default":{}}},"type":"object","title":"TestRequest"},"TestResponse":{"properties":{"run_id":{"type":"string","title":"Run Id"},"status":{"type":"string","title":"Status"},"verdict":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Verdict"},"output":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Output"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"message":{"type":"string","title":"Message","default":""}},"type":"object","required":["run_id","status"],"title":"TestResponse"},"TestRunRequest":{"properties":{"inputs":{"type":"object","title":"Inputs","default":{}},"connection_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Connection Id"},"version_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Version Id"}},"type":"object","title":"TestRunRequest"},"TestRunResponse":{"properties":{"run_id":{"type":"string","title":"Run Id"},"status":{"type":"string","title":"Status"},"verdict":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Verdict"},"output":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Output"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["run_id","status"],"title":"TestRunResponse"},"TextSourceCreate":{"properties":{"title":{"type":"string","maxLength":255,"minLength":1,"title":"Title","description":"Source title (becomes filename)"},"content":{"type":"string","maxLength":500000,"minLength":1,"title":"Content","description":"Text content"}},"type":"object","required":["title","content"],"title":"TextSourceCreate","description":"Create a text source by uploading content as a .txt file."},"TokenResponse":{"properties":{"access_token":{"type":"string","title":"Access Token"},"refresh_token":{"type":"string","title":"Refresh Token"},"token_type":{"type":"string","title":"Token Type","default":"bearer"},"expires_in":{"type":"integer","title":"Expires In"}},"type":"object","required":["access_token","refresh_token","expires_in"],"title":"TokenResponse"},"TranscriptionResponse":{"properties":{"text":{"type":"string","title":"Text"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language"},"duration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Duration"},"model":{"type":"string","title":"Model","default":"ghostmind-transcribe"},"job_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Id"}},"type":"object","required":["text"],"title":"TranscriptionResponse","description":"OpenAI-compatible transcription response.\n\n``text`` is the transcribed text (with punctuation).\n``language`` is the detected language code, or ``None`` when the\nprovider does not return a detected language (ChatGPT internal\nendpoint does NOT return language).\n``duration`` is the audio duration in seconds, or ``None`` when\nunknown.\n``model`` is the logical model name used (for SDK compatibility).\n``job_id`` is the internal GhostMind job ID (for audit/support)."},"UacActionAssetResponse":{"properties":{"asset_id":{"type":"string","title":"Asset Id"},"filename":{"type":"string","title":"Filename"},"content_type":{"type":"string","title":"Content Type"},"size_bytes":{"type":"integer","title":"Size Bytes"},"sha256":{"type":"string","title":"Sha256"},"status":{"type":"string","title":"Status"},"expires_at":{"type":"string","title":"Expires At"}},"type":"object","required":["asset_id","filename","content_type","size_bytes","sha256","status","expires_at"],"title":"UacActionAssetResponse"},"UacActionCreate":{"properties":{"platform_id":{"type":"string","format":"uuid","title":"Platform Id"},"slug":{"type":"string","title":"Slug"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"origin":{"type":"string","title":"Origin","default":"manual"},"risk_class":{"type":"string","title":"Risk Class","default":"safe"}},"type":"object","required":["platform_id","slug","name"],"title":"UacActionCreate"},"UacActionResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"platform_id":{"type":"string","format":"uuid","title":"Platform Id"},"slug":{"type":"string","title":"Slug"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"origin":{"type":"string","title":"Origin"},"risk_class":{"type":"string","title":"Risk Class"},"status":{"type":"string","title":"Status"},"current_published_version_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Current Published Version Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","tenant_id","platform_id","slug","name","origin","risk_class","status","created_at","updated_at"],"title":"UacActionResponse"},"UacActionUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"risk_class":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Risk Class"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},"type":"object","title":"UacActionUpdate"},"UacActionVersionCreate":{"properties":{"capsule":{"type":"object","title":"Capsule"}},"type":"object","title":"UacActionVersionCreate"},"UacActionVersionDeprecateRequest":{"properties":{"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"}},"type":"object","title":"UacActionVersionDeprecateRequest"},"UacActionVersionResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"action_id":{"type":"string","format":"uuid","title":"Action Id"},"version":{"type":"integer","title":"Version"},"state":{"type":"string","title":"State"},"capsule":{"type":"object","title":"Capsule"},"content_hash":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content Hash"},"gate_evidence":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Gate Evidence"},"created_by":{"type":"string","format":"uuid","title":"Created By"},"predecessor_version_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Predecessor Version Id"},"published_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Published At"},"published_by":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Published By"},"deprecated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Deprecated At"},"deprecated_by":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Deprecated By"},"deprecation_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Deprecation Reason"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","action_id","version","state","capsule","created_by","created_at","updated_at"],"title":"UacActionVersionResponse"},"UacAuthMaterialCreate":{"properties":{"kind":{"type":"string","maxLength":64,"title":"Kind"},"payload":{"type":"string","title":"Payload","description":"Raw auth material to encrypt"},"redacted_metadata":{"type":"object","title":"Redacted Metadata"}},"type":"object","required":["kind","payload"],"title":"UacAuthMaterialCreate"},"UacAuthMaterialResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"connection_id":{"type":"string","format":"uuid","title":"Connection Id"},"kind":{"type":"string","title":"Kind"},"redacted_metadata":{"type":"object","title":"Redacted Metadata"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","connection_id","kind","created_at","updated_at"],"title":"UacAuthMaterialResponse"},"UacConnectionCreate":{"properties":{"platform_id":{"type":"string","format":"uuid","title":"Platform Id"},"label":{"type":"string","maxLength":255,"minLength":1,"title":"Label"}},"type":"object","required":["platform_id","label"],"title":"UacConnectionCreate"},"UacConnectionResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"platform_id":{"type":"string","format":"uuid","title":"Platform Id"},"label":{"type":"string","title":"Label"},"status":{"type":"string","title":"Status"},"health":{"type":"object","title":"Health"},"last_verified_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Verified At"},"required_human_action":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Required Human Action"},"revoked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Revoked At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","tenant_id","platform_id","label","status","created_at","updated_at"],"title":"UacConnectionResponse"},"UacConnectionRevokeRequest":{"properties":{"reason":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Reason"}},"type":"object","title":"UacConnectionRevokeRequest"},"UacConnectionUpdate":{"properties":{"label":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Label"},"status":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Status"}},"type":"object","title":"UacConnectionUpdate"},"UacPlatformCreate":{"properties":{"slug":{"type":"string","maxLength":64,"title":"Slug","default":""},"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"origin":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Origin"},"fingerprint":{"type":"object","title":"Fingerprint"}},"type":"object","required":["name"],"title":"UacPlatformCreate"},"UacPlatformResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"slug":{"type":"string","title":"Slug"},"name":{"type":"string","title":"Name"},"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Origin"},"fingerprint":{"type":"object","title":"Fingerprint"},"status":{"type":"string","title":"Status"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","tenant_id","slug","name","status","created_at","updated_at"],"title":"UacPlatformResponse"},"UacPlatformUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Name"},"origin":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Origin"},"fingerprint":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Fingerprint"},"status":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Status"}},"type":"object","title":"UacPlatformUpdate"},"UacProvenanceRequest":{"properties":{"recording_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Recording Ids"},"confidence_threshold":{"type":"number","title":"Confidence Threshold","default":0.7}},"type":"object","required":["recording_ids"],"title":"UacProvenanceRequest","description":"Request body for building a provenance graph from recordings."},"UacRecordingArtifactResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"recording_id":{"type":"string","format":"uuid","title":"Recording Id"},"kind":{"type":"string","title":"Kind"},"storage_key":{"type":"string","title":"Storage Key"},"encrypted":{"type":"boolean","title":"Encrypted"},"size_bytes":{"type":"integer","title":"Size Bytes"},"redaction_report":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Redaction Report"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"purged_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Purged At"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","recording_id","kind","storage_key","encrypted","size_bytes","created_at"],"title":"UacRecordingArtifactResponse"},"UacRecordingCreate":{"properties":{"connection_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Connection Id"},"platform_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Platform Id"},"label":{"type":"string","title":"Label","default":"Untitled"},"consent_given":{"type":"boolean","title":"Consent Given","default":false}},"type":"object","title":"UacRecordingCreate"},"UacRecordingFinalizeRequest":{"properties":{"events":{"items":{"type":"object"},"type":"array","title":"Events","default":[]},"network":{"items":{"type":"object"},"type":"array","title":"Network","default":[]},"screenshots":{"items":{"type":"object"},"type":"array","title":"Screenshots","default":[]},"dom_snapshots":{"items":{"type":"object"},"type":"array","title":"Dom Snapshots","default":[]},"rrweb_events":{"items":{"type":"object"},"type":"array","title":"Rrweb Events","default":[]},"a11y_snapshots":{"items":{"type":"object"},"type":"array","title":"A11Y Snapshots","default":[]},"correlation_report":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Correlation Report"}},"type":"object","title":"UacRecordingFinalizeRequest","description":"Request body for finalizing a recording from a capture session."},"UacRecordingResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"connection_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Connection Id"},"platform_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Platform Id"},"label":{"type":"string","title":"Label"},"status":{"type":"string","title":"Status"},"event_count":{"type":"integer","title":"Event Count"},"network_count":{"type":"integer","title":"Network Count"},"screenshot_count":{"type":"integer","title":"Screenshot Count"},"artifact_size_bytes":{"type":"integer","title":"Artifact Size Bytes"},"correlation_report":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Correlation Report"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"consent_given":{"type":"boolean","title":"Consent Given"},"consent_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Consent Message"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"started_by":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Started By"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"stopped_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Stopped At"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","tenant_id","label","status","event_count","network_count","screenshot_count","artifact_size_bytes","consent_given","created_at"],"title":"UacRecordingResponse"},"UpstreamAccountCreate":{"properties":{"label":{"type":"string","maxLength":255,"minLength":1,"title":"Label"},"provider":{"type":"string","maxLength":32,"title":"Provider","default":"chatgpt"},"session":{"type":"object","title":"Session"}},"type":"object","required":["label","session"],"title":"UpstreamAccountCreate"},"UpstreamAccountResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"provider":{"type":"string","title":"Provider"},"label":{"type":"string","title":"Label"},"status":{"type":"string","title":"Status"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","tenant_id","provider","label","status","created_at"],"title":"UpstreamAccountResponse"},"UpstreamAccountUpdate":{"properties":{"label":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Label"},"session":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Session"}},"type":"object","title":"UpstreamAccountUpdate"},"UpstreamProjectCreate":{"properties":{"name":{"type":"string","maxLength":50,"minLength":1,"title":"Name","description":"Project name (max 50 chars)"},"instructions":{"type":"string","maxLength":10000,"title":"Instructions","default":""},"memory_policy":{"type":"string","title":"Memory Policy","description":"Memory isolation: 'provider_default', 'account_connected', or 'project_only'","default":"provider_default"}},"type":"object","required":["name"],"title":"UpstreamProjectCreate","description":"Create a new project on the upstream provider (ChatGPT).\n\nThe ``memory_policy`` field controls memory isolation:\n- ``provider_default``: omit the field — let ChatGPT decide (usually \"global\")\n- ``account_connected``: shared account memory (ChatGPT: \"global\")\n- ``project_only``: isolated project memory (ChatGPT: \"project_v2\")\n\nMemory policy is **immutable** after creation — ChatGPT returns 403\non PATCH attempts.  Choose carefully at creation time."},"UpstreamProjectRegister":{"properties":{"provider_project_id":{"type":"string","maxLength":255,"minLength":1,"title":"Provider Project Id"},"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"slug":{"type":"string","maxLength":64,"minLength":1,"pattern":"^[a-z0-9][a-z0-9-]*$","title":"Slug"},"is_default":{"type":"boolean","title":"Is Default","default":false},"memory_policy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Memory Policy","description":"Memory isolation policy: 'account_connected', 'project_only', or 'provider_default'. Only used when creating new projects via the provider API — ignored for manual registration."}},"type":"object","required":["provider_project_id","name","slug"],"title":"UpstreamProjectRegister"},"UpstreamProjectResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"upstream_account_id":{"type":"string","format":"uuid","title":"Upstream Account Id"},"provider_project_id":{"type":"string","title":"Provider Project Id"},"name":{"type":"string","title":"Name"},"slug":{"type":"string","title":"Slug"},"status":{"type":"string","title":"Status"},"is_default":{"type":"boolean","title":"Is Default"},"instructions":{"type":"string","title":"Instructions","default":""},"instructions_sync_status":{"type":"string","title":"Instructions Sync Status","default":"unknown"},"last_synced_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Synced At"},"requested_memory_policy":{"type":"string","title":"Requested Memory Policy","default":"unknown"},"provider_memory_policy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider Memory Policy"},"effective_memory_policy":{"type":"string","title":"Effective Memory Policy","default":"unknown"},"memory_policy_status":{"type":"string","title":"Memory Policy Status","default":"pending"},"memory_policy_metadata":{"type":"object","title":"Memory Policy Metadata","default":{}},"memory_policy_verified_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Memory Policy Verified At"},"memory_policy_last_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Memory Policy Last Error"}},"type":"object","required":["id","upstream_account_id","provider_project_id","name","slug","status","is_default","last_synced_at"],"title":"UpstreamProjectResponse"},"UpstreamProjectUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"instructions":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}],"title":"Instructions"},"sync_upstream":{"type":"boolean","title":"Sync Upstream","description":"If True, push changes to the upstream ChatGPT Project via PATCH. If False, only update the local DB record.","default":true},"memory_policy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Memory Policy","description":"NOT SUPPORTED — memory policy is immutable after creation. Use the create endpoint with memory_policy instead."}},"type":"object","title":"UpstreamProjectUpdate"},"UsageReport":{"properties":{"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"total_requests":{"type":"integer","title":"Total Requests"},"rows":{"items":{"$ref":"#/components/schemas/UsageReportRow"},"type":"array","title":"Rows"}},"type":"object","required":["tenant_id","total_requests","rows"],"title":"UsageReport"},"UsageReportRow":{"properties":{"api_key_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Api Key Id"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"requests":{"type":"integer","title":"Requests"},"tokens_in":{"type":"integer","title":"Tokens In"},"tokens_out":{"type":"integer","title":"Tokens Out"},"errors":{"type":"integer","title":"Errors"},"rate_limited":{"type":"integer","title":"Rate Limited"}},"type":"object","required":["api_key_id","model","requests","tokens_in","tokens_out","errors","rate_limited"],"title":"UsageReportRow"},"UsageSummaryResponse":{"properties":{"period":{"type":"string","title":"Period"},"scope":{"type":"string","title":"Scope"},"total_requests":{"type":"integer","title":"Total Requests"},"successful":{"type":"integer","title":"Successful"},"errors":{"type":"integer","title":"Errors"},"rate_limited":{"type":"integer","title":"Rate Limited"},"total_tokens_in":{"type":"integer","title":"Total Tokens In"},"total_tokens_out":{"type":"integer","title":"Total Tokens Out"},"total_duration_ms":{"type":"integer","title":"Total Duration Ms"},"by_model":{"items":{"type":"object"},"type":"array","title":"By Model"},"by_day":{"items":{"type":"object"},"type":"array","title":"By Day"}},"type":"object","required":["period","scope","total_requests","successful","errors","rate_limited","total_tokens_in","total_tokens_out","total_duration_ms","by_model","by_day"],"title":"UsageSummaryResponse"},"UserCreate":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","maxLength":128,"minLength":8,"title":"Password"},"is_platform_owner":{"type":"boolean","title":"Is Platform Owner","default":false},"role":{"type":"string","maxLength":32,"title":"Role","default":"member"},"tenant_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Tenant Id"}},"type":"object","required":["email","password"],"title":"UserCreate"},"UserDetailResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"is_platform_owner":{"type":"boolean","title":"Is Platform Owner"},"status":{"type":"string","title":"Status"},"last_login_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Login At"},"failed_login_attempts":{"type":"integer","title":"Failed Login Attempts"},"locked_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Locked Until"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"memberships":{"items":{"type":"object"},"type":"array","title":"Memberships","default":[]}},"type":"object","required":["id","email","is_platform_owner","status","last_login_at","failed_login_attempts","locked_until","created_at"],"title":"UserDetailResponse","description":"User with memberships (for the detail page)."},"UserResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"is_platform_owner":{"type":"boolean","title":"Is Platform Owner"},"status":{"type":"string","title":"Status"},"last_login_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Login At"},"failed_login_attempts":{"type":"integer","title":"Failed Login Attempts"},"locked_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Locked Until"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","email","is_platform_owner","status","last_login_at","failed_login_attempts","locked_until","created_at"],"title":"UserResponse"},"UserUpdate":{"properties":{"is_platform_owner":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Platform Owner"},"status":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Status"}},"type":"object","title":"UserUpdate"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"VerifyRequest":{"properties":{"gate_report":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Gate Report"},"test_inputs":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Test Inputs"}},"type":"object","title":"VerifyRequest","description":"Verify endpoint accepts no caller-supplied gate report (REV-020).\n\nThe server runs the verification battery itself. This body exists\nonly for backward API compatibility — any gate_report field is ignored.\n\nFor real verification (GHOSTMIND_UAC_REAL_VERIFICATION=true), the caller\nmay supply test inputs to use for the replay. If not supplied, default\nvalues are generated from the GAIR input schema."},"VersionInfo":{"properties":{"version":{"type":"string","title":"Version"},"environment":{"type":"string","title":"Environment"},"git_sha":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Git Sha"},"db_migration_head":{"type":"string","title":"Db Migration Head"},"uptime_seconds":{"type":"number","title":"Uptime Seconds"}},"type":"object","required":["version","environment","git_sha","db_migration_head","uptime_seconds"],"title":"VersionInfo"},"ghostmind__control_plane__v1__schemas__ProjectFileResponse":{"properties":{"file_id":{"type":"string","title":"File Id"},"name":{"type":"string","title":"Name"},"size":{"type":"integer","title":"Size"},"mime_type":{"type":"string","title":"Mime Type"},"status":{"type":"string","title":"Status"}},"type":"object","required":["file_id","name","size","mime_type","status"],"title":"ProjectFileResponse"},"ghostmind__control_plane__v1__schemas__ProjectResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"name":{"type":"string","title":"Name"},"slug":{"type":"string","title":"Slug"},"status":{"type":"string","title":"Status"}},"type":"object","required":["id","tenant_id","name","slug","status"],"title":"ProjectResponse"},"ghostmind__control_plane__v1__session_captures__VerifyResponse":{"properties":{"verified":{"type":"boolean","title":"Verified"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"checks":{"items":{"type":"object"},"type":"array","title":"Checks"},"fingerprint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fingerprint"}},"type":"object","required":["verified"],"title":"VerifyResponse"},"ghostmind__control_plane__v1__uac_compile__CompileRequest":{"properties":{"recording_ids":{"items":{"type":"string","format":"uuid"},"type":"array","minItems":1,"title":"Recording Ids"},"action_name":{"type":"string","maxLength":255,"minLength":1,"title":"Action Name","default":"compiled_action"},"platform_origin":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Platform Origin"},"confidence_threshold":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Confidence Threshold","default":0.7}},"type":"object","required":["recording_ids"],"title":"CompileRequest"},"ghostmind__control_plane__v1__uac_compile__CompileResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"gair":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Gair"},"report":{"type":"object","title":"Report"},"secret_scan_findings":{"items":{"type":"string"},"type":"array","title":"Secret Scan Findings"}},"type":"object","required":["success","report"],"title":"CompileResponse"},"ghostmind__control_plane__v1__uac_journey__CompileRequest":{"properties":{"inputs":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Inputs"},"outputs":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Outputs"}},"type":"object","title":"CompileRequest"},"ghostmind__control_plane__v1__uac_journey__CompileResponse":{"properties":{"action_id":{"type":"string","title":"Action Id"},"version_id":{"type":"string","title":"Version Id"},"gair":{"type":"object","title":"Gair"},"report":{"type":"object","title":"Report"},"strategy":{"type":"string","title":"Strategy","default":"protocol"},"strategy_details":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Strategy Details"},"message":{"type":"string","title":"Message","default":""}},"type":"object","required":["action_id","version_id","gair","report"],"title":"CompileResponse"},"ghostmind__control_plane__v1__uac_journey__RunResponse":{"properties":{"run_id":{"type":"string","title":"Run Id"},"status":{"type":"string","title":"Status"},"verdict":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Verdict"},"output":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Output"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"message":{"type":"string","title":"Message","default":""}},"type":"object","required":["run_id","status"],"title":"RunResponse"},"ghostmind__control_plane__v1__uac_journey__VerifyResponse":{"properties":{"version_id":{"type":"string","title":"Version Id"},"passed":{"type":"boolean","title":"Passed"},"report":{"type":"object","title":"Report"},"message":{"type":"string","title":"Message","default":""}},"type":"object","required":["version_id","passed","report"],"title":"VerifyResponse"},"ghostmind__data_plane__v1__projects__ProjectFileResponse":{"properties":{"id":{"type":"string","title":"Id"},"source_type":{"type":"string","title":"Source Type","description":"file | text"},"title":{"type":"string","title":"Title"},"status":{"type":"string","title":"Status","description":"uploading | processing | ready | failed"},"mime_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mime Type"},"size_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Size Bytes"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["id","source_type","title","status","created_at"],"title":"ProjectFileResponse","description":"Response for a project file."},"ghostmind__data_plane__v1__projects__ProjectResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"slug":{"type":"string","title":"Slug"},"status":{"type":"string","title":"Status","description":"active | unavailable | stale | deleted_upstream"},"is_default":{"type":"boolean","title":"Is Default"},"instructions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Instructions"},"effective_memory_policy":{"type":"string","title":"Effective Memory Policy"},"memory_policy_status":{"type":"string","title":"Memory Policy Status"},"upstream_account_id":{"type":"string","title":"Upstream Account Id"},"conversation_count":{"type":"integer","title":"Conversation Count","default":0},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"}},"type":"object","required":["id","name","slug","status","is_default","effective_memory_policy","memory_policy_status","upstream_account_id","created_at","updated_at"],"title":"ProjectResponse","description":"Public API response for a project."},"ghostmind__data_plane__v1__uac_actions__RunResponse":{"properties":{"id":{"type":"string","title":"Id"},"status":{"type":"string","title":"Status"},"verdict":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Verdict"},"output":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Output"},"error_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Code"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"idempotency_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency Key"},"correlation_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Correlation Id"},"duration_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Duration Ms"},"started_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Started At"},"finished_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Finished At"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["id","status"],"title":"RunResponse"},"ErrorDetail":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code, e.g. NO_HEALTHY_SESSION"},"message":{"type":"string","description":"Human-readable explanation"},"type":{"type":"string","description":"Error category, e.g. auth_error, routing_error, account_error"},"retryable":{"type":"boolean","description":"Whether retrying the same request may succeed"},"request_id":{"type":"string","description":"Correlation id for support"},"param":{"type":["string","null"],"description":"Offending field, if any"}},"required":["code","message"]},"ErrorEnvelope":{"type":"object","properties":{"error":{"$ref":"#/components/schemas/ErrorDetail"}},"required":["error"],"description":"Canonical error shape. Some routes wrap it as {\"detail\": {\"error\": {...}}} — check both levels."}},"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"GHOSTMIND_API_KEY","description":"Use your GhostMind API key as the Bearer token."}},"parameters":{"XRequestId":{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string"},"description":"Optional correlation id echoed back on responses and error envelopes."},"XGhostMindConversationId":{"name":"X-GhostMind-Conversation-Id","in":"header","required":false,"schema":{"type":"string"},"description":"Continue an existing conversation (UUID from the x-ghostmind-conversation-id response header)."},"XGhostMindUpstreamProject":{"name":"X-GhostMind-Upstream-Project","in":"header","required":false,"schema":{"type":"string"},"description":"Route chat into an upstream project — takes the project SLUG, not the UUID."},"XGhostMindUpstreamAccount":{"name":"X-GhostMind-Upstream-Account","in":"header","required":false,"schema":{"type":"string"},"description":"Pin routing to a specific connected upstream account label."},"XGhostMindRouteProfile":{"name":"X-GhostMind-Route-Profile","in":"header","required":false,"schema":{"type":"string"},"description":"Named routing profile slug for this request."},"XGhostMindProject":{"name":"X-GhostMind-Project","in":"header","required":false,"schema":{"type":"string"},"description":"Internal GhostMind project binding — NOT the upstream project slug (use X-GhostMind-Upstream-Project for that)."},"IdempotencyKey":{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Deduplication key for job creation endpoints (e.g. audio generations); a replay returns the same job."}}},"security":[{"BearerAuth":[]}],"servers":[{"url":"https://ghostmind.optdmsa.com","description":"Production"}]}