openapi: 3.1.0 info: title: GPT Backend API version: 0.1.0 paths: /api/auth/status: get: tags: - auth summary: Check Registration Status description: 'Check user registration status. Returns whether user is authenticated and registered.' operationId: check_registration_status_api_auth_status_get responses: '200': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /api/auth/registration/touch: post: tags: - auth summary: Touch Registration Lead description: 'Capture signed-in Clerk identities before ToS/account details are submitted. This does not create a product user record; `/register/init` remains the only self-serve path that creates `users`.' operationId: touch_registration_lead_api_auth_registration_touch_post requestBody: content: application/json: schema: $ref: '#/components/schemas/RegistrationTouchRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/RegistrationTouchResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/auth/register/init: post: tags: - auth summary: Register Init description: 'Initialize registration by creating the user and organization after ToS acceptance. - Validates ToS and allowlist - If allowlisted: creates User + Organization + default CompanyProfile + credits - Sets registration_data.status = ''account_created'' - Returns { user_id, organization_id, on_waitlist } Idempotent: if already created (phase account_created), returns existing IDs. If already complete, 409.' operationId: register_init_api_auth_register_init_post requestBody: content: application/json: schema: $ref: '#/components/schemas/RegistrationFormData' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/auth/register/finalize: post: tags: - auth summary: Register Finalize description: 'Finalize registration after plan selection/payment. Sets registration_data.status = ''complete'' and records selected_plan. Idempotent: if already complete, returns success.' operationId: register_finalize_api_auth_register_finalize_post requestBody: content: application/json: schema: $ref: '#/components/schemas/FinalizeRegistrationRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/auth/invitation: get: tags: - auth summary: Get Invitation Info From Query description: 'Query-parameter variant for invitation preview. Useful when clients/proxies alter path-style tokens.' operationId: get_invitation_info_from_query_api_auth_invitation_get parameters: - name: token in: query required: true schema: type: string minLength: 1 title: Token responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/InvitationInfoResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/auth/invitation/{invite_token}: get: tags: - auth summary: Get Invitation Info description: 'Preview invitation details before accepting. Can be called by authenticated or unauthenticated users.' operationId: get_invitation_info_api_auth_invitation__invite_token__get parameters: - name: invite_token in: path required: true schema: type: string title: Invite Token responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/InvitationInfoResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/auth/accept-invitation: post: tags: - auth summary: Accept Invitation description: "Accept an organization invitation.\nHandles both new users and existing users joining additional organizations.\n\ \nFlow:\n- Validates ToS acceptance\n- Validates invite token\n- If user exists:\n - ACTIVE users: Join organization\ \ as MEMBER (no credits)\n - SUSPENDED/DELETED users: Error\n- If user doesn't exist:\n - Check allowlist →\ \ waitlist if not allowed\n - Create user + join organization as MEMBER + allocate credits" operationId: accept_invitation_api_auth_accept_invitation_post requestBody: content: application/json: schema: $ref: '#/components/schemas/AcceptInvitationRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AcceptInvitationResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/auth/register: post: tags: - auth summary: Register User description: 'Register NEW users creating their own organization. For accepting invitations, use /accept-invitation endpoint instead. Flow: - Validates ToS acceptance - Checks if user already exists → error if yes - Validates email allowlist → waitlist if not allowed - Creates user + new organization (as OWNER) + company profile - Allocates initial credits to organization' operationId: register_user_api_auth_register_post requestBody: content: application/json: schema: $ref: '#/components/schemas/RegistrationFormData' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/RegistrationResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/auth/me: get: tags: - auth summary: Get User Profile description: Get current user profile (requires registration and verification). operationId: get_user_profile_api_auth_me_get responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/User' security: - HTTPBearer: [] /api/auth/update-profile: post: tags: - auth summary: Update User Profile description: Update the current user's profile information. operationId: update_user_profile_api_auth_update_profile_post requestBody: content: application/json: schema: $ref: '#/components/schemas/UserUpdate' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/User' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/auth/logout: post: tags: - auth summary: Logout description: 'Clear the user context. Note: Clerk handles token invalidation on the client side.' operationId: logout_api_auth_logout_post responses: '200': description: Successful Response content: application/json: schema: {} /api/auth/health: get: tags: - auth summary: Health Check description: Check if auth service is healthy. operationId: health_check_api_auth_health_get responses: '200': description: Successful Response content: application/json: schema: {} /api/legal/tos/latest: get: tags: - legal summary: Get Latest Terms Of Service description: 'Return latest ToS content, version, and server-computed hash. The response includes an ETag header equal to the hash for caching/integrity.' operationId: get_latest_terms_of_service_api_legal_tos_latest_get responses: '200': description: Successful Response content: application/json: schema: {} /api/chat/agentic/with-files: post: tags: - chat summary: Agentic Chat With Files description: 'Agentic chat endpoint with file upload support and conversation persistence. Accepts files alongside the message. Files are processed, analyzed, and their content is used to enhance Claude''s response. - If files are uploaded: Content is extracted and included in context - If conversation_id provided: Continues existing conversation - Messages are persisted for multi-turn context' operationId: agentic_chat_with_files_api_chat_agentic_with_files_post requestBody: content: multipart/form-data: schema: $ref: '#/components/schemas/Body_agentic_chat_with_files_api_chat_agentic_with_files_post' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgenticChatWithFilesResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/chat/files/{file_id}/share: post: tags: - chat summary: Share Chat File description: 'Share a chat-uploaded file to the gallery/documents. When a file is shared, it becomes visible in the company''s document library and can be accessed by the get_company_documents MCP tool.' operationId: share_chat_file_api_chat_files__file_id__share_post security: - HTTPBearer: [] parameters: - name: file_id in: path required: true schema: type: string format: uuid title: File Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ShareFileResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' delete: tags: - chat summary: Unshare File description: 'Remove a file from the Knowledge Base (stop sharing). The file is kept but no longer visible in the shared document library. Only the owner can unshare their files.' operationId: unshare_file_api_chat_files__file_id__share_delete security: - HTTPBearer: [] parameters: - name: file_id in: path required: true schema: type: string format: uuid title: File Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ShareFileResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/chat/files/{file_id}: delete: tags: - chat summary: Delete File description: 'Permanently delete a file. This removes the file from GCS storage and the database entirely. Only the file owner can delete the file.' operationId: delete_file_api_chat_files__file_id__delete security: - HTTPBearer: [] parameters: - name: file_id in: path required: true schema: type: string format: uuid title: File Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/DeleteFileResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/chat/shared-files: get: tags: - chat summary: Get Shared Files description: 'Get list of files for the current company profile (Knowledge Base). Returns: - All shared files (is_shared=True) - visible to everyone - Owner''s unshared files (is_shared=False, user_id=current_user) - only visible to owner This allows owners to see and re-share their unshared files.' operationId: get_shared_files_api_chat_shared_files_get security: - HTTPBearer: [] parameters: - name: page in: query required: false schema: type: integer default: 0 title: Page - name: limit in: query required: false schema: type: integer default: 20 title: Limit - name: search in: query required: false schema: anyOf: - type: string - type: 'null' title: Search responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/SharedFilesResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/chat/knowledge-base/upload: post: tags: - chat summary: Upload To Knowledge Base description: 'Upload files directly to the Knowledge Base. Files are stored in company_analysis_files with is_shared=True, making them immediately available in the Knowledge Base tab. Summaries are extracted for discoverability.' operationId: upload_to_knowledge_base_api_chat_knowledge_base_upload_post requestBody: content: multipart/form-data: schema: $ref: '#/components/schemas/Body_upload_to_knowledge_base_api_chat_knowledge_base_upload_post' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/KnowledgeBaseUploadResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/campaigns/external/sync: post: tags: - campaigns summary: Sync External Campaigns description: 'Sync external Google, Meta, TikTok, or LinkedIn campaigns for the active profile. Campaign identity and daily metrics are fetched at campaign level without filtering native ad types. Provider-specific hydration may add richer media (for example, Google Performance Max asset groups), but an unknown type is still persisted and renderable through the generic document contract. The default bounded mode never infers remote deletion; callers must explicitly request an exhaustive inventory before missing documents are retired.' operationId: sync_external_campaigns_api_campaigns_external_sync_post requestBody: content: application/json: schema: $ref: '#/components/schemas/ExternalCampaignSyncRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ExternalCampaignSyncResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/campaigns/external/{platform}/{remote_campaign_id}: get: tags: - campaigns summary: Get External Campaign Document description: Return one imported campaign, strictly scoped to the active profile. operationId: get_external_campaign_document_api_campaigns_external__platform___remote_campaign_id__get security: - HTTPBearer: [] parameters: - name: platform in: path required: true schema: enum: - google - meta - tiktok - linkedin type: string title: Platform - name: remote_campaign_id in: path required: true schema: type: string title: Remote Campaign Id - name: document_id in: query required: false schema: anyOf: - type: string format: uuid - type: 'null' title: Document Id - name: account_id in: query required: false schema: anyOf: - type: string - type: 'null' title: Account Id responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Get External Campaign Document Api Campaigns External Platform Remote Campaign Id Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' patch: tags: - campaigns summary: Patch External Campaign Document description: Mutate allowlisted provider fields and return verified provider readback. operationId: patch_external_campaign_document_api_campaigns_external__platform___remote_campaign_id__patch security: - HTTPBearer: [] parameters: - name: platform in: path required: true schema: enum: - google - meta - tiktok type: string title: Platform - name: remote_campaign_id in: path required: true schema: type: string title: Remote Campaign Id - name: document_id in: query required: false schema: anyOf: - type: string format: uuid - type: 'null' title: Document Id - name: account_id in: query required: false schema: anyOf: - type: string - type: 'null' title: Account Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ExternalCampaignPatchRequest' responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Patch External Campaign Document Api Campaigns External Platform Remote Campaign Id Patch '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/external-media/{document_id}/{media_key}: get: tags: - campaigns summary: Get External Campaign Media description: Proxy one provider media asset after profile-scoped validation. operationId: get_external_campaign_media_api_campaigns_external_media__document_id___media_key__get security: - HTTPBearer: [] parameters: - name: document_id in: path required: true schema: type: string format: uuid title: Document Id - name: media_key in: path required: true schema: type: string title: Media Key responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/external/{platform}/{remote_campaign_id}/sync: post: tags: - campaigns summary: Sync External Campaign Document description: Synchronize one exact provider campaign for safe mutation recovery. operationId: sync_external_campaign_document_api_campaigns_external__platform___remote_campaign_id__sync_post security: - HTTPBearer: [] parameters: - name: platform in: path required: true schema: enum: - google - meta - tiktok type: string title: Platform - name: remote_campaign_id in: path required: true schema: type: string title: Remote Campaign Id - name: document_id in: query required: false schema: anyOf: - type: string format: uuid - type: 'null' title: Document Id - name: account_id in: query required: false schema: anyOf: - type: string - type: 'null' title: Account Id responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Sync External Campaign Document Api Campaigns External Platform Remote Campaign Id Sync Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/optimization-activity: get: tags: - campaigns summary: Get Optimization Activity description: 'AI-team activity (history) for the active company profile. Sourced from the execution layer (``AgentTeamAction``), so stage reflects what actually happened: ``executed`` only when the action genuinely ran; ``approved`` actions are reported as approved/queued, not applied. Pass ``stage`` (``executed``/``approved``/``declined``/``failed``) to filter. A measured performance outcome is reported only when one really exists.' operationId: get_optimization_activity_api_campaigns_optimization_activity_get security: - HTTPBearer: [] parameters: - name: stage in: query required: false schema: anyOf: - type: string - type: 'null' title: Stage - name: limit in: query required: false schema: type: integer default: 100 title: Limit - name: offset in: query required: false schema: type: integer default: 0 title: Offset responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AiTeamActivityResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/optimization-summary: get: tags: - campaigns summary: Get Optimization Summary description: 'Per-campaign AI-team activity rollup for the active profile. One row per public campaign id the team has acted on, so the Campaigns dashboard can surface "AI team · N optimizations" (with a measured outcome when one exists) directly on the matching card. Fetched once per profile and merged client-side by campaign id; kept independent of the dashboard bundle so an activity-query hiccup never blanks the campaign list.' operationId: get_optimization_summary_api_campaigns_optimization_summary_get responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/CampaignOptimizationSummaryResponse' security: - HTTPBearer: [] /api/campaigns/{campaign_public_id}/optimizations/rollback: post: tags: - campaigns summary: Rollback Campaign Optimizations operationId: rollback_campaign_optimizations_api_campaigns__campaign_public_id__optimizations_rollback_post security: - HTTPBearer: [] parameters: - name: campaign_public_id in: path required: true schema: type: string title: Campaign Public Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CampaignOptimizationRollbackRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/CampaignOptimizationRollbackResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/{campaign_public_id}/optimizations/{action_id}/rollback: post: tags: - campaigns summary: Rollback Campaign Optimization description: 'Reverse one provider-executed optimization from its captured prior values. This is an authenticated, user-confirmed provider mutation—not a database rewind. The source action stays immutable. Dates and automatic activation are excluded, newer overlapping changes block the rollback, and the normal external mutation service enforces provider constraints plus readback.' operationId: rollback_campaign_optimization_api_campaigns__campaign_public_id__optimizations__action_id__rollback_post security: - HTTPBearer: [] parameters: - name: campaign_public_id in: path required: true schema: type: string title: Campaign Public Id - name: action_id in: path required: true schema: type: string format: uuid title: Action Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/CampaignOptimizationRollbackResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/{campaign_public_id}/optimization-activity: get: tags: - campaigns summary: Get Campaign Optimization Activity description: 'The AI-team activity ledger scoped to a single campaign. ``campaign_public_id`` is the public id the dashboard exposes on each card (``ads_`` / ``social_`` / ``batch__``). Same honest, execution-sourced contract as the profile-wide ledger, filtered to actions that target this campaign.' operationId: get_campaign_optimization_activity_api_campaigns__campaign_public_id__optimization_activity_get security: - HTTPBearer: [] parameters: - name: campaign_public_id in: path required: true schema: type: string title: Campaign Public Id - name: stage in: query required: false schema: anyOf: - type: string - type: 'null' title: Stage - name: limit in: query required: false schema: type: integer default: 100 title: Limit - name: offset in: query required: false schema: type: integer default: 0 title: Offset responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AiTeamActivityResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/{campaign_public_id}/perf-history: get: tags: - campaigns summary: Get Campaign Perf History description: 'Daily headline-metric trend + optimization markers for one campaign, for the expanded-row chart that backs the strip''s DoD/WoW tags and "+N% vs before". Computed live from the raw platform daily metrics; empty for a campaign with no paid analytics.' operationId: get_campaign_perf_history_api_campaigns__campaign_public_id__perf_history_get security: - HTTPBearer: [] parameters: - name: campaign_public_id in: path required: true schema: type: string title: Campaign Public Id - name: days in: query required: false schema: type: integer default: 30 title: Days responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/CampaignPerfHistoryResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/email/edit-image: post: tags: - campaigns - Email Campaigns summary: Edit Campaign Image description: 'Edit a campaign supporting image based on user instructions. The edited image will be added as a new image for the same campaign. Only supporting images can be edited (not banner images). The user provides a text description of the changes they want, and the AI will generate an edited version of the image based on those instructions.' operationId: edit_campaign_image_api_campaigns_email_edit_image_post requestBody: content: application/json: schema: $ref: '#/components/schemas/Body_edit_campaign_image_api_campaigns_email_edit_image_post' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/campaigns/email/edit-content: post: tags: - campaigns - Email Campaigns summary: Edit Campaign Content description: 'Edit email campaign content based on user instructions. The edited content will replace the existing content for the campaign. The user provides a text description of the changes they want, and the AI will generate an edited version of the email content based on those instructions.' operationId: edit_campaign_content_api_campaigns_email_edit_content_post requestBody: content: application/json: schema: $ref: '#/components/schemas/Body_edit_campaign_content_api_campaigns_email_edit_content_post' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/campaigns/email/delete-image: delete: tags: - campaigns - Email Campaigns summary: Delete Campaign Image description: 'Delete a campaign supporting image. Only the user who created the campaign can delete images associated with it. Query parameters: - campaign_id: Campaign ID of the image to delete - idea_number: Campaign idea number - image_url: URL of the image to delete' operationId: delete_campaign_image_api_campaigns_email_delete_image_delete security: - HTTPBearer: [] parameters: - name: campaign_id in: query required: true schema: type: string title: Campaign Id - name: idea_number in: query required: true schema: type: integer title: Idea Number - name: image_url in: query required: true schema: type: string title: Image Url responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/email/upload-image: post: tags: - campaigns - Email Campaigns summary: Upload Email Campaign Image General description: 'Upload a new image for an email campaign and update database records. This endpoint is used for manual image uploads for email campaigns. It replaces the general upload-image endpoint previously in campaigns_general.py.' operationId: upload_email_campaign_image_general_api_campaigns_email_upload_image_post requestBody: content: multipart/form-data: schema: $ref: '#/components/schemas/Body_upload_email_campaign_image_general_api_campaigns_email_upload_image_post' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/campaigns/email/upload-campaign-image: post: tags: - campaigns - Email Campaigns summary: Upload Campaign Image description: "Upload a new campaign image and update database records.\nThis endpoint is used for manual image edits\ \ instead of replacing an existing image.\n\nArgs:\n file: The image file to upload\n campaign_id: Campaign\ \ ID\n idea_number: Campaign idea number\n image_type: Type of image (defaults to EMAIL_IMAGE)\n current_user:\ \ The authenticated user\n db: Database session\n\nReturns:\n JSON response with the result including new image\ \ URL" operationId: upload_campaign_image_api_campaigns_email_upload_campaign_image_post requestBody: content: multipart/form-data: schema: $ref: '#/components/schemas/Body_upload_campaign_image_api_campaigns_email_upload_campaign_image_post' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/campaigns/email/upload-campaign-images: post: tags: - campaigns - Email Campaigns summary: Upload Campaign Images description: "Upload campaign images (up to 15) and update database records.\nThis endpoint allows batch uploading of\ \ images for a specific campaign idea.\n\nArgs:\n files: List of image files to upload (max 15)\n campaign_id:\ \ Campaign ID\n idea_number: Campaign idea number\n image_type: Type of image (defaults to EMAIL_IMAGE)\n \ \ current_user: The authenticated user\n db: Database session\n\nReturns:\n JSON response with the result including\ \ new image URLs" operationId: upload_campaign_images_api_campaigns_email_upload_campaign_images_post requestBody: content: multipart/form-data: schema: $ref: '#/components/schemas/Body_upload_campaign_images_api_campaigns_email_upload_campaign_images_post' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/campaigns/email: get: tags: - campaigns - Email Campaigns summary: Fetch All Email Campaigns description: 'Fetch all email campaigns for the current user, including the generated email images. Support pagination with page and limit parameters.' operationId: fetch_all_email_campaigns_api_campaigns_email_get security: - HTTPBearer: [] parameters: - name: page in: query required: false schema: type: integer default: 0 title: Page - name: limit in: query required: false schema: type: integer default: 10 title: Limit responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Fetch All Email Campaigns Api Campaigns Email Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' post: tags: - campaigns - Email Campaigns summary: Create Email Campaign description: 'Create a new email campaign using the dedicated EmailCampaign model. This endpoint provides a direct REST API method for creating campaigns instead of using the workflow approach.' operationId: create_email_campaign_api_campaigns_email_post security: - HTTPBearer: [] requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/EmailCampaignCreate' responses: '201': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/EmailCampaignResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/email/{campaign_id}: delete: tags: - campaigns - Email Campaigns summary: Delete Email Campaign description: 'Delete an entire email campaign (all ideas) and related resources. This will remove the EmailCampaign models and related resources.' operationId: delete_email_campaign_api_campaigns_email__campaign_id__delete security: - HTTPBearer: [] parameters: - name: campaign_id in: path required: true schema: type: string title: Campaign Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/email/{campaign_id}/idea/{idea_number}: delete: tags: - campaigns - Email Campaigns summary: Delete Email Campaign Idea description: 'Delete a specific idea from an email campaign. This will remove the idea and all associated images from the database. Handles both the new EmailCampaign model and the legacy Campaign model.' operationId: delete_email_campaign_idea_api_campaigns_email__campaign_id__idea__idea_number__delete security: - HTTPBearer: [] parameters: - name: campaign_id in: path required: true schema: type: string title: Campaign Id - name: idea_number in: path required: true schema: type: integer title: Idea Number responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/email/count: get: tags: - campaigns - Email Campaigns summary: Get Email Campaigns Count description: 'Get the count of email campaigns for the current user. This counts campaigns in the new EmailCampaign model.' operationId: get_email_campaigns_count_api_campaigns_email_count_get responses: '200': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /api/campaigns/email/associate-consumer-group: post: tags: - campaigns - Email Campaigns summary: Associate Consumer Group With Email Campaign description: Associate a consumer group with an email campaign. operationId: associate_consumer_group_with_email_campaign_api_campaigns_email_associate_consumer_group_post requestBody: content: application/json: schema: additionalProperties: true type: object title: Data required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/campaigns/email/list-associated-consumer-groups/{campaign_id}/{idea_number}: get: tags: - campaigns - Email Campaigns summary: List Associated Consumer Groups description: List all consumer groups associated with an email campaign idea. operationId: list_associated_consumer_groups_api_campaigns_email_list_associated_consumer_groups__campaign_id___idea_number__get security: - HTTPBearer: [] parameters: - name: campaign_id in: path required: true schema: type: string title: Campaign Id - name: idea_number in: path required: true schema: type: integer title: Idea Number responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/email/remove-consumer-group-association/{association_id}: delete: tags: - campaigns - Email Campaigns summary: Remove Consumer Group Association description: Remove an association between a consumer group and an email campaign. operationId: remove_consumer_group_association_api_campaigns_email_remove_consumer_group_association__association_id__delete security: - HTTPBearer: [] parameters: - name: association_id in: path required: true schema: type: integer title: Association Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/email/{email_campaign_id}/image: post: tags: - campaigns - Email Campaigns summary: Add Email Campaign Image description: 'Add a new image to an existing email campaign using the EmailCampaignImage model. The email_campaign_id refers to the ID of the EmailCampaign record.' operationId: add_email_campaign_image_api_campaigns_email__email_campaign_id__image_post security: - HTTPBearer: [] parameters: - name: email_campaign_id in: path required: true schema: type: integer title: Email Campaign Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/EmailCampaignImageCreate' responses: '201': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/social-post/edit-content: post: tags: - campaigns - Social Post Campaigns summary: Edit Social Post Content description: 'Edit social post content based on current company profile instructions. The edited content will replace the existing content for the social post. The current company profile provides a text description of the changes they want, and the AI will generate an edited version of the content based on those instructions.' operationId: edit_social_post_content_api_campaigns_social_post_edit_content_post requestBody: content: application/json: schema: $ref: '#/components/schemas/Body_edit_social_post_content_api_campaigns_social_post_edit_content_post' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/campaigns/social-post/direct-edit-social-post: post: tags: - campaigns - Social Post Campaigns summary: Direct Edit Social Post description: 'Directly edit a social post''s content without AI assistance. This endpoint allows direct updates to a social post''s name, caption, hashtags and other fields for the current company profile.' operationId: direct_edit_social_post_api_campaigns_social_post_direct_edit_social_post_post requestBody: content: application/json: schema: $ref: '#/components/schemas/Body_direct_edit_social_post_api_campaigns_social_post_direct_edit_social_post_post' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/campaigns/social-post/delete-social-post: delete: tags: - campaigns - Social Post Campaigns summary: Delete Social Post description: 'Delete a social media post. Only the current company profile who created the post can delete it. The post will be removed from the database and chat message metadata. Any associated images will also be deleted from the database. Query parameters: - campaign_id: Campaign ID of the post to delete - idea_number: Post idea number' operationId: delete_social_post_api_campaigns_social_post_delete_social_post_delete security: - HTTPBearer: [] parameters: - name: campaign_id in: query required: true schema: type: string title: Campaign Id - name: idea_number in: query required: true schema: type: integer title: Idea Number responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/social-post/edit-social-post-image: post: tags: - campaigns - Social Post Campaigns summary: Edit Social Post Image description: 'Edits a specific social post image using AI, updates GCS and campaign meta_data for the current company profile. Also updates the corresponding chat message metadata.' operationId: edit_social_post_image_api_campaigns_social_post_edit_social_post_image_post requestBody: content: application/json: schema: $ref: '#/components/schemas/Body_edit_social_post_image_api_campaigns_social_post_edit_social_post_image_post' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/campaigns/social-post/upload-social-post-image: post: tags: - campaigns - Social Post Campaigns summary: Upload Social Post Image description: 'Upload an image for a social post campaign and update database records for the current company profile. This is used for initial creation of campaigns or updating existing ones. Parameters: - file: The image file to upload - campaign_id: ID of the campaign - idea_number: Idea number of the campaign - current_image_url: URL of the current image (used for lookup when replace is True) - replace: If True, replace existing image; if False, append as a new image' operationId: upload_social_post_image_api_campaigns_social_post_upload_social_post_image_post requestBody: content: multipart/form-data: schema: $ref: '#/components/schemas/Body_upload_social_post_image_api_campaigns_social_post_upload_social_post_image_post' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/campaigns/social-post/social-post-campaigns: get: tags: - campaigns - Social Post Campaigns summary: Fetch All Social Post Campaigns description: 'Fetch all social post campaigns for the current company profile. This endpoint retrieves all the social post campaigns created by the current company profile, supporting pagination and the option to include variations. Query parameters: - page: The page number (0-indexed) for pagination - limit: The number of items per page - include_variations: Whether to include variations of the original posts Returns a list of campaigns with their associated images, metadata, and posting status information, along with pagination information.' operationId: fetch_all_social_post_campaigns_api_campaigns_social_post_social_post_campaigns_get security: - HTTPBearer: [] parameters: - name: page in: query required: false schema: type: integer default: 0 title: Page - name: limit in: query required: false schema: type: integer default: 10 title: Limit - name: include_variations in: query required: false schema: type: boolean default: true title: Include Variations - name: campaign_id in: query required: false schema: anyOf: - type: string - type: 'null' description: If provided, only campaigns matching this campaign_id are returned title: Campaign Id description: If provided, only campaigns matching this campaign_id are returned - name: platform_scope in: query required: false schema: anyOf: - type: string - type: 'null' description: Optional social platform family filter title: Platform Scope description: Optional social platform family filter - name: status_filter in: query required: false schema: anyOf: - type: string - type: 'null' description: Optional normalized social status filter title: Status Filter description: Optional normalized social status filter - name: source_filter in: query required: false schema: anyOf: - type: string - type: 'null' description: Optional creation source filter title: Source Filter description: Optional creation source filter - name: search in: query required: false schema: anyOf: - type: string - type: 'null' description: Optional search text title: Search description: Optional search text - name: dashboard_mode in: query required: false schema: type: boolean default: false title: Dashboard Mode responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/social-post/social-post-campaign/{campaign_id}: delete: tags: - campaigns - Social Post Campaigns summary: Delete Social Post Campaign description: 'Delete an entire social post campaign for the current company profile. This will remove the campaign and all associated images from the database.' operationId: delete_social_post_campaign_api_campaigns_social_post_social_post_campaign__campaign_id__delete security: - HTTPBearer: [] parameters: - name: campaign_id in: path required: true schema: type: string title: Campaign Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/social-post/social-post-campaign/{campaign_id}/idea/{idea_number}: delete: tags: - campaigns - Social Post Campaigns summary: Delete Social Post Campaign Idea description: 'Delete a specific idea from a social post campaign for the current company profile. This will remove the idea and all associated images from the database. If this was the last idea in the campaign, the entire campaign will be removed.' operationId: delete_social_post_campaign_idea_api_campaigns_social_post_social_post_campaign__campaign_id__idea__idea_number__delete security: - HTTPBearer: [] parameters: - name: campaign_id in: path required: true schema: type: string title: Campaign Id - name: idea_number in: path required: true schema: type: integer title: Idea Number responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/social-post/social-post-campaigns-count: get: tags: - campaigns - Social Post Campaigns summary: Get Social Post Campaigns Count description: 'Get the count of social post campaigns for the current company profile. Returns the total number of social post campaigns owned by the company profile.' operationId: get_social_post_campaigns_count_api_campaigns_social_post_social_post_campaigns_count_get responses: '200': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /api/campaigns/social-post/{campaign_id}/{idea_number}/posts: get: tags: - campaigns - Social Post Campaigns summary: Get Campaign Posts description: Get posts for a specific campaign idea for the current company profile, optionally filtered by platform and variation. operationId: get_campaign_posts_api_campaigns_social_post__campaign_id___idea_number__posts_get security: - HTTPBearer: [] parameters: - name: campaign_id in: path required: true schema: type: string title: Campaign Id - name: idea_number in: path required: true schema: type: integer title: Idea Number - name: platform in: query required: false schema: anyOf: - type: string - type: 'null' title: Platform - name: variation in: query required: false schema: anyOf: - type: integer - type: 'null' title: Variation responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/CampaignPostsResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/social-post/generate-variation: post: tags: - campaigns - Social Post Campaigns summary: Generate Social Post Variation description: "Generate a variation of an existing social post for the current company profile.\nThis endpoint creates\ \ a new variation by generating new text and images based on the original post.\n\nArgs:\n request: Social post\ \ variation request containing campaign_id and idea_number\n company_profile: Current company profile\n db:\ \ Database session\n\nReturns:\n dict: Response with the new campaign variation details" operationId: generate_social_post_variation_api_campaigns_social_post_generate_variation_post requestBody: content: application/json: schema: $ref: '#/components/schemas/SocialPostVariationRequest' required: true responses: '201': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/campaigns/social-post: post: tags: - campaigns - Social Post Campaigns summary: Create Social Post Campaign description: 'Create a new social post campaign using the dedicated SocialPostCampaign model for the current company profile. This endpoint provides a direct REST API method for creating campaigns instead of using the workflow approach.' operationId: create_social_post_campaign_api_campaigns_social_post_post requestBody: content: application/json: schema: $ref: '#/components/schemas/SocialPostCampaignCreate' required: true responses: '201': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/SocialPostCampaignResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/campaigns/social-post/schedule/preflight: post: tags: - campaigns - Social Post Campaigns summary: Preflight Social Post Schedule operationId: preflight_social_post_schedule_api_campaigns_social_post_schedule_preflight_post requestBody: content: application/json: schema: $ref: '#/components/schemas/SocialScheduleUpsertRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/campaigns/social-post/schedule: post: tags: - campaigns - Social Post Campaigns summary: Upsert Social Post Schedule operationId: upsert_social_post_schedule_api_campaigns_social_post_schedule_post requestBody: content: application/json: schema: $ref: '#/components/schemas/SocialScheduleUpsertRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/campaigns/social-post/schedule/{campaign_id}/{idea_number}/{variation}: get: tags: - campaigns - Social Post Campaigns summary: Get Social Post Schedule operationId: get_social_post_schedule_api_campaigns_social_post_schedule__campaign_id___idea_number___variation__get security: - HTTPBearer: [] parameters: - name: campaign_id in: path required: true schema: type: string title: Campaign Id - name: idea_number in: path required: true schema: type: integer title: Idea Number - name: variation in: path required: true schema: type: integer title: Variation responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/social-post/schedule/{schedule_id}: delete: tags: - campaigns - Social Post Campaigns summary: Cancel Social Post Schedule operationId: cancel_social_post_schedule_api_campaigns_social_post_schedule__schedule_id__delete security: - HTTPBearer: [] parameters: - name: schedule_id in: path required: true schema: type: string title: Schedule Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/social-post/list-schedules: get: tags: - campaigns - Social Post Campaigns summary: List Social Post Schedules operationId: list_social_post_schedules_api_campaigns_social_post_list_schedules_get security: - HTTPBearer: [] parameters: - name: status in: query required: false schema: anyOf: - type: string - type: 'null' title: Status - name: scheduled_from in: query required: false schema: anyOf: - type: string - type: 'null' title: Scheduled From - name: scheduled_to in: query required: false schema: anyOf: - type: string - type: 'null' title: Scheduled To - name: page in: query required: false schema: type: integer default: 0 title: Page - name: limit in: query required: false schema: type: integer default: 50 title: Limit responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/social-post/schedule/dispatch-due: post: tags: - campaigns - Social Post Campaigns summary: Dispatch Due Social Post Schedules For Company operationId: dispatch_due_social_post_schedules_for_company_api_campaigns_social_post_schedule_dispatch_due_post security: - HTTPBearer: [] parameters: - name: limit in: query required: false schema: type: integer maximum: 100 minimum: 1 default: 25 title: Limit responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/social-post/schedule-campaign/{campaign_id}/{idea_number}: post: tags: - campaigns - Social Post Campaigns summary: Schedule Social Post Campaign operationId: schedule_social_post_campaign_api_campaigns_social_post_schedule_campaign__campaign_id___idea_number__post security: - HTTPBearer: [] parameters: - name: campaign_id in: path required: true schema: type: string title: Campaign Id - name: idea_number in: path required: true schema: type: integer title: Idea Number requestBody: required: true content: application/json: schema: type: object additionalProperties: true title: Schedule Data responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/social-post/campaign-schedule/{campaign_id}/{idea_number}: get: tags: - campaigns - Social Post Campaigns summary: Get Social Post Campaign Schedule operationId: get_social_post_campaign_schedule_api_campaigns_social_post_campaign_schedule__campaign_id___idea_number__get security: - HTTPBearer: [] parameters: - name: campaign_id in: path required: true schema: type: string title: Campaign Id - name: idea_number in: path required: true schema: type: integer title: Idea Number - name: variation in: query required: false schema: type: integer default: 0 title: Variation responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/social-post/cancel-schedule/{schedule_id}: delete: tags: - campaigns - Social Post Campaigns summary: Cancel Social Post Campaign Schedule operationId: cancel_social_post_campaign_schedule_api_campaigns_social_post_cancel_schedule__schedule_id__delete security: - HTTPBearer: [] parameters: - name: schedule_id in: path required: true schema: type: string title: Schedule Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/online-ads/google-display/create: post: tags: - campaigns - Online Ad Campaigns summary: Create Google Display Campaign description: Create a Google Display ad campaign with optional reference images operationId: create_google_display_campaign_api_campaigns_online_ads_google_display_create_post requestBody: content: application/json: schema: $ref: '#/components/schemas/schemas__campaigns__ads__google__GoogleDisplayAdRequest' required: true responses: '201': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/campaigns/online-ads/google-search/create: post: tags: - campaigns - Online Ad Campaigns summary: Create Google Search Campaign description: Create a Google Search ad campaign operationId: create_google_search_campaign_api_campaigns_online_ads_google_search_create_post requestBody: content: application/json: schema: $ref: '#/components/schemas/GoogleSearchAdRequest' required: true responses: '201': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/campaigns/online-ads/meta-feed/create: post: tags: - campaigns - Online Ad Campaigns summary: Create Meta Feed Campaign description: Create a Meta Feed ad campaign with optional reference images operationId: create_meta_feed_campaign_api_campaigns_online_ads_meta_feed_create_post requestBody: content: application/json: schema: $ref: '#/components/schemas/MetaFeedAdRequest' required: true responses: '201': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/campaigns/online-ads/meta-stories-reels/create: post: tags: - campaigns - Online Ad Campaigns summary: Create Meta Stories Reels Campaign description: Create a Meta Stories & Reels ad campaign operationId: create_meta_stories_reels_campaign_api_campaigns_online_ads_meta_stories_reels_create_post requestBody: content: application/json: schema: $ref: '#/components/schemas/MetaStoriesReelsAdRequest' required: true responses: '201': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/campaigns/online-ads/amazon-sponsored-products/create: post: tags: - campaigns - Online Ad Campaigns summary: Create Amazon Sponsored Products Campaign description: Create an Amazon Sponsored Products ad campaign operationId: create_amazon_sponsored_products_campaign_api_campaigns_online_ads_amazon_sponsored_products_create_post requestBody: content: application/json: schema: $ref: '#/components/schemas/AmazonSponsoredProductsAdRequest' required: true responses: '201': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/campaigns/online-ads/amazon-sponsored-brands/create: post: tags: - campaigns - Online Ad Campaigns summary: Create Amazon Sponsored Brands Campaign description: Create an Amazon Sponsored Brands ad campaign with optional reference images operationId: create_amazon_sponsored_brands_campaign_api_campaigns_online_ads_amazon_sponsored_brands_create_post requestBody: content: application/json: schema: $ref: '#/components/schemas/AmazonSponsoredBrandsAdRequest' required: true responses: '201': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/campaigns/online-ads/amazon-sponsored-display/create: post: tags: - campaigns - Online Ad Campaigns summary: Create Amazon Sponsored Display Campaign description: Create an Amazon Sponsored Display ad campaign with optional reference images operationId: create_amazon_sponsored_display_campaign_api_campaigns_online_ads_amazon_sponsored_display_create_post requestBody: content: application/json: schema: $ref: '#/components/schemas/AmazonSponsoredDisplayAdRequest' required: true responses: '201': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/campaigns/online-ads/tiktok/create: post: tags: - campaigns - Online Ad Campaigns summary: Create Tiktok Campaign description: Create a TikTok Single Image ad campaign operationId: create_tiktok_campaign_api_campaigns_online_ads_tiktok_create_post requestBody: content: application/json: schema: $ref: '#/components/schemas/BaseAdsCampaignRequest' required: true responses: '201': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/campaigns/online-ads/google-search-campaigns: get: tags: - campaigns - Online Ad Campaigns - google_search_campaigns summary: Get Google Search Campaigns operationId: get_google_search_campaigns_api_campaigns_online_ads_google_search_campaigns_get security: - HTTPBearer: [] parameters: - name: page in: query required: false schema: type: integer default: 0 title: Page - name: limit in: query required: false schema: type: integer default: 10 title: Limit responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/online-ads/google-search-campaign/{campaign_id}: get: tags: - campaigns - Online Ad Campaigns - google_search_campaigns summary: Get Google Search Campaign operationId: get_google_search_campaign_api_campaigns_online_ads_google_search_campaign__campaign_id__get security: - HTTPBearer: [] parameters: - name: campaign_id in: path required: true schema: type: string title: Campaign Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/online-ads/google-search/update-campaign: put: tags: - campaigns - Online Ad Campaigns - google_search_campaigns summary: Update Google Search Campaign operationId: update_google_search_campaign_api_campaigns_online_ads_google_search_update_campaign_put requestBody: content: application/json: schema: $ref: '#/components/schemas/AdsCampaignUpdateRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AdsCampaignUpdateResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/campaigns/online-ads/google-search/generate-variation/{ad_id}: post: tags: - campaigns - Online Ad Campaigns - google_search_campaigns summary: Generate Google Search Variation operationId: generate_google_search_variation_api_campaigns_online_ads_google_search_generate_variation__ad_id__post security: - HTTPBearer: [] parameters: - name: ad_id in: path required: true schema: type: string format: uuid title: Ad Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/online-ads/google-display-campaigns: get: tags: - campaigns - Online Ad Campaigns - google_display_campaigns summary: Get Google Display Campaigns operationId: get_google_display_campaigns_api_campaigns_online_ads_google_display_campaigns_get security: - HTTPBearer: [] parameters: - name: page in: query required: false schema: type: integer default: 0 title: Page - name: limit in: query required: false schema: type: integer default: 10 title: Limit responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/online-ads/google-display-campaign/{campaign_id}: get: tags: - campaigns - Online Ad Campaigns - google_display_campaigns summary: Get Google Display Campaign operationId: get_google_display_campaign_api_campaigns_online_ads_google_display_campaign__campaign_id__get security: - HTTPBearer: [] parameters: - name: campaign_id in: path required: true schema: type: string title: Campaign Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/online-ads/google-display/update-campaign: put: tags: - campaigns - Online Ad Campaigns - google_display_campaigns summary: Update Google Display Campaign operationId: update_google_display_campaign_api_campaigns_online_ads_google_display_update_campaign_put requestBody: content: application/json: schema: $ref: '#/components/schemas/AdsCampaignUpdateRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AdsCampaignUpdateResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/campaigns/online-ads/google-display/generate-variation/{ad_id}: post: tags: - campaigns - Online Ad Campaigns - google_display_campaigns summary: Generate Google Display Variation operationId: generate_google_display_variation_api_campaigns_online_ads_google_display_generate_variation__ad_id__post security: - HTTPBearer: [] parameters: - name: ad_id in: path required: true schema: type: string format: uuid title: Ad Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/online-ads/google-display/edit-image: post: tags: - campaigns - Online Ad Campaigns - google_display_campaigns summary: Edit Google Display Image operationId: edit_google_display_image_api_campaigns_online_ads_google_display_edit_image_post responses: '410': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /api/campaigns/online-ads/google-display/upload-image: post: tags: - campaigns - Online Ad Campaigns - google_display_campaigns summary: Upload Google Display Image operationId: upload_google_display_image_api_campaigns_online_ads_google_display_upload_image_post responses: '410': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /api/campaigns/online-ads/google-video: post: tags: - campaigns - Online Ad Campaigns - Google Video Ads summary: Create Google Video Ad Campaign operationId: create_google_video_ad_campaign_api_campaigns_online_ads_google_video_post security: - HTTPBearer: [] requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/GoogleVideoAdRequest' responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' get: tags: - campaigns - Online Ad Campaigns - Google Video Ads summary: Get Google Video Campaigns operationId: get_google_video_campaigns_api_campaigns_online_ads_google_video_get security: - HTTPBearer: [] parameters: - name: page in: query required: false schema: type: integer default: 0 title: Page - name: limit in: query required: false schema: type: integer default: 10 title: Limit responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/online-ads/google-video/all: get: tags: - campaigns - Online Ad Campaigns - Google Video Ads summary: Get Google Video Ad Campaigns operationId: get_google_video_ad_campaigns_api_campaigns_online_ads_google_video_all_get responses: '200': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /api/campaigns/online-ads/google-video/{ad_id}: get: tags: - campaigns - Online Ad Campaigns - Google Video Ads summary: Get Google Video Ad Campaign operationId: get_google_video_ad_campaign_api_campaigns_online_ads_google_video__ad_id__get security: - HTTPBearer: [] parameters: - name: ad_id in: path required: true schema: type: string format: uuid title: Ad Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/online-ads/google-video/campaign/{campaign_id}: delete: tags: - campaigns - Online Ad Campaigns - Google Video Ads summary: Delete Google Video Ad Campaign operationId: delete_google_video_ad_campaign_api_campaigns_online_ads_google_video_campaign__campaign_id__delete security: - HTTPBearer: [] parameters: - name: campaign_id in: path required: true schema: type: string title: Campaign Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/online-ads/google-video/generate-variation/{ad_id}: post: tags: - campaigns - Online Ad Campaigns - Google Video Ads summary: Create Google Video Ad Variation operationId: create_google_video_ad_variation_api_campaigns_online_ads_google_video_generate_variation__ad_id__post security: - HTTPBearer: [] parameters: - name: ad_id in: path required: true schema: type: string format: uuid title: Ad Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/online-ads/google-video/update-campaign: put: tags: - campaigns - Online Ad Campaigns - Google Video Ads summary: Update Google Video Ad Campaign operationId: update_google_video_ad_campaign_api_campaigns_online_ads_google_video_update_campaign_put requestBody: content: application/json: schema: $ref: '#/components/schemas/AdsCampaignUpdateRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/campaigns/online-ads/meta-stories-reels-campaigns: get: tags: - campaigns - Online Ad Campaigns - meta_stories_reels_campaigns summary: Get Meta Stories Reels Campaigns operationId: get_meta_stories_reels_campaigns_api_campaigns_online_ads_meta_stories_reels_campaigns_get security: - HTTPBearer: [] parameters: - name: page in: query required: false schema: type: integer default: 0 title: Page - name: limit in: query required: false schema: type: integer default: 10 title: Limit responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/online-ads/meta-stories-reels-campaign/{campaign_id}: get: tags: - campaigns - Online Ad Campaigns - meta_stories_reels_campaigns summary: Get Meta Stories Reels Campaign operationId: get_meta_stories_reels_campaign_api_campaigns_online_ads_meta_stories_reels_campaign__campaign_id__get security: - HTTPBearer: [] parameters: - name: campaign_id in: path required: true schema: type: string title: Campaign Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/online-ads/meta-stories-reels/create-campaign: post: tags: - campaigns - Online Ad Campaigns - meta_stories_reels_campaigns summary: Create Meta Stories Reels Campaign operationId: create_meta_stories_reels_campaign_api_campaigns_online_ads_meta_stories_reels_create_campaign_post security: - HTTPBearer: [] parameters: - name: product_description in: query required: true schema: type: string title: Product Description - name: target_audience in: query required: true schema: type: string title: Target Audience - name: key_selling_points in: query required: false schema: type: string default: '' title: Key Selling Points - name: num_ads in: query required: false schema: type: integer default: 3 title: Num Ads - name: num_images_per_ad in: query required: false schema: type: integer default: 1 title: Num Images Per Ad - name: video_length in: query required: false schema: type: integer default: 10 title: Video Length - name: bid_strategy in: query required: false schema: type: string default: automatic title: Bid Strategy - name: budget_range in: query required: false schema: type: string default: medium title: Budget Range - name: country in: query required: false schema: anyOf: - type: string - type: 'null' title: Country - name: state_province in: query required: false schema: anyOf: - type: string - type: 'null' title: State Province - name: city in: query required: false schema: anyOf: - type: string - type: 'null' title: City - name: locations in: query required: false schema: anyOf: - type: string - type: 'null' title: Locations requestBody: content: application/json: schema: anyOf: - type: array items: type: string - type: 'null' title: Campaign Goals responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/online-ads/meta-stories-reels/update-campaign: put: tags: - campaigns - Online Ad Campaigns - meta_stories_reels_campaigns summary: Update Meta Stories Reels Campaign operationId: update_meta_stories_reels_campaign_api_campaigns_online_ads_meta_stories_reels_update_campaign_put requestBody: content: application/json: schema: $ref: '#/components/schemas/MetaStoriesReelsCampaignUpdateRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AdsCampaignUpdateResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/campaigns/online-ads/meta-stories-reels/launch: post: tags: - campaigns - Online Ad Campaigns - meta_stories_reels_campaigns summary: Launch Meta Stories Reels Campaign operationId: launch_meta_stories_reels_campaign_api_campaigns_online_ads_meta_stories_reels_launch_post requestBody: content: application/json: schema: additionalProperties: true type: object title: Request required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/campaigns/online-ads/meta-feed-campaigns: get: tags: - campaigns - Online Ad Campaigns - meta_feed_campaigns summary: Get Meta Feed Campaigns operationId: get_meta_feed_campaigns_api_campaigns_online_ads_meta_feed_campaigns_get security: - HTTPBearer: [] parameters: - name: page in: query required: false schema: type: integer default: 0 title: Page - name: limit in: query required: false schema: type: integer default: 10 title: Limit responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/online-ads/meta-feed-campaign/{campaign_id}: get: tags: - campaigns - Online Ad Campaigns - meta_feed_campaigns summary: Get Meta Feed Campaign operationId: get_meta_feed_campaign_api_campaigns_online_ads_meta_feed_campaign__campaign_id__get security: - HTTPBearer: [] parameters: - name: campaign_id in: path required: true schema: type: string title: Campaign Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/online-ads/meta-feed/create-campaign: post: tags: - campaigns - Online Ad Campaigns - meta_feed_campaigns summary: Create Meta Feed Campaign operationId: create_meta_feed_campaign_api_campaigns_online_ads_meta_feed_create_campaign_post security: - HTTPBearer: [] parameters: - name: product_description in: query required: true schema: type: string title: Product Description - name: target_audience in: query required: true schema: type: string title: Target Audience - name: key_selling_points in: query required: false schema: type: string default: '' title: Key Selling Points - name: num_ads in: query required: false schema: type: integer default: 3 title: Num Ads - name: num_images_per_ad in: query required: false schema: type: integer default: 1 title: Num Images Per Ad - name: video_length in: query required: false schema: type: integer default: 10 title: Video Length - name: bid_strategy in: query required: false schema: type: string default: automatic title: Bid Strategy - name: budget_range in: query required: false schema: type: string default: medium title: Budget Range - name: country in: query required: false schema: anyOf: - type: string - type: 'null' title: Country - name: state_province in: query required: false schema: anyOf: - type: string - type: 'null' title: State Province - name: city in: query required: false schema: anyOf: - type: string - type: 'null' title: City - name: locations in: query required: false schema: anyOf: - type: string - type: 'null' title: Locations requestBody: content: application/json: schema: anyOf: - type: array items: type: string - type: 'null' title: Campaign Goals responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/online-ads/meta-feed/update-campaign: put: tags: - campaigns - Online Ad Campaigns - meta_feed_campaigns summary: Update Meta Feed Campaign operationId: update_meta_feed_campaign_api_campaigns_online_ads_meta_feed_update_campaign_put requestBody: content: application/json: schema: $ref: '#/components/schemas/MetaFeedCampaignUpdateRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AdsCampaignUpdateResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/campaigns/online-ads/meta-feed/edit-image: post: tags: - campaigns - Online Ad Campaigns - meta_feed_campaigns summary: Edit Meta Feed Image operationId: edit_meta_feed_image_api_campaigns_online_ads_meta_feed_edit_image_post responses: '410': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /api/campaigns/online-ads/meta-feed/upload-image: post: tags: - campaigns - Online Ad Campaigns - meta_feed_campaigns summary: Upload Meta Feed Image operationId: upload_meta_feed_image_api_campaigns_online_ads_meta_feed_upload_image_post responses: '410': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /api/campaigns/online-ads/meta-feed/launch: post: tags: - campaigns - Online Ad Campaigns - meta_feed_campaigns summary: Launch Meta Feed Campaign operationId: launch_meta_feed_campaign_api_campaigns_online_ads_meta_feed_launch_post requestBody: content: application/json: schema: additionalProperties: true type: object title: Request required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/campaigns/online-ads/linkedin-image-campaigns: get: tags: - campaigns - Online Ad Campaigns - linkedin_image_campaigns summary: Get Linkedin Image Campaigns operationId: get_linkedin_image_campaigns_api_campaigns_online_ads_linkedin_image_campaigns_get security: - HTTPBearer: [] parameters: - name: page in: query required: false schema: type: integer default: 0 title: Page - name: limit in: query required: false schema: type: integer default: 10 title: Limit responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/online-ads/linkedin-image/{campaign_id}: get: tags: - campaigns - Online Ad Campaigns - linkedin_image_campaigns summary: Get Linkedin Image Campaign operationId: get_linkedin_image_campaign_api_campaigns_online_ads_linkedin_image__campaign_id__get security: - HTTPBearer: [] parameters: - name: campaign_id in: path required: true schema: type: string title: Campaign Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/online-ads/linkedin-image-campaign/{campaign_id}: get: tags: - campaigns - Online Ad Campaigns - linkedin_image_campaigns summary: Get Linkedin Image Campaign operationId: get_linkedin_image_campaign_api_campaigns_online_ads_linkedin_image_campaign__campaign_id__get security: - HTTPBearer: [] parameters: - name: campaign_id in: path required: true schema: type: string title: Campaign Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/online-ads/linkedin-image/update-campaign: put: tags: - campaigns - Online Ad Campaigns - linkedin_image_campaigns summary: Update Linkedin Image Campaign operationId: update_linkedin_image_campaign_api_campaigns_online_ads_linkedin_image_update_campaign_put requestBody: content: application/json: schema: $ref: '#/components/schemas/AdsCampaignUpdateRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AdsCampaignUpdateResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/campaigns/online-ads/linkedin-video-campaigns: get: tags: - campaigns - Online Ad Campaigns - linkedin_video_campaigns summary: Get Linkedin Video Campaigns operationId: get_linkedin_video_campaigns_api_campaigns_online_ads_linkedin_video_campaigns_get security: - HTTPBearer: [] parameters: - name: page in: query required: false schema: type: integer default: 0 title: Page - name: limit in: query required: false schema: type: integer default: 10 title: Limit responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/online-ads/linkedin-video/{campaign_id}: get: tags: - campaigns - Online Ad Campaigns - linkedin_video_campaigns summary: Get Linkedin Video Campaign operationId: get_linkedin_video_campaign_api_campaigns_online_ads_linkedin_video__campaign_id__get security: - HTTPBearer: [] parameters: - name: campaign_id in: path required: true schema: type: string title: Campaign Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/online-ads/linkedin-video-campaign/{campaign_id}: get: tags: - campaigns - Online Ad Campaigns - linkedin_video_campaigns summary: Get Linkedin Video Campaign operationId: get_linkedin_video_campaign_api_campaigns_online_ads_linkedin_video_campaign__campaign_id__get security: - HTTPBearer: [] parameters: - name: campaign_id in: path required: true schema: type: string title: Campaign Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/online-ads/linkedin-video/update-campaign: put: tags: - campaigns - Online Ad Campaigns - linkedin_video_campaigns summary: Update Linkedin Video Campaign operationId: update_linkedin_video_campaign_api_campaigns_online_ads_linkedin_video_update_campaign_put requestBody: content: application/json: schema: $ref: '#/components/schemas/AdsCampaignUpdateRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AdsCampaignUpdateResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/campaigns/online-ads/tiktok-video: post: tags: - campaigns - Online Ad Campaigns - TikTok Video Ads summary: Create Tiktok Video Ad Campaign operationId: create_tiktok_video_ad_campaign_api_campaigns_online_ads_tiktok_video_post security: - HTTPBearer: [] requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/TikTokVideoAdRequest' responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' get: tags: - campaigns - Online Ad Campaigns - TikTok Video Ads summary: Get Tiktok Video Campaigns operationId: get_tiktok_video_campaigns_api_campaigns_online_ads_tiktok_video_get security: - HTTPBearer: [] parameters: - name: page in: query required: false schema: type: integer default: 0 title: Page - name: limit in: query required: false schema: type: integer default: 10 title: Limit responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/online-ads/tiktok-video/all: get: tags: - campaigns - Online Ad Campaigns - TikTok Video Ads summary: Get Tiktok Video Ad Campaigns operationId: get_tiktok_video_ad_campaigns_api_campaigns_online_ads_tiktok_video_all_get responses: '200': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /api/campaigns/online-ads/tiktok-video/call-to-actions: get: tags: - campaigns - Online Ad Campaigns - TikTok Video Ads summary: Get Tiktok Video Call To Actions operationId: get_tiktok_video_call_to_actions_api_campaigns_online_ads_tiktok_video_call_to_actions_get responses: '200': description: Successful Response content: application/json: schema: {} /api/campaigns/online-ads/tiktok-video/{campaign_id}: get: tags: - campaigns - Online Ad Campaigns - TikTok Video Ads summary: Get Tiktok Video Ad Campaign operationId: get_tiktok_video_ad_campaign_api_campaigns_online_ads_tiktok_video__campaign_id__get security: - HTTPBearer: [] parameters: - name: campaign_id in: path required: true schema: type: string title: Campaign Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/online-ads/tiktok-video/campaign/{campaign_id}: delete: tags: - campaigns - Online Ad Campaigns - TikTok Video Ads summary: Delete Tiktok Video Ad Campaign operationId: delete_tiktok_video_ad_campaign_api_campaigns_online_ads_tiktok_video_campaign__campaign_id__delete security: - HTTPBearer: [] parameters: - name: campaign_id in: path required: true schema: type: string title: Campaign Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/online-ads/tiktok-video/update-campaign: put: tags: - campaigns - Online Ad Campaigns - TikTok Video Ads summary: Update Tiktok Video Ad Campaign operationId: update_tiktok_video_ad_campaign_api_campaigns_online_ads_tiktok_video_update_campaign_put requestBody: content: application/json: schema: $ref: '#/components/schemas/AdsCampaignUpdateRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/campaigns/online-ads/generate-variation: post: tags: - campaigns - Online Ad Campaigns summary: Generate Ad Variation description: "Generate a new variation of an existing ad campaign.\n\nArgs:\n request: Variation request data\n \ \ company_profile: Authenticated company profile\n db: Database session\n\nReturns:\n Structured response\ \ with campaign metadata and variation data" operationId: generate_ad_variation_api_campaigns_online_ads_generate_variation_post requestBody: content: application/json: schema: $ref: '#/components/schemas/GenerateAdVariationRequest' required: true responses: '201': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/campaigns/online-ads/all-campaigns/count: get: tags: - campaigns - Online Ad Campaigns summary: Get All Online Ads Campaigns Count description: 'Get the total count of all online ad campaigns across all platforms for the current company profile. Returns the total number of ad campaigns from Google Search, Google Display, Google Video, and Meta platforms.' operationId: get_all_online_ads_campaigns_count_api_campaigns_online_ads_all_campaigns_count_get responses: '200': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /api/campaigns/online-ads/top-level: get: tags: - campaigns - Online Ad Campaigns summary: Get Top Level Entities description: 'Return both A/B Groups and ungrouped campaigns for the management page. - Groups: all groups for the company (optionally filtered by ads_channel/status) - Campaigns: normalized platform ads that are NOT members of any group (optionally filtered by ads_channel)' operationId: get_top_level_entities_api_campaigns_online_ads_top_level_get security: - HTTPBearer: [] parameters: - name: ads_type in: query required: false schema: anyOf: - type: string - type: 'null' title: Ads Type - name: status_filter in: query required: false schema: anyOf: - type: string - type: 'null' title: Status Filter responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/images/edit-image/job: post: tags: - campaigns - Campaign Images summary: Start Campaign Image Edit Job description: Start an asynchronous job to generate edited image variations for a campaign asset. operationId: start_campaign_image_edit_job_api_campaigns_images_edit_image_job_post requestBody: content: application/json: schema: $ref: '#/components/schemas/EditImageJobRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/JobResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/campaigns/images/select-image: post: tags: - campaigns - Campaign Images summary: Select Campaign Image description: 'Select an image variation for a campaign This endpoint allows users to choose one of the generated image variations and update their campaign with the selected image.' operationId: select_campaign_image_api_campaigns_images_select_image_post requestBody: content: application/json: schema: $ref: '#/components/schemas/ImageSelectionRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ImageSelectionResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/campaigns/images/select-video: post: tags: - campaigns - Campaign Images summary: Select Campaign Video description: 'Select a replacement video for a normalized ad campaign. User uploads are first saved to the gallery, then this endpoint links that company-owned video URL to the campaign creative.' operationId: select_campaign_video_api_campaigns_images_select_video_post requestBody: content: application/json: schema: $ref: '#/components/schemas/VideoSelectionRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/VideoSelectionResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/campaigns/images/batch-select-images: post: tags: - campaigns - Campaign Images summary: Batch Select Campaign Images description: 'Select images for multiple campaigns in batch This is useful when updating multiple ad variations or campaigns with different selected images at once.' operationId: batch_select_campaign_images_api_campaigns_images_batch_select_images_post requestBody: content: application/json: schema: items: $ref: '#/components/schemas/ImageSelectionRequest' type: array title: Requests required: true responses: '200': description: Successful Response content: application/json: schema: items: $ref: '#/components/schemas/ImageSelectionResponse' type: array title: Response Batch Select Campaign Images Api Campaigns Images Batch Select Images Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/campaigns/images/campaign/{campaign_type}/{campaign_id}/image-history: get: tags: - campaigns - Campaign Images summary: Get Campaign Image History description: 'Get the image history for a campaign This can be extended to track all image changes over time' operationId: get_campaign_image_history_api_campaigns_images_campaign__campaign_type___campaign_id__image_history_get security: - HTTPBearer: [] parameters: - name: campaign_type in: path required: true schema: type: string title: Campaign Type - name: campaign_id in: path required: true schema: type: string title: Campaign Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/budget-estimate: post: tags: - campaigns - Budget Estimate summary: Budget Estimate description: Generate a budget estimate for campaign scope settings. operationId: budget_estimate_api_campaigns_budget_estimate_post requestBody: content: application/json: schema: $ref: '#/components/schemas/BudgetEstimateRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/BudgetEstimateResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/campaigns/dayparting/campaigns/{campaign_id}/configure: post: tags: - campaigns - Dayparting - dayparting summary: Configure Campaign Dayparting operationId: configure_campaign_dayparting_api_campaigns_dayparting_campaigns__campaign_id__configure_post security: - HTTPBearer: [] parameters: - name: campaign_id in: path required: true schema: type: string format: uuid title: Campaign Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CampaignDaypartingRequest' responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/dayparting/campaigns/{campaign_id}/status: get: tags: - campaigns - Dayparting - dayparting summary: Get Dayparting Status operationId: get_dayparting_status_api_campaigns_dayparting_campaigns__campaign_id__status_get security: - HTTPBearer: [] parameters: - name: campaign_id in: path required: true schema: type: string format: uuid title: Campaign Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/dayparting/campaigns/{campaign_id}/disable: delete: tags: - campaigns - Dayparting - dayparting summary: Disable Dayparting operationId: disable_dayparting_api_campaigns_dayparting_campaigns__campaign_id__disable_delete security: - HTTPBearer: [] parameters: - name: campaign_id in: path required: true schema: type: string format: uuid title: Campaign Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/dayparting/meta/{ad_id}/health: get: tags: - campaigns - Dayparting - dayparting summary: Check Meta Rules Health operationId: check_meta_rules_health_api_campaigns_dayparting_meta__ad_id__health_get security: - HTTPBearer: [] parameters: - name: ad_id in: path required: true schema: type: string format: uuid title: Ad Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/DaypartingHealthResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/dayparting/meta/{ad_id}/cleanup: delete: tags: - campaigns - Dayparting - dayparting summary: Cleanup Meta Rules operationId: cleanup_meta_rules_api_campaigns_dayparting_meta__ad_id__cleanup_delete security: - HTTPBearer: [] parameters: - name: ad_id in: path required: true schema: type: string format: uuid title: Ad Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/dayparting/performance/{campaign_id}: get: tags: - campaigns - Dayparting - dayparting summary: Get Dayparting Performance operationId: get_dayparting_performance_api_campaigns_dayparting_performance__campaign_id__get security: - HTTPBearer: [] parameters: - name: campaign_id in: path required: true schema: type: string format: uuid title: Campaign Id - name: platform in: query required: false schema: anyOf: - type: string - type: 'null' title: Platform responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/geo/reverse-geocode: get: tags: - campaigns - Campaign Geo summary: Reverse Geocode Campaign Pin description: Resolve a map pin into postal/city/region fields for launch adapters. operationId: reverse_geocode_campaign_pin_api_campaigns_geo_reverse_geocode_get security: - HTTPBearer: [] parameters: - name: latitude in: query required: true schema: type: number maximum: 90 minimum: -90 title: Latitude - name: longitude in: query required: true schema: type: number maximum: 180 minimum: -180 title: Longitude - name: country_code in: query required: false schema: type: string minLength: 0 maxLength: 2 default: '' title: Country Code responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/CampaignReverseGeocodeResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/geo/postal-code: get: tags: - campaigns - Campaign Geo summary: Resolve Campaign Postal Code description: Resolve a typed postal code for map preview and platform fallback labels. operationId: resolve_campaign_postal_code_api_campaigns_geo_postal_code_get security: - HTTPBearer: [] parameters: - name: postal_code in: query required: true schema: type: string minLength: 2 maxLength: 16 title: Postal Code - name: country_code in: query required: false schema: type: string minLength: 0 maxLength: 2 default: '' title: Country Code responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/CampaignReverseGeocodeResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/queue: get: tags: - campaigns summary: Get Campaign Work Queue description: 'Three-bucket campaign work queue: live, needs-you, everything else. The dashboard endpoint answers "show me every ad"; this one answers "what should I launch today". The draft bucket is capped on purpose — see ``services.campaign_queue_read_model``.' operationId: get_campaign_work_queue_api_campaigns_queue_get security: - HTTPBearer: [] parameters: - name: draft_limit in: query required: false schema: type: integer default: 5 title: Draft Limit - name: window_days in: query required: false schema: type: integer default: 3 title: Window Days - name: counts_only in: query required: false schema: type: boolean default: false title: Counts Only responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/dashboard: get: tags: - campaigns summary: Get Campaign Dashboard Bundle operationId: get_campaign_dashboard_bundle_api_campaigns_dashboard_get security: - HTTPBearer: [] parameters: - name: page in: query required: false schema: type: integer default: 0 title: Page - name: limit in: query required: false schema: type: integer default: 200 title: Limit - name: mode in: query required: false schema: anyOf: - type: string - type: 'null' title: Mode - name: include_secondary in: query required: false schema: type: boolean default: true title: Include Secondary - name: platform_scope in: query required: false schema: anyOf: - type: string - type: 'null' title: Platform Scope - name: status_filter in: query required: false schema: anyOf: - type: string - type: 'null' title: Status Filter - name: source_filter in: query required: false schema: anyOf: - type: string - type: 'null' title: Source Filter - name: campaign_type_filter in: query required: false schema: anyOf: - type: string - type: 'null' title: Campaign Type Filter - name: search in: query required: false schema: anyOf: - type: string - type: 'null' title: Search - name: include_filter_counts in: query required: false schema: type: boolean default: false title: Include Filter Counts - name: range_start in: query required: false schema: anyOf: - type: string - type: 'null' title: Range Start - name: range_end in: query required: false schema: anyOf: - type: string - type: 'null' title: Range End responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaigns/all/count: get: tags: - campaigns summary: Get All Campaigns Count description: 'Get the total count of all campaigns across all types (email, social post, and online ads) for the company profile. Returns the total number and breakdown by campaign type.' operationId: get_all_campaigns_count_api_campaigns_all_count_get responses: '200': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /api/campaigns/all/active: get: tags: - campaigns summary: Get Active Campaigns description: 'Get all active campaigns across all types with details for dashboard display. Returns campaigns that are currently running or scheduled. Includes AI test results if available.' operationId: get_active_campaigns_api_campaigns_all_active_get responses: '200': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /api/consumer-group/create_group: post: tags: - consumer-group summary: Create User Group description: Create a new consumer group for the current company profile. operationId: create_user_group_api_consumer_group_create_group_post responses: '200': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /api/consumer-group/fetch_groups: get: tags: - consumer-group summary: Fetch Consumer Groups description: Fetch all consumer groups for the current company profile. operationId: fetch_consumer_groups_api_consumer_group_fetch_groups_get security: - HTTPBearer: [] parameters: - name: page in: query required: false schema: type: integer default: 0 title: Page - name: limit in: query required: false schema: type: integer default: 10 title: Limit responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/consumer-group/delete_group/{group_id}: delete: tags: - consumer-group summary: Delete Consumer Group description: Delete a consumer group and all its consumers. operationId: delete_consumer_group_api_consumer_group_delete_group__group_id__delete security: - HTTPBearer: [] parameters: - name: group_id in: path required: true schema: type: string format: uuid title: Group Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/consumer-group/upload_consumers/{group_id}: post: tags: - consumer-group summary: Upload Consumers To Group description: Upload consumers from a CSV or Excel file to a consumer group. operationId: upload_consumers_to_group_api_consumer_group_upload_consumers__group_id__post security: - HTTPBearer: [] parameters: - name: group_id in: path required: true schema: type: string format: uuid title: Group Id requestBody: required: true content: multipart/form-data: schema: $ref: '#/components/schemas/Body_upload_consumers_to_group_api_consumer_group_upload_consumers__group_id__post' responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/consumer-group/remove_consumers/{group_id}: post: tags: - consumer-group summary: Remove Consumers From Group description: Remove specific consumers from a group. operationId: remove_consumers_from_group_api_consumer_group_remove_consumers__group_id__post security: - HTTPBearer: [] parameters: - name: group_id in: path required: true schema: type: string format: uuid title: Group Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/consumer-group/get_consumers/{group_id}: get: tags: - consumer-group summary: Get Consumers description: Get consumers in a group with pagination. operationId: get_consumers_api_consumer_group_get_consumers__group_id__get security: - HTTPBearer: [] parameters: - name: group_id in: path required: true schema: type: string format: uuid title: Group Id - name: page in: query required: false schema: type: integer minimum: 0 default: 0 title: Page - name: limit in: query required: false schema: type: integer maximum: 100 minimum: 1 default: 20 title: Limit responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/company-profile/: get: tags: - company-profile summary: Get Company Profiles description: 'Get company profiles the current user has access to in the ACTIVE organization. RBAC Logic: - Org owners/admins see ALL profiles in the active organization - Members see only profiles they have explicit CompanyProfileAccess to - Only org admins/owners can query archived or deleted profiles or all profiles (no status filter) Multi-org Support: - Uses X-Organization-Id header to determine which organization''s profiles to return - Only returns profiles from the active organization - Validates user has access to the organization via get_active_organization_id dependency' operationId: get_company_profiles_api_company_profile__get security: - HTTPBearer: [] parameters: - name: status in: query required: false schema: anyOf: - $ref: '#/components/schemas/CompanyProfileStatus' - type: 'null' description: Filter profiles by status (active, archived, deleted). If not specified, returns all profiles. Only org admins can view non-active profiles. title: Status description: Filter profiles by status (active, archived, deleted). If not specified, returns all profiles. Only org admins can view non-active profiles. - name: scope in: query required: false schema: anyOf: - $ref: '#/components/schemas/CompanyProfileListScope' - type: 'null' description: Optional scoped list query. 'active_org' returns active profiles in the active organization for admins. 'my_accessible' returns active profiles visible to the current user. title: Scope description: Optional scoped list query. 'active_org' returns active profiles in the active organization for admins. 'my_accessible' returns active profiles visible to the current user. - name: force_refresh in: query required: false schema: type: boolean description: Bypass the shared response cache default: false title: Force Refresh description: Bypass the shared response cache - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/CompanyProfileResponse' title: Response Get Company Profiles Api Company Profile Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' post: tags: - company-profile summary: Create Company Profile description: 'Create a new company profile (project) in the user''s organization. Each profile represents a separate project the organization is working on. Multi-org: Creates profile in the active organization resolved from X-Organization-Id (with fallback to the user''s first active organization).' operationId: create_company_profile_api_company_profile__post security: - HTTPBearer: [] parameters: - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CompanyProfileCreate' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/CompanyProfileResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/company-profile/summaries: get: tags: - company-profile summary: Get Company Profile Summaries description: Return the compact active/archived profile list used by workspace navigation. operationId: get_company_profile_summaries_api_company_profile_summaries_get security: - HTTPBearer: [] parameters: - name: force_refresh in: query required: false schema: type: boolean description: Bypass the shared response cache default: false title: Force Refresh description: Bypass the shared response cache - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/CompanyProfileSummaryResponse' title: Response Get Company Profile Summaries Api Company Profile Summaries Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/company-profile/{profile_id}: get: tags: - company-profile summary: Get Company Profile By Id description: 'Get a specific company profile by ID. Validates that the profile belongs to the user''s organization.' operationId: get_company_profile_by_id_api_company_profile__profile_id__get security: - HTTPBearer: [] parameters: - name: profile_id in: path required: true schema: type: string format: uuid title: Profile Id - name: force_refresh in: query required: false schema: type: boolean description: Bypass the shared response cache default: false title: Force Refresh description: Bypass the shared response cache responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/CompanyProfileResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' put: tags: - company-profile summary: Update Company Profile description: 'Update an existing company profile. Requires contributor or admin access.' operationId: update_company_profile_api_company_profile__profile_id__put security: - HTTPBearer: [] parameters: - name: profile_id in: path required: true schema: type: string format: uuid title: Profile Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CompanyProfileUpdate' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/CompanyProfileResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' delete: tags: - company-profile summary: Delete Company Profile description: 'Hard delete a company profile (permanently removes from database). Requires ownership-level access (org owner/admin or profile creator). Note: Consider using PATCH /{profile_id}/status with status=''deleted'' for soft delete instead.' operationId: delete_company_profile_api_company_profile__profile_id__delete security: - HTTPBearer: [] parameters: - name: profile_id in: path required: true schema: type: string format: uuid title: Profile Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/company-profile/{profile_id}/status: patch: tags: - company-profile summary: Update Company Profile Status description: 'Update the status of a company profile (archive, delete, or restore to active). Requires ownership-level access (org owner/admin or profile creator). This is a soft delete/archive - data is preserved. - Setting to ACTIVE restores the profile - Restoring a DELETED profile does not restart deleted onboarding workflows - Setting to ARCHIVED/DELETED hides the profile from normal views' operationId: update_company_profile_status_api_company_profile__profile_id__status_patch security: - HTTPBearer: [] parameters: - name: profile_id in: path required: true schema: type: string format: uuid title: Profile Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CompanyProfileStatusUpdateRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/CompanyProfileStatusUpdateResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/company-profile/{profile_id}/company-messages: post: tags: - company-profile summary: Add Company Message description: 'Add a company message to a specific company profile. Validates that the profile belongs to the user''s organization.' operationId: add_company_message_api_company_profile__profile_id__company_messages_post security: - HTTPBearer: [] parameters: - name: profile_id in: path required: true schema: type: string format: uuid title: Profile Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CompanyMessageCreate' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/CompanyProfileResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/company-profile/{profile_id}/company-messages/{message_id}: delete: tags: - company-profile summary: Delete Company Message description: 'Delete a company message from a specific company profile. Validates that the profile belongs to the user''s organization.' operationId: delete_company_message_api_company_profile__profile_id__company_messages__message_id__delete security: - HTTPBearer: [] parameters: - name: profile_id in: path required: true schema: type: string format: uuid title: Profile Id - name: message_id in: path required: true schema: type: string format: uuid title: Message Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/CompanyProfileResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/company-profile/{profile_id}/upload-image: post: tags: - company-profile summary: Upload Image description: 'Upload an example image to GCS for a specific company profile. Validates that the profile belongs to the user''s organization.' operationId: upload_image_api_company_profile__profile_id__upload_image_post security: - HTTPBearer: [] parameters: - name: profile_id in: path required: true schema: type: string format: uuid title: Profile Id requestBody: required: true content: multipart/form-data: schema: $ref: '#/components/schemas/Body_upload_image_api_company_profile__profile_id__upload_image_post' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/CompanyProfileResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/company-profile/{profile_id}/company-images/{image_id}: delete: tags: - company-profile summary: Delete Company Image description: 'Delete a company image from a specific company profile. Validates that the profile belongs to the user''s organization.' operationId: delete_company_image_api_company_profile__profile_id__company_images__image_id__delete security: - HTTPBearer: [] parameters: - name: profile_id in: path required: true schema: type: string format: uuid title: Profile Id - name: image_id in: path required: true schema: type: string format: uuid title: Image Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/CompanyProfileResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/company-profile/{profile_id}/stylebook: get: tags: - company-profile summary: Get Company Stylebook operationId: get_company_stylebook_api_company_profile__profile_id__stylebook_get security: - HTTPBearer: [] parameters: - name: profile_id in: path required: true schema: type: string format: uuid title: Profile Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/CompanyStylebookResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' put: tags: - company-profile summary: Update Company Stylebook operationId: update_company_stylebook_api_company_profile__profile_id__stylebook_put security: - HTTPBearer: [] parameters: - name: profile_id in: path required: true schema: type: string format: uuid title: Profile Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CompanyStylebookUpdateRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/CompanyStylebookResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/company-profile/{profile_id}/stylebook/generate: post: tags: - company-profile summary: Generate Company Stylebook operationId: generate_company_stylebook_api_company_profile__profile_id__stylebook_generate_post security: - HTTPBearer: [] parameters: - name: profile_id in: path required: true schema: type: string format: uuid title: Profile Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CompanyStylebookGenerateRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/CompanyStylebookResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/company-profile/{profile_id}/is-complete: get: tags: - company-profile summary: Check Profile Completion description: "Check if a specific company profile and marketing profile are complete.\nValidates that the profile belongs\ \ to the user's organization.\n\nTwo signals, two meanings:\n* ``is_completed`` — profile-content signal (name/description/brand\n\ \ attributes filled in). Mutated here if the underlying columns are now\n populated. This is NOT the onboarding-completion\ \ signal.\n* ``marketing_profile_completed`` — onboarding signal derived from the\n shared ``get_marketing_profile_completion``\ \ helper, which reads the\n BrandGenerationWorkflow projection the same way list/detail responses do." operationId: check_profile_completion_api_company_profile__profile_id__is_complete_get security: - HTTPBearer: [] parameters: - name: profile_id in: path required: true schema: type: string format: uuid title: Profile Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/company-profile/{profile_id}/competitive-analysis: put: tags: - company-profile summary: Update Competitive Analysis description: 'Update competitive analysis for a specific company profile. Validates that the profile belongs to the user''s organization.' operationId: update_competitive_analysis_api_company_profile__profile_id__competitive_analysis_put security: - HTTPBearer: [] parameters: - name: profile_id in: path required: true schema: type: string format: uuid title: Profile Id requestBody: required: true content: application/json: schema: type: object additionalProperties: true title: Competitive Analysis responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/company-profile/{profile_id}/marketing-strategy: put: tags: - company-profile summary: Update Marketing Strategy description: 'Update marketing strategy for a specific company profile. Validates that the profile belongs to the user''s organization.' operationId: update_marketing_strategy_api_company_profile__profile_id__marketing_strategy_put security: - HTTPBearer: [] parameters: - name: profile_id in: path required: true schema: type: string format: uuid title: Profile Id requestBody: required: true content: application/json: schema: type: object additionalProperties: true title: Marketing Strategy responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/company-profile/{profile_id}/upload-logo: post: tags: - company-profile summary: Upload Company Logo description: 'Upload a custom logo for a specific company profile. Validates that the profile belongs to the user''s organization.' operationId: upload_company_logo_api_company_profile__profile_id__upload_logo_post security: - HTTPBearer: [] parameters: - name: profile_id in: path required: true schema: type: string format: uuid title: Profile Id requestBody: required: true content: multipart/form-data: schema: $ref: '#/components/schemas/Body_upload_company_logo_api_company_profile__profile_id__upload_logo_post' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/CompanyProfileResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/company-profile/{profile_id}/files: get: tags: - company-profile summary: Get Company Files description: 'Get all files associated with a company profile. Validates that the profile belongs to the user''s organization.' operationId: get_company_files_api_company_profile__profile_id__files_get security: - HTTPBearer: [] parameters: - name: profile_id in: path required: true schema: type: string format: uuid title: Profile Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/company-profile/{profile_id}/files/{file_id}/download: get: tags: - company-profile summary: Download Company File description: 'Download a specific file associated with a company profile. Validates that the profile belongs to the user''s organization.' operationId: download_company_file_api_company_profile__profile_id__files__file_id__download_get security: - HTTPBearer: [] parameters: - name: profile_id in: path required: true schema: type: string format: uuid title: Profile Id - name: file_id in: path required: true schema: type: string format: uuid title: File Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/company-profile/{profile_id}/files/{file_id}/info: get: tags: - company-profile summary: Get File Info description: 'Get detailed information about a specific file. Validates that the profile belongs to the user''s organization.' operationId: get_file_info_api_company_profile__profile_id__files__file_id__info_get security: - HTTPBearer: [] parameters: - name: profile_id in: path required: true schema: type: string format: uuid title: Profile Id - name: file_id in: path required: true schema: type: string format: uuid title: File Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/company-profile-access/{profile_id}/access: get: tags: - company-profile-access summary: List Project Access description: 'Get all users who have access to a specific project. Only project admins and org admins/owners can view access list.' operationId: list_project_access_api_company_profile_access__profile_id__access_get security: - HTTPBearer: [] parameters: - name: profile_id in: path required: true schema: type: string format: uuid title: Profile Id - name: force_refresh in: query required: false schema: type: boolean description: Bypass the shared response cache default: false title: Force Refresh description: Bypass the shared response cache - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/CompanyProfileAccessListResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' post: tags: - company-profile-access summary: Grant Project Access description: 'Grant a user access to a project. Only project admins and org admins/owners can grant access.' operationId: grant_project_access_api_company_profile_access__profile_id__access_post security: - HTTPBearer: [] parameters: - name: profile_id in: path required: true schema: type: string format: uuid title: Profile Id - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CompanyProfileAccessGrantRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/CompanyProfileAccessResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/company-profile-access/{profile_id}/access/{user_id}: put: tags: - company-profile-access summary: Update Project Access description: 'Update a user''s project access role. Only project admins and org admins/owners can update access.' operationId: update_project_access_api_company_profile_access__profile_id__access__user_id__put security: - HTTPBearer: [] parameters: - name: profile_id in: path required: true schema: type: string format: uuid title: Profile Id - name: user_id in: path required: true schema: type: string format: uuid title: User Id - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CompanyProfileAccessUpdateRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/CompanyProfileAccessResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' delete: tags: - company-profile-access summary: Revoke Project Access description: 'Revoke a user''s access to a project. Only project admins and org admins/owners can revoke access.' operationId: revoke_project_access_api_company_profile_access__profile_id__access__user_id__delete security: - HTTPBearer: [] parameters: - name: profile_id in: path required: true schema: type: string format: uuid title: Profile Id - name: user_id in: path required: true schema: type: string format: uuid title: User Id - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/company-profile-access/{profile_id}/access/bulk: post: tags: - company-profile-access summary: Bulk Grant Project Access description: 'Grant project access to multiple users at once. Only project admins and org admins/owners can grant bulk access.' operationId: bulk_grant_project_access_api_company_profile_access__profile_id__access_bulk_post security: - HTTPBearer: [] parameters: - name: profile_id in: path required: true schema: type: string format: uuid title: Profile Id - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/BulkCompanyProfileAccessRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/BulkCompanyProfileAccessResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/organization/data-download: get: tags: - organization summary: Download Organization Data description: 'Download a restricted export bundle for the authenticated admin/owner. Scope is intentionally limited to the current authenticated user and the currently selected company profile within the active organization.' operationId: download_organization_data_api_v1_organization_data_download_get security: - HTTPBearer: [] parameters: - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/organization: get: tags: - organization summary: Get Organization description: 'Get current user''s organization information including all members. Requires: Organization owner or admin role in the active organization (from X-Organization-Id header) Returns sensitive data: - Invite token (for inviting new members) - Full members list with roles' operationId: get_organization_api_v1_organization_get security: - HTTPBearer: [] parameters: - name: force_refresh in: query required: false schema: type: boolean description: Bypass the shared response cache default: false title: Force Refresh description: Bypass the shared response cache - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/OrganizationResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/organization/billing-metadata: get: tags: - organization summary: Get Organization Billing Metadata description: 'Get the minimal organization billing metadata required by recovery surfaces. Unlike the full organization detail route, this excludes invite tokens, member lists, and other admin-only organization management data.' operationId: get_organization_billing_metadata_api_v1_organization_billing_metadata_get security: - HTTPBearer: [] parameters: - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/OrganizationBillingMetadataResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/organization/list: get: tags: - organization summary: List User Organizations description: 'Get all organizations the current user belongs to. Returns a lightweight list of organizations with: - Organization basic info - User''s role in each organization - Member count (not full member list) This is used for organization selection/switching in multi-org UI.' operationId: list_user_organizations_api_v1_organization_list_get security: - HTTPBearer: [] parameters: - name: force_refresh in: query required: false schema: type: boolean description: Bypass the shared response cache default: false title: Force Refresh description: Bypass the shared response cache responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/OrganizationListItemResponse' title: Response List User Organizations Api V1 Organization List Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/organization/invites: get: tags: - organization summary: List Organization Invites description: List organization invites. Defaults to pending invites only. operationId: list_organization_invites_api_v1_organization_invites_get security: - HTTPBearer: [] parameters: - name: status in: query required: false schema: anyOf: - type: string - type: 'null' title: Status - name: status_filter in: query required: false schema: anyOf: - type: string - type: 'null' title: Status Filter - name: force_refresh in: query required: false schema: type: boolean description: Bypass the shared response cache default: false title: Force Refresh description: Bypass the shared response cache - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/OrganizationInviteListResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' post: tags: - organization summary: Create Organization Invites description: Create email-based organization invites. operationId: create_organization_invites_api_v1_organization_invites_post security: - HTTPBearer: [] parameters: - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateOrganizationInvitesRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/CreateOrganizationInvitesResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/organization/invite-domain-settings: get: tags: - organization summary: Get Invite Domain Settings Endpoint operationId: get_invite_domain_settings_endpoint_api_v1_organization_invite_domain_settings_get security: - HTTPBearer: [] parameters: - name: force_refresh in: query required: false schema: type: boolean description: Bypass the shared response cache default: false title: Force Refresh description: Bypass the shared response cache - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/InviteDomainRestrictionResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' put: tags: - organization summary: Update Invite Domain Settings Endpoint operationId: update_invite_domain_settings_endpoint_api_v1_organization_invite_domain_settings_put security: - HTTPBearer: [] parameters: - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/InviteDomainRestrictionRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/InviteDomainRestrictionResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/organization/invites/link: post: tags: - organization summary: Create Invite Link operationId: create_invite_link_api_v1_organization_invites_link_post security: - HTTPBearer: [] parameters: - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/OrganizationInviteLinkRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/OrganizationInviteLinkResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' delete: tags: - organization summary: Disable Invite Link description: Disable the current open invite link. operationId: disable_invite_link_api_v1_organization_invites_link_delete security: - HTTPBearer: [] parameters: - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/OrganizationInviteActionResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/organization/invites/{invite_id}/resend: post: tags: - organization summary: Resend Invite operationId: resend_invite_api_v1_organization_invites__invite_id__resend_post security: - HTTPBearer: [] parameters: - name: invite_id in: path required: true schema: type: string format: uuid title: Invite Id - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/OrganizationInviteActionResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/organization/invites/{invite_id}/revoke: post: tags: - organization summary: Revoke Invite operationId: revoke_invite_api_v1_organization_invites__invite_id__revoke_post security: - HTTPBearer: [] parameters: - name: invite_id in: path required: true schema: type: string format: uuid title: Invite Id - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/OrganizationInviteActionResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/organization/generate-invite-token: post: tags: - organization summary: Generate Invite Token operationId: generate_invite_token_api_v1_organization_generate_invite_token_post security: - HTTPBearer: [] parameters: - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/GenerateInviteTokenResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/organization/invite-info: get: tags: - organization summary: Get Invite Info operationId: get_invite_info_api_v1_organization_invite_info_get parameters: - name: token in: query required: true schema: type: string title: Token responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/OrganizationInviteInfoResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/organization/join: post: tags: - organization summary: Join Organization operationId: join_organization_api_v1_organization_join_post requestBody: content: application/json: schema: $ref: '#/components/schemas/JoinOrganizationRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/JoinOrganizationResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/v1/organization/members: get: tags: - organization summary: Get Organization Members description: Get list of all members in the active organization (from X-Organization-Id header). operationId: get_organization_members_api_v1_organization_members_get security: - HTTPBearer: [] parameters: - name: force_refresh in: query required: false schema: type: boolean description: Bypass the shared response cache default: false title: Force Refresh description: Bypass the shared response cache - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/OrganizationMemberResponse' title: Response Get Organization Members Api V1 Organization Members Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/organization/invite/email: post: tags: - organization summary: Send Invite Email operationId: send_invite_email_api_v1_organization_invite_email_post security: - HTTPBearer: [] parameters: - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SendOrganizationInviteEmailRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/SendOrganizationInviteEmailResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/organization/members/{user_id}/role: put: tags: - organization summary: Update Member Role description: 'Update a member''s organization role. Only owners can update roles (assign admin or change admin back to member). Users cannot modify their own role.' operationId: update_member_role_api_v1_organization_members__user_id__role_put security: - HTTPBearer: [] parameters: - name: user_id in: path required: true schema: type: string format: uuid title: User Id - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/OrganizationRoleUpdateRequest' responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/organization/members/{user_id}: delete: tags: - organization summary: Remove Member description: 'Remove a member from the organization. Only owners and admins can remove members. Cannot remove the organization owner or yourself.' operationId: remove_member_api_v1_organization_members__user_id__delete security: - HTTPBearer: [] parameters: - name: user_id in: path required: true schema: type: string format: uuid title: User Id - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/organization/members/{user_id}/status: put: tags: - organization summary: Update Member Status description: 'Suspend or activate a member. Only owners and admins can change member status. Cannot suspend owner or yourself.' operationId: update_member_status_api_v1_organization_members__user_id__status_put security: - HTTPBearer: [] parameters: - name: user_id in: path required: true schema: type: string format: uuid title: User Id - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/MemberStatusUpdateRequest' responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/organization/transfer-ownership: post: tags: - organization summary: Transfer Ownership description: 'Transfer organization ownership to another user. Only the current owner can transfer ownership.' operationId: transfer_ownership_api_v1_organization_transfer_ownership_post security: - HTTPBearer: [] parameters: - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/TransferOwnershipRequest' responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/organization/members/{user_id}/permissions: get: tags: - organization summary: Get Member Permissions description: 'Get a summary of a user''s permissions within the active organization. Only admins/owners can view other users'' permissions. Users can view their own permissions.' operationId: get_member_permissions_api_v1_organization_members__user_id__permissions_get security: - HTTPBearer: [] parameters: - name: user_id in: path required: true schema: type: string format: uuid title: User Id - name: force_refresh in: query required: false schema: type: boolean description: Bypass the shared response cache default: false title: Force Refresh description: Bypass the shared response cache - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/UserPermissionSummary' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/preferences: get: tags: - user-preferences summary: Get User Preferences description: 'Get current user''s preferences. Creates default preferences if they don''t exist. Requires authentication.' operationId: get_user_preferences_api_preferences_get responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/UserPreferencesResponse' security: - HTTPBearer: [] put: tags: - user-preferences summary: Update User Preferences description: "Update user preferences.\n\nMerges the provided preferences with existing preferences.\nDoes not replace\ \ the entire preferences object.\nRequires authentication.\n\nExample request:\n{\n \"preferences\": {\n \"tutorial_completed\"\ : true,\n \"daily_digest_theme\": \"dark\"\n }\n}" operationId: update_user_preferences_api_preferences_put requestBody: content: application/json: schema: $ref: '#/components/schemas/UserPreferencesUpdate' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/UserPreferencesResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] delete: tags: - user-preferences summary: Reset User Preferences description: 'Reset user preferences to empty object. This does not delete the preferences record, just clears all values. Requires authentication.' operationId: reset_user_preferences_api_preferences_delete responses: '200': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /api/preferences/config: get: tags: - user-preferences summary: Get User Preferences Config description: 'Get only the preferences configuration object (without metadata). Lightweight endpoint for frontend to quickly fetch user settings. Requires authentication.' operationId: get_user_preferences_config_api_preferences_config_get responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/UserPreferencesPartial' security: - HTTPBearer: [] /api/preferences/release-announcements/claim: post: tags: - user-preferences summary: Claim Release Announcement description: 'Atomically claim a release spotlight and mark its visible digest as covered. The user''s canonical preference row is locked before inspecting the spotlight receipt. Exactly one concurrent request can therefore win on databases that support ``SELECT ... FOR UPDATE`` (including production PostgreSQL). SQLite uses ``BEGIN IMMEDIATE`` before the read to provide the same exact-once behavior; exhausted lock contention fails closed with a retryable 503. Each release is persisted under its own top-level key so a later generic preference merge cannot replace an entire receipt map.' operationId: claim_release_announcement_api_preferences_release_announcements_claim_post requestBody: content: application/json: schema: $ref: '#/components/schemas/ReleaseAnnouncementClaimRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ReleaseAnnouncementClaimResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/document-jobs: get: tags: - document-jobs summary: List Document Jobs operationId: list_document_jobs_api_document_jobs_get security: - HTTPBearer: [] parameters: - name: company_profile_id in: query required: true schema: type: string format: uuid title: Company Profile Id - name: product_offering_id in: query required: false schema: anyOf: - type: string format: uuid - type: 'null' title: Product Offering Id - name: doc_type in: query required: false schema: anyOf: - type: string - type: 'null' title: Doc Type - name: status in: query required: false schema: anyOf: - type: string - type: 'null' title: Status - name: page in: query required: false schema: type: integer default: 0 title: Page - name: page_size in: query required: false schema: type: integer default: 20 title: Page Size responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/DocumentJobsResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/document-jobs/{job_id}: get: tags: - document-jobs summary: Get Document Job operationId: get_document_job_api_document_jobs__job_id__get security: - HTTPBearer: [] parameters: - name: job_id in: path required: true schema: type: string format: uuid title: Job Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/DocumentJobDetailResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/document-jobs/{job_id}/sign: get: tags: - document-jobs summary: Sign Document Download operationId: sign_document_download_api_document_jobs__job_id__sign_get security: - HTTPBearer: [] parameters: - name: job_id in: path required: true schema: type: string format: uuid title: Job Id - name: format in: query required: true schema: type: string title: Format responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/SignedUrlResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/document-jobs/{job_id}/preview-html: get: tags: - document-jobs summary: Get Document Preview Html operationId: get_document_preview_html_api_document_jobs__job_id__preview_html_get security: - HTTPBearer: [] parameters: - name: job_id in: path required: true schema: type: string format: uuid title: Job Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/HtmlPreviewResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/activity/events: post: tags: - user-activity summary: Record Product Events operationId: record_product_events_api_activity_events_post requestBody: content: application/json: schema: $ref: '#/components/schemas/ProductEventsBatchIn' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ProductEventsBatchResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/activity/ping: post: tags: - user-activity summary: Record Presence Ping operationId: record_presence_ping_api_activity_ping_post requestBody: content: application/json: schema: $ref: '#/components/schemas/PresencePingIn' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/PresencePingResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/activity/presence: get: tags: - user-activity summary: List Presence operationId: list_presence_api_activity_presence_get security: - HTTPBearer: [] parameters: - name: organization_id in: query required: false schema: anyOf: - type: string format: uuid - type: 'null' title: Organization Id - name: active_window_seconds in: query required: false schema: type: integer maximum: 3600 minimum: 15 default: 90 title: Active Window Seconds - name: interaction_window_seconds in: query required: false schema: type: integer maximum: 86400 minimum: 30 default: 300 title: Interaction Window Seconds - name: limit in: query required: false schema: type: integer maximum: 500 minimum: 1 default: 200 title: Limit responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/PresenceListResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/activity/users/{user_id}/timeline: get: tags: - user-activity summary: Get User Activity Timeline operationId: get_user_activity_timeline_api_activity_users__user_id__timeline_get security: - HTTPBearer: [] parameters: - name: user_id in: path required: true schema: type: string format: uuid title: User Id - name: organization_id in: query required: false schema: anyOf: - type: string format: uuid - type: 'null' title: Organization Id - name: from in: query required: false schema: anyOf: - type: string format: date-time - type: 'null' title: From - name: to in: query required: false schema: anyOf: - type: string format: date-time - type: 'null' title: To - name: limit in: query required: false schema: type: integer maximum: 500 minimum: 1 default: 200 title: Limit responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ProductEventTimelineResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/url-shortener/shorten/: post: tags: - url-shortener summary: Create Shortened Url description: "Creates a new shortened URL.\n\nArgs:\n url (ShortenedURLCreate): URL creation data with long_url and\ \ campaign_id\n request (Request): FastAPI request object\n db (Session, optional): Database session. Defaults\ \ from dependency.\n current_user (User, optional): The current authenticated user. Defaults from dependency.\n\ \nReturns:\n ShortenedURLSchema: The created shortened URL data\n\nRaises:\n HTTPException: If there is an error\ \ creating the shortened URL" operationId: create_shortened_url_api_url_shortener_shorten__post requestBody: content: application/json: schema: $ref: '#/components/schemas/ShortenedURLCreate' required: true responses: '201': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ShortenedURL' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/url-shortener/s/{short_code}: get: tags: - url-shortener summary: Redirect To Long Url description: "Redirects to the original long URL based on the short code.\n\nArgs:\n short_code (str): The short\ \ code to redirect from\n db (Session, optional): Database session. Defaults from dependency.\n request (Request,\ \ optional): FastAPI request object. Defaults to None.\n\nReturns:\n RedirectResponse: Redirect to the original\ \ URL\n\nRaises:\n HTTPException: If the short URL is not found" operationId: redirect_to_long_url_api_url_shortener_s__short_code__get parameters: - name: short_code in: path required: true schema: type: string title: Short Code responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/content-editing/edit-image: post: tags: - content-editing summary: Edit Image description: 'Process an image using AI to edit based on the prompt - Takes an uploaded image - Takes a text prompt describing the desired edits - Optional flag to use company style - Optional product image to insert into the scene - Optional logo image to incorporate naturally - Returns original image URL and list of edited image URLs' operationId: edit_image_api_content_editing_edit_image_post requestBody: content: multipart/form-data: schema: $ref: '#/components/schemas/Body_edit_image_api_content_editing_edit_image_post' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ContentEditResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/content-editing/generate-image: post: tags: - content-editing summary: Generate Image description: 'Generate images based on a text prompt - Takes a text prompt describing the desired image - Optional size parameter in format "widthxheight" - Optional aspect_ratio parameter ("1:1", "3:4", "4:3", "9:16", "16:9") - Optional number of images to generate - Optional reference images to guide the generation - Optional use_company_style flag to incorporate company branding - Returns URLs to the generated images' operationId: generate_image_api_content_editing_generate_image_post requestBody: content: multipart/form-data: schema: $ref: '#/components/schemas/Body_generate_image_api_content_editing_generate_image_post' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ImageGenerationResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/content-editing/generate-ideas: get: tags: - content-editing summary: Generate Ideas description: 'Generate creative ideas for image editing based on company profile - Takes optional number of ideas to generate (default: 4) - Optional edit_image flag to determine whether to generate ideas for editing existing images or creating new ones - Uses company profile information if available - Returns a list of creative idea prompts' operationId: generate_ideas_api_content_editing_generate_ideas_get security: - HTTPBearer: [] parameters: - name: num_ideas in: query required: false schema: type: integer default: 4 title: Num Ideas - name: edit_image in: query required: false schema: type: boolean default: false title: Edit Image responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/CreativeIdeasResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/images/replace: post: tags: - image-operations - images summary: Replace Image description: "Replace an existing image in GCS with new image data.\n\nArgs:\n request: Request object containing\ \ URL and image data\n\nReturns:\n JSONResponse with result" operationId: replace_image_api_images_replace_post requestBody: content: application/json: schema: $ref: '#/components/schemas/ReplaceImageRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '404': description: Not found '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/images/replace-upload: post: tags: - image-operations - images summary: Replace Image Upload description: "Replace an existing image in GCS with a new uploaded file.\n\nArgs:\n url: GCS URL of the image to\ \ replace\n file: New image file to upload\n content_type: Optional MIME type override\n\nReturns:\n JSONResponse\ \ with result" operationId: replace_image_upload_api_images_replace_upload_post requestBody: content: multipart/form-data: schema: $ref: '#/components/schemas/Body_replace_image_upload_api_images_replace_upload_post' required: true responses: '200': description: Successful Response content: application/json: schema: {} '404': description: Not found '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/instagram/auth: get: tags: - external-platform summary: Instagram Auth description: "Generate an OAuth URL for user authentication.\n\nArgs:\n login_type: The type of login flow to use.\ \ Defaults to \"instagram\".\n Set to \"facebook\" to use Facebook login instead.\n db: Database\ \ session\n company_profile: Current company profile (injected via dependency)\n\nReturns:\n InstagramAuthResponseModel:\ \ Response with authentication URL" operationId: instagram_auth_api_external_platform_instagram_auth_get security: - HTTPBearer: [] parameters: - name: login_type in: query required: false schema: type: string default: instagram title: Login Type responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/InstagramAuthResponseModel' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/external-platform/instagram/callback: get: tags: - external-platform summary: Instagram Callback description: "Handle Instagram OAuth callback.\n\nArgs:\n code: Authorization code from OAuth provider\n state:\ \ State parameter containing user ID and login type\n error: Error code if authorization failed\n error_reason:\ \ Reason for error if authorization failed\n error_description: Detailed error description if authorization failed\n\ \ db: Database session\n \nReturns:\n RedirectResponse: Redirect to frontend with success or error" operationId: instagram_callback_api_external_platform_instagram_callback_get parameters: - name: code in: query required: false schema: type: string title: Code - name: state in: query required: false schema: type: string title: State - name: error in: query required: false schema: type: string title: Error - name: error_reason in: query required: false schema: type: string title: Error Reason - name: error_description in: query required: false schema: type: string title: Error Description responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/external-platform/instagram/disconnect: post: tags: - external-platform summary: Disconnect Instagram operationId: disconnect_instagram_api_external_platform_instagram_disconnect_post responses: '200': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /api/external-platform/instagram/create-post: post: tags: - external-platform summary: Create Instagram Post description: "Create an Instagram post with an image.\n\nThis endpoint creates a standalone Instagram post not associated\ \ with a campaign.\nIt handles authentication, validates the token, and posts content to Instagram.\n\nArgs:\n \ \ post_data: Post content and account details\n db: Database session\n company_profile: Current company profile\ \ (injected via dependency)\n\nReturns:\n PostResponseModel: Response with post ID" operationId: create_instagram_post_api_external_platform_instagram_create_post_post requestBody: content: application/json: schema: $ref: '#/components/schemas/CreatePostRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/PostResponseModel' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/instagram/delete-post: post: tags: - external-platform summary: Delete Instagram Post description: "Delete an Instagram post by ID.\n\nThis endpoint deletes a post from Instagram and updates the corresponding\n\ database records in the SocialPostCampaign table.\n\nArgs:\n delete_data: Post ID to delete\n db: Database session\n\ \ company_profile: Current company profile (injected via dependency)\n\nReturns:\n DeletePostResponseModel:\ \ Response with success status" operationId: delete_instagram_post_api_external_platform_instagram_delete_post_post requestBody: content: application/json: schema: $ref: '#/components/schemas/DeletePostRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/DeletePostResponseModel' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/instagram/posts: get: tags: - external-platform summary: Get Instagram Posts description: "Get recent Instagram posts for a specific account.\n\nArgs:\n instagram_account_id: Instagram business\ \ account ID\n limit: Maximum number of posts to return\n db: Database session\n company_profile: Current\ \ company profile (injected via dependency)\n\nReturns:\n dict: Response with list of posts" operationId: get_instagram_posts_api_external_platform_instagram_posts_get security: - HTTPBearer: [] parameters: - name: instagram_account_id in: query required: true schema: type: string title: Instagram Account Id - name: limit in: query required: false schema: type: integer default: 25 title: Limit responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/external-platform/instagram/post-metrics: post: tags: - external-platform summary: Get Post Metrics description: "Get metrics for a specific Instagram post.\n\nArgs:\n metrics_data: Post ID and metrics to retrieve\n\ \ db: Database session\n company_profile: Current company profile (injected via dependency)\n\nReturns:\n \ \ dict: Response with metrics data" operationId: get_post_metrics_api_external_platform_instagram_post_metrics_post requestBody: content: application/json: schema: $ref: '#/components/schemas/PostMetricsRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/instagram/batch-post-metrics: post: tags: - external-platform summary: Get Batch Post Metrics description: "Get metrics for multiple Instagram posts in a single request.\n\nArgs:\n batch_data: Instagram account\ \ ID and list of post IDs\n db: Database session\n company_profile: Current company profile (injected via dependency)\n\ \nReturns:\n dict: Response with metrics for all posts" operationId: get_batch_post_metrics_api_external_platform_instagram_batch_post_metrics_post requestBody: content: application/json: schema: $ref: '#/components/schemas/BatchPostMetricsRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/instagram/accounts: get: tags: - external-platform summary: Get Instagram Accounts description: "Get a list of Instagram business accounts that the user has access to.\nThis endpoint handles both Instagram\ \ direct authentication and Facebook authentication.\n\nArgs:\n db: Database session\n company_profile: Current\ \ company profile (injected via dependency)\n\nReturns:\n dict: Response with list of Instagram accounts and authentication\ \ method" operationId: get_instagram_accounts_api_external_platform_instagram_accounts_get responses: '200': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /api/external-platform/instagram/activation: get: tags: - external-platform summary: Get Instagram Activation operationId: get_instagram_activation_api_external_platform_instagram_activation_get responses: '200': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /api/external-platform/instagram/activate: post: tags: - external-platform summary: Activate Instagram Identity operationId: activate_instagram_identity_api_external_platform_instagram_activate_post requestBody: content: application/json: schema: $ref: '#/components/schemas/InstagramActivateIdentityRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/instagram/post-campaign: post: tags: - external-platform summary: Post Campaign To Instagram description: "Post a campaign's content to Instagram.\n\nThis endpoint creates a post on Instagram using content from\ \ a SocialPostCampaign.\nIt supports both single image posts and carousel posts (multiple images).\n\nArgs:\n post_data:\ \ Campaign and Instagram account info\n db: Database session\n company_profile: Current company profile (injected\ \ via dependency)\n\nReturns:\n PostResponseModel: Response with post ID and status\n\nNotes:\n - For carousel\ \ posts, multiple images must be provided in the campaign\n - If posting a carousel, all images should have the\ \ same aspect ratio\n - Carousel posts are limited to 10 images" operationId: post_campaign_to_instagram_api_external_platform_instagram_post_campaign_post requestBody: content: application/json: schema: $ref: '#/components/schemas/InstagramPostCampaignRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/PostResponseModel' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/meta/campaign/{campaign_id}/status: get: tags: - external-platform summary: Get Meta Campaign Status description: Fetch real-time Meta campaign status (with optional adset/ad) and map to canonical states. operationId: get_meta_campaign_status_api_external_platform_meta_campaign__campaign_id__status_get security: - HTTPBearer: [] parameters: - name: campaign_id in: path required: true schema: type: string title: Campaign Id - name: adset_id in: query required: false schema: anyOf: - type: string - type: 'null' title: Adset Id - name: ad_id in: query required: false schema: anyOf: - type: string - type: 'null' title: Ad Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/external-platform/meta/auth: get: tags: - external-platform summary: Meta Auth description: 'Get OAuth authorization URL. - auth_type = ''facebook'' returns Meta (Facebook) Ads auth URL and redirects to /meta/callback - auth_type = ''instagram'' returns Instagram auth URL and redirects to /instagram/callback (for social posting)' operationId: meta_auth_api_external_platform_meta_auth_get security: - HTTPBearer: [] parameters: - name: auth_type in: query required: false schema: type: string description: '''facebook'' for Meta Ads; ''instagram'' for Instagram social' default: facebook title: Auth Type description: '''facebook'' for Meta Ads; ''instagram'' for Instagram social' - name: capability in: query required: false schema: anyOf: - type: string - type: 'null' description: Optional incremental capability upgrade on the same Meta connection. title: Capability description: Optional incremental capability upgrade on the same Meta connection. responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/MetaAuthResponseModel' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/external-platform/meta/callback: get: tags: - external-platform summary: Meta Callback description: 'Handle Meta (Facebook) OAuth callback for Ads connection and store tokens. Redirects to the frontend PlatformConnectSuccessPage with platform=meta.' operationId: meta_callback_api_external_platform_meta_callback_get parameters: - name: code in: query required: false schema: type: string title: Code - name: state in: query required: false schema: type: string title: State - name: error in: query required: false schema: type: string title: Error - name: error_description in: query required: false schema: type: string title: Error Description responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/external-platform/meta/accounts: get: tags: - external-platform summary: Get Meta Accounts description: Get Meta Ad accounts and Facebook Pages for the authenticated user. operationId: get_meta_accounts_api_external_platform_meta_accounts_get responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/MetaAccountsResponseModel' security: - HTTPBearer: [] /api/external-platform/meta/activation: get: tags: - external-platform summary: Get Meta Activation operationId: get_meta_activation_api_external_platform_meta_activation_get responses: '200': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /api/external-platform/meta/disconnect: post: tags: - external-platform summary: Disconnect Meta Ads operationId: disconnect_meta_ads_api_external_platform_meta_disconnect_post responses: '200': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /api/external-platform/meta/accounts/select: post: tags: - external-platform summary: Select Meta Ad Account description: Activate one Meta ad account for future launches. operationId: select_meta_ad_account_api_external_platform_meta_accounts_select_post requestBody: content: application/json: schema: $ref: '#/components/schemas/MetaSelectAdAccountRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/meta/activate: post: tags: - external-platform summary: Activate Meta Ad Account operationId: activate_meta_ad_account_api_external_platform_meta_activate_post requestBody: content: application/json: schema: $ref: '#/components/schemas/MetaSelectAdAccountRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/meta/launch-ad-campaign: post: tags: - external-platform summary: Launch Meta Ad Campaign description: Queue a Meta ad campaign launch and return a job id for status polling. operationId: launch_meta_ad_campaign_api_external_platform_meta_launch_ad_campaign_post requestBody: content: application/json: schema: $ref: '#/components/schemas/MetaLaunchAdCampaignRequest' required: true responses: '202': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/meta/sync-ad-campaign/preview: post: tags: - external-platform summary: Preview Meta Sync description: Preview sync changes and billing impact for a Meta ad campaign. operationId: preview_meta_sync_api_external_platform_meta_sync_ad_campaign_preview_post requestBody: content: application/json: schema: $ref: '#/components/schemas/MetaSyncPreviewRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/meta/sync-ad-campaign: post: tags: - external-platform summary: Sync Meta Ad Campaign description: Queue a Meta ad sync and return a job id for status polling. operationId: sync_meta_ad_campaign_api_external_platform_meta_sync_ad_campaign_post requestBody: content: application/json: schema: $ref: '#/components/schemas/MetaSyncAdCampaignRequest' required: true responses: '202': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/meta/sync-job/{job_id}: get: tags: - external-platform summary: Get Sync Job Status operationId: get_sync_job_status_api_external_platform_meta_sync_job__job_id__get security: - HTTPBearer: [] parameters: - name: job_id in: path required: true schema: type: string title: Job Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/external-platform/meta/launch-job/{job_id}: get: tags: - external-platform summary: Get Launch Job Status operationId: get_launch_job_status_api_external_platform_meta_launch_job__job_id__get security: - HTTPBearer: [] parameters: - name: job_id in: path required: true schema: type: string title: Job Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/external-platform/meta/campaigns/{campaign_id}/activate: post: tags: - external-platform summary: Activate Meta Campaign description: Activate a paused Meta campaign operationId: activate_meta_campaign_api_external_platform_meta_campaigns__campaign_id__activate_post security: - HTTPBearer: [] parameters: - name: campaign_id in: path required: true schema: type: string title: Campaign Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/external-platform/meta/adsets/{adset_id}/activate: post: tags: - external-platform summary: Activate Meta Adset description: Activate a paused Meta ad set operationId: activate_meta_adset_api_external_platform_meta_adsets__adset_id__activate_post security: - HTTPBearer: [] parameters: - name: adset_id in: path required: true schema: type: string title: Adset Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/external-platform/meta/ads/{ad_id}/activate: post: tags: - external-platform summary: Activate Meta Ad description: Activate a paused Meta ad operationId: activate_meta_ad_api_external_platform_meta_ads__ad_id__activate_post security: - HTTPBearer: [] parameters: - name: ad_id in: path required: true schema: type: string title: Ad Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/external-platform/meta/adsets/{adset_id}/pause: post: tags: - external-platform summary: Pause Meta Adset description: Pause an active Meta ad set operationId: pause_meta_adset_api_external_platform_meta_adsets__adset_id__pause_post security: - HTTPBearer: [] parameters: - name: adset_id in: path required: true schema: type: string title: Adset Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/external-platform/meta/ads/{ad_id}/pause: post: tags: - external-platform summary: Pause Meta Ad description: Pause an active Meta ad operationId: pause_meta_ad_api_external_platform_meta_ads__ad_id__pause_post security: - HTTPBearer: [] parameters: - name: ad_id in: path required: true schema: type: string title: Ad Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/external-platform/meta/campaigns/{campaign_id}/pause: post: tags: - external-platform summary: Pause Meta Campaign description: Pause an active Meta campaign operationId: pause_meta_campaign_api_external_platform_meta_campaigns__campaign_id__pause_post security: - HTTPBearer: [] parameters: - name: campaign_id in: path required: true schema: type: string title: Campaign Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/external-platform/meta/campaigns/{campaign_id}/insights: get: tags: - external-platform summary: Get Meta Campaign Insights description: Get performance insights for a Meta campaign operationId: get_meta_campaign_insights_api_external_platform_meta_campaigns__campaign_id__insights_get security: - HTTPBearer: [] parameters: - name: campaign_id in: path required: true schema: type: string title: Campaign Id - name: date_preset in: query required: false schema: type: string default: last_7d title: Date Preset responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/external-platform/meta/campaign/action: post: tags: - external-platform summary: Meta Campaign Action operationId: meta_campaign_action_api_external_platform_meta_campaign_action_post requestBody: content: application/json: schema: $ref: '#/components/schemas/MetaCampaignActionRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/meta/campaign/resume: post: tags: - external-platform summary: Meta Campaign Resume operationId: meta_campaign_resume_api_external_platform_meta_campaign_resume_post requestBody: content: application/json: schema: $ref: '#/components/schemas/MetaCampaignResumeRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/google/auth: get: tags: - external-platform summary: Google Auth description: Get Google OAuth authorization URL for the current company profile. operationId: google_auth_api_external_platform_google_auth_get responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/GoogleAuthResponseModel' security: - HTTPBearer: [] /api/external-platform/google/callback: get: tags: - external-platform summary: Google Callback description: 'Handle Google OAuth callback and store tokens. Then redirect to the frontend application.' operationId: google_callback_api_external_platform_google_callback_get parameters: - name: code in: query required: true schema: type: string title: Code - name: state in: query required: true schema: type: string title: State responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/external-platform/google/accounts: get: tags: - external-platform summary: Get Google Accounts description: Get Google Ads accounts for the authenticated user. operationId: get_google_accounts_api_external_platform_google_accounts_get responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/GoogleAccountsResponseModel' security: - HTTPBearer: [] /api/external-platform/google/activation: get: tags: - external-platform summary: Get Google Activation operationId: get_google_activation_api_external_platform_google_activation_get responses: '200': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /api/external-platform/google/activate: post: tags: - external-platform summary: Activate Google Ads Account operationId: activate_google_ads_account_api_external_platform_google_activate_post requestBody: content: application/json: schema: $ref: '#/components/schemas/GoogleActivateAccountRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/google/disconnect: post: tags: - external-platform summary: Disconnect Google Ads operationId: disconnect_google_ads_api_external_platform_google_disconnect_post responses: '200': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /api/external-platform/google/campaigns: post: tags: - external-platform summary: Create Google Ad Campaign description: Create a new Google Ads campaign. operationId: create_google_ad_campaign_api_external_platform_google_campaigns_post requestBody: content: application/json: schema: $ref: '#/components/schemas/GoogleAdCampaignRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/google/ad-groups: post: tags: - external-platform summary: Create Google Ad Group description: Create a new Google Ads ad group. operationId: create_google_ad_group_api_external_platform_google_ad_groups_post requestBody: content: application/json: schema: $ref: '#/components/schemas/GoogleAdGroupRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/google/display-ads: post: tags: - external-platform summary: Create Google Display Ad description: Create a new Google Ads display ad. operationId: create_google_display_ad_api_external_platform_google_display_ads_post requestBody: content: application/json: schema: $ref: '#/components/schemas/routes__external_platform__google_action__GoogleDisplayAdRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/google/create-ad: post: tags: - external-platform summary: Create Ad From Campaign description: Reject the legacy social-post-to-paid-ad mutation path. operationId: create_ad_from_campaign_api_external_platform_google_create_ad_post requestBody: content: application/json: schema: $ref: '#/components/schemas/GoogleCreateAdFromCampaignRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/google/sync-ad-campaign/preview: post: tags: - external-platform summary: Preview Google Sync description: Preview sync changes and billing impact for a Google ad campaign. operationId: preview_google_sync_api_external_platform_google_sync_ad_campaign_preview_post requestBody: content: application/json: schema: $ref: '#/components/schemas/GoogleSyncPreviewRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/google/sync-ad-campaign: post: tags: - external-platform summary: Sync Ad Campaign description: Sync an online ad campaign to Google Ads asynchronously via the agent job system. operationId: sync_ad_campaign_api_external_platform_google_sync_ad_campaign_post requestBody: content: application/json: schema: $ref: '#/components/schemas/GoogleSyncAdCampaignRequest' required: true responses: '202': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/JobResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/google/launch-ad-campaign: post: tags: - external-platform summary: Launch Ad Campaign description: Launch an online ad campaign to Google Ads asynchronously via the agent job system. operationId: launch_ad_campaign_api_external_platform_google_launch_ad_campaign_post requestBody: content: application/json: schema: $ref: '#/components/schemas/GoogleLaunchAdCampaignRequest' required: true responses: '202': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/JobResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/google/campaign/action: post: tags: - external-platform summary: Google Campaign Action operationId: google_campaign_action_api_external_platform_google_campaign_action_post requestBody: content: application/json: schema: $ref: '#/components/schemas/GoogleCampaignActionRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/google/campaign/resume: post: tags: - external-platform summary: Google Campaign Resume operationId: google_campaign_resume_api_external_platform_google_campaign_resume_post requestBody: content: application/json: schema: $ref: '#/components/schemas/GoogleCampaignActionRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/google/campaign/{campaign_id}/status: get: tags: - external-platform summary: Get Google Campaign Status description: "Fetch real-time campaign status from Google Ads API\n\nArgs:\n campaign_id: Google campaign ID\n \ \ google_account_id: Google Ads account ID\n\nReturns:\n Campaign status information" operationId: get_google_campaign_status_api_external_platform_google_campaign__campaign_id__status_get security: - HTTPBearer: [] parameters: - name: campaign_id in: path required: true schema: type: string title: Campaign Id - name: google_account_id in: query required: true schema: type: string title: Google Account Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/external-platform/amazon/auth: get: tags: - external-platform summary: Amazon Auth description: Get Amazon OAuth authorization URL for the current user. operationId: amazon_auth_api_external_platform_amazon_auth_get responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AmazonAuthResponseModel' security: - HTTPBearer: [] /api/external-platform/amazon/callback: get: tags: - external-platform summary: Amazon Callback description: Handle Amazon OAuth callback and store tokens. operationId: amazon_callback_api_external_platform_amazon_callback_get parameters: - name: code in: query required: true schema: type: string title: Code - name: state in: query required: true schema: type: string title: State responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/external-platform/amazon/accounts: get: tags: - external-platform summary: Get Amazon Accounts description: 'Get available Amazon advertising accounts (profiles) for the current user. Returns empty list if user hasn''t connected their Amazon account yet.' operationId: get_amazon_accounts_api_external_platform_amazon_accounts_get responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AmazonAccountsResponseModel' security: - HTTPBearer: [] /api/external-platform/amazon/campaigns: post: tags: - external-platform summary: Create Amazon Campaign description: Create a new Amazon advertising campaign. operationId: create_amazon_campaign_api_external_platform_amazon_campaigns_post requestBody: content: application/json: schema: $ref: '#/components/schemas/AmazonCampaignRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/amazon/ad-groups: post: tags: - external-platform summary: Create Amazon Ad Group description: Create a new Amazon ad group. operationId: create_amazon_ad_group_api_external_platform_amazon_ad_groups_post requestBody: content: application/json: schema: $ref: '#/components/schemas/AmazonAdGroupRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/amazon/product-ads: post: tags: - external-platform summary: Create Amazon Product Ad description: Create a new Amazon product ad. operationId: create_amazon_product_ad_api_external_platform_amazon_product_ads_post requestBody: content: application/json: schema: $ref: '#/components/schemas/AmazonProductAdRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/amazon/keywords: post: tags: - external-platform summary: Add Amazon Keywords description: Add keywords to an Amazon ad group. operationId: add_amazon_keywords_api_external_platform_amazon_keywords_post requestBody: content: application/json: schema: $ref: '#/components/schemas/AmazonKeywordsRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/amazon/campaigns/{profile_id}: get: tags: - external-platform summary: Get Amazon Campaigns description: Get Amazon campaigns for a specific profile. operationId: get_amazon_campaigns_api_external_platform_amazon_campaigns__profile_id__get security: - HTTPBearer: [] parameters: - name: profile_id in: path required: true schema: type: string title: Profile Id - name: state_filter in: query required: false schema: anyOf: - type: string - type: 'null' title: State Filter responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/external-platform/amazon/metrics: post: tags: - external-platform summary: Get Amazon Campaign Metrics description: Get performance metrics for Amazon campaigns. operationId: get_amazon_campaign_metrics_api_external_platform_amazon_metrics_post requestBody: content: application/json: schema: additionalProperties: true type: object title: Metrics Request required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/amazon/campaign/action: post: tags: - external-platform summary: Amazon Campaign Action description: 'Pause or delete an Amazon ad campaign. Actions: - pause: Pauses the campaign (can be resumed later) - delete: Archives the campaign (can be relaunched)' operationId: amazon_campaign_action_api_external_platform_amazon_campaign_action_post requestBody: content: application/json: schema: $ref: '#/components/schemas/AmazonCampaignActionRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/amazon/campaign/resume: post: tags: - external-platform summary: Amazon Campaign Resume description: Resume a paused Amazon ad campaign. operationId: amazon_campaign_resume_api_external_platform_amazon_campaign_resume_post requestBody: content: application/json: schema: $ref: '#/components/schemas/AmazonCampaignActionRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/tiktok/auth: get: tags: - external-platform summary: Tiktok Auth description: Get TikTok OAuth authorization URL for the current company profile. operationId: tiktok_auth_api_external_platform_tiktok_auth_get responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/TikTokAuthResponseModel' security: - HTTPBearer: [] /api/external-platform/tiktok/callback: get: tags: - external-platform summary: Tiktok Callback description: 'Handle TikTok OAuth callback and store tokens. Then redirect to the frontend application.' operationId: tiktok_callback_api_external_platform_tiktok_callback_get parameters: - name: code in: query required: true schema: type: string title: Code - name: state in: query required: true schema: type: string title: State responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/external-platform/tiktok/accounts: get: tags: - external-platform summary: Get Tiktok Accounts description: Get TikTok advertiser accounts for the authenticated company profile. operationId: get_tiktok_accounts_api_external_platform_tiktok_accounts_get responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/TikTokAccountsResponseModel' security: - HTTPBearer: [] /api/external-platform/tiktok/activation: get: tags: - external-platform summary: Get Tiktok Activation operationId: get_tiktok_activation_api_external_platform_tiktok_activation_get responses: '200': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /api/external-platform/tiktok/activate: post: tags: - external-platform summary: Activate Tiktok Ads Account operationId: activate_tiktok_ads_account_api_external_platform_tiktok_activate_post requestBody: content: application/json: schema: $ref: '#/components/schemas/TikTokActivateAccountRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/tiktok/disconnect: post: tags: - external-platform summary: Disconnect Tiktok Ads operationId: disconnect_tiktok_ads_api_external_platform_tiktok_disconnect_post responses: '200': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /api/external-platform/tiktok/launch-video-ad: post: tags: - external-platform summary: Launch Tiktok Video Ad description: Start a TikTok launch job and return tracking info. operationId: launch_tiktok_video_ad_api_external_platform_tiktok_launch_video_ad_post requestBody: content: application/json: schema: $ref: '#/components/schemas/TikTokLaunchVideoAdRequest' required: true responses: '202': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/JobResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/tiktok/sync-ad-campaign/preview: post: tags: - external-platform summary: Preview Tiktok Sync description: Preview saved Pomo changes for a normalized TikTok video ad. operationId: preview_tiktok_sync_api_external_platform_tiktok_sync_ad_campaign_preview_post requestBody: content: application/json: schema: $ref: '#/components/schemas/TikTokSyncPreviewRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/tiktok/sync-ad-campaign: post: tags: - external-platform summary: Sync Tiktok Ad Campaign description: Queue a normalized TikTok sync job and return tracking info. operationId: sync_tiktok_ad_campaign_api_external_platform_tiktok_sync_ad_campaign_post requestBody: content: application/json: schema: $ref: '#/components/schemas/TikTokSyncAdRequest' required: true responses: '202': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/JobResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/tiktok/ad/pause: post: tags: - external-platform summary: Pause Tiktok Ad operationId: pause_tiktok_ad_api_external_platform_tiktok_ad_pause_post requestBody: content: application/json: schema: $ref: '#/components/schemas/TikTokAdPauseRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/TikTokAdStatusResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/tiktok/ad/resume: post: tags: - external-platform summary: Resume Tiktok Ad operationId: resume_tiktok_ad_api_external_platform_tiktok_ad_resume_post requestBody: content: application/json: schema: $ref: '#/components/schemas/TikTokAdResumeRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/TikTokAdStatusResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/tiktok-social/auth: get: tags: - external-platform summary: Tiktok Social Auth operationId: tiktok_social_auth_api_external_platform_tiktok_social_auth_get responses: '200': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /api/external-platform/tiktok-social/callback: get: tags: - external-platform summary: Tiktok Social Callback operationId: tiktok_social_callback_api_external_platform_tiktok_social_callback_get parameters: - name: code in: query required: false schema: type: string title: Code - name: state in: query required: false schema: type: string title: State - name: error in: query required: false schema: type: string title: Error - name: error_description in: query required: false schema: type: string title: Error Description responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/external-platform/tiktok-social/status: get: tags: - external-platform summary: Tiktok Social Status operationId: tiktok_social_status_api_external_platform_tiktok_social_status_get responses: '200': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /api/external-platform/tiktok-social/accounts: get: tags: - external-platform summary: Tiktok Social Accounts operationId: tiktok_social_accounts_api_external_platform_tiktok_social_accounts_get responses: '200': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /api/external-platform/tiktok-social/creator-info: post: tags: - external-platform summary: Tiktok Social Creator Info operationId: tiktok_social_creator_info_api_external_platform_tiktok_social_creator_info_post responses: '200': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /api/external-platform/tiktok-social/publish-settings: post: tags: - external-platform summary: Save Tiktok Social Publish Settings operationId: save_tiktok_social_publish_settings_api_external_platform_tiktok_social_publish_settings_post requestBody: content: application/json: schema: $ref: '#/components/schemas/TikTokSocialPublishSettingsRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/tiktok-social/post-campaign: post: tags: - external-platform summary: Post Campaign To Tiktok Social operationId: post_campaign_to_tiktok_social_api_external_platform_tiktok_social_post_campaign_post requestBody: content: application/json: schema: $ref: '#/components/schemas/TikTokSocialPostCampaignRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/tiktok-social/publish-status/{publish_id}: get: tags: - external-platform summary: Tiktok Social Publish Status operationId: tiktok_social_publish_status_api_external_platform_tiktok_social_publish_status__publish_id__get security: - HTTPBearer: [] parameters: - name: publish_id in: path required: true schema: type: string title: Publish Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/external-platform/tiktok-social/disconnect: post: tags: - external-platform summary: Disconnect Tiktok Social operationId: disconnect_tiktok_social_api_external_platform_tiktok_social_disconnect_post responses: '200': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /api/external-platform/linkedin/auth: get: tags: - external-platform summary: Linkedin Auth operationId: linkedin_auth_api_external_platform_linkedin_auth_get security: - HTTPBearer: [] parameters: - name: integration_type in: query required: false schema: type: string description: 'One of: ads, social' default: ads title: Integration Type description: 'One of: ads, social' responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/external-platform/linkedin/callback: get: tags: - external-platform summary: Linkedin Callback operationId: linkedin_callback_api_external_platform_linkedin_callback_get parameters: - name: code in: query required: false schema: type: string title: Code - name: state in: query required: false schema: type: string title: State - name: error in: query required: false schema: type: string title: Error - name: error_description in: query required: false schema: type: string title: Error Description responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/external-platform/linkedin/accounts: get: tags: - external-platform summary: Get Linkedin Ad Accounts description: Get LinkedIn ad accounts for the connected Ads integration. operationId: get_linkedin_ad_accounts_api_external_platform_linkedin_accounts_get responses: '200': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /api/external-platform/linkedin/activation: get: tags: - external-platform summary: Get Linkedin Ads Activation description: Get LinkedIn Ads activation state and accessible ad accounts. operationId: get_linkedin_ads_activation_api_external_platform_linkedin_activation_get responses: '200': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /api/external-platform/linkedin/activate: post: tags: - external-platform summary: Activate Linkedin Ads Account description: Activate one LinkedIn ad account and organization for future launches. operationId: activate_linkedin_ads_account_api_external_platform_linkedin_activate_post requestBody: content: application/json: schema: $ref: '#/components/schemas/LinkedInActivateAccountRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/linkedin/campaign/action: post: tags: - external-platform summary: Linkedin Campaign Action operationId: linkedin_campaign_action_api_external_platform_linkedin_campaign_action_post requestBody: content: application/json: schema: $ref: '#/components/schemas/LinkedInCampaignActionRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/linkedin/campaign/resume: post: tags: - external-platform summary: Linkedin Campaign Resume operationId: linkedin_campaign_resume_api_external_platform_linkedin_campaign_resume_post requestBody: content: application/json: schema: $ref: '#/components/schemas/LinkedInCampaignResumeRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/linkedin/sync-ad-campaign/preview: post: tags: - external-platform summary: Preview Linkedin Sync operationId: preview_linkedin_sync_api_external_platform_linkedin_sync_ad_campaign_preview_post requestBody: content: application/json: schema: $ref: '#/components/schemas/LinkedInSyncPreviewRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/linkedin/sync-ad-campaign: post: tags: - external-platform summary: Sync Linkedin Ad Campaign operationId: sync_linkedin_ad_campaign_api_external_platform_linkedin_sync_ad_campaign_post requestBody: content: application/json: schema: $ref: '#/components/schemas/LinkedInSyncAdCampaignRequest' required: true responses: '202': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/JobResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/linkedin/launch-image-ad: post: tags: - external-platform summary: Launch Linkedin Image Ad operationId: launch_linkedin_image_ad_api_external_platform_linkedin_launch_image_ad_post requestBody: content: application/json: schema: $ref: '#/components/schemas/LinkedInLaunchImageAdRequest' required: true responses: '202': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/JobResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/linkedin/launch-video-ad: post: tags: - external-platform summary: Launch Linkedin Video Ad operationId: launch_linkedin_video_ad_api_external_platform_linkedin_launch_video_ad_post requestBody: content: application/json: schema: $ref: '#/components/schemas/LinkedInLaunchVideoAdRequest' required: true responses: '202': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/JobResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/linkedin/status: get: tags: - external-platform summary: Linkedin Ads Status description: 'Get LinkedIn Ads integration status. Note: the Integrations UI uses `/guided-workflow/check-integrations` for the Connected badge (same pattern as Google/Meta). This endpoint is kept for deeper validation and manual testing.' operationId: linkedin_ads_status_api_external_platform_linkedin_status_get responses: '200': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /api/external-platform/linkedin/disconnect: post: tags: - external-platform summary: Disconnect Linkedin Ads description: 'Disconnect LinkedIn Ads integration. Not currently exposed in production UI; kept for manual testing.' operationId: disconnect_linkedin_ads_api_external_platform_linkedin_disconnect_post responses: '200': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /api/external-platform/linkedin-social/auth: get: tags: - external-platform summary: Linkedin Social Auth description: 'Backward-compatible alias for starting LinkedIn OAuth for social posting. Prefer `/linkedin/auth?integration_type=social`.' operationId: linkedin_social_auth_api_external_platform_linkedin_social_auth_get responses: '200': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /api/external-platform/linkedin-social/status: get: tags: - external-platform summary: Linkedin Social Status description: Get LinkedIn social integration status. operationId: linkedin_social_status_api_external_platform_linkedin_social_status_get responses: '200': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /api/external-platform/linkedin-social/accounts: get: tags: - external-platform summary: Linkedin Social Accounts description: Get available LinkedIn posting identities (personal + organizations). operationId: linkedin_social_accounts_api_external_platform_linkedin_social_accounts_get responses: '200': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /api/external-platform/linkedin/post-campaign: post: tags: - external-platform summary: Post Campaign To Linkedin description: Publish a social post campaign to LinkedIn as a person or organization. operationId: post_campaign_to_linkedin_api_external_platform_linkedin_post_campaign_post requestBody: content: application/json: schema: $ref: '#/components/schemas/LinkedInPostCampaignRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/linkedin/delete-campaign-post: post: tags: - external-platform summary: Delete Campaign Post From Linkedin description: Delete a published LinkedIn campaign post and update local status. operationId: delete_campaign_post_from_linkedin_api_external_platform_linkedin_delete_campaign_post_post requestBody: content: application/json: schema: $ref: '#/components/schemas/LinkedInCampaignPostRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/linkedin/sync-post-status: post: tags: - external-platform summary: Sync Linkedin Campaign Post Status description: Refresh one LinkedIn post status from remote API. operationId: sync_linkedin_campaign_post_status_api_external_platform_linkedin_sync_post_status_post requestBody: content: application/json: schema: $ref: '#/components/schemas/LinkedInCampaignPostRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/linkedin-social/disconnect: post: tags: - external-platform summary: Disconnect Linkedin Social description: Disconnect LinkedIn social integration. operationId: disconnect_linkedin_social_api_external_platform_linkedin_social_disconnect_post responses: '200': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /api/external-platform/shopify/callback: get: tags: - external-platform summary: Shopify Callback description: 'Handle Shopify OAuth callback and store tokens. Verifies HMAC signature and state token before processing. Stores credentials in data_source_integrations table.' operationId: shopify_callback_api_external_platform_shopify_callback_get parameters: - name: code in: query required: true schema: type: string title: Code - name: shop in: query required: true schema: type: string title: Shop - name: state in: query required: true schema: type: string title: State - name: hmac in: query required: true schema: type: string title: Hmac - name: timestamp in: query required: false schema: type: string title: Timestamp - name: host in: query required: false schema: type: string title: Host responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/external-platform/shopify/install: get: tags: - external-platform summary: Shopify Install description: 'Shopify-initiated install entry — the app''s configured App URL. Verifies the install request HMAC over the raw query string, then redirects to Shopify''s OAuth grant. No Pomo profile is known yet; it is resolved after OAuth (see /shopify/install/resolve). Keeps installation initiated from a Shopify-owned surface with OAuth before any Pomo UI (2.3.1 / 2.3.2).' operationId: shopify_install_api_external_platform_shopify_install_get parameters: - name: shop in: query required: true schema: type: string title: Shop - name: hmac in: query required: false schema: type: string title: Hmac - name: host in: query required: false schema: type: string title: Host - name: timestamp in: query required: false schema: type: string title: Timestamp responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/external-platform/shopify/install/launch: get: tags: - external-platform summary: Shopify Install Launch description: 'Top-level launch hop for embedded-initiated installs. The App Home''s begin-install runs inside the Admin iframe, where no cookie it sets would be visible to the new top-level tab. So begin-install returns THIS URL instead of the raw authorize URL: the new tab lands here first-party, gets the browser-binding OAuth-state cookie, and is bounced straight to Shopify''s grant. Token-gated (signed, 2-minute TTL, shop+origin baked in) — not authed, by design: it only starts an OAuth grant for the shop named in the token.' operationId: shopify_install_launch_api_external_platform_shopify_install_launch_get parameters: - name: token in: query required: true schema: type: string title: Token responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/external-platform/shopify/connect/start: post: tags: - external-platform summary: Shopify Connect Start description: 'Pomo-initiated on-ramp. Stashes the pre-known binding intent (as a single-use connection request) and returns the App Store listing redirect — a Shopify-owned surface. The binding intent now travels server-side: a signed ``pomo_shopify_intent`` cookie carries it across the single Shopify OAuth hop, where the callback embeds it into the Redis pending install (the object that follows the install to resolve from any tab). The returned ``intent_token`` is retained as a backward-compat carrier (older frontends; in-flight installs across the deploy) and its absence is now non-fatal. The install stays 2.3.1-compliant either way (no manual domain entry).' operationId: shopify_connect_start_api_external_platform_shopify_connect_start_post requestBody: content: application/json: schema: $ref: '#/components/schemas/ShopifyConnectStartRequestModel' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/shopify/install/resolve: post: tags: - external-platform summary: Shopify Install Resolve description: 'Post-OAuth resolution (authenticated). Claims the pending install for the user, then binds per the Pomo intent (if present) or the §7 matrix. Returns the resolved action + redirect, or a picker payload (needs_org / needs_profile).' operationId: shopify_install_resolve_api_external_platform_shopify_install_resolve_post requestBody: content: application/json: schema: $ref: '#/components/schemas/ShopifyInstallResolveRequestModel' required: true responses: '200': description: Successful Response content: application/json: schema: additionalProperties: true type: object title: Response Shopify Install Resolve Api External Platform Shopify Install Resolve Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/shopify/privacy/webhooks: post: tags: - external-platform summary: Shopify Privacy Webhook description: 'Receive Shopify mandatory privacy compliance webhooks. The endpoint is intentionally unauthenticated because Shopify authenticates the delivery with X-Shopify-Hmac-SHA256 over the raw body.' operationId: shopify_privacy_webhook_api_external_platform_shopify_privacy_webhooks_post responses: '200': description: Successful Response content: application/json: schema: additionalProperties: true type: object title: Response Shopify Privacy Webhook Api External Platform Shopify Privacy Webhooks Post /api/external-platform/shopify/webhooks/app-uninstalled: post: tags: - external-platform summary: Shopify App Uninstalled Webhook description: 'Handle Shopify''s app/uninstalled webhook. When a merchant removes the app, Shopify has already revoked the access token, so there is nothing to revoke provider-side — we just clear the now-dead local credentials. The endpoint is unauthenticated by design: Shopify authenticates delivery with X-Shopify-Hmac-SHA256 over the raw body.' operationId: shopify_app_uninstalled_webhook_api_external_platform_shopify_webhooks_app_uninstalled_post responses: '200': description: Successful Response content: application/json: schema: additionalProperties: true type: object title: Response Shopify App Uninstalled Webhook Api External Platform Shopify Webhooks App Uninstalled Post /api/external-platform/shopify/shop: get: tags: - external-platform summary: Get Shopify Shop description: 'Get connected Shopify shop information. Returns connection status and shop details if connected.' operationId: get_shopify_shop_api_external_platform_shopify_shop_get responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ShopifyShopResponseModel' security: - HTTPBearer: [] /api/external-platform/shopify/status: get: tags: - external-platform summary: Get Shopify Status description: "Get Shopify connection status with optional health check.\n\nShopify tokens expire roughly every 60 minutes.\ \ Use check_health=true to\nrefresh the stored access token if needed and then verify it with a live API\ncall. Refreshing\ \ from mf-core is safe because token refreshes are serialized\nwith the UDM pipeline via the shared per-integration\ \ advisory lock, so a\nrefresh here can no longer race the pipeline's rotation.\n\nArgs:\n check_health: If true,\ \ refresh if needed and perform a live API call to\n verify token validity" operationId: get_shopify_status_api_external_platform_shopify_status_get security: - HTTPBearer: [] parameters: - name: check_health in: query required: false schema: type: boolean description: Perform live health check default: false title: Check Health description: Perform live health check responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ShopifyStatusResponseModel' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/external-platform/shopify/orders: get: tags: - external-platform summary: Get Shopify Orders description: Get orders from connected Shopify store. operationId: get_shopify_orders_api_external_platform_shopify_orders_get security: - HTTPBearer: [] parameters: - name: limit in: query required: false schema: type: integer maximum: 250 minimum: 1 default: 50 title: Limit - name: status in: query required: false schema: type: string default: any title: Status responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/DataSourceOrdersResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/external-platform/shopify/disconnect: delete: tags: - external-platform summary: Disconnect Shopify description: 'Disconnect Shopify integration. This uninstalls the app from Shopify before soft-deleting local credentials.' operationId: disconnect_shopify_api_external_platform_shopify_disconnect_delete responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/DataSourceDisconnectResponse' security: - HTTPBearer: [] /api/external-platform/shopify/app-home: get: tags: - external-platform summary: Shopify App Home description: 'Serve the embedded App Home HTML shell with a shop-scoped framing policy. Not session-token authed: this serves the shell before App Bridge exists. The ``shop`` param is validated (SSRF-safe) and 400 on anything that is not a real myshopify domain.' operationId: shopify_app_home_api_external_platform_shopify_app_home_get parameters: - name: shop in: query required: true schema: type: string title: Shop - name: host in: query required: false schema: type: string default: '' title: Host responses: '200': description: Successful Response content: text/html: schema: type: string '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/external-platform/shopify/app/status: get: tags: - external-platform summary: Shopify App Status description: 'Return the App Home status for the session token''s shop. Always 200 for a valid token. Unbound shops yield ``bound=false`` with the shop domain still populated; every profile-related field is null.' operationId: shopify_app_status_api_external_platform_shopify_app_status_get responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AppHomeStatusResponse' /api/external-platform/shopify/app/sync: post: tags: - external-platform summary: Shopify App Sync description: 'Re-run the catalog sync for the session token''s shop. 409 when the shop is not bound to any Pomo profile (there is nothing to sync).' operationId: shopify_app_sync_api_external_platform_shopify_app_sync_post responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AppHomeSyncResponse' /api/external-platform/shopify/app/begin-install: post: tags: - external-platform summary: Shopify App Begin Install description: 'Return the URL the embedded page opens (new tab) to (re)run the OAuth grant. Works for both bound and unbound shops — a bound shop may re-run OAuth on reinstall. The URL is the top-level /install/launch hop (NOT the raw Shopify authorize URL): this XHR runs inside the Admin iframe, where no cookie it set would be visible to the new tab, and the OAuth state must be browser-bound. The launch hop sets the OAuth-state cookie first-party and bounces to Shopify (state minted there with origin "app_home" — never inherits an intent cookie).' operationId: shopify_app_begin_install_api_external_platform_shopify_app_begin_install_post responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AppHomeBeginInstallResponse' /api/external-platform/stripe/auth: get: tags: - external-platform summary: Stripe Auth description: Get Stripe Connect OAuth authorization URL. operationId: stripe_auth_api_external_platform_stripe_auth_get security: - HTTPBearer: [] parameters: - name: write_access in: query required: false schema: type: boolean description: Request read_write access instead of read_only default: false title: Write Access description: Request read_write access instead of read_only responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/DataSourceAuthResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/external-platform/stripe/callback: get: tags: - external-platform summary: Stripe Callback description: 'Handle Stripe Connect OAuth callback and store tokens. CRITICAL: Authorization codes can only be used ONCE. The state verification also prevents replay attacks. Stores credentials in data_source_integrations table.' operationId: stripe_callback_api_external_platform_stripe_callback_get parameters: - name: code in: query required: false schema: type: string title: Code - name: state in: query required: true schema: type: string title: State - name: error in: query required: false schema: type: string title: Error - name: error_description in: query required: false schema: type: string title: Error Description responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/external-platform/stripe/account: get: tags: - external-platform summary: Get Stripe Account description: 'Get connected Stripe account information. Returns connection status and account details if connected.' operationId: get_stripe_account_api_external_platform_stripe_account_get responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/DataSourceAccountResponse' security: - HTTPBearer: [] /api/external-platform/stripe/status: get: tags: - external-platform summary: Get Stripe Status description: "Get Stripe connection status with optional health check.\n\nStripe tokens don't expire but can be revoked.\ \ Use check_health=true\nto verify the token is still valid by making a live API call.\n\nArgs:\n check_health:\ \ If true, perform a live API call to verify token validity" operationId: get_stripe_status_api_external_platform_stripe_status_get security: - HTTPBearer: [] parameters: - name: check_health in: query required: false schema: type: boolean description: Perform live health check default: false title: Check Health description: Perform live health check responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/StripeStatusResponseModel' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/external-platform/stripe/transactions: get: tags: - external-platform summary: Get Stripe Transactions description: Get balance transactions from connected Stripe account. operationId: get_stripe_transactions_api_external_platform_stripe_transactions_get security: - HTTPBearer: [] parameters: - name: limit in: query required: false schema: type: integer maximum: 100 minimum: 1 default: 100 title: Limit - name: starting_after in: query required: false schema: anyOf: - type: string - type: 'null' title: Starting After responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/DataSourceTransactionsResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/external-platform/stripe/disconnect: delete: tags: - external-platform summary: Disconnect Stripe description: 'Disconnect Stripe account. This deauthorizes on Stripe''s side before soft-deleting the local integration.' operationId: disconnect_stripe_api_external_platform_stripe_disconnect_delete responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/DataSourceDisconnectResponse' security: - HTTPBearer: [] /api/external-platform/quickbooks/auth: get: tags: - external-platform summary: Quickbooks Auth description: Get QuickBooks Online OAuth authorization URL. operationId: quickbooks_auth_api_external_platform_quickbooks_auth_get responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/DataSourceAuthResponse' security: - HTTPBearer: [] /api/external-platform/quickbooks/callback: get: tags: - external-platform summary: Quickbooks Callback description: 'Handle QuickBooks Online OAuth callback and store tokens. Intuit callback includes realmId which must be stored to call the Accounting API.' operationId: quickbooks_callback_api_external_platform_quickbooks_callback_get parameters: - name: code in: query required: false schema: type: string title: Code - name: realmId in: query required: false schema: type: string description: QuickBooks company ID (realmId) title: Realmid description: QuickBooks company ID (realmId) - name: state in: query required: true schema: type: string title: State - name: error in: query required: false schema: type: string title: Error - name: error_description in: query required: false schema: type: string title: Error Description responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/external-platform/quickbooks/account: get: tags: - external-platform summary: Get Quickbooks Account description: Get connected QuickBooks account information (realm + company name if available). operationId: get_quickbooks_account_api_external_platform_quickbooks_account_get responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/DataSourceAccountResponse' security: - HTTPBearer: [] /api/external-platform/quickbooks/status: get: tags: - external-platform summary: Get Quickbooks Status description: 'Get QuickBooks connection status with optional health check. When check_health=true, performs a lightweight CompanyInfo call only if the currently stored access token is still fresh. Databricks owns token refresh for UDM data-platform flows.' operationId: get_quickbooks_status_api_external_platform_quickbooks_status_get security: - HTTPBearer: [] parameters: - name: check_health in: query required: false schema: type: boolean description: Perform live health check default: false title: Check Health description: Perform live health check responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/QuickBooksStatusResponseModel' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/external-platform/quickbooks/disconnect: delete: tags: - external-platform summary: Disconnect Quickbooks description: Disconnect QuickBooks account after revoking provider-side tokens. operationId: disconnect_quickbooks_api_external_platform_quickbooks_disconnect_delete responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/DataSourceDisconnectResponse' security: - HTTPBearer: [] /api/external-platform/quickbooks/initial-sync-status: get: tags: - external-platform summary: Get Initial Sync Status description: 'Get the status of the initial data sync triggered after OAuth connection. Returns the current sync status and, if still running, polls Databricks for the latest status.' operationId: get_initial_sync_status_api_external_platform_quickbooks_initial_sync_status_get responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/InitialSyncStatusResponse' security: - HTTPBearer: [] /api/external-platform/google-analytics/auth: get: tags: - external-platform summary: Google Analytics Auth description: Get Google Analytics OAuth authorization URL. operationId: google_analytics_auth_api_external_platform_google_analytics_auth_get responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/DataSourceAuthResponse' security: - HTTPBearer: [] /api/external-platform/google-analytics/callback: get: tags: - external-platform summary: Google Analytics Callback description: Handle Google Analytics OAuth callback and store tokens. operationId: google_analytics_callback_api_external_platform_google_analytics_callback_get parameters: - name: code in: query required: false schema: type: string title: Code - name: state in: query required: true schema: type: string title: State - name: error in: query required: false schema: type: string title: Error - name: error_description in: query required: false schema: type: string title: Error Description responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/external-platform/google-analytics/status: get: tags: - external-platform summary: Get Google Analytics Status description: Get Google Analytics connection status with optional live health check. operationId: get_google_analytics_status_api_external_platform_google_analytics_status_get security: - HTTPBearer: [] parameters: - name: check_health in: query required: false schema: type: boolean description: Perform live health check default: false title: Check Health description: Perform live health check responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/GoogleAnalyticsStatusResponseModel' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/external-platform/google-analytics/properties: get: tags: - external-platform summary: Get Google Analytics Properties description: List accessible GA4 properties for the connected Google account. operationId: get_google_analytics_properties_api_external_platform_google_analytics_properties_get security: - HTTPBearer: [] parameters: - name: refresh in: query required: false schema: type: boolean description: Refresh property list from Google default: false title: Refresh description: Refresh property list from Google responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/GoogleAnalyticsPropertiesResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/external-platform/google-analytics/properties/select: post: tags: - external-platform summary: Select Google Analytics Property description: Select the GA4 property to sync into the UDM pipeline. operationId: select_google_analytics_property_api_external_platform_google_analytics_properties_select_post requestBody: content: application/json: schema: $ref: '#/components/schemas/GoogleAnalyticsPropertySelectRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/GoogleAnalyticsPropertySelectResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/google-analytics/disconnect: delete: tags: - external-platform summary: Disconnect Google Analytics description: Disconnect Google Analytics after revoking the Google OAuth grant. operationId: disconnect_google_analytics_api_external_platform_google_analytics_disconnect_delete responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/DataSourceDisconnectResponse' security: - HTTPBearer: [] /api/external-platform/google-analytics/initial-sync-status: get: tags: - external-platform summary: Get Google Analytics Initial Sync Status description: Get the status of the GA4 initial Databricks sync. operationId: get_google_analytics_initial_sync_status_api_external_platform_google_analytics_initial_sync_status_get responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/InitialSyncStatusResponse' security: - HTTPBearer: [] /api/external-platform/square/auth: get: tags: - external-platform summary: Square Auth description: Get Square OAuth authorization URL. operationId: square_auth_api_external_platform_square_auth_get security: - HTTPBearer: [] parameters: - name: write_access in: query required: false schema: type: boolean description: Request write scopes for sandbox seeding or re-auth default: false title: Write Access description: Request write scopes for sandbox seeding or re-auth responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/DataSourceAuthResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/external-platform/square/callback: get: tags: - external-platform summary: Square Callback description: 'Handle Square OAuth callback and store tokens. Stores credentials in data_source_integrations table.' operationId: square_callback_api_external_platform_square_callback_get parameters: - name: code in: query required: false schema: type: string title: Code - name: state in: query required: true schema: type: string title: State - name: error in: query required: false schema: type: string title: Error - name: error_description in: query required: false schema: type: string title: Error Description responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/external-platform/square/webhooks: post: tags: - external-platform summary: Square Webhook description: 'Receive Square lifecycle webhooks. The endpoint is unauthenticated because Square authenticates webhook delivery with x-square-hmacsha256-signature over the configured notification URL plus raw request body.' operationId: square_webhook_api_external_platform_square_webhooks_post responses: '200': description: Successful Response content: application/json: schema: additionalProperties: true type: object title: Response Square Webhook Api External Platform Square Webhooks Post /api/external-platform/square/status: get: tags: - external-platform summary: Get Square Status description: "Get Square connection status with optional health check.\n\nArgs:\n check_health: If true, perform\ \ a live API call to verify token validity" operationId: get_square_status_api_external_platform_square_status_get security: - HTTPBearer: [] parameters: - name: check_health in: query required: false schema: type: boolean description: Perform live health check default: false title: Check Health description: Perform live health check responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/SquareStatusResponseModel' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/external-platform/square/accounts: get: tags: - external-platform summary: Get Square Accounts description: 'Get Square locations/accounts for the authenticated company. Returns locations as "accounts" to maintain consistency with other platforms.' operationId: get_square_accounts_api_external_platform_square_accounts_get responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/DataSourceLocationsResponse' security: - HTTPBearer: [] /api/external-platform/square/disconnect: delete: tags: - external-platform summary: Disconnect Square description: 'Disconnect Square account. This revokes the Square OAuth authorization before soft-deleting the local integration.' operationId: disconnect_square_api_external_platform_square_disconnect_delete responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/DataSourceDisconnectResponse' security: - HTTPBearer: [] /api/external-platform/klaviyo/auth: get: tags: - external-platform summary: Klaviyo Auth description: "Get Klaviyo OAuth authorization URL with PKCE for the current company profile.\n\nReturns:\n KlaviyoAuthResponse\ \ with the OAuth authorization URL" operationId: klaviyo_auth_api_external_platform_klaviyo_auth_get responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/KlaviyoAuthResponse' security: - HTTPBearer: [] /api/external-platform/klaviyo/callback: get: tags: - external-platform summary: Klaviyo Callback description: 'Handle Klaviyo OAuth callback with PKCE and store tokens. Stores credentials in data_source_integrations table.' operationId: klaviyo_callback_api_external_platform_klaviyo_callback_get parameters: - name: code in: query required: false schema: type: string title: Code - name: state in: query required: false schema: type: string title: State - name: error in: query required: false schema: type: string title: Error - name: error_description in: query required: false schema: type: string title: Error Description responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/external-platform/klaviyo/accounts: get: tags: - external-platform summary: Get Klaviyo Accounts description: 'Get Klaviyo lists and segments for the authenticated company. Returns lists and segments as "accounts" to maintain consistency with other platforms.' operationId: get_klaviyo_accounts_api_external_platform_klaviyo_accounts_get responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/KlaviyoAccountsResponse' security: - HTTPBearer: [] /api/external-platform/klaviyo/status: get: tags: - external-platform summary: Get Klaviyo Status description: Check Klaviyo integration status for the current company profile. operationId: get_klaviyo_status_api_external_platform_klaviyo_status_get responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/KlaviyoStatusResponse' security: - HTTPBearer: [] /api/external-platform/klaviyo/health: get: tags: - external-platform summary: Get Klaviyo Health description: 'Get Klaviyo connection health status. Critical for monitoring 10-minute token expiry.' operationId: get_klaviyo_health_api_external_platform_klaviyo_health_get responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/KlaviyoHealthResponse' security: - HTTPBearer: [] /api/external-platform/klaviyo/disconnect: post: tags: - external-platform summary: Disconnect Klaviyo description: Disconnect Klaviyo integration by revoking tokens and marking as inactive. operationId: disconnect_klaviyo_api_external_platform_klaviyo_disconnect_post responses: '200': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /api/external-platform/{platform}/initial-sync-status: get: tags: - external-platform summary: Get Provider Initial Sync Status description: Get initial Databricks sync status for a supported data-source provider. operationId: get_provider_initial_sync_status_api_external_platform__platform__initial_sync_status_get security: - HTTPBearer: [] parameters: - name: platform in: path required: true schema: type: string title: Platform responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/InitialSyncStatusResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/external-platform/slack/auth: get: tags: - external-platform summary: Slack Auth operationId: slack_auth_api_external_platform_slack_auth_get responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/DataSourceAuthResponse' security: - HTTPBearer: [] /api/external-platform/slack/callback: get: tags: - external-platform summary: Slack Callback operationId: slack_callback_api_external_platform_slack_callback_get parameters: - name: code in: query required: false schema: anyOf: - type: string - type: 'null' title: Code - name: state in: query required: true schema: type: string title: State - name: error in: query required: false schema: anyOf: - type: string - type: 'null' title: Error - name: error_description in: query required: false schema: anyOf: - type: string - type: 'null' title: Error Description responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/external-platform/slack/status: get: tags: - external-platform summary: Slack Status operationId: slack_status_api_external_platform_slack_status_get responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/SlackStatusResponse' security: - HTTPBearer: [] /api/external-platform/slack/channels: get: tags: - external-platform summary: List Slack Channels operationId: list_slack_channels_api_external_platform_slack_channels_get responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/SlackChannelsListResponse' security: - HTTPBearer: [] /api/external-platform/slack/settings: patch: tags: - external-platform summary: Update Slack Settings operationId: update_slack_settings_api_external_platform_slack_settings_patch requestBody: content: application/json: schema: $ref: '#/components/schemas/SlackSettingsUpdateRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/SlackStatusResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/slack/link: post: tags: - external-platform summary: Link Slack Identity operationId: link_slack_identity_api_external_platform_slack_link_post requestBody: content: application/json: schema: $ref: '#/components/schemas/SlackLinkRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/SlackLinkResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/slack/test-message: post: tags: - external-platform summary: Slack Test Message operationId: slack_test_message_api_external_platform_slack_test_message_post requestBody: content: application/json: schema: $ref: '#/components/schemas/SlackTestMessageRequest' responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/slack/campaign-card: post: tags: - external-platform summary: Slack Campaign Card operationId: slack_campaign_card_api_external_platform_slack_campaign_card_post requestBody: content: application/json: schema: $ref: '#/components/schemas/SlackCampaignCardRequest' responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/slack/disconnect: post: tags: - external-platform summary: Slack Disconnect operationId: slack_disconnect_api_external_platform_slack_disconnect_post responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/DataSourceDisconnectResponse' security: - HTTPBearer: [] /api/external-platform/slack/events: post: tags: - external-platform summary: Slack Events operationId: slack_events_api_external_platform_slack_events_post responses: '200': description: Successful Response content: application/json: schema: {} /api/external-platform/slack/interactions: post: tags: - external-platform summary: Slack Interactions operationId: slack_interactions_api_external_platform_slack_interactions_post responses: '200': description: Successful Response content: application/json: schema: {} /api/external-platform/slack/commands: post: tags: - external-platform summary: Slack Commands operationId: slack_commands_api_external_platform_slack_commands_post responses: '200': description: Successful Response content: application/json: schema: {} /api/external-platform/x-social/auth: get: tags: - social-platform summary: X Auth description: Initiate X (Twitter) OAuth for social posts. operationId: x_auth_api_external_platform_x_social_auth_get responses: '200': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /api/external-platform/x-social/callback: get: tags: - social-platform summary: X Callback description: Handle X (Twitter) OAuth callback. operationId: x_callback_api_external_platform_x_social_callback_get parameters: - name: code in: query required: false schema: type: string title: Code - name: state in: query required: false schema: type: string title: State - name: error in: query required: false schema: type: string title: Error responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/external-platform/x-social/status: get: tags: - social-platform summary: Get X Status description: Check X connection status. operationId: get_x_status_api_external_platform_x_social_status_get responses: '200': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /api/external-platform/x-social/disconnect: post: tags: - social-platform summary: Disconnect X description: Disconnect X integration. operationId: disconnect_x_api_external_platform_x_social_disconnect_post responses: '200': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /api/external-platform/facebook-social/auth: get: tags: - external-platform summary: Facebook Social Auth operationId: facebook_social_auth_api_external_platform_facebook_social_auth_get responses: '200': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /api/external-platform/facebook-social/callback: get: tags: - external-platform summary: Facebook Social Callback operationId: facebook_social_callback_api_external_platform_facebook_social_callback_get parameters: - name: code in: query required: false schema: type: string title: Code - name: state in: query required: false schema: type: string title: State - name: error in: query required: false schema: type: string title: Error - name: error_description in: query required: false schema: type: string title: Error Description responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/external-platform/facebook-social/status: get: tags: - external-platform summary: Facebook Social Status operationId: facebook_social_status_api_external_platform_facebook_social_status_get responses: '200': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /api/external-platform/facebook-social/pages: get: tags: - external-platform summary: Get Facebook Pages operationId: get_facebook_pages_api_external_platform_facebook_social_pages_get responses: '200': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /api/external-platform/facebook-social/activation: get: tags: - external-platform summary: Get Facebook Social Activation operationId: get_facebook_social_activation_api_external_platform_facebook_social_activation_get responses: '200': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /api/external-platform/facebook-social/activate: post: tags: - external-platform summary: Activate Facebook Social Page operationId: activate_facebook_social_page_api_external_platform_facebook_social_activate_post requestBody: content: application/json: schema: $ref: '#/components/schemas/FacebookSocialActivateRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/facebook-social/disconnect: post: tags: - external-platform summary: Disconnect Facebook Social operationId: disconnect_facebook_social_api_external_platform_facebook_social_disconnect_post responses: '200': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /api/external-platform/facebook-social/post-campaign: post: tags: - external-platform summary: Post Campaign To Facebook operationId: post_campaign_to_facebook_api_external_platform_facebook_social_post_campaign_post requestBody: content: application/json: schema: $ref: '#/components/schemas/FacebookPostCampaignRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/PostResponseModel' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/external-platform/facebook-social/delete-post: post: tags: - external-platform summary: Delete Facebook Story Post operationId: delete_facebook_story_post_api_external_platform_facebook_social_delete_post_post requestBody: content: application/json: schema: $ref: '#/components/schemas/DeletePostRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/DeletePostResponseModel' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/payment/subscription/resume: post: tags: - payment summary: Resume Subscription description: 'Resume a subscription that was scheduled to cancel at period end. This clears cancel_at_period_end on Stripe and in our DB.' operationId: resume_subscription_api_payment_subscription_resume_post security: - HTTPBearer: [] parameters: - name: organization_id in: query required: true schema: type: string title: Organization Id responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Resume Subscription Api Payment Subscription Resume Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/payment/subscription/end-trial: post: tags: - payment summary: End Trial And Start Paid Billing description: 'End an eligible free trial immediately so the saved Stripe payment method can start paid billing on the current plan.' operationId: end_trial_and_start_paid_billing_api_payment_subscription_end_trial_post security: - HTTPBearer: [] parameters: - name: organization_id in: query required: true schema: type: string title: Organization Id responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response End Trial And Start Paid Billing Api Payment Subscription End Trial Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/payment/subscription/{subscription_id}/payment-status: get: tags: - payment summary: Get Subscription Payment Status description: 'Get subscription payment status (polling endpoint). Fetches the subscription and its latest_invoice to find the PaymentIntent.' operationId: get_subscription_payment_status_api_payment_subscription__subscription_id__payment_status_get security: - HTTPBearer: [] parameters: - name: subscription_id in: path required: true schema: type: string title: Subscription Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/payment/subscription/debug: get: tags: - payment summary: Subscription Debug description: 'Diagnostics endpoint to verify Stripe configuration for subscriptions. Does not expose full secrets; returns booleans and configured price IDs.' operationId: subscription_debug_api_payment_subscription_debug_get responses: '200': description: Successful Response content: application/json: schema: additionalProperties: true type: object title: Response Subscription Debug Api Payment Subscription Debug Get security: - HTTPBearer: [] /api/payment/subscription/client-config: get: tags: - payment summary: Subscription Client Config description: 'Minimal runtime config needed by Stripe Elements on the client. The publishable key is safe to expose to the browser.' operationId: subscription_client_config_api_payment_subscription_client_config_get responses: '200': description: Successful Response content: application/json: schema: additionalProperties: true type: object title: Response Subscription Client Config Api Payment Subscription Client Config Get /api/payment/subscription/plans: get: tags: - payment summary: Get Subscription Plans description: Get all available subscription plans. operationId: get_subscription_plans_api_payment_subscription_plans_get responses: '200': description: Successful Response content: application/json: schema: items: $ref: '#/components/schemas/SubscriptionTier' type: array title: Response Get Subscription Plans Api Payment Subscription Plans Get /api/payment/subscription/init-payment-element: post: tags: - payment summary: Init Payment Element description: 'Initialize a Stripe Payment Element for subscriptions. Creates an incomplete subscription (default_incomplete) and returns the client_secret of the underlying PaymentIntent from the latest invoice. The client confirms payment using Payment Element; we rely on webhooks to persist final subscription state. Request payload must include: - plan_id: Subscription tier (silver, gold, platinum) - organization_id: UUID of the organization to subscribe' operationId: init_payment_element_api_payment_subscription_init_payment_element_post requestBody: content: application/json: schema: additionalProperties: type: string type: object title: Payload required: true responses: '200': description: Successful Response content: application/json: schema: additionalProperties: true type: object title: Response Init Payment Element Api Payment Subscription Init Payment Element Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/payment/subscription/subscribe: post: tags: - payment summary: Create Subscription description: 'Create a new subscription for an organization. Requires: - organization_id: UUID of the organization to subscribe - plan_id: Subscription tier (silver, gold, platinum) - payment_method_id: Stripe payment method ID User must be an OWNER or ADMIN of the organization.' operationId: create_subscription_api_payment_subscription_subscribe_post requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateSubscriptionRequest' required: true responses: '200': description: Successful Response content: application/json: schema: additionalProperties: type: string type: object title: Response Create Subscription Api Payment Subscription Subscribe Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/payment/subscription/init-setup: post: tags: - payment summary: Init Setup Intent description: 'Client-first flow: Create (or reuse) Stripe Customer and a SetupIntent to collect card + billing address on the client. Returns the SetupIntent client_secret. Request payload must include: - organization_id: UUID of the organization' operationId: init_setup_intent_api_payment_subscription_init_setup_post requestBody: content: application/json: schema: anyOf: - additionalProperties: true type: object - type: 'null' title: Payload responses: '200': description: Successful Response content: application/json: schema: additionalProperties: true type: object title: Response Init Setup Intent Api Payment Subscription Init Setup Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/payment/subscription/apply-coupon: post: tags: - payment summary: Apply Coupon description: 'Validate a coupon/promotion code for a given plan and return discounted amount. Expects: - plan_id: one of SUBSCRIPTION_TIERS keys - coupon_code: promotion code string' operationId: apply_coupon_api_payment_subscription_apply_coupon_post requestBody: content: application/json: schema: additionalProperties: true type: object title: Payload required: true responses: '200': description: Successful Response content: application/json: schema: additionalProperties: true type: object title: Response Apply Coupon Api Payment Subscription Apply Coupon Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/payment/subscription/create-subscription: post: tags: - payment summary: Create Subscription From Setup description: 'Create a subscription using a PaymentMethod saved via SetupIntent. This is the second half of the client-first flow. Expects: - organization_id: UUID of the organization - setup_intent_id: Stripe SetupIntent ID - plan_id: Subscription tier' operationId: create_subscription_from_setup_api_payment_subscription_create_subscription_post requestBody: content: application/json: schema: additionalProperties: true type: object title: Payload required: true responses: '200': description: Successful Response content: application/json: schema: additionalProperties: true type: object title: Response Create Subscription From Setup Api Payment Subscription Create Subscription Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/payment/subscription/current: get: tags: - payment summary: Get Current Subscription description: 'Get the current active subscription for a specific organization. Query parameters: - organization_id: UUID of the organization Returns the active subscription if found, None otherwise.' operationId: get_current_subscription_api_payment_subscription_current_get security: - HTTPBearer: [] parameters: - name: organization_id in: query required: true schema: type: string title: Organization Id responses: '200': description: Successful Response content: application/json: schema: anyOf: - $ref: '#/components/schemas/SubscriptionResponse' - type: 'null' title: Response Get Current Subscription Api Payment Subscription Current Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/payment/subscription/cancel: post: tags: - payment summary: Cancel Subscription description: "Cancel the current subscription for an organization.\nBy default, this will cancel at the end of the current\ \ billing period.\n\nQuery parameters:\n- organization_id: UUID of the organization\n\nArgs:\n cancel_data: Contains\ \ at_period_end parameter indicating when to cancel" operationId: cancel_subscription_api_payment_subscription_cancel_post security: - HTTPBearer: [] parameters: - name: organization_id in: query required: true schema: type: string title: Organization Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CancelSubscriptionRequest' responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Cancel Subscription Api Payment Subscription Cancel Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/payment/subscription/validate-plan-change: post: tags: - payment summary: Validate Plan Change description: 'Validate if a plan change is possible for an organization. CRITICAL: For downgrades, this strictly validates current usage against target plan limits. Returns detailed errors if the downgrade would exceed limits. For upgrades, this estimates the proration amount (actual amount calculated by Stripe).' operationId: validate_plan_change_api_payment_subscription_validate_plan_change_post requestBody: content: application/json: schema: $ref: '#/components/schemas/ValidatePlanChangeRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/PlanChangeValidationResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/payment/subscription/change-plan: post: tags: - payment summary: Change Subscription Plan description: 'Change the subscription plan for an organization. CRITICAL: This endpoint UPDATES the EXISTING subscription, never creates a new one. - For upgrades: Uses proration_behavior=''create_prorations'' (charges immediately) - For downgrades: Uses proration_behavior=''none'' (NO REFUNDS) This prevents duplicate subscriptions which was the main issue.' operationId: change_subscription_plan_api_payment_subscription_change_plan_post requestBody: content: application/json: schema: $ref: '#/components/schemas/ChangePlanRequest' required: true responses: '200': description: Successful Response content: application/json: schema: additionalProperties: true type: object title: Response Change Subscription Plan Api Payment Subscription Change Plan Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/payment/subscription/portal-session: get: tags: - payment summary: Create Billing Portal Session description: 'Create a Stripe Customer Portal session for subscription management. Query parameters: - return_url: The URL to redirect to after completing actions in the customer portal - organization_id: UUID of the organization' operationId: create_billing_portal_session_api_payment_subscription_portal_session_get security: - HTTPBearer: [] parameters: - name: return_url in: query required: true schema: type: string title: Return Url - name: organization_id in: query required: true schema: type: string title: Organization Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/BillingPortalSessionResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/payment/subscription/payment-history: get: tags: - payment summary: Get Payment History description: Return recent Stripe-backed payment history for the current organization billing scope. operationId: get_payment_history_api_payment_subscription_payment_history_get security: - HTTPBearer: [] parameters: - name: organization_id in: query required: true schema: type: string title: Organization Id - name: company_profile_id in: query required: true schema: type: string title: Company Profile Id - name: limit in: query required: false schema: type: integer maximum: 50 minimum: 1 default: 10 title: Limit responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/PaymentHistoryListResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/payment/subscription/checkout-session: post: tags: - payment summary: Create Checkout Session description: Create an embedded Stripe Checkout Session for subscription purchase. operationId: create_checkout_session_api_payment_subscription_checkout_session_post requestBody: content: application/json: schema: additionalProperties: true type: object title: Checkout Data required: true responses: '200': description: Successful Response content: application/json: schema: additionalProperties: true type: object title: Response Create Checkout Session Api Payment Subscription Checkout Session Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/payment/subscription/checkout-session/{session_id}/status: get: tags: - payment summary: Get Checkout Session Status description: 'Report whether an in-flight embedded Checkout Session has already failed. The embedded checkout iframe owns the 3-D Secure challenge, so when the issuer''s ACS page hangs the browser has no way to learn that Stripe already gave up on the authentication behind it. The registration UI polls this so it can replace a dead blank overlay with a real error and a retry.' operationId: get_checkout_session_status_api_payment_subscription_checkout_session__session_id__status_get security: - HTTPBearer: [] parameters: - name: session_id in: path required: true schema: type: string title: Session Id responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Get Checkout Session Status Api Payment Subscription Checkout Session Session Id Status Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/payment/subscription/subscription-status: get: tags: - payment summary: Get Subscription Status description: 'Get subscription status for a specific organization. Query parameters: - organization_id: UUID of the organization Returns details about the organization''s current subscription status.' operationId: get_subscription_status_api_payment_subscription_subscription_status_get security: - HTTPBearer: [] parameters: - name: organization_id in: query required: true schema: type: string title: Organization Id - name: force_refresh in: query required: false schema: type: boolean description: Bypass the shared response cache default: false title: Force Refresh description: Bypass the shared response cache responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Get Subscription Status Api Payment Subscription Subscription Status Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/payment/subscription/webhook: post: tags: - payment summary: Handle Stripe Webhook description: 'Handle Stripe webhook events for subscription lifecycle. This endpoint processes events from Stripe to keep our database in sync with subscription changes and payments.' operationId: handle_stripe_webhook_api_payment_subscription_webhook_post parameters: - name: Stripe-Signature in: header required: true schema: type: string title: Stripe-Signature responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/payment/usage/usage-stats: get: tags: - usage summary: Get Usage Stats description: 'Get usage statistics for the authenticated user. Returns current usage counts and limits based on subscription tier.' operationId: get_usage_stats_api_payment_usage_usage_stats_get security: - HTTPBearer: [] parameters: - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Get Usage Stats Api Payment Usage Usage Stats Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/payment/usage/usage-percentage: get: tags: - usage summary: Get Usage Percentage description: 'Get a simple usage percentage for dashboard display. Returns overall usage percentage based on subscription tier.' operationId: get_usage_percentage_api_payment_usage_usage_percentage_get security: - HTTPBearer: [] parameters: - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Get Usage Percentage Api Payment Usage Usage Percentage Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/payment/credits/purchase: post: tags: - credits - credits summary: Purchase Credits description: 'Create Stripe Payment Intent for credit purchase. CRITICAL: This only initiates payment. Credits are added via webhook.' operationId: purchase_credits_api_payment_credits_purchase_post requestBody: content: application/json: schema: $ref: '#/components/schemas/CreditPurchaseRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/CreditPurchaseResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/payment/credits/balance: get: tags: - credits - credits summary: Get Credit Balance description: Get current credit balance for an organization. operationId: get_credit_balance_api_payment_credits_balance_get security: - HTTPBearer: [] parameters: - name: organization_id in: query required: true schema: type: string description: Organization ID title: Organization Id description: Organization ID responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/CreditBalanceResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/payment/credits/calculate-charge: post: tags: - credits - credits summary: Calculate Ad Charge description: 'Calculate charge for an ad campaign including commission. Shows what will be charged based on current tier.' operationId: calculate_ad_charge_api_payment_credits_calculate_charge_post requestBody: content: application/json: schema: $ref: '#/components/schemas/CalculateChargeRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/CalculateChargeResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/payment/credits/transactions: get: tags: - credits - credits summary: Get Credit Transactions description: 'Get credit transaction history for an organization. Supports pagination and filtering by transaction type.' operationId: get_credit_transactions_api_payment_credits_transactions_get security: - HTTPBearer: [] parameters: - name: organization_id in: query required: true schema: type: string description: Organization ID title: Organization Id description: Organization ID - name: limit in: query required: false schema: type: integer maximum: 100 description: Number of transactions to return default: 50 title: Limit description: Number of transactions to return - name: offset in: query required: false schema: type: integer minimum: 0 description: Number of transactions to skip default: 0 title: Offset description: Number of transactions to skip - name: transaction_type in: query required: false schema: anyOf: - type: string - type: 'null' description: Filter by transaction type title: Transaction Type description: Filter by transaction type responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/TransactionHistoryResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/payment/credits/hold: post: tags: - credits - credits summary: Create Credit Hold description: 'Create a credit hold for ad campaign launch. CRITICAL: This immediately reserves funds for up to 30 minutes.' operationId: create_credit_hold_api_payment_credits_hold_post requestBody: content: application/json: schema: $ref: '#/components/schemas/CreditHoldRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/CreditHoldResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/payment/credits/capture: post: tags: - credits - credits summary: Capture Credit Hold description: 'Capture a credit hold after successful campaign launch. CRITICAL: This finalizes the charge - cannot be reversed except by manual refund.' operationId: capture_credit_hold_api_payment_credits_capture_post requestBody: content: application/json: schema: $ref: '#/components/schemas/CreditCaptureRequest' required: true responses: '200': description: Successful Response content: application/json: schema: additionalProperties: true type: object title: Response Capture Credit Hold Api Payment Credits Capture Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/payment/credits/release: post: tags: - credits - credits summary: Release Credit Hold description: 'Release a credit hold and refund. Used when campaign launch fails or is cancelled.' operationId: release_credit_hold_api_payment_credits_release_post requestBody: content: application/json: schema: $ref: '#/components/schemas/CreditReleaseRequest' required: true responses: '200': description: Successful Response content: application/json: schema: additionalProperties: true type: object title: Response Release Credit Hold Api Payment Credits Release Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/payment/pricing/context: get: tags: - pricing - pricing summary: Get Pricing Context description: 'Resolve pricing context based on explicit billing country, request headers/IP, or the default country fallback. Returns country, currency, available intervals, plan prices, and credit packages.' operationId: get_pricing_context_api_payment_pricing_context_get parameters: - name: billing_country in: query required: false schema: anyOf: - type: string - type: 'null' description: Explicit billing country override as a two-letter ISO code. title: Billing Country description: Explicit billing country override as a two-letter ISO code. - name: force_refresh in: query required: false schema: type: boolean description: Bypass the shared response cache default: false title: Force Refresh description: Bypass the shared response cache responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Get Pricing Context Api Payment Pricing Context Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/limits/company-profile/{profile_id}: get: tags: - limits - limits summary: Get Company Profile Limits description: "Return effective per-plan limits relevant to a specific company profile.\n\nResponse:\n {\n \"max_company_profiles\"\ : int | null,\n \"max_competitors_per_profile\": int | null,\n \"current_competitors\": int,\n \"current_tier\"\ : str | null,\n \"profile_id\": str,\n \"organization_id\": str\n }" operationId: get_company_profile_limits_api_limits_company_profile__profile_id__get security: - HTTPBearer: [] parameters: - name: profile_id in: path required: true schema: type: string format: uuid title: Profile Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaign-analytics/dashboard-summary: get: tags: - campaign-analytics - campaign-analytics summary: Get Dashboard Summary description: 'Get campaign analytics summary for dashboard display. Returns aggregated metrics for all active campaigns.' operationId: get_dashboard_summary_api_campaign_analytics_dashboard_summary_get security: - HTTPBearer: [] parameters: - name: days in: query required: false schema: type: integer description: Number of days to look back default: 30 title: Days description: Number of days to look back responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/CampaignAnalyticsSummary' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaign-analytics/campaigns/{campaign_id}: get: tags: - campaign-analytics - campaign-analytics summary: Get Campaign Analytics description: Get detailed analytics for a specific campaign. operationId: get_campaign_analytics_api_campaign_analytics_campaigns__campaign_id__get security: - HTTPBearer: [] parameters: - name: campaign_id in: path required: true schema: type: string title: Campaign Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/CampaignAnalyticsResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaign-analytics/refresh: post: tags: - campaign-analytics - campaign-analytics summary: Refresh Campaign Analytics description: 'Refresh analytics data from integrated platforms. This will fetch the latest data from Google, Meta, Amazon, etc.' operationId: refresh_campaign_analytics_api_campaign_analytics_refresh_post requestBody: content: application/json: schema: $ref: '#/components/schemas/RefreshAnalyticsRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/campaign-analytics/platform-integration: post: tags: - campaign-analytics - campaign-analytics summary: Setup Platform Integration description: Set up or update platform integration for fetching analytics. operationId: setup_platform_integration_api_campaign_analytics_platform_integration_post requestBody: content: application/json: schema: $ref: '#/components/schemas/PlatformIntegrationRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/quickbooks/review-queue: get: tags: - quickbooks - quickbooks summary: Get Quickbooks Review Queue description: 'Marketing expense review queue from Databricks silver tables. Flags: - uncategorized: marketing expense missing a category (or splits include uncategorized marketing) - low_confidence: marketing expense with low model confidence (only when no splits exist) - large_amount: high-dollar expense (marketing or non-marketing) - unmapped_vendor: marketing expense not classified via mapping rules (qb_marketing_source != ''mapping'')' operationId: get_quickbooks_review_queue_api_quickbooks_review_queue_get security: - HTTPBearer: [] parameters: - name: start_date in: query required: false schema: anyOf: - type: string format: date - type: 'null' description: Start date (YYYY-MM-DD) title: Start Date description: Start date (YYYY-MM-DD) - name: end_date in: query required: false schema: anyOf: - type: string format: date - type: 'null' description: End date (YYYY-MM-DD) title: End Date description: End date (YYYY-MM-DD) - name: min_amount in: query required: false schema: type: number minimum: 0 description: Flag expenses with amount >= min_amount default: 500.0 title: Min Amount description: Flag expenses with amount >= min_amount - name: confidence_lt in: query required: false schema: type: number maximum: 1 minimum: 0 description: Flag marketing expenses with confidence < threshold default: 0.7 title: Confidence Lt description: Flag marketing expenses with confidence < threshold - name: limit in: query required: false schema: type: integer maximum: 2000 minimum: 1 description: Max rows to return default: 200 title: Limit description: Max rows to return responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/QuickBooksReviewQueueRow' title: Response Get Quickbooks Review Queue Api Quickbooks Review Queue Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/quickbooks/mappings: get: tags: - quickbooks - quickbooks summary: List Quickbooks Mappings operationId: list_quickbooks_mappings_api_quickbooks_mappings_get responses: '200': description: Successful Response content: application/json: schema: items: $ref: '#/components/schemas/QuickBooksMappingRow' type: array title: Response List Quickbooks Mappings Api Quickbooks Mappings Get security: - HTTPBearer: [] post: tags: - quickbooks - quickbooks summary: Create Quickbooks Mapping operationId: create_quickbooks_mapping_api_quickbooks_mappings_post requestBody: content: application/json: schema: $ref: '#/components/schemas/QuickBooksMappingCreateRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/QuickBooksMappingRow' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/quickbooks/mappings/{mapping_id}: patch: tags: - quickbooks - quickbooks summary: Update Quickbooks Mapping operationId: update_quickbooks_mapping_api_quickbooks_mappings__mapping_id__patch security: - HTTPBearer: [] parameters: - name: mapping_id in: path required: true schema: type: string format: uuid title: Mapping Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/QuickBooksMappingUpdateRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/QuickBooksMappingRow' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' delete: tags: - quickbooks - quickbooks summary: Delete Quickbooks Mapping operationId: delete_quickbooks_mapping_api_quickbooks_mappings__mapping_id__delete security: - HTTPBearer: [] parameters: - name: mapping_id in: path required: true schema: type: string format: uuid title: Mapping Id responses: '204': description: Successful Response '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/quickbooks/expenses/{qb_token}/splits: get: tags: - quickbooks - quickbooks summary: Get Quickbooks Expense Splits operationId: get_quickbooks_expense_splits_api_quickbooks_expenses__qb_token__splits_get security: - HTTPBearer: [] parameters: - name: qb_token in: path required: true schema: type: string title: Qb Token responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/QuickBooksExpenseSplitsResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' put: tags: - quickbooks - quickbooks summary: Upsert Quickbooks Expense Splits operationId: upsert_quickbooks_expense_splits_api_quickbooks_expenses__qb_token__splits_put security: - HTTPBearer: [] parameters: - name: qb_token in: path required: true schema: type: string title: Qb Token requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/QuickBooksExpenseSplitsUpdateRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/QuickBooksExpenseSplitsResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/quickbooks/expenses/{qb_token}: patch: tags: - quickbooks - quickbooks summary: Annotate Quickbooks Expense operationId: annotate_quickbooks_expense_api_quickbooks_expenses__qb_token__patch security: - HTTPBearer: [] parameters: - name: qb_token in: path required: true schema: type: string title: Qb Token requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/QuickBooksExpenseAnnotateRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/QBMarketingAnnotationResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/quickbooks/expenses/bulk-annotate: post: tags: - quickbooks - quickbooks summary: Bulk Annotate Quickbooks Expenses operationId: bulk_annotate_quickbooks_expenses_api_quickbooks_expenses_bulk_annotate_post requestBody: content: application/json: schema: $ref: '#/components/schemas/QuickBooksExpenseBulkAnnotateRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/QuickBooksExpenseBulkAnnotateResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/quickbooks/audit: get: tags: - quickbooks - quickbooks summary: Get Quickbooks Audit operationId: get_quickbooks_audit_api_quickbooks_audit_get security: - HTTPBearer: [] parameters: - name: limit in: query required: false schema: type: integer maximum: 200 minimum: 1 default: 50 title: Limit responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/QuickBooksAuditResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/users/analytics/genai-usage: get: tags: - users - users - analytics - analytics summary: Get Genai Usage Stats description: 'Get GenAI usage statistics for the current user. Returns counts of text and image generation events, total images generated, and usage by endpoint.' operationId: get_genai_usage_stats_api_users_analytics_genai_usage_get security: - HTTPBearer: [] parameters: - name: start_date in: query required: false schema: anyOf: - type: string format: date-time - type: 'null' description: Start date in ISO format with timezone title: Start Date description: Start date in ISO format with timezone - name: end_date in: query required: false schema: anyOf: - type: string format: date-time - type: 'null' description: End date in ISO format with timezone title: End Date description: End date in ISO format with timezone responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Get Genai Usage Stats Api Users Analytics Genai Usage Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/users/analytics/genai-usage-with-quota: get: tags: - users - users - analytics - analytics summary: Get Genai Usage With Quota description: 'Get GenAI usage statistics with quota information for the current user. Combines usage counts with subscription limits and human-readable labels.' operationId: get_genai_usage_with_quota_api_users_analytics_genai_usage_with_quota_get security: - HTTPBearer: [] parameters: - name: start_date in: query required: false schema: anyOf: - type: string format: date-time - type: 'null' description: Start date in ISO format with timezone title: Start Date description: Start date in ISO format with timezone - name: end_date in: query required: false schema: anyOf: - type: string format: date-time - type: 'null' description: End date in ISO format with timezone title: End Date description: End date in ISO format with timezone - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Get Genai Usage With Quota Api Users Analytics Genai Usage With Quota Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/debug/signed-urls-config: get: tags: - debug - debug summary: Check Signed Urls Config description: Check if signed URLs are properly configured operationId: check_signed_urls_config_api_debug_signed_urls_config_get responses: '200': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /api/email-campaigns/v2/preview: post: tags: - email-campaigns-v2 - Email Campaigns V2 summary: Preview Campaign description: Generate preview of email campaign with sample personalization operationId: preview_campaign_api_email_campaigns_v2_preview_post requestBody: content: application/json: schema: $ref: '#/components/schemas/PreviewRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/email-campaigns/v2/test: post: tags: - email-campaigns-v2 - Email Campaigns V2 summary: Send Test Emails description: Send test emails to specified addresses operationId: send_test_emails_api_email_campaigns_v2_test_post requestBody: content: application/json: schema: $ref: '#/components/schemas/TestEmailRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/email-campaigns/v2/send: post: tags: - email-campaigns-v2 - Email Campaigns V2 summary: Send Campaign description: Send campaign to recipients or schedule for later operationId: send_campaign_api_email_campaigns_v2_send_post requestBody: content: application/json: schema: $ref: '#/components/schemas/SendCampaignRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/email-campaigns/v2/workflow-status: put: tags: - email-campaigns-v2 - Email Campaigns V2 summary: Update Workflow Status description: Update campaign workflow status operationId: update_workflow_status_api_email_campaigns_v2_workflow_status_put requestBody: content: application/json: schema: $ref: '#/components/schemas/WorkflowUpdateRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/email-campaigns/v2/validate-personalization: post: tags: - email-campaigns-v2 - Email Campaigns V2 summary: Validate Personalization description: Validate personalization template and get available variables operationId: validate_personalization_api_email_campaigns_v2_validate_personalization_post requestBody: content: application/json: schema: $ref: '#/components/schemas/PersonalizationValidateRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/email-campaigns/v2/{campaign_id}/performance: get: tags: - email-campaigns-v2 - Email Campaigns V2 summary: Get Campaign Performance description: Get campaign performance metrics operationId: get_campaign_performance_api_email_campaigns_v2__campaign_id__performance_get security: - HTTPBearer: [] parameters: - name: campaign_id in: path required: true schema: type: integer title: Campaign Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/email-campaigns/v2/{campaign_id}/insights: get: tags: - email-campaigns-v2 - Email Campaigns V2 summary: Get Campaign Insights description: Get AI-generated insights and recommendations operationId: get_campaign_insights_api_email_campaigns_v2__campaign_id__insights_get security: - HTTPBearer: [] parameters: - name: campaign_id in: path required: true schema: type: integer title: Campaign Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/email-campaigns/v2/{campaign_id}/complete-ab-test: post: tags: - email-campaigns-v2 - Email Campaigns V2 summary: Complete Ab Test description: Complete A/B test and send winning variant to holdout operationId: complete_ab_test_api_email_campaigns_v2__campaign_id__complete_ab_test_post security: - HTTPBearer: [] parameters: - name: campaign_id in: path required: true schema: type: integer title: Campaign Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/guided-workflow/landing-page-preflight: post: tags: - guided-workflow summary: Preflight Landing Page operationId: preflight_landing_page_api_guided_workflow_landing_page_preflight_post requestBody: content: application/json: schema: $ref: '#/components/schemas/LandingPagePreflightRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/guided-workflow/generate-target-audience/job: post: tags: - guided-workflow summary: Start Target Audience Job description: Start asynchronous target audience generation and return job tracking info. operationId: start_target_audience_job_api_guided_workflow_generate_target_audience_job_post security: - HTTPBearer: [] parameters: - name: force_refresh in: query required: false schema: type: boolean description: Force regeneration of target audiences default: false title: Force Refresh description: Force regeneration of target audiences requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/TargetAudienceRequest' responses: '202': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/JobResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/guided-workflow/check-integrations: get: tags: - guided-workflow summary: Check Integrations description: 'Check integration status for all external platforms. Returns boolean status for each supported platform integration.' operationId: check_integrations_api_guided_workflow_check_integrations_get responses: '200': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /api/guided-workflow/audience-estimates: post: tags: - guided-workflow summary: Get Audience Estimates description: Estimate audience sizes for Meta and LinkedIn based on target audience options. operationId: get_audience_estimates_api_guided_workflow_audience_estimates_post requestBody: content: application/json: schema: $ref: '#/components/schemas/AudienceEstimateRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/guided-workflow/create-social-post-campaign: post: tags: - guided-workflow summary: Create Social Post Campaign description: Start social post campaign generation asynchronously. Returns a tracking job id. operationId: create_social_post_campaign_api_guided_workflow_create_social_post_campaign_post requestBody: content: multipart/form-data: schema: $ref: '#/components/schemas/Body_create_social_post_campaign_api_guided_workflow_create_social_post_campaign_post' required: true responses: '202': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/guided-workflow/create-email-campaign: post: tags: - guided-workflow summary: Create Email Campaign description: Start email campaign generation asynchronously. Returns a tracking job id. operationId: create_email_campaign_api_guided_workflow_create_email_campaign_post requestBody: content: multipart/form-data: schema: $ref: '#/components/schemas/Body_create_email_campaign_api_guided_workflow_create_email_campaign_post' required: true responses: '202': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/guided-workflow/create-ads-campaign: post: tags: - guided-workflow summary: Create Ads Campaign Endpoint description: Start ads campaign generation asynchronously. Returns a tracking job id. operationId: create_ads_campaign_endpoint_api_guided_workflow_create_ads_campaign_post requestBody: content: multipart/form-data: schema: $ref: '#/components/schemas/Body_create_ads_campaign_endpoint_api_guided_workflow_create_ads_campaign_post' required: true responses: '202': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/guided-workflow/campaigns/{campaign_id}/generate-video: post: tags: - guided-workflow summary: Finalize Video Campaign description: Start video generation for a draft video campaign (HITL finalize step). operationId: finalize_video_campaign_api_guided_workflow_campaigns__campaign_id__generate_video_post security: - HTTPBearer: [] parameters: - name: campaign_id in: path required: true schema: type: string title: Campaign Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/FinalizeVideoRequest' responses: '202': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/JobResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/guided-workflow/campaigns/generate-videos: post: tags: - guided-workflow summary: Finalize Video Campaigns description: Finalize multiple draft video campaigns, then generate any deferred non-video campaigns. operationId: finalize_video_campaigns_api_guided_workflow_campaigns_generate_videos_post requestBody: content: application/json: schema: $ref: '#/components/schemas/FinalizeVideosRequest' required: true responses: '202': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/JobResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/guided-workflow/social-campaigns/generate-videos: post: tags: - guided-workflow summary: Finalize Social Video Campaigns description: Finalize reviewed social video drafts, then generate deferred non-video social posts. operationId: finalize_social_video_campaigns_api_guided_workflow_social_campaigns_generate_videos_post requestBody: content: application/json: schema: $ref: '#/components/schemas/FinalizeSocialVideosRequest' required: true responses: '202': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/JobResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/influencer-discovery/tiktok/challenges: get: tags: - influencer-discovery summary: Search Tiktok Challenge Endpoint operationId: search_tiktok_challenge_endpoint_api_influencer_discovery_tiktok_challenges_get security: - HTTPBearer: [] parameters: - name: keywords in: query required: true schema: type: string minLength: 1 maxLength: 100 title: Keywords - name: count in: query required: false schema: type: integer maximum: 50 minimum: 1 default: 10 title: Count - name: cursor in: query required: false schema: type: integer minimum: 0 default: 0 title: Cursor responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Search Tiktok Challenge Endpoint Api Influencer Discovery Tiktok Challenges Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/influencer-discovery/tiktok/users/search: get: tags: - influencer-discovery summary: Search Tiktok Users Endpoint operationId: search_tiktok_users_endpoint_api_influencer_discovery_tiktok_users_search_get security: - HTTPBearer: [] parameters: - name: keywords in: query required: true schema: type: string minLength: 1 maxLength: 100 title: Keywords - name: follower_count in: query required: false schema: type: integer maximum: 4 minimum: 0 default: 0 title: Follower Count - name: count in: query required: false schema: type: integer maximum: 50 minimum: 1 default: 5 title: Count - name: cursor in: query required: false schema: type: integer minimum: 0 default: 0 title: Cursor - name: profile_type in: query required: false schema: type: integer minimum: 0 default: 0 title: Profile Type - name: other_pref in: query required: false schema: type: integer minimum: 0 default: 0 title: Other Pref responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Search Tiktok Users Endpoint Api Influencer Discovery Tiktok Users Search Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/influencer-discovery/tiktok/users/info: get: tags: - influencer-discovery summary: Get Tiktok User Info Endpoint operationId: get_tiktok_user_info_endpoint_api_influencer_discovery_tiktok_users_info_get security: - HTTPBearer: [] parameters: - name: unique_id in: query required: true schema: type: string minLength: 1 maxLength: 100 title: Unique Id - name: region in: query required: false schema: anyOf: - type: string maxLength: 16 - type: 'null' title: Region responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Get Tiktok User Info Endpoint Api Influencer Discovery Tiktok Users Info Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/influencer-discovery/tiktok/users/posts: get: tags: - influencer-discovery summary: Get Tiktok User Posts Endpoint operationId: get_tiktok_user_posts_endpoint_api_influencer_discovery_tiktok_users_posts_get security: - HTTPBearer: [] parameters: - name: unique_id in: query required: true schema: type: string minLength: 1 maxLength: 100 title: Unique Id - name: count in: query required: false schema: type: integer maximum: 6 minimum: 1 default: 6 title: Count - name: cursor in: query required: false schema: type: integer minimum: 0 default: 0 title: Cursor - name: sort_type in: query required: false schema: type: integer minimum: 0 default: 0 title: Sort Type responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Get Tiktok User Posts Endpoint Api Influencer Discovery Tiktok Users Posts Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/influencer-discovery/instagram/hashtags/search: get: tags: - influencer-discovery summary: Search Instagram Hashtag Endpoint operationId: search_instagram_hashtag_endpoint_api_influencer_discovery_instagram_hashtags_search_get security: - HTTPBearer: [] parameters: - name: hashtag in: query required: true schema: type: string minLength: 1 maxLength: 100 title: Hashtag responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Search Instagram Hashtag Endpoint Api Influencer Discovery Instagram Hashtags Search Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/influencer-discovery/instagram/users/search: get: tags: - influencer-discovery summary: Search Instagram Users Endpoint operationId: search_instagram_users_endpoint_api_influencer_discovery_instagram_users_search_get security: - HTTPBearer: [] parameters: - name: query in: query required: true schema: type: string minLength: 1 maxLength: 100 title: Query responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Search Instagram Users Endpoint Api Influencer Discovery Instagram Users Search Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/influencer-discovery/instagram/users/profile: get: tags: - influencer-discovery summary: Get Instagram Profile Endpoint operationId: get_instagram_profile_endpoint_api_influencer_discovery_instagram_users_profile_get security: - HTTPBearer: [] parameters: - name: username in: query required: true schema: type: string minLength: 1 maxLength: 200 title: Username responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Get Instagram Profile Endpoint Api Influencer Discovery Instagram Users Profile Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/influencer-discovery/instagram/reels: get: tags: - influencer-discovery summary: Get Instagram Reels Endpoint operationId: get_instagram_reels_endpoint_api_influencer_discovery_instagram_reels_get security: - HTTPBearer: [] parameters: - name: id in: query required: true schema: type: string minLength: 1 maxLength: 128 title: Id - name: count in: query required: false schema: type: integer maximum: 12 minimum: 1 default: 12 title: Count responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Get Instagram Reels Endpoint Api Influencer Discovery Instagram Reels Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/influencer-discovery/youtube/channel/details: get: tags: - influencer-discovery summary: Get Youtube Channel Details Endpoint operationId: get_youtube_channel_details_endpoint_api_influencer_discovery_youtube_channel_details_get security: - HTTPBearer: [] parameters: - name: id in: query required: true schema: type: string minLength: 1 maxLength: 300 title: Id responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Get Youtube Channel Details Endpoint Api Influencer Discovery Youtube Channel Details Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/influencer-discovery/youtube/channel/videos: get: tags: - influencer-discovery summary: Get Youtube Channel Videos Endpoint operationId: get_youtube_channel_videos_endpoint_api_influencer_discovery_youtube_channel_videos_get security: - HTTPBearer: [] parameters: - name: id in: query required: true schema: type: string minLength: 1 maxLength: 128 title: Id - name: filter in: query required: false schema: type: string minLength: 1 maxLength: 64 default: videos_latest title: Filter - name: hl in: query required: false schema: type: string minLength: 2 maxLength: 16 default: en title: Hl - name: gl in: query required: false schema: type: string minLength: 2 maxLength: 2 default: US title: Gl - name: count in: query required: false schema: type: integer maximum: 12 minimum: 1 default: 6 title: Count responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Get Youtube Channel Videos Endpoint Api Influencer Discovery Youtube Channel Videos Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/influencer-discovery/youtube/auto-complete: get: tags: - influencer-discovery summary: Get Youtube Auto Complete Endpoint operationId: get_youtube_auto_complete_endpoint_api_influencer_discovery_youtube_auto_complete_get security: - HTTPBearer: [] parameters: - name: q in: query required: true schema: type: string minLength: 1 maxLength: 200 title: Q - name: hl in: query required: false schema: type: string minLength: 2 maxLength: 16 default: en title: Hl - name: gl in: query required: false schema: type: string minLength: 2 maxLength: 2 default: US title: Gl responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Get Youtube Auto Complete Endpoint Api Influencer Discovery Youtube Auto Complete Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/influencer-discovery/youtube/search: get: tags: - influencer-discovery summary: Search Youtube Endpoint operationId: search_youtube_endpoint_api_influencer_discovery_youtube_search_get security: - HTTPBearer: [] parameters: - name: q in: query required: true schema: type: string minLength: 1 maxLength: 200 title: Q - name: hl in: query required: false schema: type: string minLength: 2 maxLength: 16 default: en title: Hl - name: gl in: query required: false schema: type: string minLength: 2 maxLength: 2 default: US title: Gl responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Search Youtube Endpoint Api Influencer Discovery Youtube Search Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/influencer-discovery/hashtags/recommendations: get: tags: - influencer-discovery summary: Recommend Creator Hashtags Endpoint operationId: recommend_creator_hashtags_endpoint_api_influencer_discovery_hashtags_recommendations_get security: - HTTPBearer: [] parameters: - name: platform in: query required: true schema: type: string pattern: ^(tiktok|instagram)$ title: Platform responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Recommend Creator Hashtags Endpoint Api Influencer Discovery Hashtags Recommendations Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/influencer-discovery/hashtags/product-offering-recommendations: get: tags: - influencer-discovery summary: Recommend Product Offering Creator Hashtags Endpoint operationId: recommend_product_offering_creator_hashtags_endpoint_api_influencer_discovery_hashtags_product_offering_recommendations_get security: - HTTPBearer: [] parameters: - name: platform in: query required: true schema: type: string pattern: ^(tiktok|instagram)$ title: Platform responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Recommend Product Offering Creator Hashtags Endpoint Api Influencer Discovery Hashtags Product Offering Recommendations Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/influencer-discovery/outreach/draft-message: post: tags: - influencer-discovery summary: Draft Creator Outreach Message Endpoint operationId: draft_creator_outreach_message_endpoint_api_influencer_discovery_outreach_draft_message_post requestBody: content: application/json: schema: $ref: '#/components/schemas/DraftCreatorOutreachMessageRequest' required: true responses: '200': description: Successful Response content: application/json: schema: additionalProperties: true type: object title: Response Draft Creator Outreach Message Endpoint Api Influencer Discovery Outreach Draft Message Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/influencer-discovery/pricing/estimate: post: tags: - influencer-discovery summary: Estimate Influencer Pricing Endpoint operationId: estimate_influencer_pricing_endpoint_api_influencer_discovery_pricing_estimate_post requestBody: content: application/json: schema: $ref: '#/components/schemas/InfluencerPricingEstimateRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/InfluencerPricingEstimateResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/influencer-discovery/instagram/beta/sections: get: tags: - influencer-discovery summary: List Instagram Beta Sections Endpoint operationId: list_instagram_beta_sections_endpoint_api_influencer_discovery_instagram_beta_sections_get responses: '200': description: Successful Response content: application/json: schema: additionalProperties: true type: object title: Response List Instagram Beta Sections Endpoint Api Influencer Discovery Instagram Beta Sections Get security: - HTTPBearer: [] /api/influencer-discovery/instagram/beta/section-selection: get: tags: - influencer-discovery summary: Select Instagram Beta Section Endpoint operationId: select_instagram_beta_section_endpoint_api_influencer_discovery_instagram_beta_section_selection_get responses: '200': description: Successful Response content: application/json: schema: additionalProperties: true type: object title: Response Select Instagram Beta Section Endpoint Api Influencer Discovery Instagram Beta Section Selection Get security: - HTTPBearer: [] /api/influencer-discovery/instagram/avatar: get: tags: - influencer-discovery summary: Proxy Instagram Avatar Endpoint operationId: proxy_instagram_avatar_endpoint_api_influencer_discovery_instagram_avatar_get parameters: - name: url in: query required: true schema: type: string minLength: 1 title: Url responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/influencer-discovery/profile/avatar: get: tags: - influencer-discovery summary: Proxy Influencer Profile Avatar Endpoint operationId: proxy_influencer_profile_avatar_endpoint_api_influencer_discovery_profile_avatar_get parameters: - name: url in: query required: true schema: type: string minLength: 1 maxLength: 500 title: Url responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/influencer-discovery/tiktok/users/ingest: post: tags: - influencer-discovery summary: Ingest Tiktok User Endpoint operationId: ingest_tiktok_user_endpoint_api_influencer_discovery_tiktok_users_ingest_post security: - HTTPBearer: [] parameters: - name: unique_id in: query required: true schema: type: string minLength: 1 maxLength: 100 title: Unique Id - name: region in: query required: false schema: anyOf: - type: string maxLength: 16 - type: 'null' title: Region responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Ingest Tiktok User Endpoint Api Influencer Discovery Tiktok Users Ingest Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/influencer-discovery/instagram/users/ingest: post: tags: - influencer-discovery summary: Ingest Instagram User Endpoint operationId: ingest_instagram_user_endpoint_api_influencer_discovery_instagram_users_ingest_post security: - HTTPBearer: [] parameters: - name: username in: query required: true schema: type: string minLength: 1 maxLength: 200 title: Username responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Ingest Instagram User Endpoint Api Influencer Discovery Instagram Users Ingest Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/influencer-discovery/youtube/channel/ingest: post: tags: - influencer-discovery summary: Ingest Youtube Channel Endpoint operationId: ingest_youtube_channel_endpoint_api_influencer_discovery_youtube_channel_ingest_post security: - HTTPBearer: [] parameters: - name: id in: query required: true schema: type: string minLength: 1 maxLength: 500 title: Id responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Ingest Youtube Channel Endpoint Api Influencer Discovery Youtube Channel Ingest Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/influencer-discovery/outreach-list: get: tags: - influencer-discovery summary: List Outreach Creators Endpoint operationId: list_outreach_creators_endpoint_api_influencer_discovery_outreach_list_get responses: '200': description: Successful Response content: application/json: schema: additionalProperties: true type: object title: Response List Outreach Creators Endpoint Api Influencer Discovery Outreach List Get security: - HTTPBearer: [] /api/influencer-discovery/lists: post: tags: - influencer-discovery summary: Create Creator List Endpoint operationId: create_creator_list_endpoint_api_influencer_discovery_lists_post security: - HTTPBearer: [] requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateCreatorListRequest' responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Create Creator List Endpoint Api Influencer Discovery Lists Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' get: tags: - influencer-discovery summary: List Creator Lists Endpoint operationId: list_creator_lists_endpoint_api_influencer_discovery_lists_get security: - HTTPBearer: [] parameters: - name: limit in: query required: false schema: type: integer maximum: 50 minimum: 1 default: 20 title: Limit - name: offset in: query required: false schema: type: integer minimum: 0 default: 0 title: Offset responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response List Creator Lists Endpoint Api Influencer Discovery Lists Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/influencer-discovery/lists/{list_id}: get: tags: - influencer-discovery summary: Get Creator List Endpoint operationId: get_creator_list_endpoint_api_influencer_discovery_lists__list_id__get security: - HTTPBearer: [] parameters: - name: list_id in: path required: true schema: type: string title: List Id responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Get Creator List Endpoint Api Influencer Discovery Lists List Id Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' patch: tags: - influencer-discovery summary: Update Creator List Endpoint operationId: update_creator_list_endpoint_api_influencer_discovery_lists__list_id__patch security: - HTTPBearer: [] parameters: - name: list_id in: path required: true schema: type: string title: List Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdateCreatorListRequest' responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Update Creator List Endpoint Api Influencer Discovery Lists List Id Patch '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' delete: tags: - influencer-discovery summary: Archive Creator List Endpoint operationId: archive_creator_list_endpoint_api_influencer_discovery_lists__list_id__delete security: - HTTPBearer: [] parameters: - name: list_id in: path required: true schema: type: string title: List Id - name: permanent in: query required: false schema: type: boolean default: false title: Permanent responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Archive Creator List Endpoint Api Influencer Discovery Lists List Id Delete '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/influencer-discovery/lists/{list_id}/members: post: tags: - influencer-discovery summary: Add Creators To List Endpoint operationId: add_creators_to_list_endpoint_api_influencer_discovery_lists__list_id__members_post security: - HTTPBearer: [] parameters: - name: list_id in: path required: true schema: type: string title: List Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AddCreatorsToListRequest' responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Add Creators To List Endpoint Api Influencer Discovery Lists List Id Members Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/influencer-discovery/creators/{creator_id}/lists: post: tags: - influencer-discovery summary: Add Creator To Lists Endpoint operationId: add_creator_to_lists_endpoint_api_influencer_discovery_creators__creator_id__lists_post security: - HTTPBearer: [] parameters: - name: creator_id in: path required: true schema: type: string title: Creator Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AddCreatorToListsRequest' responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Add Creator To Lists Endpoint Api Influencer Discovery Creators Creator Id Lists Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/influencer-discovery/lists/{list_id}/members/{creator_id}: patch: tags: - influencer-discovery summary: Update Creator List Member Endpoint operationId: update_creator_list_member_endpoint_api_influencer_discovery_lists__list_id__members__creator_id__patch security: - HTTPBearer: [] parameters: - name: list_id in: path required: true schema: type: string title: List Id - name: creator_id in: path required: true schema: type: string title: Creator Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdateCreatorListMembershipRequest' responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Update Creator List Member Endpoint Api Influencer Discovery Lists List Id Members Creator Id Patch '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' delete: tags: - influencer-discovery summary: Remove Creator From List Endpoint operationId: remove_creator_from_list_endpoint_api_influencer_discovery_lists__list_id__members__creator_id__delete security: - HTTPBearer: [] parameters: - name: list_id in: path required: true schema: type: string title: List Id - name: creator_id in: path required: true schema: type: string title: Creator Id responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Remove Creator From List Endpoint Api Influencer Discovery Lists List Id Members Creator Id Delete '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/influencer-discovery/outreach-list/{creator_id}: delete: tags: - influencer-discovery summary: Remove Outreach Creator Endpoint operationId: remove_outreach_creator_endpoint_api_influencer_discovery_outreach_list__creator_id__delete security: - HTTPBearer: [] parameters: - name: creator_id in: path required: true schema: type: string title: Creator Id responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Remove Outreach Creator Endpoint Api Influencer Discovery Outreach List Creator Id Delete '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/influencer-discovery/outreach-list/{creator_id}/stage: patch: tags: - influencer-discovery summary: Update Outreach Creator Stage Endpoint operationId: update_outreach_creator_stage_endpoint_api_influencer_discovery_outreach_list__creator_id__stage_patch security: - HTTPBearer: [] parameters: - name: creator_id in: path required: true schema: type: string title: Creator Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdateOutreachStageRequest' responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Update Outreach Creator Stage Endpoint Api Influencer Discovery Outreach List Creator Id Stage Patch '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/influencer-discovery/outreach-list/{creator_id}/outreach-sent: post: tags: - influencer-discovery summary: Mark Creator Outreach Sent Endpoint operationId: mark_creator_outreach_sent_endpoint_api_influencer_discovery_outreach_list__creator_id__outreach_sent_post security: - HTTPBearer: [] parameters: - name: creator_id in: path required: true schema: type: string title: Creator Id responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Mark Creator Outreach Sent Endpoint Api Influencer Discovery Outreach List Creator Id Outreach Sent Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/influencer-discovery/outreach-list/{creator_id}/drafts: get: tags: - influencer-discovery summary: List Creator Outreach Drafts Endpoint operationId: list_creator_outreach_drafts_endpoint_api_influencer_discovery_outreach_list__creator_id__drafts_get security: - HTTPBearer: [] parameters: - name: creator_id in: path required: true schema: type: string title: Creator Id responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response List Creator Outreach Drafts Endpoint Api Influencer Discovery Outreach List Creator Id Drafts Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' put: tags: - influencer-discovery summary: Save Creator Outreach Draft Endpoint operationId: save_creator_outreach_draft_endpoint_api_influencer_discovery_outreach_list__creator_id__drafts_put security: - HTTPBearer: [] parameters: - name: creator_id in: path required: true schema: type: string title: Creator Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SaveCreatorOutreachDraftRequest' responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Save Creator Outreach Draft Endpoint Api Influencer Discovery Outreach List Creator Id Drafts Put '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/influencer-discovery/outreach-list/{creator_id}/contacts: patch: tags: - influencer-discovery summary: Update Outreach Creator Contacts Endpoint operationId: update_outreach_creator_contacts_endpoint_api_influencer_discovery_outreach_list__creator_id__contacts_patch security: - HTTPBearer: [] parameters: - name: creator_id in: path required: true schema: type: string title: Creator Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdateCreatorContactsRequest' responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Update Outreach Creator Contacts Endpoint Api Influencer Discovery Outreach List Creator Id Contacts Patch '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/influencer-discovery/outreach-list/{creator_id}/locations: patch: tags: - influencer-discovery summary: Update Outreach Creator Locations Endpoint operationId: update_outreach_creator_locations_endpoint_api_influencer_discovery_outreach_list__creator_id__locations_patch security: - HTTPBearer: [] parameters: - name: creator_id in: path required: true schema: type: string title: Creator Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdateCreatorLocationsRequest' responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Update Outreach Creator Locations Endpoint Api Influencer Discovery Outreach List Creator Id Locations Patch '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/influencer-inventory/search: post: tags: - influencer-inventory summary: Search Influencer Inventory operationId: search_influencer_inventory_api_influencer_inventory_search_post requestBody: content: application/json: schema: $ref: '#/components/schemas/InfluencerInventorySearchRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/InfluencerInventorySearchResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/influencer-inventory/profiles/related-accounts/discover: post: tags: - influencer-inventory summary: Discover Influencer Related Accounts operationId: discover_influencer_related_accounts_api_influencer_inventory_profiles_related_accounts_discover_post requestBody: content: application/json: schema: $ref: '#/components/schemas/InfluencerRelatedAccountsDiscoveryRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/InfluencerRelatedAccountsDiscoveryResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/influencer-inventory/search/web-discovery: post: tags: - influencer-inventory summary: Search Influencer Web Discovery operationId: search_influencer_web_discovery_api_influencer_inventory_search_web_discovery_post requestBody: content: application/json: schema: $ref: '#/components/schemas/InfluencerWebDiscoveryRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/InfluencerInventorySearchResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/influencer-inventory/search/web-discovery/stream: post: tags: - influencer-inventory summary: Stream Influencer Web Discovery description: Stream discovery progress and provider-validated results. operationId: stream_influencer_web_discovery_api_influencer_inventory_search_web_discovery_stream_post requestBody: content: application/json: schema: $ref: '#/components/schemas/InfluencerWebDiscoveryRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/influencer-inventory/search/analyze-query: post: tags: - influencer-inventory summary: Analyze Influencer Inventory Search Query operationId: analyze_influencer_inventory_search_query_api_influencer_inventory_search_analyze_query_post requestBody: content: application/json: schema: $ref: '#/components/schemas/InfluencerInventoryQueryFilterAnalysisRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/InfluencerInventoryQueryFilterAnalysisResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/influencer-inventory/search/web-discovery/curated-lists/stream: post: tags: - influencer-inventory summary: Stream Influencer Inventory Curated Lists description: Keep long-running curated-list generation alive and return its final snapshot. operationId: stream_influencer_inventory_curated_lists_api_influencer_inventory_search_web_discovery_curated_lists_stream_post requestBody: content: application/json: schema: $ref: '#/components/schemas/InfluencerInventoryCuratedListsRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/influencer-inventory/search/web-discovery/curated-lists: post: tags: - influencer-inventory summary: Get Influencer Inventory Curated Lists operationId: get_influencer_inventory_curated_lists_api_influencer_inventory_search_web_discovery_curated_lists_post requestBody: content: application/json: schema: $ref: '#/components/schemas/InfluencerInventoryCuratedListsRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/InfluencerInventoryCuratedListsResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/influencer-inventory/creators/ingest: post: tags: - influencer-inventory summary: Ingest Influencer Inventory Creator operationId: ingest_influencer_inventory_creator_api_influencer_inventory_creators_ingest_post requestBody: content: application/json: schema: $ref: '#/components/schemas/InfluencerInventoryCreatorIngestRequest' required: true responses: '200': description: Successful Response content: application/json: schema: additionalProperties: true type: object title: Response Ingest Influencer Inventory Creator Api Influencer Inventory Creators Ingest Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/influencer-campaigns/active: get: tags: - influencer-campaigns summary: Get Active Influencer Campaign operationId: get_active_influencer_campaign_api_influencer_campaigns_active_get responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/InfluencerCampaignActiveResponse' security: - HTTPBearer: [] /api/influencer-campaigns/active/summaries: get: tags: - influencer-campaigns summary: List Active Influencer Campaign Summaries operationId: list_active_influencer_campaign_summaries_api_influencer_campaigns_active_summaries_get security: - HTTPBearer: [] parameters: - name: limit in: query required: false schema: type: integer maximum: 50 minimum: 1 default: 20 title: Limit - name: offset in: query required: false schema: type: integer minimum: 0 default: 0 title: Offset responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/InfluencerCampaignSummaryPageResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/influencer-campaigns/{campaign_id}: get: tags: - influencer-campaigns summary: Get Influencer Campaign Detail operationId: get_influencer_campaign_detail_api_influencer_campaigns__campaign_id__get security: - HTTPBearer: [] parameters: - name: campaign_id in: path required: true schema: type: string format: uuid title: Campaign Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/InfluencerCampaignPlanResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' patch: tags: - influencer-campaigns summary: Update Influencer Campaign operationId: update_influencer_campaign_api_influencer_campaigns__campaign_id__patch security: - HTTPBearer: [] parameters: - name: campaign_id in: path required: true schema: type: string format: uuid title: Campaign Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/InfluencerCampaignUpsertRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/InfluencerCampaignPlanResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' delete: tags: - influencer-campaigns summary: Delete Influencer Campaign operationId: delete_influencer_campaign_api_influencer_campaigns__campaign_id__delete security: - HTTPBearer: [] parameters: - name: campaign_id in: path required: true schema: type: string format: uuid title: Campaign Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/InfluencerCampaignDeleteResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/influencer-campaigns: post: tags: - influencer-campaigns summary: Create Influencer Campaign operationId: create_influencer_campaign_api_influencer_campaigns_post requestBody: content: application/json: schema: $ref: '#/components/schemas/InfluencerCampaignUpsertRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/InfluencerCampaignPlanResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/influencer-campaigns/from-creator-list/{list_id}: post: tags: - influencer-campaigns summary: Create Influencer Campaign From Creator List operationId: create_influencer_campaign_from_creator_list_api_influencer_campaigns_from_creator_list__list_id__post security: - HTTPBearer: [] parameters: - name: list_id in: path required: true schema: type: string format: uuid title: List Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/InfluencerCampaignFromCreatorListRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/InfluencerCampaignPlanResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/influencer-campaigns/{campaign_id}/source-list-sync: post: tags: - influencer-campaigns summary: Sync Influencer Campaign From Source Creator List operationId: sync_influencer_campaign_from_source_creator_list_api_influencer_campaigns__campaign_id__source_list_sync_post security: - HTTPBearer: [] parameters: - name: campaign_id in: path required: true schema: type: string format: uuid title: Campaign Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/InfluencerCampaignSourceListSyncRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/InfluencerCampaignPlanResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/influencer-campaigns/{campaign_id}/collection-creators: post: tags: - influencer-campaigns summary: Add Influencer Campaign Collection Creators operationId: add_influencer_campaign_collection_creators_api_influencer_campaigns__campaign_id__collection_creators_post security: - HTTPBearer: [] parameters: - name: campaign_id in: path required: true schema: type: string format: uuid title: Campaign Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/InfluencerCampaignCollectionAddCreatorsRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/InfluencerCampaignCollectionAddCreatorsResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/influencer-campaigns/{campaign_id}/collection: patch: tags: - influencer-campaigns summary: Update Influencer Campaign Collection operationId: update_influencer_campaign_collection_api_influencer_campaigns__campaign_id__collection_patch security: - HTTPBearer: [] parameters: - name: campaign_id in: path required: true schema: type: string format: uuid title: Campaign Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/InfluencerCampaignCollectionUpdateRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/InfluencerCampaignPlanResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/influencer-campaigns/{campaign_id}/archive: post: tags: - influencer-campaigns summary: Archive Influencer Campaign operationId: archive_influencer_campaign_api_influencer_campaigns__campaign_id__archive_post security: - HTTPBearer: [] parameters: - name: campaign_id in: path required: true schema: type: string format: uuid title: Campaign Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/InfluencerCampaignArchiveResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/influencer-campaigns/curated-lists/{curated_list_id}/save: post: tags: - influencer-campaigns summary: Save Influencer Campaign Curated List operationId: save_influencer_campaign_curated_list_api_influencer_campaigns_curated_lists__curated_list_id__save_post security: - HTTPBearer: [] parameters: - name: curated_list_id in: path required: true schema: type: string format: uuid title: Curated List Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/InfluencerCampaignCuratedListSaveResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/influencer-campaigns/curated-lists/{curated_list_id}/roles: patch: tags: - influencer-campaigns summary: Update Influencer Campaign Creator Groups operationId: update_influencer_campaign_creator_groups_api_influencer_campaigns_curated_lists__curated_list_id__roles_patch security: - HTTPBearer: [] parameters: - name: curated_list_id in: path required: true schema: type: string format: uuid title: Curated List Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/InfluencerCampaignRoleEditsRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/InfluencerCampaignCuratedListMutationResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/influencer-campaigns/curated-lists/{curated_list_id}/report: patch: tags: - influencer-campaigns summary: Update Influencer Campaign Report operationId: update_influencer_campaign_report_api_influencer_campaigns_curated_lists__curated_list_id__report_patch security: - HTTPBearer: [] parameters: - name: curated_list_id in: path required: true schema: type: string format: uuid title: Curated List Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/InfluencerCampaignReportUpdateRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/InfluencerCampaignCuratedListMutationResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/influencer-campaigns/curated-lists/{curated_list_id}/creators/{creator_id}/replacement-candidates: post: tags: - influencer-campaigns summary: Find Influencer Campaign Replacement Candidates operationId: find_influencer_campaign_replacement_candidates_api_influencer_campaigns_curated_lists__curated_list_id__creators__creator_id__replacement_candidates_post security: - HTTPBearer: [] parameters: - name: curated_list_id in: path required: true schema: type: string format: uuid title: Curated List Id - name: creator_id in: path required: true schema: type: string format: uuid title: Creator Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/InfluencerCampaignReplacementCandidatesRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/InfluencerCampaignReplacementCandidatesResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/influencer-campaigns/curated-lists/{curated_list_id}/creators/{creator_id}/replace: post: tags: - influencer-campaigns summary: Replace Influencer Campaign Creator operationId: replace_influencer_campaign_creator_api_influencer_campaigns_curated_lists__curated_list_id__creators__creator_id__replace_post security: - HTTPBearer: [] parameters: - name: curated_list_id in: path required: true schema: type: string format: uuid title: Curated List Id - name: creator_id in: path required: true schema: type: string format: uuid title: Creator Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/InfluencerCampaignReplaceCreatorRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/InfluencerCampaignReplaceCreatorResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/workflow/brand-generation/step1/preflight-url: post: tags: - brand-workflow - brand-workflow summary: Preflight Company Url operationId: preflight_company_url_api_workflow_brand_generation_step1_preflight_url_post requestBody: content: application/json: schema: $ref: '#/components/schemas/CompanyUrlPreflightRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/workflow/brand-generation/status: get: tags: - brand-workflow - brand-workflow summary: Get Workflow Status operationId: get_workflow_status_api_workflow_brand_generation_status_get security: - HTTPBearer: [] parameters: - name: company_url in: query required: true schema: type: string title: Company Url - name: company_profile_id in: query required: true schema: type: string format: uuid title: Company Profile Id - name: workflow_id in: query required: false schema: anyOf: - type: string format: uuid - type: 'null' title: Workflow Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/workflow/brand-generation/step1/upload-files: post: tags: - brand-workflow - brand-workflow summary: Upload Analysis Files operationId: upload_analysis_files_api_workflow_brand_generation_step1_upload_files_post requestBody: content: multipart/form-data: schema: $ref: '#/components/schemas/Body_upload_analysis_files_api_workflow_brand_generation_step1_upload_files_post' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/workflow/brand-generation/step1/files: get: tags: - brand-workflow - brand-workflow summary: Get Workflow Files operationId: get_workflow_files_api_workflow_brand_generation_step1_files_get security: - HTTPBearer: [] parameters: - name: company_url in: query required: true schema: type: string title: Company Url - name: company_profile_id in: query required: true schema: type: string format: uuid title: Company Profile Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/workflow/brand-generation/step1/extract: post: tags: - brand-workflow - brand-workflow summary: Extract Company Info description: Extract company information using async pipeline with real-time SSE updates. operationId: extract_company_info_api_workflow_brand_generation_step1_extract_post requestBody: content: application/json: schema: $ref: '#/components/schemas/Step1ExtractRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/workflow/brand-generation/step1/confirm: post: tags: - brand-workflow - brand-workflow summary: Confirm Company Info description: Confirm company information and proceed to step 2. operationId: confirm_company_info_api_workflow_brand_generation_step1_confirm_post requestBody: content: application/json: schema: $ref: '#/components/schemas/Step1ConfirmRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/workflow/brand-generation/step2/discover: post: tags: - brand-workflow - brand-workflow summary: Discover Product Offerings operationId: discover_product_offerings_api_workflow_brand_generation_step2_discover_post requestBody: content: application/json: schema: $ref: '#/components/schemas/Step2DiscoverRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/workflow/brand-generation/step2/confirm: post: tags: - brand-workflow - brand-workflow summary: Confirm Product Lines description: Confirm SKUs and save to step2_data. operationId: confirm_product_lines_api_workflow_brand_generation_step2_confirm_post requestBody: content: application/json: schema: $ref: '#/components/schemas/Step2ConfirmRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/workflow/brand-generation/{workflow_id}/product-offerings: get: tags: - brand-workflow - brand-workflow summary: Get Workflow Product Offerings operationId: get_workflow_product_offerings_api_workflow_brand_generation__workflow_id__product_offerings_get security: - HTTPBearer: [] parameters: - name: workflow_id in: path required: true schema: type: string format: uuid title: Workflow Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/workflow/brand-generation/product-offerings/inventory: get: tags: - brand-workflow - brand-workflow summary: Get Available Inventory Offerings operationId: get_available_inventory_offerings_api_workflow_brand_generation_product_offerings_inventory_get security: - HTTPBearer: [] parameters: - name: company_profile_id in: query required: true schema: type: string format: uuid title: Company Profile Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/workflow/brand-generation/product-offerings/augment: post: tags: - brand-workflow - brand-workflow summary: Augment Product Offerings Route operationId: augment_product_offerings_route_api_workflow_brand_generation_product_offerings_augment_post requestBody: content: application/json: schema: $ref: '#/components/schemas/ProductOfferingAugmentRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/workflow/brand-generation/product-offerings/extract-url: post: tags: - brand-workflow - brand-workflow summary: Extract Product Offerings From Url Route operationId: extract_product_offerings_from_url_route_api_workflow_brand_generation_product_offerings_extract_url_post requestBody: content: application/json: schema: $ref: '#/components/schemas/ProductOfferingExtractUrlRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/workflow/brand-generation/product-offerings/{offering_id}/restart: post: tags: - brand-workflow - brand-workflow summary: Restart Product Offering Analysis operationId: restart_product_offering_analysis_api_workflow_brand_generation_product_offerings__offering_id__restart_post security: - HTTPBearer: [] parameters: - name: offering_id in: path required: true schema: type: string format: uuid title: Offering Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/workflow/brand-generation/step3/competitors-status/{workflow_id}: get: tags: - brand-workflow - brand-workflow summary: Get Competitors Discovery Status operationId: get_competitors_discovery_status_api_workflow_brand_generation_step3_competitors_status__workflow_id__get security: - HTTPBearer: [] parameters: - name: workflow_id in: path required: true schema: type: string format: uuid title: Workflow Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/workflow/brand-generation/step3/competitors/sse/{workflow_id}: get: tags: - brand-workflow - brand-workflow summary: Competitors Discovery Sse Stream operationId: competitors_discovery_sse_stream_api_workflow_brand_generation_step3_competitors_sse__workflow_id__get security: - HTTPBearer: [] parameters: - name: workflow_id in: path required: true schema: type: string format: uuid title: Workflow Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/workflow/brand-generation/step3/regenerate-competitors: post: tags: - brand-workflow - brand-workflow summary: Regenerate Competitors operationId: regenerate_competitors_api_workflow_brand_generation_step3_regenerate_competitors_post requestBody: content: application/json: schema: $ref: '#/components/schemas/CompetitorRegenerateRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/workflow/brand-generation/step3/confirm-competitors: post: tags: - brand-workflow - brand-workflow summary: Confirm Competitors Workflow Id description: Confirm selected competitors and continue workflow processing. operationId: confirm_competitors_workflow_id_api_workflow_brand_generation_step3_confirm_competitors_post requestBody: content: application/json: schema: $ref: '#/components/schemas/ConfirmCompetitorsRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/workflow/brand-generation/step3/validate-competitor: post: tags: - brand-workflow - brand-workflow summary: Validate Competitor Url operationId: validate_competitor_url_api_workflow_brand_generation_step3_validate_competitor_post requestBody: content: application/json: schema: $ref: '#/components/schemas/Body_validate_competitor_url_api_workflow_brand_generation_step3_validate_competitor_post' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/workflow/brand-generation/onboarding/runs: get: tags: - brand-workflow - brand-workflow summary: Get Onboarding Runs operationId: get_onboarding_runs_api_workflow_brand_generation_onboarding_runs_get security: - HTTPBearer: [] parameters: - name: company_profile_id in: query required: true schema: type: string format: uuid title: Company Profile Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/workflow/brand-generation/onboarding/view/{workflow_id}: get: tags: - brand-workflow - brand-workflow summary: Get Onboarding View operationId: get_onboarding_view_api_workflow_brand_generation_onboarding_view__workflow_id__get security: - HTTPBearer: [] parameters: - name: workflow_id in: path required: true schema: type: string format: uuid title: Workflow Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/workflow/brand-generation/onboarding/stream/{workflow_id}: get: tags: - brand-workflow - brand-workflow summary: Onboarding View Stream operationId: onboarding_view_stream_api_workflow_brand_generation_onboarding_stream__workflow_id__get security: - HTTPBearer: [] parameters: - name: workflow_id in: path required: true schema: type: string format: uuid title: Workflow Id - name: last_event_id in: query required: false schema: anyOf: - type: string - type: 'null' title: Last Event Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/workflow/brand-generation/recent: get: tags: - brand-workflow - brand-workflow summary: Get Recent Workflows operationId: get_recent_workflows_api_workflow_brand_generation_recent_get responses: '200': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /api/workflow/brand-generation/recent/status: get: tags: - brand-workflow - brand-workflow summary: Get Recent Workflows Status operationId: get_recent_workflows_status_api_workflow_brand_generation_recent_status_get responses: '200': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /api/workflow/brand-generation/marketing-profile/sse/{workflow_id}: get: tags: - brand-workflow - brand-workflow summary: Marketing Profile Sse Stream operationId: marketing_profile_sse_stream_api_workflow_brand_generation_marketing_profile_sse__workflow_id__get security: - HTTPBearer: [] parameters: - name: workflow_id in: path required: true schema: type: string format: uuid title: Workflow Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/workflow/brand-generation/marketing-profile/state/{workflow_id}: get: tags: - brand-workflow - brand-workflow summary: Get Marketing Profile State Route operationId: get_marketing_profile_state_route_api_workflow_brand_generation_marketing_profile_state__workflow_id__get security: - HTTPBearer: [] parameters: - name: workflow_id in: path required: true schema: type: string format: uuid title: Workflow Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/workflow/brand-generation/marketing-profile/generate/{workflow_id}: post: tags: - brand-workflow - brand-workflow summary: Generate Marketing Profile Route operationId: generate_marketing_profile_route_api_workflow_brand_generation_marketing_profile_generate__workflow_id__post security: - HTTPBearer: [] parameters: - name: workflow_id in: path required: true schema: type: string format: uuid title: Workflow Id - name: force_restart in: query required: false schema: type: boolean default: false title: Force Restart requestBody: content: application/json: schema: anyOf: - $ref: '#/components/schemas/MarketingProfileGenerationRequest' - type: 'null' title: Request Body responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/workflow/brand-generation/marketing-profile/{workflow_id}: get: tags: - brand-workflow - brand-workflow summary: Get Marketing Profile operationId: get_marketing_profile_api_workflow_brand_generation_marketing_profile__workflow_id__get security: - HTTPBearer: [] parameters: - name: workflow_id in: path required: true schema: type: string format: uuid title: Workflow Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/workflow/brand-generation/onboarding/narrative/{workflow_id}: post: tags: - brand-workflow - brand-workflow summary: Summarize Onboarding Narrative Route operationId: summarize_onboarding_narrative_route_api_workflow_brand_generation_onboarding_narrative__workflow_id__post security: - HTTPBearer: [] parameters: - name: workflow_id in: path required: true schema: type: string format: uuid title: Workflow Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/OnboardingNarrativeRequest' responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/workflow/brand-generation/agent-mode/start: post: tags: - brand-workflow - brand-workflow summary: Start Agent Mode description: 'Enable agent mode for a brand workflow and start a background task to auto-advance the workflow where possible.' operationId: start_agent_mode_api_workflow_brand_generation_agent_mode_start_post requestBody: content: application/json: schema: $ref: '#/components/schemas/AgentModeStartRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/brand-workflow/sse/stream/{process_id}: get: tags: - brand-workflow-sse - brand-workflow-sse summary: Stream Brand Workflow Events description: "Stream brand workflow events for a specific process.\n\nArgs:\n request: FastAPI request\n process_id:\ \ Workflow process ID\n last_event_id: Last event ID for reconnection\n current_user: Authenticated user\n \ \ \nReturns:\n EventSourceResponse streaming workflow events" operationId: stream_brand_workflow_events_api_brand_workflow_sse_stream__process_id__get security: - HTTPBearer: [] parameters: - name: process_id in: path required: true schema: type: string title: Process Id - name: last_event_id in: query required: false schema: anyOf: - type: string - type: 'null' title: Last Event Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/brand-workflow/sse/stream: get: tags: - brand-workflow-sse - brand-workflow-sse summary: Stream All Workflow Events description: "Stream all brand workflow events for the current user.\n\nArgs:\n request: FastAPI request\n last_event_id:\ \ Last event ID for reconnection\n current_user: Authenticated user\n \nReturns:\n EventSourceResponse streaming\ \ all user's workflow events" operationId: stream_all_workflow_events_api_brand_workflow_sse_stream_get security: - HTTPBearer: [] parameters: - name: last_event_id in: query required: false schema: anyOf: - type: string - type: 'null' title: Last Event Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/brand-workflow/sse/test/{process_id}: post: tags: - brand-workflow-sse - brand-workflow-sse summary: Test Workflow Events description: 'Test endpoint to emit sample workflow events. For development/testing only.' operationId: test_workflow_events_api_brand_workflow_sse_test__process_id__post security: - HTTPBearer: [] parameters: - name: process_id in: path required: true schema: type: string title: Process Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/brand-workflow/sse/state/{process_id}: get: tags: - brand-workflow-sse - brand-workflow-sse summary: Get Workflow State description: Return the full, latest live state JSON for the given process_id from Redis. operationId: get_workflow_state_api_brand_workflow_sse_state__process_id__get security: - HTTPBearer: [] parameters: - name: process_id in: path required: true schema: type: string title: Process Id responses: '200': description: Successful Response content: application/json: schema: title: Response Get Workflow State Api Brand Workflow Sse State Process Id Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/brand-workflow/sse/active: get: tags: - brand-workflow-sse - brand-workflow-sse summary: Get Active Workflow description: Return the active process_id for this user+company+url if any (Redis-backed). operationId: get_active_workflow_api_brand_workflow_sse_active_get security: - HTTPBearer: [] parameters: - name: company_url in: query required: true schema: type: string title: Company Url - name: company_profile_id in: query required: false schema: anyOf: - type: string format: uuid - type: 'null' title: Company Profile Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /metrics: get: tags: - metrics - metrics summary: Get Metrics description: 'Expose Prometheus metrics. This endpoint returns metrics in Prometheus text format. Metrics include: - SSE connection counts and duration - Active SSE connections - Other application metrics' operationId: get_metrics_metrics_get responses: '200': description: Successful Response content: application/json: schema: {} /api/gallery/images: get: tags: - gallery - gallery summary: Get Gallery Images description: Get paginated gallery images with filtering and sorting options operationId: get_gallery_images_api_gallery_images_get security: - HTTPBearer: [] parameters: - name: page in: query required: false schema: type: integer minimum: 0 default: 0 title: Page - name: limit in: query required: false schema: type: integer maximum: 20 minimum: 1 default: 20 title: Limit - name: category in: query required: false schema: anyOf: - type: string - type: 'null' title: Category - name: subcategory in: query required: false schema: anyOf: - type: string - type: 'null' title: Subcategory - name: media_type in: query required: false schema: anyOf: - type: string - type: 'null' title: Media Type - name: asset_origin in: query required: false schema: anyOf: - type: string pattern: ^(brand_assets|pomo_generations|external_ads)$ - type: 'null' title: Asset Origin - name: ad_platform in: query required: false schema: anyOf: - type: string pattern: ^[A-Za-z0-9_-]{1,32}$ - type: 'null' title: Ad Platform - name: performance_tier in: query required: false schema: anyOf: - type: string pattern: ^(high|typical|low|learning)$ - type: 'null' title: Performance Tier - name: analysis_status in: query required: false schema: anyOf: - type: string pattern: ^completed$ - type: 'null' title: Analysis Status - name: is_favorite in: query required: false schema: anyOf: - type: boolean - type: 'null' title: Is Favorite - name: search in: query required: false schema: anyOf: - type: string - type: 'null' title: Search - name: sort_by in: query required: false schema: type: string pattern: ^(created_at|updated_at|title)$ default: created_at title: Sort By - name: sort_order in: query required: false schema: type: string pattern: ^(asc|desc)$ default: desc title: Sort Order responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/GalleryListResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/gallery/images/{image_id}: get: tags: - gallery - gallery summary: Get Gallery Image description: Get a specific gallery image by ID operationId: get_gallery_image_api_gallery_images__image_id__get security: - HTTPBearer: [] parameters: - name: image_id in: path required: true schema: type: string format: uuid title: Image Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/GalleryImageResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' put: tags: - gallery - gallery summary: Update Gallery Image description: Update gallery image metadata operationId: update_gallery_image_api_gallery_images__image_id__put security: - HTTPBearer: [] parameters: - name: image_id in: path required: true schema: type: string format: uuid title: Image Id - name: title in: query required: false schema: anyOf: - type: string - type: 'null' title: Title - name: description in: query required: false schema: anyOf: - type: string - type: 'null' title: Description - name: is_favorite in: query required: false schema: anyOf: - type: boolean - type: 'null' title: Is Favorite requestBody: content: application/json: schema: anyOf: - type: array items: type: string - type: 'null' title: Tags responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/GalleryImageResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' delete: tags: - gallery - gallery summary: Delete Gallery Image description: Delete a gallery image (soft delete by default, permanent if specified) operationId: delete_gallery_image_api_gallery_images__image_id__delete security: - HTTPBearer: [] parameters: - name: image_id in: path required: true schema: type: string format: uuid title: Image Id - name: permanent in: query required: false schema: type: boolean default: false title: Permanent responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/gallery/images/{image_id}/preview: get: tags: - gallery - gallery summary: Get Gallery Image Preview description: Proxy a gallery image or managed video poster through profile-scoped auth. operationId: get_gallery_image_preview_api_gallery_images__image_id__preview_get security: - HTTPBearer: [] parameters: - name: image_id in: path required: true schema: type: string format: uuid title: Image Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/gallery/images/{image_id}/media-playback: get: tags: - gallery - gallery summary: Get Gallery Video Playback description: Mint a short-lived, asset- and profile-scoped URL for native video playback. operationId: get_gallery_video_playback_api_gallery_images__image_id__media_playback_get security: - HTTPBearer: [] parameters: - name: image_id in: path required: true schema: type: string format: uuid title: Image Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/gallery/images/{image_id}/media: get: tags: - gallery - gallery summary: Stream Gallery Video description: Authenticated range endpoint for canonical Gallery video assets. operationId: stream_gallery_video_api_gallery_images__image_id__media_get security: - HTTPBearer: [] parameters: - name: image_id in: path required: true schema: type: string format: uuid title: Image Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/gallery/images/{image_id}/campaign-asset-intelligence: post: tags: - gallery - gallery summary: Analyze Gallery Image For Campaign description: Score a gallery image/video as user-provided creative for a campaign idea. operationId: analyze_gallery_image_for_campaign_api_gallery_images__image_id__campaign_asset_intelligence_post security: - HTTPBearer: [] parameters: - name: image_id in: path required: true schema: type: string format: uuid title: Image Id requestBody: content: application/json: schema: type: object additionalProperties: true title: Payload responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/gallery/create-with-ai: post: tags: - gallery - gallery summary: Create Gallery Image With Ai description: 'Create images using AI and add them to the gallery. This uses the content editing generate_image endpoint internally.' operationId: create_gallery_image_with_ai_api_gallery_create_with_ai_post requestBody: content: multipart/form-data: schema: $ref: '#/components/schemas/Body_create_gallery_image_with_ai_api_gallery_create_with_ai_post' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/GalleryCreateResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/gallery/upload: post: tags: - gallery - gallery summary: Upload Gallery Image description: Upload a new image to the gallery operationId: upload_gallery_image_api_gallery_upload_post requestBody: content: multipart/form-data: schema: $ref: '#/components/schemas/Body_upload_gallery_image_api_gallery_upload_post' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/GalleryImageResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/gallery/upload-bulk: post: tags: - gallery - gallery summary: Upload Gallery Images Bulk description: Upload multiple images to the gallery at once (up to 9 images) operationId: upload_gallery_images_bulk_api_gallery_upload_bulk_post requestBody: content: multipart/form-data: schema: $ref: '#/components/schemas/Body_upload_gallery_images_bulk_api_gallery_upload_bulk_post' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/GalleryUploadResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/gallery/create-with-ai/job: post: tags: - gallery - gallery summary: Create Gallery Image With Ai Job description: 'Start an async AI Studio generation job (agent job pattern). Returns job info for polling/SSE.' operationId: create_gallery_image_with_ai_job_api_gallery_create_with_ai_job_post requestBody: content: application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/Body_create_gallery_image_with_ai_job_api_gallery_create_with_ai_job_post' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/JobResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/gallery/images/bulk-delete: post: tags: - gallery - gallery summary: Bulk Delete Gallery Images description: Delete multiple gallery images at once operationId: bulk_delete_gallery_images_api_gallery_images_bulk_delete_post security: - HTTPBearer: [] parameters: - name: permanent in: query required: false schema: type: boolean default: false title: Permanent requestBody: required: true content: application/json: schema: type: array items: type: string format: uuid title: Image Ids responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/gallery/categories: get: tags: - gallery - gallery summary: Get Gallery Categories description: Get all available categories and subcategories for the company's gallery operationId: get_gallery_categories_api_gallery_categories_get responses: '200': description: Successful Response content: application/json: schema: items: additionalProperties: true type: object type: array title: Response Get Gallery Categories Api Gallery Categories Get security: - HTTPBearer: [] /api/gallery-media/{image_id}: get: tags: - gallery-media - gallery-media summary: Stream Gallery Video Playback description: Range-stream a video after validating its short-lived playback capability. operationId: stream_gallery_video_playback_api_gallery_media__image_id__get parameters: - name: image_id in: path required: true schema: type: string format: uuid title: Image Id - name: token in: query required: true schema: type: string minLength: 32 maxLength: 4096 title: Token responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/change-management/settings: get: tags: - change-management - change-management summary: Get Settings operationId: get_settings_api_change_management_settings_get security: - HTTPBearer: [] parameters: - name: force_refresh in: query required: false schema: type: boolean description: Bypass the shared response cache default: false title: Force Refresh description: Bypass the shared response cache - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ChangeManagementSettingsResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' put: tags: - change-management - change-management summary: Update Settings operationId: update_settings_api_change_management_settings_put security: - HTTPBearer: [] parameters: - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ChangeManagementSettingsUpdateRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ChangeManagementSettingsResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/change-management/approval-groups: get: tags: - change-management - change-management summary: Get Approval Groups operationId: get_approval_groups_api_change_management_approval_groups_get security: - HTTPBearer: [] parameters: - name: force_refresh in: query required: false schema: type: boolean description: Bypass the shared response cache default: false title: Force Refresh description: Bypass the shared response cache - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/ApprovalGroupResponse' title: Response Get Approval Groups Api Change Management Approval Groups Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' post: tags: - change-management - change-management summary: Create Approval Group operationId: create_approval_group_api_change_management_approval_groups_post security: - HTTPBearer: [] parameters: - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ApprovalGroupCreateRequest' responses: '201': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ApprovalGroupResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/change-management/approval-groups/{group_id}: put: tags: - change-management - change-management summary: Update Approval Group operationId: update_approval_group_api_change_management_approval_groups__group_id__put security: - HTTPBearer: [] parameters: - name: group_id in: path required: true schema: type: string format: uuid title: Group Id - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ApprovalGroupUpdateRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ApprovalGroupResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' delete: tags: - change-management - change-management summary: Delete Approval Group operationId: delete_approval_group_api_change_management_approval_groups__group_id__delete security: - HTTPBearer: [] parameters: - name: group_id in: path required: true schema: type: string format: uuid title: Group Id - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id responses: '200': description: Successful Response content: application/json: schema: type: 'null' title: Response Delete Approval Group Api Change Management Approval Groups Group Id Delete '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/change-management/approval-groups/{group_id}/members: put: tags: - change-management - change-management summary: Set Approval Group Members operationId: set_approval_group_members_api_change_management_approval_groups__group_id__members_put security: - HTTPBearer: [] parameters: - name: group_id in: path required: true schema: type: string format: uuid title: Group Id - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ApprovalGroupSetMembersRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ApprovalGroupResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/change-management/requests: post: tags: - change-management - change-management summary: Create Request operationId: create_request_api_change_management_requests_post security: - HTTPBearer: [] parameters: - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ChangeRequestCreateRequest' responses: '201': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ChangeRequestResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' get: tags: - change-management - change-management summary: List Requests operationId: list_requests_api_change_management_requests_get security: - HTTPBearer: [] parameters: - name: limit in: query required: false schema: type: integer maximum: 200 minimum: 1 default: 50 title: Limit - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/ChangeRequestResponse' title: Response List Requests Api Change Management Requests Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/change-management/requests/summary: get: tags: - change-management - change-management summary: Get Requests Summary operationId: get_requests_summary_api_change_management_requests_summary_get security: - HTTPBearer: [] parameters: - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ChangeRequestSummaryResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/change-management/requests/{change_request_id}: get: tags: - change-management - change-management summary: Get Request operationId: get_request_api_change_management_requests__change_request_id__get security: - HTTPBearer: [] parameters: - name: change_request_id in: path required: true schema: type: string format: uuid title: Change Request Id - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ChangeRequestResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/change-management/requests/{change_request_id}/preview: get: tags: - change-management - change-management summary: Get Request Preview operationId: get_request_preview_api_change_management_requests__change_request_id__preview_get security: - HTTPBearer: [] parameters: - name: change_request_id in: path required: true schema: type: string format: uuid title: Change Request Id - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ChangeRequestPreviewResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/change-management/requests/{change_request_id}/approvals: post: tags: - change-management - change-management summary: Approve Request operationId: approve_request_api_change_management_requests__change_request_id__approvals_post security: - HTTPBearer: [] parameters: - name: change_request_id in: path required: true schema: type: string format: uuid title: Change Request Id - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ChangeRequestApproveRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ChangeRequestResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/change-management/requests/{change_request_id}/execute: post: tags: - change-management - change-management summary: Execute Request operationId: execute_request_api_change_management_requests__change_request_id__execute_post security: - HTTPBearer: [] parameters: - name: change_request_id in: path required: true schema: type: string format: uuid title: Change Request Id - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id requestBody: content: application/json: schema: anyOf: - $ref: '#/components/schemas/ChangeRequestExecuteRequest' - type: 'null' title: Payload responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/JobResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/ai-policy: get: tags: - ai-policy summary: Get Ai Policy State operationId: get_ai_policy_state_api_ai_policy_get security: - HTTPBearer: [] parameters: - name: policy_purpose in: query required: false schema: type: string description: 'Policy purpose: compliance|brand_guidelines' default: compliance title: Policy Purpose description: 'Policy purpose: compliance|brand_guidelines' - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AiPolicyStateResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/ai-policy/settings: put: tags: - ai-policy summary: Update Ai Policy Settings operationId: update_ai_policy_settings_api_ai_policy_settings_put security: - HTTPBearer: [] parameters: - name: policy_purpose in: query required: false schema: type: string description: 'Policy purpose: compliance|brand_guidelines' default: compliance title: Policy Purpose description: 'Policy purpose: compliance|brand_guidelines' - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AiPolicySettingsUpdateRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AiPolicyStateResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/ai-policy/generate: post: tags: - ai-policy summary: Generate Ai Policy Draft operationId: generate_ai_policy_draft_api_ai_policy_generate_post security: - HTTPBearer: [] parameters: - name: policy_purpose in: query required: false schema: type: string description: 'Policy purpose: compliance|brand_guidelines' default: compliance title: Policy Purpose description: 'Policy purpose: compliance|brand_guidelines' - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AiPolicyStateResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/ai-policy/draft: put: tags: - ai-policy summary: Update Ai Policy Draft operationId: update_ai_policy_draft_api_ai_policy_draft_put security: - HTTPBearer: [] parameters: - name: policy_purpose in: query required: false schema: type: string description: 'Policy purpose: compliance|brand_guidelines' default: compliance title: Policy Purpose description: 'Policy purpose: compliance|brand_guidelines' - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AiPolicyDraftUpdateRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AiPolicyStateResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/ai-policy/save: post: tags: - ai-policy summary: Save Ai Policy operationId: save_ai_policy_api_ai_policy_save_post security: - HTTPBearer: [] parameters: - name: policy_purpose in: query required: false schema: type: string description: 'Policy purpose: compliance|brand_guidelines' default: compliance title: Policy Purpose description: 'Policy purpose: compliance|brand_guidelines' - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AiPolicySaveVersionRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AiPolicyStateResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/ai-policy/generate-version-name: post: tags: - ai-policy summary: Generate Ai Policy Version Name operationId: generate_ai_policy_version_name_api_ai_policy_generate_version_name_post security: - HTTPBearer: [] parameters: - name: policy_purpose in: query required: false schema: type: string description: 'Policy purpose: compliance|brand_guidelines' default: compliance title: Policy Purpose description: 'Policy purpose: compliance|brand_guidelines' - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AiPolicyGenerateVersionNameRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AiPolicyGenerateVersionNameResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/ai-policy/activate: post: tags: - ai-policy summary: Activate Ai Policy operationId: activate_ai_policy_api_ai_policy_activate_post security: - HTTPBearer: [] parameters: - name: policy_purpose in: query required: false schema: type: string description: 'Policy purpose: compliance|brand_guidelines' default: compliance title: Policy Purpose description: 'Policy purpose: compliance|brand_guidelines' - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AiPolicyActivateVersionRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AiPolicyStateResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/ai-policy/violations: get: tags: - ai-policy summary: List Ai Policy Violations operationId: list_ai_policy_violations_api_ai_policy_violations_get security: - HTTPBearer: [] parameters: - name: limit in: query required: false schema: type: integer maximum: 200 minimum: 1 default: 50 title: Limit - name: surface in: query required: false schema: anyOf: - type: string - type: 'null' description: 'Optional surface filter: chat|ads|social|images|cm' title: Surface description: 'Optional surface filter: chat|ads|social|images|cm' - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/AiPolicyViolationEvent' title: Response List Ai Policy Violations Api Ai Policy Violations Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/ai-policy/latest-warning: get: tags: - ai-policy summary: Get Latest Ai Policy Warning operationId: get_latest_ai_policy_warning_api_ai_policy_latest_warning_get security: - HTTPBearer: [] parameters: - name: surface in: query required: false schema: anyOf: - type: string - type: 'null' description: 'Optional surface filter: chat|ads|social|images|cm' title: Surface description: 'Optional surface filter: chat|ads|social|images|cm' - name: ad_id in: query required: false schema: anyOf: - type: string - type: 'null' title: Ad Id - name: campaign_id in: query required: false schema: anyOf: - type: string - type: 'null' title: Campaign Id - name: primary_campaign_id in: query required: false schema: anyOf: - type: string - type: 'null' title: Primary Campaign Id - name: batch_campaign_id in: query required: false schema: anyOf: - type: string - type: 'null' title: Batch Campaign Id - name: conversation_id in: query required: false schema: anyOf: - type: string - type: 'null' title: Conversation Id - name: change_request_id in: query required: false schema: anyOf: - type: string - type: 'null' title: Change Request Id - name: gallery_image_id in: query required: false schema: anyOf: - type: string - type: 'null' title: Gallery Image Id - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AiPolicyContextWarningResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/social-posts/platforms: get: tags: - social-posts summary: Get Platforms description: Get all supported platforms and their configurations. operationId: get_platforms_api_social_posts_platforms_get responses: '200': description: Successful Response content: application/json: schema: {} /api/social-posts/platforms/{platform}/post-types: get: tags: - social-posts summary: Get Platform Post Types description: Get supported post types for a specific platform. operationId: get_platform_post_types_api_social_posts_platforms__platform__post_types_get parameters: - name: platform in: path required: true schema: type: string title: Platform responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/social-posts/generate: post: tags: - social-posts summary: Generate Social Posts description: Generate social media posts for a specific platform and format. operationId: generate_social_posts_api_social_posts_generate_post requestBody: content: application/json: schema: $ref: '#/components/schemas/SocialPostRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/social-posts/batch-generate: post: tags: - social-posts summary: Batch Generate Posts description: Generate posts for multiple platforms in one request. operationId: batch_generate_posts_api_social_posts_batch_generate_post requestBody: content: application/json: schema: $ref: '#/components/schemas/BatchGenerateRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/social-posts/campaigns: get: tags: - social-posts summary: Get Campaigns description: Get user's social media campaigns with filtering. operationId: get_campaigns_api_social_posts_campaigns_get security: - HTTPBearer: [] parameters: - name: platform in: query required: false schema: anyOf: - type: string - type: 'null' title: Platform - name: post_type in: query required: false schema: anyOf: - type: string - type: 'null' title: Post Type - name: status in: query required: false schema: anyOf: - type: string - type: 'null' title: Status - name: limit in: query required: false schema: type: integer default: 20 title: Limit - name: offset in: query required: false schema: type: integer default: 0 title: Offset responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/social-posts/campaigns/{campaign_id}: get: tags: - social-posts summary: Get Campaign Details description: Get detailed information about a specific campaign. operationId: get_campaign_details_api_social_posts_campaigns__campaign_id__get security: - HTTPBearer: [] parameters: - name: campaign_id in: path required: true schema: type: integer title: Campaign Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' put: tags: - social-posts summary: Update Campaign description: Update a campaign's content. operationId: update_campaign_api_social_posts_campaigns__campaign_id__put security: - HTTPBearer: [] parameters: - name: campaign_id in: path required: true schema: type: integer title: Campaign Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdatePostRequest' responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' delete: tags: - social-posts summary: Delete Campaign description: Delete a campaign and all its variations. operationId: delete_campaign_api_social_posts_campaigns__campaign_id__delete security: - HTTPBearer: [] parameters: - name: campaign_id in: path required: true schema: type: integer title: Campaign Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/social-posts/campaigns/{campaign_id}/variation: post: tags: - social-posts summary: Generate Variation description: Generate a variation of an existing post. operationId: generate_variation_api_social_posts_campaigns__campaign_id__variation_post security: - HTTPBearer: [] parameters: - name: campaign_id in: path required: true schema: type: integer title: Campaign Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/GenerateVariationRequest' responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/competitor-tracking/setup: post: tags: - competitor-tracking - competitor-tracking summary: Setup Competitors description: 'Add competitor rows quickly and enqueue the slow setup/scan work. The UI polls persisted scan state from /status. Keeping the initial HTTP request lightweight avoids ALB 504s when crawling, ad scanning, and enrichment take multiple minutes.' operationId: setup_competitors_api_competitor_tracking_setup_post requestBody: content: application/json: schema: $ref: '#/components/schemas/CompetitorSetupRequest' required: true responses: '200': description: Successful Response content: application/json: schema: items: $ref: '#/components/schemas/CompetitorInfo' type: array title: Response Setup Competitors Api Competitor Tracking Setup Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/competitor-tracking/list: get: tags: - competitor-tracking - competitor-tracking summary: List Competitors description: "List all competitors being tracked by the user.\n\nReturns:\n List of competitor information with active\ \ campaign counts" operationId: list_competitors_api_competitor_tracking_list_get responses: '200': description: Successful Response content: application/json: schema: items: $ref: '#/components/schemas/CompetitorInfo' type: array title: Response List Competitors Api Competitor Tracking List Get security: - HTTPBearer: [] /api/competitor-tracking/status: get: tags: - competitor-tracking - competitor-tracking summary: List Competitor Statuses operationId: list_competitor_statuses_api_competitor_tracking_status_get security: - HTTPBearer: [] parameters: - name: competitor_ids in: query required: false schema: anyOf: - type: array items: type: string format: uuid - type: 'null' title: Competitor Ids responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/CompetitorLiveStatus' title: Response List Competitor Statuses Api Competitor Tracking Status Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/competitor-tracking/onboarding/ads-preview: get: tags: - competitor-tracking - competitor-tracking summary: Get Onboarding Ads Preview description: 'Backend-owned onboarding ads payload for rendering and narrative context. Returns per-competitor creatives scoped to: - top N longest-running ads - top N newest ads' operationId: get_onboarding_ads_preview_api_competitor_tracking_onboarding_ads_preview_get security: - HTTPBearer: [] parameters: - name: competitor_ids in: query required: false schema: anyOf: - type: array items: type: string format: uuid - type: 'null' title: Competitor Ids - name: competitors_limit in: query required: false schema: type: integer maximum: 20 minimum: 1 default: 6 title: Competitors Limit - name: longest_running_per_competitor in: query required: false schema: type: integer maximum: 20 minimum: 0 default: 5 title: Longest Running Per Competitor - name: newest_per_competitor in: query required: false schema: type: integer maximum: 20 minimum: 0 default: 5 title: Newest Per Competitor - name: ensure_analysis in: query required: false schema: type: boolean default: true title: Ensure Analysis responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/competitor-tracking/scan/{competitor_id}: post: tags: - competitor-tracking - competitor-tracking summary: Scan Competitor description: "Scan a specific competitor for new campaigns.\n\nArgs:\n competitor_id: ID of the competitor to scan\n\ \ scan_types: Optional list of scan types (website, facebook, social)\n\nReturns:\n Scan results with campaigns\ \ found" operationId: scan_competitor_api_competitor_tracking_scan__competitor_id__post security: - HTTPBearer: [] parameters: - name: competitor_id in: path required: true schema: type: string format: uuid title: Competitor Id requestBody: content: application/json: schema: anyOf: - type: array items: type: string - type: 'null' description: Types of scans to perform title: Scan Types responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ScanResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/competitor-tracking/details-batch: get: tags: - competitor-tracking - competitor-tracking summary: Get Competitor Details Batch description: Fetch the same competitor-detail payload in one request for overview-style fan-out. operationId: get_competitor_details_batch_api_competitor_tracking_details_batch_get security: - HTTPBearer: [] parameters: - name: competitor_ids in: query required: true schema: type: array items: type: string format: uuid description: Competitor IDs to fetch title: Competitor Ids description: Competitor IDs to fetch responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/CompetitorDetailsResponse' title: Response Get Competitor Details Batch Api Competitor Tracking Details Batch Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/competitor-tracking/{competitor_id}: get: tags: - competitor-tracking - competitor-tracking summary: Get Competitor Details description: "Get detailed information about a competitor including campaigns.\n\nArgs:\n competitor_id: ID of the\ \ competitor\n\nReturns:\n Detailed competitor information with campaigns" operationId: get_competitor_details_api_competitor_tracking__competitor_id__get security: - HTTPBearer: [] parameters: - name: competitor_id in: path required: true schema: type: string format: uuid title: Competitor Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/CompetitorDetailsResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' delete: tags: - competitor-tracking - competitor-tracking summary: Delete Competitor description: 'Soft-archive a competitor from tracking (legacy delete route). Kept for backward compatibility; use /archive for clarity.' operationId: delete_competitor_api_competitor_tracking__competitor_id__delete security: - HTTPBearer: [] parameters: - name: competitor_id in: path required: true schema: type: string format: uuid title: Competitor Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/competitor-tracking/{competitor_id}/insights: get: tags: - competitor-tracking - competitor-tracking summary: Get Competitor Insights description: Return the cached or freshly generated marketing insight for a competitor. operationId: get_competitor_insights_api_competitor_tracking__competitor_id__insights_get security: - HTTPBearer: [] parameters: - name: competitor_id in: path required: true schema: type: string format: uuid title: Competitor Id - name: force_refresh in: query required: false schema: type: boolean description: Regenerate the insight even when the cached version is still fresh. default: false title: Force Refresh description: Regenerate the insight even when the cached version is still fresh. responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/CompetitorInsightsResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/competitor-tracking/{competitor_id}/scan-status: get: tags: - competitor-tracking - competitor-tracking summary: Get Competitor Scan Status description: 'Lightweight scan status endpoint for polling. Returns latest scan log times and a computed is_scanning flag (started within 60 minutes and not completed).' operationId: get_competitor_scan_status_api_competitor_tracking__competitor_id__scan_status_get security: - HTTPBearer: [] parameters: - name: competitor_id in: path required: true schema: type: string format: uuid title: Competitor Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/competitor-tracking/{competitor_id}/brand-facebook-official-url: get: tags: - competitor-tracking - competitor-tracking summary: Get Brand Facebook Official Url description: 'Resolve the competitor''s official Facebook URL for Campaigns -> Facebook tab. Step 1: Check competitors.facebook_page_url. Step 2: If empty, ask LLM (with competitor name + competitor website), then persist back to competitors.facebook_page_url. Step 3: Use facebook_page_id to fetch public About fields from Graph API.' operationId: get_brand_facebook_official_url_api_competitor_tracking__competitor_id__brand_facebook_official_url_get security: - HTTPBearer: [] parameters: - name: competitor_id in: path required: true schema: type: string format: uuid title: Competitor Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/BrandFacebookOfficialUrlResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/competitor-tracking/{competitor_id}/facebook-ads: get: tags: - competitor-tracking - competitor-tracking summary: Get Competitor Facebook Ads description: "Get all Facebook ads for a competitor (debug endpoint).\n\nArgs:\n competitor_id: ID of the competitor\n\ \nReturns:\n List of Facebook ads with full details" operationId: get_competitor_facebook_ads_api_competitor_tracking__competitor_id__facebook_ads_get security: - HTTPBearer: [] parameters: - name: competitor_id in: path required: true schema: type: string format: uuid title: Competitor Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/competitor-tracking/{competitor_id}/update-handles: post: tags: - competitor-tracking - competitor-tracking summary: Update Competitor Handles description: "Update competitor's social media handles using web search.\n\nArgs:\n competitor_id: ID of the competitor\n\ \nReturns:\n Update results with found handles" operationId: update_competitor_handles_api_competitor_tracking__competitor_id__update_handles_post security: - HTTPBearer: [] parameters: - name: competitor_id in: path required: true schema: type: string format: uuid title: Competitor Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/competitor-tracking/{competitor_id}/archive: post: tags: - competitor-tracking - competitor-tracking summary: Archive Competitor description: Archive a competitor (soft delete) so it no longer participates in scans. operationId: archive_competitor_api_competitor_tracking__competitor_id__archive_post security: - HTTPBearer: [] parameters: - name: competitor_id in: path required: true schema: type: string format: uuid title: Competitor Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/competitor-tracking/{competitor_id}/restore: post: tags: - competitor-tracking - competitor-tracking summary: Restore Competitor description: Restore an archived competitor back to active tracking. operationId: restore_competitor_api_competitor_tracking__competitor_id__restore_post security: - HTTPBearer: [] parameters: - name: competitor_id in: path required: true schema: type: string format: uuid title: Competitor Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/competitor-tracking/scan-all: post: tags: - competitor-tracking - competitor-tracking summary: Scan All Competitors description: "Scan all competitors for the company profile.\n\nReturns:\n Summary of scan results" operationId: scan_all_competitors_api_competitor_tracking_scan_all_post responses: '200': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /api/competitor-tracking/{competitor_id}/ads: get: tags: - competitor-tracking - competitor-tracking summary: List Competitor Ads description: Paginated, filterable list of ads for a competitor, including matched product offerings. operationId: list_competitor_ads_api_competitor_tracking__competitor_id__ads_get security: - HTTPBearer: [] parameters: - name: competitor_id in: path required: true schema: type: string format: uuid title: Competitor Id - name: page in: query required: false schema: type: integer default: 1 title: Page - name: limit in: query required: false schema: type: integer default: 20 title: Limit - name: source in: query required: false schema: anyOf: - type: string - type: 'null' title: Source - name: ad_type in: query required: false schema: anyOf: - type: string - type: 'null' title: Ad Type - name: active in: query required: false schema: anyOf: - type: boolean - type: 'null' title: Active - name: q in: query required: false schema: anyOf: - type: string - type: 'null' title: Q - name: date_from in: query required: false schema: anyOf: - type: string - type: 'null' title: Date From - name: date_to in: query required: false schema: anyOf: - type: string - type: 'null' title: Date To - name: offering_id in: query required: false schema: anyOf: - type: string - type: 'null' title: Offering Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/CompetitorAdListResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/competitor-tracking/{competitor_id}/matchups: get: tags: - competitor-tracking - competitor-tracking summary: Get Competitor Matchups description: Return aggregated mapping of product offerings matched by this competitor's ads. operationId: get_competitor_matchups_api_competitor_tracking__competitor_id__matchups_get security: - HTTPBearer: [] parameters: - name: competitor_id in: path required: true schema: type: string format: uuid title: Competitor Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/competitor-tracking/{competitor_id}/social-posts: get: tags: - competitor-tracking - competitor-tracking summary: Get Competitor Social Posts description: "Get social media posts for a competitor.\n\nArgs:\n competitor_id: ID of the competitor\n platform:\ \ Filter by platform (instagram, facebook, twitter, linkedin)\n days: Number of days to look back (default 30)\n\ \nReturns:\n List of social media posts with engagement metrics" operationId: get_competitor_social_posts_api_competitor_tracking__competitor_id__social_posts_get security: - HTTPBearer: [] parameters: - name: competitor_id in: path required: true schema: type: string format: uuid title: Competitor Id - name: platform in: query required: false schema: anyOf: - type: string - type: 'null' title: Platform - name: days in: query required: false schema: type: integer default: 30 title: Days responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/competitor-tracking/start-tracking-all: post: tags: - competitor-tracking - competitor-tracking summary: Start Tracking All Competitors description: 'Start tracking all competitors found in the company profile. This endpoint: 1. Reads the company profile and all product line profiles 2. Extracts all direct competitors and market leaders 3. Normalizes and deduplicates domains 4. Sets up tracking for each competitor in parallel Requires X-Company-Profile-Id header or company_profile_id parameter.' operationId: start_tracking_all_competitors_api_competitor_tracking_start_tracking_all_post responses: '200': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /api/competitor-tracking/platform-summaries: get: tags: - competitor-tracking - competitor-tracking summary: Get Latest Platform Summaries operationId: get_latest_platform_summaries_api_competitor_tracking_platform_summaries_get security: - HTTPBearer: [] parameters: - name: platform in: query required: false schema: anyOf: - type: string - type: 'null' description: 'Optional platform filter: facebook_ads, google_ads, website' title: Platform description: 'Optional platform filter: facebook_ads, google_ads, website' responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/competitor-tracking/platform-summaries/history: get: tags: - competitor-tracking - competitor-tracking summary: Get Platform Summary History operationId: get_platform_summary_history_api_competitor_tracking_platform_summaries_history_get security: - HTTPBearer: [] parameters: - name: platform in: query required: true schema: type: string description: 'Platform: facebook_ads, google_ads, website' title: Platform description: 'Platform: facebook_ads, google_ads, website' - name: limit in: query required: false schema: type: integer maximum: 60 minimum: 1 default: 10 title: Limit responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/competitor-tracking/competitors/{competitor_id}/platform-summaries: get: tags: - competitor-tracking - competitor-tracking summary: Get Latest Competitor Platform Summary operationId: get_latest_competitor_platform_summary_api_competitor_tracking_competitors__competitor_id__platform_summaries_get security: - HTTPBearer: [] parameters: - name: competitor_id in: path required: true schema: type: string format: uuid title: Competitor Id - name: platform in: query required: true schema: type: string description: 'Platform: google_ads, website' title: Platform description: 'Platform: google_ads, website' responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/competitor-tracking/competitors/{competitor_id}/platform-summaries/history: get: tags: - competitor-tracking - competitor-tracking summary: Get Competitor Platform Summary History operationId: get_competitor_platform_summary_history_api_competitor_tracking_competitors__competitor_id__platform_summaries_history_get security: - HTTPBearer: [] parameters: - name: competitor_id in: path required: true schema: type: string format: uuid title: Competitor Id - name: platform in: query required: true schema: type: string description: 'Platform: google_ads, website' title: Platform description: 'Platform: google_ads, website' - name: limit in: query required: false schema: type: integer maximum: 60 minimum: 1 default: 10 title: Limit responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/competitor-ad-insights/{competitor_id}/analyze: post: tags: - competitor-ad-insights - competitor-ad-insights summary: Analyze Competitor Ads description: 'Perform bulk analysis of all competitor ads to generate insights. This analyzes both text and display ads together.' operationId: analyze_competitor_ads_api_competitor_ad_insights__competitor_id__analyze_post security: - HTTPBearer: [] parameters: - name: competitor_id in: path required: true schema: type: string format: uuid title: Competitor Id - name: days in: query required: false schema: anyOf: - type: integer - type: 'null' description: Number of days to analyze default: 30 title: Days description: Number of days to analyze responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/competitor-ad-insights/{competitor_id}/latest: get: tags: - competitor-ad-insights - competitor-ad-insights summary: Get Latest Ad Insights description: Get the most recent ad insights for a competitor. operationId: get_latest_ad_insights_api_competitor_ad_insights__competitor_id__latest_get security: - HTTPBearer: [] parameters: - name: competitor_id in: path required: true schema: type: string format: uuid title: Competitor Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/competitor-ad-insights/{competitor_id}/history: get: tags: - competitor-ad-insights - competitor-ad-insights summary: Get Ad Insights History description: Get historical ad insights for a competitor. operationId: get_ad_insights_history_api_competitor_ad_insights__competitor_id__history_get security: - HTTPBearer: [] parameters: - name: competitor_id in: path required: true schema: type: string format: uuid title: Competitor Id - name: limit in: query required: false schema: type: integer description: Number of historical insights to return default: 10 title: Limit description: Number of historical insights to return responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/competitive-gap-analysis/{company_profile_id}: get: tags: - competitive-gap-analysis - competitive_gap_analysis summary: Get Gap Analysis description: "Get competitive gap analysis for a company profile.\n\nArgs:\n company_profile_id: ID of the company\ \ profile\n version: Optional specific version to retrieve\n \nReturns:\n Gap analysis data formatted for\ \ API response" operationId: get_gap_analysis_api_competitive_gap_analysis__company_profile_id__get security: - HTTPBearer: [] parameters: - name: company_profile_id in: path required: true schema: type: string format: uuid title: Company Profile Id - name: version in: query required: false schema: anyOf: - type: integer - type: 'null' description: Specific version to retrieve title: Version description: Specific version to retrieve responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Get Gap Analysis Api Competitive Gap Analysis Company Profile Id Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/competitive-gap-analysis/{company_profile_id}/dashboard-summary: get: tags: - competitive-gap-analysis - competitive_gap_analysis summary: Get Gap Analysis Dashboard description: 'Get comprehensive gap analysis data for marketing wizard dashboard. Returns ALL data properly formatted for visualization.' operationId: get_gap_analysis_dashboard_api_competitive_gap_analysis__company_profile_id__dashboard_summary_get security: - HTTPBearer: [] parameters: - name: company_profile_id in: path required: true schema: type: string format: uuid title: Company Profile Id responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Get Gap Analysis Dashboard Api Competitive Gap Analysis Company Profile Id Dashboard Summary Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/competitive-gap-analysis/{company_profile_id}/versions: get: tags: - competitive-gap-analysis - competitive_gap_analysis summary: Get Analysis Versions description: "Get all versions of gap analysis for a company profile.\n\nReturns:\n List of analysis versions with\ \ summary data" operationId: get_analysis_versions_api_competitive_gap_analysis__company_profile_id__versions_get security: - HTTPBearer: [] parameters: - name: company_profile_id in: path required: true schema: type: string format: uuid title: Company Profile Id responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Get Analysis Versions Api Competitive Gap Analysis Company Profile Id Versions Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/competitive-gap-analysis/{company_profile_id}/generate: post: tags: - competitive-gap-analysis - competitive_gap_analysis summary: Generate Gap Analysis description: 'Generate competitive gap analysis for a company profile. This follows the same logic as the brand workflow generation.' operationId: generate_gap_analysis_api_competitive_gap_analysis__company_profile_id__generate_post security: - HTTPBearer: [] parameters: - name: company_profile_id in: path required: true schema: type: string format: uuid title: Company Profile Id responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Generate Gap Analysis Api Competitive Gap Analysis Company Profile Id Generate Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/competitive-gap-analysis/{company_profile_id}/regenerate: post: tags: - competitive-gap-analysis - competitive_gap_analysis summary: Regenerate Gap Analysis description: 'Regenerate competitive gap analysis for a company profile. This will create a new version of the analysis.' operationId: regenerate_gap_analysis_api_competitive_gap_analysis__company_profile_id__regenerate_post security: - HTTPBearer: [] parameters: - name: company_profile_id in: path required: true schema: type: string format: uuid title: Company Profile Id responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Regenerate Gap Analysis Api Competitive Gap Analysis Company Profile Id Regenerate Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/competitive-gap-analysis/{company_profile_id}/strategic-campaigns: get: tags: - competitive-gap-analysis - competitive_gap_analysis summary: Get Strategic Campaigns description: 'Get strategic campaign recommendations from the latest gap analysis. Automatically generates fresh analysis daily to incorporate latest market trends. **DEPRECATED**: Use POST /generate-simple-campaigns for faster, goal-focused generation. This endpoint does full competitive analysis which takes 15-20 seconds.' operationId: get_strategic_campaigns_api_competitive_gap_analysis__company_profile_id__strategic_campaigns_get security: - HTTPBearer: [] parameters: - name: company_profile_id in: path required: true schema: type: string format: uuid title: Company Profile Id - name: force_refresh in: query required: false schema: type: boolean description: Force regeneration of analysis default: false title: Force Refresh description: Force regeneration of analysis responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Get Strategic Campaigns Api Competitive Gap Analysis Company Profile Id Strategic Campaigns Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/competitive-gap-analysis/{company_profile_id}/competitor-insights: get: tags: - competitive-gap-analysis - competitive_gap_analysis summary: Get Competitor Insights description: 'Get detailed competitor insights from ProductOfferingCompetitiveAnalysis. Returns company-wide competitive analysis.' operationId: get_competitor_insights_api_competitive_gap_analysis__company_profile_id__competitor_insights_get security: - HTTPBearer: [] parameters: - name: company_profile_id in: path required: true schema: type: string format: uuid title: Company Profile Id responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Get Competitor Insights Api Competitive Gap Analysis Company Profile Id Competitor Insights Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/competitive-gap-analysis/{company_profile_id}/generate-simple-campaigns: post: tags: - competitive-gap-analysis - competitive_gap_analysis summary: Generate Simple Campaign Recommendations description: "Simplified endpoint to generate 5-8 campaign recommendations based on:\n- Target audiences (from request\ \ body)\n- Customer goal (from request body)\n\nThis bypasses the full competitive analysis and focuses purely on\ \ campaign generation.\nResults are cached to avoid regenerating for identical parameters.\n\nRequest body should\ \ contain:\n{\n \"target_audiences\": [...],\n \"customer_goal\": \"string\",\n \"additional_context\": \"\ string\" (optional),\n \"force_refresh\": false (optional - bypasses cache)\n}" operationId: generate_simple_campaign_recommendations_api_competitive_gap_analysis__company_profile_id__generate_simple_campaigns_post security: - HTTPBearer: [] parameters: - name: company_profile_id in: path required: true schema: type: string format: uuid title: Company Profile Id requestBody: required: true content: application/json: schema: type: object additionalProperties: true title: Request Body responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Generate Simple Campaign Recommendations Api Competitive Gap Analysis Company Profile Id Generate Simple Campaigns Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaign-ideas/{company_profile_id}/simple: post: tags: - campaign-ideas - campaign-ideas summary: Generate Simple Campaigns description: Start async simple campaign generation and return job tracking info. operationId: generate_simple_campaigns_api_campaign_ideas__company_profile_id__simple_post security: - HTTPBearer: [] parameters: - name: company_profile_id in: path required: true schema: type: string format: uuid title: Company Profile Id - name: product_offering_id in: query required: false schema: anyOf: - type: string format: uuid - type: 'null' description: Product offering ID title: Product Offering Id description: Product offering ID requestBody: required: true content: application/json: schema: type: object additionalProperties: true title: Request Body responses: '202': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/JobResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/campaign-ideas/{company_profile_id}/save: post: tags: - campaign-ideas - campaign-ideas summary: Save Campaigns description: 'Persist edited campaign ideas for a company profile/product offering. Saves into the same cache table used for generation so future loads pick up the edited content without re-running generation.' operationId: save_campaigns_api_campaign_ideas__company_profile_id__save_post security: - HTTPBearer: [] parameters: - name: company_profile_id in: path required: true schema: type: string format: uuid title: Company Profile Id - name: product_offering_id in: query required: false schema: anyOf: - type: string format: uuid - type: 'null' description: Product offering ID title: Product Offering Id description: Product offering ID requestBody: required: true content: application/json: schema: type: object additionalProperties: true title: Request Body responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Save Campaigns Api Campaign Ideas Company Profile Id Save Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/ai-campaign/from-intelligence/job: post: tags: - ai-campaign - ai-campaign summary: Start Ai Campaign From Intelligence Job description: Start an ai-campaign orchestration job from one normalized intelligence card. operationId: start_ai_campaign_from_intelligence_job_api_ai_campaign_from_intelligence_job_post requestBody: content: application/json: schema: $ref: '#/components/schemas/AICampaignFromIntelligenceRequest' required: true responses: '202': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/JobResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/ai-campaign/from-intelligence/offering-suggestion: post: tags: - ai-campaign - ai-campaign summary: Suggest Ai Campaign Offering From Intelligence description: Suggest the best product offering or main company target before full ai-campaign generation. operationId: suggest_ai_campaign_offering_from_intelligence_api_ai_campaign_from_intelligence_offering_suggestion_post requestBody: content: application/json: schema: $ref: '#/components/schemas/AICampaignFromIntelligenceRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AICampaignOfferingSuggestionResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/product-offerings/audiences/save: post: tags: - product-offerings - product_offerings summary: Save Target Audiences description: 'Persist edited target audiences for the company or a specific product offering. Keeps the same cache key format used by the generation service so the detail view can read the latest values without regeneration.' operationId: save_target_audiences_api_product_offerings_audiences_save_post requestBody: content: application/json: schema: additionalProperties: true type: object title: Payload required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/product-offerings/status: get: tags: - product-offerings - product_offerings summary: Get Product Offering Statuses description: 'Return minimal status for active product offerings for polling. If `ids` are provided, only return statuses for those offerings; otherwise return all.' operationId: get_product_offering_statuses_api_product_offerings_status_get security: - HTTPBearer: [] parameters: - name: ids in: query required: false schema: anyOf: - type: array items: type: string format: uuid - type: 'null' title: Ids responses: '200': description: Successful Response content: application/json: schema: type: array items: type: object additionalProperties: true title: Response Get Product Offering Statuses Api Product Offerings Status Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/product-offerings/{offering_id}/status: get: tags: - product-offerings - product_offerings summary: Get Single Product Offering Status description: Return minimal status for a single product offering, ensuring tenant isolation. operationId: get_single_product_offering_status_api_product_offerings__offering_id__status_get security: - HTTPBearer: [] parameters: - name: offering_id in: path required: true schema: type: string format: uuid title: Offering Id responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Get Single Product Offering Status Api Product Offerings Offering Id Status Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/product-offerings/company/details: get: tags: - product-offerings - product_offerings summary: Get Company Offering Details description: Company-wide view aligned with the product offering detail shape. operationId: get_company_offering_details_api_product_offerings_company_details_get responses: '200': description: Successful Response content: application/json: schema: additionalProperties: true type: object title: Response Get Company Offering Details Api Product Offerings Company Details Get security: - HTTPBearer: [] /api/product-offerings/{offering_id}/details: get: tags: - product-offerings - product_offerings summary: Get Product Offering Details description: Get a rich view of a single product offering, including strategy and intelligence. operationId: get_product_offering_details_api_product_offerings__offering_id__details_get security: - HTTPBearer: [] parameters: - name: offering_id in: path required: true schema: type: string format: uuid title: Offering Id responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Get Product Offering Details Api Product Offerings Offering Id Details Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/product-offerings/{product_offering_id}/refresh-preview: post: tags: - product-offerings - product_offerings summary: Preview Product Refresh description: Queue a product refresh preview job and return polling details. operationId: preview_product_refresh_api_product_offerings__product_offering_id__refresh_preview_post security: - HTTPBearer: [] parameters: - name: product_offering_id in: path required: true schema: type: string format: uuid title: Product Offering Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ProductRefreshPreviewRequest' responses: '202': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/JobResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/product-offerings/{product_offering_id}/refresh-apply: post: tags: - product-offerings - product_offerings summary: Apply Product Refresh Route description: Persist selected product refresh changes and source page preferences. operationId: apply_product_refresh_route_api_product_offerings__product_offering_id__refresh_apply_post security: - HTTPBearer: [] parameters: - name: product_offering_id in: path required: true schema: type: string format: uuid title: Product Offering Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ProductRefreshApplyRequest' responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Apply Product Refresh Route Api Product Offerings Product Offering Id Refresh Apply Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/product-offerings/summary: get: tags: - product-offerings - product_offerings summary: Get Product Offerings Summary description: Get lightweight product offering data for list/grid pages. operationId: get_product_offerings_summary_api_product_offerings_summary_get security: - HTTPBearer: [] parameters: - name: status in: query required: false schema: type: string default: active title: Status responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Get Product Offerings Summary Api Product Offerings Summary Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/product-offerings/company-with-offerings: get: tags: - product-offerings - product_offerings summary: Get Company With Offerings description: Get company profile with all product offerings. operationId: get_company_with_offerings_api_product_offerings_company_with_offerings_get responses: '200': description: Successful Response content: application/json: schema: additionalProperties: true type: object title: Response Get Company With Offerings Api Product Offerings Company With Offerings Get security: - HTTPBearer: [] /api/product-offerings/list: get: tags: - product-offerings - product_offerings summary: List Product Offerings description: Get product offerings for AI Product Lab dropdown. operationId: list_product_offerings_api_product_offerings_list_get responses: '200': description: Successful Response content: application/json: schema: items: additionalProperties: true type: object type: array title: Response List Product Offerings Api Product Offerings List Get security: - HTTPBearer: [] /api/product-offerings/ai-ready: get: tags: - product-offerings - product_offerings summary: Get Ai Ready Offerings description: Get offerings with enough data for AI generation. operationId: get_ai_ready_offerings_api_product_offerings_ai_ready_get responses: '200': description: Successful Response content: application/json: schema: items: additionalProperties: true type: object type: array title: Response Get Ai Ready Offerings Api Product Offerings Ai Ready Get security: - HTTPBearer: [] /api/product-offerings/{offering_id}/ads: get: tags: - product-offerings - product_offerings summary: Get Product Offering Ads description: Get ad data for a single product offering without loading the full portfolio payload. operationId: get_product_offering_ads_api_product_offerings__offering_id__ads_get security: - HTTPBearer: [] parameters: - name: offering_id in: path required: true schema: type: string format: uuid title: Offering Id - name: competitor_limit in: query required: false schema: type: integer maximum: 100 minimum: 1 default: 24 title: Competitor Limit - name: competitor_offset in: query required: false schema: type: integer minimum: 0 default: 0 title: Competitor Offset responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Get Product Offering Ads Api Product Offerings Offering Id Ads Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/product-offerings/with-ads: get: tags: - product-offerings - product_offerings summary: Get Product Offerings With Ads description: Get all product offerings/SKUs for the company with competing ads count. operationId: get_product_offerings_with_ads_api_product_offerings_with_ads_get security: - HTTPBearer: [] parameters: - name: status in: query required: false schema: type: string default: active title: Status responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/product-offerings/{product_offering_id}/archive: post: tags: - product-offerings - product_offerings summary: Archive Product Offering description: Archive (soft delete) a product offering by toggling is_active to False. operationId: archive_product_offering_api_product_offerings__product_offering_id__archive_post security: - HTTPBearer: [] parameters: - name: product_offering_id in: path required: true schema: type: string format: uuid title: Product Offering Id responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Archive Product Offering Api Product Offerings Product Offering Id Archive Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/product-offerings/{product_offering_id}/restore: post: tags: - product-offerings - product_offerings summary: Restore Product Offering description: Restore a previously archived product offering by toggling is_active to True. operationId: restore_product_offering_api_product_offerings__product_offering_id__restore_post security: - HTTPBearer: [] parameters: - name: product_offering_id in: path required: true schema: type: string format: uuid title: Product Offering Id responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Restore Product Offering Api Product Offerings Product Offering Id Restore Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/product-offerings/{product_offering_id}/competitive-analysis: get: tags: - product-offerings - product_offerings summary: Get Product Competitive Analysis description: Get competitive analysis for a specific product offering. operationId: get_product_competitive_analysis_api_product_offerings__product_offering_id__competitive_analysis_get security: - HTTPBearer: [] parameters: - name: product_offering_id in: path required: true schema: type: string format: uuid title: Product Offering Id responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Get Product Competitive Analysis Api Product Offerings Product Offering Id Competitive Analysis Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/product-offerings/{product_offering_id}: get: tags: - product-offerings - product_offerings summary: Get Product Offering description: Get a specific product offering. operationId: get_product_offering_api_product_offerings__product_offering_id__get security: - HTTPBearer: [] parameters: - name: product_offering_id in: path required: true schema: type: string format: uuid title: Product Offering Id responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Get Product Offering Api Product Offerings Product Offering Id Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' patch: tags: - product-offerings - product_offerings summary: Update Product Offering description: Partially update a product offering owned by the active company profile. operationId: update_product_offering_api_product_offerings__product_offering_id__patch security: - HTTPBearer: [] parameters: - name: product_offering_id in: path required: true schema: type: string format: uuid title: Product Offering Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ProductOfferingUpdateRequest' responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Update Product Offering Api Product Offerings Product Offering Id Patch '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/product-offerings/{product_offering_id}/current-price: patch: tags: - product-offerings - product_offerings summary: Update Product Offering Current Price description: Update only the current public price for a product offering. operationId: update_product_offering_current_price_api_product_offerings__product_offering_id__current_price_patch security: - HTTPBearer: [] parameters: - name: product_offering_id in: path required: true schema: type: string format: uuid title: Product Offering Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ProductOfferingCurrentPriceUpdateRequest' responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Update Product Offering Current Price Api Product Offerings Product Offering Id Current Price Patch '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/product-offerings/{product_offering_id}/images/upload: post: tags: - product-offerings - product_offerings summary: Upload Product Offering Images description: Upload product images directly onto an offering and mirror them into product-scoped gallery storage. operationId: upload_product_offering_images_api_product_offerings__product_offering_id__images_upload_post security: - HTTPBearer: [] parameters: - name: product_offering_id in: path required: true schema: type: string format: uuid title: Product Offering Id requestBody: required: true content: multipart/form-data: schema: $ref: '#/components/schemas/Body_upload_product_offering_images_api_product_offerings__product_offering_id__images_upload_post' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ProductOfferingUploadImagesResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/product-offerings/{product_offering_id}/images/delete: post: tags: - product-offerings - product_offerings summary: Delete Product Offering Image description: Delete a product image from product records and matching gallery assets. operationId: delete_product_offering_image_api_product_offerings__product_offering_id__images_delete_post security: - HTTPBearer: [] parameters: - name: product_offering_id in: path required: true schema: type: string format: uuid title: Product Offering Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ProductOfferingDeleteImageRequest' responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Delete Product Offering Image Api Product Offerings Product Offering Id Images Delete Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/product-offerings/{product_offering_id}/rewrite-copy: post: tags: - product-offerings - product_offerings summary: Rewrite Product Offering Copy description: Rewrite product detail copy with AI and persist the result. operationId: rewrite_product_offering_copy_api_product_offerings__product_offering_id__rewrite_copy_post security: - HTTPBearer: [] parameters: - name: product_offering_id in: path required: true schema: type: string format: uuid title: Product Offering Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ProductOfferingRewriteRequest' responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Rewrite Product Offering Copy Api Product Offerings Product Offering Id Rewrite Copy Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/product-offerings/content-edit/preview: post: tags: - profile-content-editor - profile-content-editor summary: Preview Profile Content Edits description: Generate a reviewed before/after proposal for selected profile content. operationId: preview_profile_content_edits_api_product_offerings_content_edit_preview_post requestBody: content: application/json: schema: $ref: '#/components/schemas/ProfileContentEditPreviewRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ProfileContentEditPreviewResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/product-offerings/content-edit/document-preview: post: tags: - profile-content-editor - profile-content-editor summary: Preview Profile Content Edits From Documents description: Generate a reviewed edit proposal from uploaded Knowledge Base documents. operationId: preview_profile_content_edits_from_documents_api_product_offerings_content_edit_document_preview_post requestBody: content: application/json: schema: $ref: '#/components/schemas/ProfileContentEditDocumentPreviewRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ProfileContentEditPreviewResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/product-offerings/content-edit/apply: post: tags: - profile-content-editor - profile-content-editor summary: Apply Profile Content Edit Route description: Apply selected changes from a reviewed profile content edit preview. operationId: apply_profile_content_edit_route_api_product_offerings_content_edit_apply_post requestBody: content: application/json: schema: $ref: '#/components/schemas/ProfileContentEditApplyRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ProfileContentEditApplyResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/ai-testing/ads: get: tags: - ai-testing summary: List Ai Testing Ads description: Return launchable ads across every platform supported by AI Testing. operationId: list_ai_testing_ads_api_ai_testing_ads_get responses: '200': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /api/ai-testing/personas: get: tags: - ai-testing summary: Get Ai Personas description: Get all AI personas for the current company profile. operationId: get_ai_personas_api_ai_testing_personas_get responses: '200': description: Successful Response content: application/json: schema: items: $ref: '#/components/schemas/AIPersonaResponse' type: array title: Response Get Ai Personas Api Ai Testing Personas Get security: - HTTPBearer: [] post: tags: - ai-testing summary: Create Ai Persona description: Create a new AI persona for testing. operationId: create_ai_persona_api_ai_testing_personas_post requestBody: content: application/json: schema: $ref: '#/components/schemas/AIPersonaCreate' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AIPersonaResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/ai-testing/personas/generate: post: tags: - ai-testing summary: Generate Ai Personas description: Generate AI personas for the appropriate company profile based on ad context. operationId: generate_ai_personas_api_ai_testing_personas_generate_post security: - HTTPBearer: [] parameters: - name: ad_id in: query required: false schema: anyOf: - type: string - type: 'null' title: Ad Id - name: ad_platform in: query required: false schema: anyOf: - type: string - type: 'null' title: Ad Platform - name: personas_per_group in: query required: false schema: type: integer maximum: 100 description: Number of personas per target group default: 30 title: Personas Per Group description: Number of personas per target group requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/routes__ai_testing__GeneratePersonasRequest' responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/ai-testing/personas/by-company: get: tags: - ai-testing summary: Get Personas By Company description: Get AI personas for the user's company, optionally filtered by target audience group. operationId: get_personas_by_company_api_ai_testing_personas_by_company_get security: - HTTPBearer: [] parameters: - name: target_audience_group in: query required: false schema: anyOf: - type: string - type: 'null' title: Target Audience Group - name: limit in: query required: false schema: type: integer default: 50 title: Limit responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/AIPersonaResponse' title: Response Get Personas By Company Api Ai Testing Personas By Company Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/ai-testing/personas/groups-with-count: get: tags: - ai-testing summary: Get Persona Groups With Count description: Get all target audience groups with persona counts for the user's company. operationId: get_persona_groups_with_count_api_ai_testing_personas_groups_with_count_get responses: '200': description: Successful Response content: application/json: schema: items: additionalProperties: true type: object type: array title: Response Get Persona Groups With Count Api Ai Testing Personas Groups With Count Get security: - HTTPBearer: [] /api/ai-testing/test: post: tags: - ai-testing summary: Start Ai Test description: Start an AI customer test for an ad using real personas and market intelligence. operationId: start_ai_test_api_ai_testing_test_post requestBody: content: application/json: schema: $ref: '#/components/schemas/AITestRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AITestSessionResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/ai-testing/test/{session_id}: get: tags: - ai-testing summary: Get Test Session description: Get a specific test session by ID with paginated test results. operationId: get_test_session_api_ai_testing_test__session_id__get security: - HTTPBearer: [] parameters: - name: session_id in: path required: true schema: type: string title: Session Id - name: page in: query required: false schema: type: integer minimum: 1 default: 1 title: Page - name: page_size in: query required: false schema: type: integer maximum: 50 minimum: 1 default: 10 title: Page Size responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AITestSessionResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/ai-testing/test/{session_id}/results: get: tags: - ai-testing summary: Get Test Results description: Get paginated test results for a specific session. operationId: get_test_results_api_ai_testing_test__session_id__results_get security: - HTTPBearer: [] parameters: - name: session_id in: path required: true schema: type: string title: Session Id - name: page in: query required: false schema: type: integer minimum: 1 default: 1 title: Page - name: page_size in: query required: false schema: type: integer maximum: 25 minimum: 1 default: 5 title: Page Size responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/ai-testing/test/ad/{ad_id}: get: tags: - ai-testing summary: Get Ad Test Sessions description: Get all test sessions for a specific ad. operationId: get_ad_test_sessions_api_ai_testing_test_ad__ad_id__get security: - HTTPBearer: [] parameters: - name: ad_id in: path required: true schema: type: string title: Ad Id - name: ad_platform in: query required: false schema: anyOf: - type: string - type: 'null' title: Ad Platform responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/ai-testing/test/{session_id}/heatmaps: get: tags: - ai-testing summary: Get Test Heatmaps description: Get detailed heatmap data for a test session. operationId: get_test_heatmaps_api_ai_testing_test__session_id__heatmaps_get security: - HTTPBearer: [] parameters: - name: session_id in: path required: true schema: type: string title: Session Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/ai-testing/persona-sets: get: tags: - ai-testing summary: Get Persona Sets description: Get all persona sets for the organization's company profiles. operationId: get_persona_sets_api_ai_testing_persona_sets_get security: - HTTPBearer: [] parameters: - name: company_profile_id in: query required: false schema: anyOf: - type: string format: uuid - type: 'null' title: Company Profile Id responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/PersonaSetResponse' title: Response Get Persona Sets Api Ai Testing Persona Sets Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' post: tags: - ai-testing summary: Create Persona Set description: Create a new persona set. operationId: create_persona_set_api_ai_testing_persona_sets_post security: - HTTPBearer: [] requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PersonaSetCreate' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/PersonaSetResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/ai-testing/persona-sets/{set_id}: get: tags: - ai-testing summary: Get Persona Set description: Get a specific persona set. operationId: get_persona_set_api_ai_testing_persona_sets__set_id__get security: - HTTPBearer: [] parameters: - name: set_id in: path required: true schema: type: string format: uuid title: Set Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/PersonaSetResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' patch: tags: - ai-testing summary: Update Persona Set description: Update a persona set. operationId: update_persona_set_api_ai_testing_persona_sets__set_id__patch security: - HTTPBearer: [] parameters: - name: set_id in: path required: true schema: type: string format: uuid title: Set Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PersonaSetUpdate' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/PersonaSetResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' delete: tags: - ai-testing summary: Delete Persona Set description: Delete a persona set and all its personas. operationId: delete_persona_set_api_ai_testing_persona_sets__set_id__delete security: - HTTPBearer: [] parameters: - name: set_id in: path required: true schema: type: string format: uuid title: Set Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/ai-testing/persona-sets/{set_id}/personas: get: tags: - ai-testing summary: Get Persona Set Personas description: Get all personas in a specific persona set. operationId: get_persona_set_personas_api_ai_testing_persona_sets__set_id__personas_get security: - HTTPBearer: [] parameters: - name: set_id in: path required: true schema: type: string format: uuid title: Set Id - name: target_audience_group in: query required: false schema: anyOf: - type: string - type: 'null' title: Target Audience Group - name: limit in: query required: false schema: type: integer maximum: 1000 default: 50 title: Limit responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/AIPersonaResponse' title: Response Get Persona Set Personas Api Ai Testing Persona Sets Set Id Personas Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/ai-testing/persona-sets/{set_id}/generate: post: tags: - ai-testing summary: Generate Personas For Set description: Generate personas for a specific persona set. operationId: generate_personas_for_set_api_ai_testing_persona_sets__set_id__generate_post security: - HTTPBearer: [] parameters: - name: set_id in: path required: true schema: type: string format: uuid title: Set Id - name: personas_per_group in: query required: false schema: type: integer maximum: 100 description: Number of personas per target group default: 30 title: Personas Per Group description: Number of personas per target group responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/ai-testing/test/ad/{ad_id}/latest: get: tags: - ai-testing summary: Get Latest Test Result description: Get the latest test result for an ad (for caching on ad card). operationId: get_latest_test_result_api_ai_testing_test_ad__ad_id__latest_get security: - HTTPBearer: [] parameters: - name: ad_id in: path required: true schema: type: string format: uuid title: Ad Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/market-intelligence/intelligence: get: tags: - market-intelligence summary: Get Market Intelligence description: Get market intelligence data with filters. operationId: get_market_intelligence_api_market_intelligence_intelligence_get security: - HTTPBearer: [] parameters: - name: intelligence_type in: query required: false schema: anyOf: - type: string - type: 'null' description: 'Filter by type: trend, competitor, opportunity, threat' title: Intelligence Type description: 'Filter by type: trend, competitor, opportunity, threat' - name: impact_level in: query required: false schema: anyOf: - type: string - type: 'null' description: 'Filter by impact level: low, medium, high, critical' title: Impact Level description: 'Filter by impact level: low, medium, high, critical' - name: category in: query required: false schema: anyOf: - type: string - type: 'null' title: Category - name: product_offering_id in: query required: false schema: anyOf: - type: string format: uuid - type: 'null' description: Filter by product offering ID (None = company-wide) title: Product Offering Id description: Filter by product offering ID (None = company-wide) - name: days in: query required: false schema: anyOf: - type: integer - type: 'null' description: Number of days to look back default: 30 title: Days description: Number of days to look back - name: start_date in: query required: false schema: anyOf: - type: string - type: 'null' description: Start date for filtering (YYYY-MM-DD) title: Start Date description: Start date for filtering (YYYY-MM-DD) - name: end_date in: query required: false schema: anyOf: - type: string - type: 'null' description: End date for filtering (YYYY-MM-DD) title: End Date description: End date for filtering (YYYY-MM-DD) - name: limit in: query required: false schema: type: integer maximum: 100 default: 50 title: Limit responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/MarketIntelligenceResponse' title: Response Get Market Intelligence Api Market Intelligence Intelligence Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/market-intelligence/intelligence/report-dates: get: tags: - market-intelligence summary: Get Intelligence Report Dates description: Get distinct dates when intelligence reports were generated. operationId: get_intelligence_report_dates_api_market_intelligence_intelligence_report_dates_get security: - HTTPBearer: [] parameters: - name: product_offering_id in: query required: false schema: anyOf: - type: string format: uuid - type: 'null' description: Product offering ID (None = company-wide) title: Product Offering Id description: Product offering ID (None = company-wide) responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/market-intelligence/google-trends: get: tags: - market-intelligence summary: Get Google Trends Analysis description: Fetch Google Trends analysis rows for the active company profile within the requested window. operationId: get_google_trends_analysis_api_market_intelligence_google_trends_get security: - HTTPBearer: [] parameters: - name: days in: query required: false schema: anyOf: - type: integer - type: 'null' description: Number of days to look back (ignored when start_date is supplied) default: 14 title: Days description: Number of days to look back (ignored when start_date is supplied) - name: start_date in: query required: false schema: anyOf: - type: string - type: 'null' description: Optional start date (YYYY-MM-DD or ISO8601) title: Start Date description: Optional start date (YYYY-MM-DD or ISO8601) - name: end_date in: query required: false schema: anyOf: - type: string - type: 'null' description: Optional end date (YYYY-MM-DD or ISO8601) title: End Date description: Optional end date (YYYY-MM-DD or ISO8601) - name: include_details in: query required: false schema: type: boolean description: Return detailed fields (analysis, notable changes, recommendations, news) default: true title: Include Details description: Return detailed fields (analysis, notable changes, recommendations, news) - name: include_meta in: query required: false schema: type: boolean description: Include preview metadata for tier-limited responses default: false title: Include Meta description: Include preview metadata for tier-limited responses responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/market-intelligence/google-news/thumbnail: get: tags: - market-intelligence summary: Proxy Google News Thumbnail description: Proxy Google News thumbnail images to avoid CORS issues in the browser. operationId: proxy_google_news_thumbnail_api_market_intelligence_google_news_thumbnail_get security: - HTTPBearer: [] parameters: - name: url in: query required: true schema: type: string description: Direct URL to the news thumbnail image title: Url description: Direct URL to the news thumbnail image responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/market-intelligence/tiktok-video/thumbnail: get: tags: - market-intelligence summary: Proxy Tiktok Video Thumbnail description: Resolve a TikTok video URL to an oEmbed thumbnail and proxy the image to avoid browser CORS failures. operationId: proxy_tiktok_video_thumbnail_api_market_intelligence_tiktok_video_thumbnail_get security: - HTTPBearer: [] parameters: - name: url in: query required: true schema: type: string description: TikTok video URL used to resolve the oEmbed thumbnail title: Url description: TikTok video URL used to resolve the oEmbed thumbnail responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/market-intelligence/trends-bundle: get: tags: - market-intelligence summary: Get Trends Bundle description: Fetch the Trends page data in a single cached backend request. operationId: get_trends_bundle_api_market_intelligence_trends_bundle_get security: - HTTPBearer: [] parameters: - name: days in: query required: false schema: anyOf: - type: integer - type: 'null' description: Number of days to look back (ignored when start_date is supplied) default: 14 title: Days description: Number of days to look back (ignored when start_date is supplied) - name: start_date in: query required: false schema: anyOf: - type: string - type: 'null' description: Optional start date (YYYY-MM-DD or ISO8601) title: Start Date description: Optional start date (YYYY-MM-DD or ISO8601) - name: end_date in: query required: false schema: anyOf: - type: string - type: 'null' description: Optional end date (YYYY-MM-DD or ISO8601) title: End Date description: Optional end date (YYYY-MM-DD or ISO8601) - name: include_details in: query required: false schema: type: boolean description: Return detailed trend fields for each platform default: true title: Include Details description: Return detailed trend fields for each platform - name: include_meta in: query required: false schema: type: boolean description: Include preview metadata for tier-limited responses default: false title: Include Meta description: Include preview metadata for tier-limited responses - name: include_social_mentions in: query required: false schema: type: boolean description: Include the legacy social-mentions section in the aggregate response default: true title: Include Social Mentions description: Include the legacy social-mentions section in the aggregate response - name: force_refresh in: query required: false schema: type: boolean description: Bypass the shared response cache default: false title: Force Refresh description: Bypass the shared response cache responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/market-intelligence/yelp-trends: get: tags: - market-intelligence summary: Get Yelp Trends Analysis description: Fetch Yelp trends analysis rows for the active company profile within the requested window. operationId: get_yelp_trends_analysis_api_market_intelligence_yelp_trends_get security: - HTTPBearer: [] parameters: - name: days in: query required: false schema: anyOf: - type: integer - type: 'null' description: Number of days to look back (ignored when start_date is supplied) default: 14 title: Days description: Number of days to look back (ignored when start_date is supplied) - name: start_date in: query required: false schema: anyOf: - type: string - type: 'null' description: Optional start date (YYYY-MM-DD or ISO8601) title: Start Date description: Optional start date (YYYY-MM-DD or ISO8601) - name: end_date in: query required: false schema: anyOf: - type: string - type: 'null' description: Optional end date (YYYY-MM-DD or ISO8601) title: End Date description: Optional end date (YYYY-MM-DD or ISO8601) - name: include_details in: query required: false schema: type: boolean description: Return detailed fields (analysis, notable changes, recommendations, search results) default: true title: Include Details description: Return detailed fields (analysis, notable changes, recommendations, search results) - name: include_meta in: query required: false schema: type: boolean description: Include preview metadata for tier-limited responses default: false title: Include Meta description: Include preview metadata for tier-limited responses responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/market-intelligence/amazon-trends: get: tags: - market-intelligence summary: Get Amazon Trends Analysis description: Fetch Amazon trends analysis rows for the active company profile within the requested window. operationId: get_amazon_trends_analysis_api_market_intelligence_amazon_trends_get security: - HTTPBearer: [] parameters: - name: days in: query required: false schema: anyOf: - type: integer - type: 'null' description: Number of days to look back (ignored when start_date is supplied) default: 14 title: Days description: Number of days to look back (ignored when start_date is supplied) - name: start_date in: query required: false schema: anyOf: - type: string - type: 'null' description: Optional start date (YYYY-MM-DD or ISO8601) title: Start Date description: Optional start date (YYYY-MM-DD or ISO8601) - name: end_date in: query required: false schema: anyOf: - type: string - type: 'null' description: Optional end date (YYYY-MM-DD or ISO8601) title: End Date description: Optional end date (YYYY-MM-DD or ISO8601) - name: include_details in: query required: false schema: type: boolean description: Return detailed fields (analysis, notable changes, recommendations, best sellers) default: true title: Include Details description: Return detailed fields (analysis, notable changes, recommendations, best sellers) - name: include_meta in: query required: false schema: type: boolean description: Include preview metadata for tier-limited responses default: false title: Include Meta description: Include preview metadata for tier-limited responses responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/market-intelligence/youtube-trends: get: tags: - market-intelligence summary: Get Youtube Trends Analysis description: Fetch YouTube trends analysis rows for the active company profile within the requested window. operationId: get_youtube_trends_analysis_api_market_intelligence_youtube_trends_get security: - HTTPBearer: [] parameters: - name: days in: query required: false schema: anyOf: - type: integer - type: 'null' description: Number of days to look back (ignored when start_date is supplied) default: 14 title: Days description: Number of days to look back (ignored when start_date is supplied) - name: start_date in: query required: false schema: anyOf: - type: string - type: 'null' description: Optional start date (YYYY-MM-DD or ISO8601) title: Start Date description: Optional start date (YYYY-MM-DD or ISO8601) - name: end_date in: query required: false schema: anyOf: - type: string - type: 'null' description: Optional end date (YYYY-MM-DD or ISO8601) title: End Date description: Optional end date (YYYY-MM-DD or ISO8601) - name: include_details in: query required: false schema: type: boolean description: Return detailed fields (analysis, notable changes, recommendations, videos) default: true title: Include Details description: Return detailed fields (analysis, notable changes, recommendations, videos) - name: include_meta in: query required: false schema: type: boolean description: Include preview metadata for tier-limited responses default: false title: Include Meta description: Include preview metadata for tier-limited responses responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/market-intelligence/ads-winners: get: tags: - market-intelligence summary: Get Ads Winners description: Fetch TikTok top ads selected by company matching results. operationId: get_ads_winners_api_market_intelligence_ads_winners_get security: - HTTPBearer: [] parameters: - name: search_mode in: query required: false schema: enum: - general - precise type: string description: general uses candidate_video_ids; precise uses related_tiktok_topads default: general title: Search Mode description: general uses candidate_video_ids; precise uses related_tiktok_topads responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AdsWinnerResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/market-intelligence/competitive-intelligence: get: tags: - market-intelligence summary: Get Competitive Intelligence description: Fetch business intelligence snapshots for the active company profile. operationId: get_competitive_intelligence_api_market_intelligence_competitive_intelligence_get security: - HTTPBearer: [] parameters: - name: days in: query required: false schema: anyOf: - type: integer - type: 'null' description: Number of days to look back default: 90 title: Days description: Number of days to look back - name: start_date in: query required: false schema: anyOf: - type: string - type: 'null' description: Start date for filtering (YYYY-MM-DD) title: Start Date description: Start date for filtering (YYYY-MM-DD) - name: end_date in: query required: false schema: anyOf: - type: string - type: 'null' description: End date for filtering (YYYY-MM-DD) title: End Date description: End date for filtering (YYYY-MM-DD) - name: limit in: query required: false schema: type: integer maximum: 100 default: 25 title: Limit responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/CompetitiveIntelligenceRecord' title: Response Get Competitive Intelligence Api Market Intelligence Competitive Intelligence Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/market-intelligence/tiktok-trends: get: tags: - market-intelligence summary: Get Tiktok Trends Analysis description: Fetch TikTok trends analysis rows for the active company profile within the requested window. operationId: get_tiktok_trends_analysis_api_market_intelligence_tiktok_trends_get security: - HTTPBearer: [] parameters: - name: days in: query required: false schema: anyOf: - type: integer - type: 'null' description: Number of days to look back (ignored when start_date is supplied) default: 14 title: Days description: Number of days to look back (ignored when start_date is supplied) - name: start_date in: query required: false schema: anyOf: - type: string - type: 'null' description: Optional start date (YYYY-MM-DD or ISO8601) title: Start Date description: Optional start date (YYYY-MM-DD or ISO8601) - name: end_date in: query required: false schema: anyOf: - type: string - type: 'null' description: Optional end date (YYYY-MM-DD or ISO8601) title: End Date description: Optional end date (YYYY-MM-DD or ISO8601) - name: include_details in: query required: false schema: type: boolean description: Return detailed fields (analysis, notable changes, recommendations, videos) default: true title: Include Details description: Return detailed fields (analysis, notable changes, recommendations, videos) - name: include_meta in: query required: false schema: type: boolean description: Include preview metadata for tier-limited responses default: false title: Include Meta description: Include preview metadata for tier-limited responses responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/market-intelligence/instagram-trends: get: tags: - market-intelligence summary: Get Instagram Trends Analysis description: Fetch Instagram trends analysis rows for the active company profile within the requested window. operationId: get_instagram_trends_analysis_api_market_intelligence_instagram_trends_get security: - HTTPBearer: [] parameters: - name: days in: query required: false schema: anyOf: - type: integer - type: 'null' description: Number of days to look back (ignored when start_date is supplied) default: 14 title: Days description: Number of days to look back (ignored when start_date is supplied) - name: start_date in: query required: false schema: anyOf: - type: string - type: 'null' description: Optional start date (YYYY-MM-DD or ISO8601) title: Start Date description: Optional start date (YYYY-MM-DD or ISO8601) - name: end_date in: query required: false schema: anyOf: - type: string - type: 'null' description: Optional end date (YYYY-MM-DD or ISO8601) title: End Date description: Optional end date (YYYY-MM-DD or ISO8601) - name: include_details in: query required: false schema: type: boolean description: Return detailed fields (analysis, notable changes, recommendations, posts) default: true title: Include Details description: Return detailed fields (analysis, notable changes, recommendations, posts) - name: include_meta in: query required: false schema: type: boolean description: Include preview metadata for tier-limited responses default: false title: Include Meta description: Include preview metadata for tier-limited responses responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/market-intelligence/trend-suppressions: put: tags: - market-intelligence summary: Upsert Trend Suppression operationId: upsert_trend_suppression_api_market_intelligence_trend_suppressions_put requestBody: content: application/json: schema: $ref: '#/components/schemas/TrendSuppressionUpsertRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/TrendSuppressionResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/market-intelligence/social-listening-mentions: get: tags: - market-intelligence summary: Get Social Listening Mentions description: 'Fetch recent social listening mentions ordered by created_datetime. Optionally filter to a specific competitor.' operationId: get_social_listening_mentions_api_market_intelligence_social_listening_mentions_get security: - HTTPBearer: [] parameters: - name: days in: query required: false schema: anyOf: - type: integer maximum: 365 minimum: 1 - type: 'null' description: Number of days to look back title: Days description: Number of days to look back - name: include_meta in: query required: false schema: type: boolean description: Include preview metadata for tier-limited responses default: false title: Include Meta description: Include preview metadata for tier-limited responses - name: competitor_id in: query required: false schema: anyOf: - type: string format: uuid - type: 'null' description: Filter by competitor ID title: Competitor Id description: Filter by competitor ID responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/market-intelligence/social-listening-dashboard: get: tags: - market-intelligence summary: Get Social Listening Dashboard description: Fetch the v2 social listening command-center payload for the active company. operationId: get_social_listening_dashboard_api_market_intelligence_social_listening_dashboard_get security: - HTTPBearer: [] parameters: - name: company_profile_id in: query required: true schema: type: string format: uuid description: Company profile ID title: Company Profile Id description: Company profile ID - name: days in: query required: false schema: anyOf: - type: integer maximum: 365 minimum: 1 - type: 'null' description: Optional dashboard lookback override title: Days description: Optional dashboard lookback override responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/market-intelligence/social-listening-summary: get: tags: - market-intelligence summary: Get Social Listening Summary description: 'Fetch the latest pipeline-generated social-listening summary for the company profile. The v2 ingestion job owns summary generation; this route does not run a one-off AI summary.' operationId: get_social_listening_summary_api_market_intelligence_social_listening_summary_get security: - HTTPBearer: [] parameters: - name: company_profile_id in: query required: true schema: type: string format: uuid description: Company profile ID title: Company Profile Id description: Company profile ID responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/SocialListeningSummaryResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/market-intelligence/social-listening-settings: get: tags: - market-intelligence summary: Get Social Listening Settings description: Fetch company-level social listening scan settings. operationId: get_social_listening_settings_api_market_intelligence_social_listening_settings_get security: - HTTPBearer: [] parameters: - name: company_profile_id in: query required: true schema: type: string format: uuid description: Company profile ID title: Company Profile Id description: Company profile ID responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/SocialListeningSettingsResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' put: tags: - market-intelligence summary: Update Social Listening Settings description: Update company-level social listening scan settings. operationId: update_social_listening_settings_api_market_intelligence_social_listening_settings_put security: - HTTPBearer: [] parameters: - name: company_profile_id in: query required: true schema: type: string format: uuid description: Company profile ID title: Company Profile Id description: Company profile ID requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SocialListeningSettingsUpdateRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/SocialListeningSettingsResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/market-intelligence/social-prospecting: get: tags: - market-intelligence summary: Get Social Prospecting description: Fetch the Social Prospecting Analyst inbox for the active company profile. operationId: get_social_prospecting_api_market_intelligence_social_prospecting_get security: - HTTPBearer: [] parameters: - name: company_profile_id in: query required: true schema: type: string format: uuid description: Company profile ID title: Company Profile Id description: Company profile ID - name: limit in: query required: false schema: type: integer maximum: 100 minimum: 1 description: Prospect candidates per page default: 15 title: Limit description: Prospect candidates per page - name: offset in: query required: false schema: type: integer minimum: 0 description: Zero-based candidate offset default: 0 title: Offset description: Zero-based candidate offset - name: generated in: query required: false schema: type: string description: Generated-date filter default: last_7_days title: Generated description: Generated-date filter - name: platform in: query required: false schema: type: string description: Platform filter default: all title: Platform description: Platform filter - name: lead_type in: query required: false schema: type: string description: Lead type filter default: all title: Lead Type description: Lead type filter - name: next_step in: query required: false schema: type: string description: Next-step filter default: active title: Next Step description: Next-step filter - name: search in: query required: false schema: anyOf: - type: string maxLength: 160 - type: 'null' description: Search text title: Search description: Search text - name: sort_key in: query required: false schema: type: string description: Sort key default: score title: Sort Key description: Sort key - name: sort_direction in: query required: false schema: type: string description: Sort direction default: desc title: Sort Direction description: Sort direction responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/SocialProspectingResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/market-intelligence/social-prospecting/export: get: tags: - market-intelligence summary: Export Social Prospecting description: Return every prospect matching the active inbox query for CSV export. operationId: export_social_prospecting_api_market_intelligence_social_prospecting_export_get security: - HTTPBearer: [] parameters: - name: company_profile_id in: query required: true schema: type: string format: uuid description: Company profile ID title: Company Profile Id description: Company profile ID - name: generated in: query required: false schema: type: string description: Generated-date filter default: last_7_days title: Generated description: Generated-date filter - name: platform in: query required: false schema: type: string description: Platform filter default: all title: Platform description: Platform filter - name: lead_type in: query required: false schema: type: string description: Lead type filter default: all title: Lead Type description: Lead type filter - name: next_step in: query required: false schema: type: string description: Next-step filter default: active title: Next Step description: Next-step filter - name: search in: query required: false schema: anyOf: - type: string maxLength: 160 - type: 'null' description: Search text title: Search description: Search text - name: sort_key in: query required: false schema: type: string description: Sort key default: score title: Sort Key description: Sort key - name: sort_direction in: query required: false schema: type: string description: Sort direction default: desc title: Sort Direction description: Sort direction responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/SocialProspectingExportResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/market-intelligence/social-prospecting-settings: get: tags: - market-intelligence summary: Get Social Prospecting Settings description: Fetch Social Prospecting Analyst settings and plan access metadata. operationId: get_social_prospecting_settings_api_market_intelligence_social_prospecting_settings_get security: - HTTPBearer: [] parameters: - name: company_profile_id in: query required: true schema: type: string format: uuid description: Company profile ID title: Company Profile Id description: Company profile ID responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' put: tags: - market-intelligence summary: Update Social Prospecting Settings description: Update Social Prospecting Analyst settings. Manual reruns are not exposed in V0. operationId: update_social_prospecting_settings_api_market_intelligence_social_prospecting_settings_put security: - HTTPBearer: [] parameters: - name: company_profile_id in: query required: true schema: type: string format: uuid description: Company profile ID title: Company Profile Id description: Company profile ID requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SocialProspectingSettingsUpdateRequest' responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/market-intelligence/social-prospecting-candidates/{candidate_id}: patch: tags: - market-intelligence summary: Update Social Prospecting Candidate Status description: Update prospect inbox status. This is review workflow only; it does not send messages. operationId: update_social_prospecting_candidate_status_api_market_intelligence_social_prospecting_candidates__candidate_id__patch security: - HTTPBearer: [] parameters: - name: candidate_id in: path required: true schema: type: string format: uuid title: Candidate Id - name: company_profile_id in: query required: true schema: type: string format: uuid description: Company profile ID title: Company Profile Id description: Company profile ID requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SocialProspectingCandidateStatusUpdateRequest' responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/market-intelligence/intelligence/generate: post: tags: - market-intelligence summary: Generate Market Intelligence description: Start asynchronous market intelligence generation so clients can poll or stream progress. operationId: generate_market_intelligence_api_market_intelligence_intelligence_generate_post security: - HTTPBearer: [] parameters: - name: product_offering_id in: query required: false schema: anyOf: - type: string format: uuid - type: 'null' description: Product offering ID (None = company-wide intelligence) title: Product Offering Id description: Product offering ID (None = company-wide intelligence) - name: include_evolution in: query required: false schema: type: boolean description: Run evolution analysis after generation default: true title: Include Evolution description: Run evolution analysis after generation responses: '202': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/JobResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/market-intelligence/intelligence/{intelligence_id}: get: tags: - market-intelligence summary: Get Intelligence Item description: Get a specific market intelligence item. operationId: get_intelligence_item_api_market_intelligence_intelligence__intelligence_id__get security: - HTTPBearer: [] parameters: - name: intelligence_id in: path required: true schema: type: string format: uuid title: Intelligence Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/MarketIntelligenceResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' patch: tags: - market-intelligence summary: Update Intelligence Item description: Update a market intelligence item (mark as inactive, update expiry, etc.). operationId: update_intelligence_item_api_market_intelligence_intelligence__intelligence_id__patch security: - HTTPBearer: [] parameters: - name: intelligence_id in: path required: true schema: type: string format: uuid title: Intelligence Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/MarketIntelligenceUpdate' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/MarketIntelligenceResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/market-intelligence/intelligence/refresh: post: tags: - market-intelligence summary: Refresh Market Intelligence description: Refresh market intelligence data via the async job system. operationId: refresh_market_intelligence_api_market_intelligence_intelligence_refresh_post security: - HTTPBearer: [] parameters: - name: force in: query required: false schema: type: boolean description: Force refresh even if recent data exists default: false title: Force description: Force refresh even if recent data exists - name: include_evolution in: query required: false schema: type: boolean description: Run evolution analysis after generation default: true title: Include Evolution description: Run evolution analysis after generation responses: '202': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/JobResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/market-intelligence/intelligence/evolution/analyze: post: tags: - market-intelligence summary: Analyze Market Evolution description: "Analyze market trend evolution.\nSame endpoint for initial analysis and refresh.\n\nArgs:\n product_offering_id:\ \ Optional product offering to analyze\n force_refresh: Force re-analysis even if recent evolution exists" operationId: analyze_market_evolution_api_market_intelligence_intelligence_evolution_analyze_post security: - HTTPBearer: [] parameters: - name: product_offering_id in: query required: false schema: anyOf: - type: string format: uuid - type: 'null' title: Product Offering Id - name: force_refresh in: query required: false schema: type: boolean default: false title: Force Refresh responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/market-intelligence/intelligence/evolution/history: get: tags: - market-intelligence summary: Get Evolution History description: Get historical evolution data with snapshots. operationId: get_evolution_history_api_market_intelligence_intelligence_evolution_history_get security: - HTTPBearer: [] parameters: - name: product_offering_id in: query required: false schema: anyOf: - type: string format: uuid - type: 'null' title: Product Offering Id - name: days in: query required: false schema: type: integer default: 90 title: Days responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/first-party-data/profile: post: tags: - first-party-data summary: Profile First Party Data File description: Profile headers/sample rows and return a confirmable mapping proposal. operationId: profile_first_party_data_file_api_first_party_data_profile_post requestBody: content: multipart/form-data: schema: $ref: '#/components/schemas/Body_profile_first_party_data_file_api_first_party_data_profile_post' required: true responses: '200': description: Successful Response content: application/json: schema: additionalProperties: true type: object title: Response Profile First Party Data File Api First Party Data Profile Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/first-party-data/uploads: get: tags: - first-party-data summary: List First Party Data Uploads operationId: list_first_party_data_uploads_api_first_party_data_uploads_get responses: '200': description: Successful Response content: application/json: schema: additionalProperties: true type: object title: Response List First Party Data Uploads Api First Party Data Uploads Get security: - HTTPBearer: [] post: tags: - first-party-data summary: Create First Party Data Upload description: Persist an analyzed upload snapshot after the user confirms mapping. operationId: create_first_party_data_upload_api_first_party_data_uploads_post requestBody: content: multipart/form-data: schema: $ref: '#/components/schemas/Body_create_first_party_data_upload_api_first_party_data_uploads_post' required: true responses: '201': description: Successful Response content: application/json: schema: additionalProperties: true type: object title: Response Create First Party Data Upload Api First Party Data Uploads Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/first-party-data/uploads/async: post: tags: - first-party-data summary: Create First Party Data Upload Async Job description: Persist the parsed workspace immediately and finish AI enrichment in the background. operationId: create_first_party_data_upload_async_job_api_first_party_data_uploads_async_post requestBody: content: multipart/form-data: schema: $ref: '#/components/schemas/Body_create_first_party_data_upload_async_job_api_first_party_data_uploads_async_post' required: true responses: '202': description: Successful Response content: application/json: schema: additionalProperties: true type: object title: Response Create First Party Data Upload Async Job Api First Party Data Uploads Async Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/first-party-data/uploads/{upload_id}: delete: tags: - first-party-data summary: Delete First Party Data Upload operationId: delete_first_party_data_upload_api_first_party_data_uploads__upload_id__delete security: - HTTPBearer: [] parameters: - name: upload_id in: path required: true schema: type: string title: Upload Id responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Delete First Party Data Upload Api First Party Data Uploads Upload Id Delete '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' get: tags: - first-party-data summary: Get First Party Data Upload operationId: get_first_party_data_upload_api_first_party_data_uploads__upload_id__get security: - HTTPBearer: [] parameters: - name: upload_id in: path required: true schema: type: string title: Upload Id - name: view in: query required: false schema: type: string default: full title: View responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Get First Party Data Upload Api First Party Data Uploads Upload Id Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/first-party-data/uploads/{upload_id}/coverage-policy: put: tags: - first-party-data summary: Update First Party Coverage Policy description: Persist retailer coverage thresholds and recompute WOS alert states. operationId: update_first_party_coverage_policy_api_first_party_data_uploads__upload_id__coverage_policy_put security: - HTTPBearer: [] parameters: - name: upload_id in: path required: true schema: type: string format: uuid title: Upload Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/FirstPartyCoveragePolicyRequest' responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Update First Party Coverage Policy Api First Party Data Uploads Upload Id Coverage Policy Put '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/first-party-data/uploads/{upload_id}/buyer-target: put: tags: - first-party-data summary: Update First Party Buyer Target description: 'Persist the velocity the retail buyer expects, with where it came from. Send `unit_per_store_per_week: null` to clear it. `source` is required whenever a value is sent; see the note on the request model.' operationId: update_first_party_buyer_target_api_first_party_data_uploads__upload_id__buyer_target_put security: - HTTPBearer: [] parameters: - name: upload_id in: path required: true schema: type: string format: uuid title: Upload Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/FirstPartyBuyerTargetRequest' responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Update First Party Buyer Target Api First Party Data Uploads Upload Id Buyer Target Put '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/first-party-data/uploads/{upload_id}/experiment-package: post: tags: - first-party-data summary: Prepare First Party Experiment Package description: Recompute the experiment package preview with user-entered budget, duration, and variant states. operationId: prepare_first_party_experiment_package_api_first_party_data_uploads__upload_id__experiment_package_post security: - HTTPBearer: [] parameters: - name: upload_id in: path required: true schema: type: string title: Upload Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/FirstPartyExperimentPackageRequest' responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Prepare First Party Experiment Package Api First Party Data Uploads Upload Id Experiment Package Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/first-party-data/uploads/{upload_id}/sku-performance: get: tags: - first-party-data summary: List First Party Sku Performance operationId: list_first_party_sku_performance_api_first_party_data_uploads__upload_id__sku_performance_get security: - HTTPBearer: [] parameters: - name: upload_id in: path required: true schema: type: string format: uuid title: Upload Id - name: search in: query required: false schema: type: string maxLength: 200 default: '' title: Search - name: page in: query required: false schema: type: integer minimum: 1 default: 1 title: Page - name: page_size in: query required: false schema: type: integer maximum: 100 minimum: 1 default: 24 title: Page Size - name: sort in: query required: false schema: type: string maxLength: 40 default: priority title: Sort responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/FirstPartySkuListResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/first-party-data/uploads/{upload_id}/sku-performance/{sku_key}: get: tags: - first-party-data summary: Get First Party Sku Performance operationId: get_first_party_sku_performance_api_first_party_data_uploads__upload_id__sku_performance__sku_key__get security: - HTTPBearer: [] parameters: - name: upload_id in: path required: true schema: type: string format: uuid title: Upload Id - name: sku_key in: path required: true schema: type: string title: Sku Key responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/FirstPartySkuDetailResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/earned-media/projects: get: tags: - earned-media summary: List Earned Media Projects operationId: list_earned_media_projects_api_earned_media_projects_get security: - HTTPBearer: [] parameters: - name: status in: query required: false schema: anyOf: - enum: - draft - generating - ready - needs_review - failed - archived type: string - type: 'null' title: Status - name: limit in: query required: false schema: type: integer maximum: 100 minimum: 1 default: 50 title: Limit responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response List Earned Media Projects Api Earned Media Projects Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' post: tags: - earned-media summary: Create Earned Media Project operationId: create_earned_media_project_api_earned_media_projects_post security: - HTTPBearer: [] requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/EarnedMediaProjectCreateRequest' responses: '201': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Create Earned Media Project Api Earned Media Projects Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/earned-media/projects/{project_id}: get: tags: - earned-media summary: Get Earned Media Project operationId: get_earned_media_project_api_earned_media_projects__project_id__get security: - HTTPBearer: [] parameters: - name: project_id in: path required: true schema: type: string title: Project Id responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Get Earned Media Project Api Earned Media Projects Project Id Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' patch: tags: - earned-media summary: Update Earned Media Project operationId: update_earned_media_project_api_earned_media_projects__project_id__patch security: - HTTPBearer: [] parameters: - name: project_id in: path required: true schema: type: string title: Project Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/EarnedMediaProjectUpdateRequest' responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Update Earned Media Project Api Earned Media Projects Project Id Patch '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/earned-media/projects/{project_id}/archive: post: tags: - earned-media summary: Archive Earned Media Project description: Retire a story. Idempotent; refused while a generation lease is live. operationId: archive_earned_media_project_api_earned_media_projects__project_id__archive_post security: - HTTPBearer: [] parameters: - name: project_id in: path required: true schema: type: string title: Project Id responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Archive Earned Media Project Api Earned Media Projects Project Id Archive Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/earned-media/projects/{project_id}/generate: post: tags: - earned-media summary: Generate Earned Media Project operationId: generate_earned_media_project_api_earned_media_projects__project_id__generate_post security: - HTTPBearer: [] parameters: - name: project_id in: path required: true schema: type: string title: Project Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/EarnedMediaGenerateRequest' responses: '202': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Generate Earned Media Project Api Earned Media Projects Project Id Generate Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/earned-media/projects/{project_id}/refresh-research: post: tags: - earned-media summary: Refresh Earned Media Research operationId: refresh_earned_media_research_api_earned_media_projects__project_id__refresh_research_post security: - HTTPBearer: [] parameters: - name: project_id in: path required: true schema: type: string title: Project Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/EarnedMediaRefreshResearchRequest' responses: '202': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Refresh Earned Media Research Api Earned Media Projects Project Id Refresh Research Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/earned-media/projects/{project_id}/drafts/{draft_id}: put: tags: - earned-media summary: Save Earned Media Draft operationId: save_earned_media_draft_api_earned_media_projects__project_id__drafts__draft_id__put security: - HTTPBearer: [] parameters: - name: project_id in: path required: true schema: type: string title: Project Id - name: draft_id in: path required: true schema: type: string title: Draft Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/EarnedMediaDraftSaveRequest' responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Save Earned Media Draft Api Earned Media Projects Project Id Drafts Draft Id Put '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/earned-media/projects/{project_id}/drafts/{draft_id}/export: get: tags: - earned-media summary: Export Earned Media Draft description: Download the current saved draft as a recipient-ready PDF or HTML file. operationId: export_earned_media_draft_api_earned_media_projects__project_id__drafts__draft_id__export_get security: - HTTPBearer: [] parameters: - name: project_id in: path required: true schema: type: string title: Project Id - name: draft_id in: path required: true schema: type: string title: Draft Id - name: format in: query required: false schema: enum: - pdf - html type: string default: pdf title: Format - name: timezone in: query required: false schema: anyOf: - type: string maxLength: 64 - type: 'null' title: Timezone responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/earned-media/projects/{project_id}/drafts/{draft_id}/rewrite: post: tags: - earned-media summary: Rewrite Earned Media Draft description: 'Claim the project for a rewrite, then hand the model call to the worker. The rewrite waits on one model call with nothing to stream, so the request is idle for its whole duration and the proxy closes it before the model answers. The client then sees a gateway error for work the server went on to finish. The project row carries the run the studio already polls, so the claim happens here and the call happens there.' operationId: rewrite_earned_media_draft_api_earned_media_projects__project_id__drafts__draft_id__rewrite_post security: - HTTPBearer: [] parameters: - name: project_id in: path required: true schema: type: string title: Project Id - name: draft_id in: path required: true schema: type: string title: Draft Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/EarnedMediaDraftRewriteRequest' responses: '202': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Rewrite Earned Media Draft Api Earned Media Projects Project Id Drafts Draft Id Rewrite Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/earned-media/projects/{project_id}/drafts/{draft_id}/versions: get: tags: - earned-media summary: List Earned Media Draft Versions operationId: list_earned_media_draft_versions_api_earned_media_projects__project_id__drafts__draft_id__versions_get security: - HTTPBearer: [] parameters: - name: project_id in: path required: true schema: type: string title: Project Id - name: draft_id in: path required: true schema: type: string title: Draft Id - name: limit in: query required: false schema: type: integer maximum: 100 minimum: 1 default: 20 title: Limit - name: offset in: query required: false schema: type: integer minimum: 0 default: 0 title: Offset responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response List Earned Media Draft Versions Api Earned Media Projects Project Id Drafts Draft Id Versions Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/earned-media/projects/{project_id}/drafts/{draft_id}/versions/{version_number}/restore: post: tags: - earned-media summary: Restore Earned Media Draft Version operationId: restore_earned_media_draft_version_api_earned_media_projects__project_id__drafts__draft_id__versions__version_number__restore_post security: - HTTPBearer: [] parameters: - name: project_id in: path required: true schema: type: string title: Project Id - name: draft_id in: path required: true schema: type: string title: Draft Id - name: version_number in: path required: true schema: type: integer title: Version Number requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/EarnedMediaVersionRestoreRequest' responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Restore Earned Media Draft Version Api Earned Media Projects Project Id Drafts Draft Id Versions Version Number Restore Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/earned-media/projects/{project_id}/targets/{target_id}/enrich-contact: post: tags: - earned-media summary: Enrich Earned Media Target Contact description: Look up the outlet's published press contact route via live web search. operationId: enrich_earned_media_target_contact_api_earned_media_projects__project_id__targets__target_id__enrich_contact_post security: - HTTPBearer: [] parameters: - name: project_id in: path required: true schema: type: string title: Project Id - name: target_id in: path required: true schema: type: string title: Target Id responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Enrich Earned Media Target Contact Api Earned Media Projects Project Id Targets Target Id Enrich Contact Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/earned-media/projects/{project_id}/targets/{target_id}/pitch: post: tags: - earned-media summary: Draft Earned Media Target Pitch description: Draft an outlet-specific pitch email from the story's verified material. operationId: draft_earned_media_target_pitch_api_earned_media_projects__project_id__targets__target_id__pitch_post security: - HTTPBearer: [] parameters: - name: project_id in: path required: true schema: type: string title: Project Id - name: target_id in: path required: true schema: type: string title: Target Id responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Draft Earned Media Target Pitch Api Earned Media Projects Project Id Targets Target Id Pitch Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/earned-media/projects/{project_id}/targets/{target_id}: patch: tags: - earned-media summary: Update Earned Media Target operationId: update_earned_media_target_api_earned_media_projects__project_id__targets__target_id__patch security: - HTTPBearer: [] parameters: - name: project_id in: path required: true schema: type: string title: Project Id - name: target_id in: path required: true schema: type: string title: Target Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/EarnedMediaTargetUpdateRequest' responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Update Earned Media Target Api Earned Media Projects Project Id Targets Target Id Patch '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/earned-media/press-room: get: tags: - earned-media summary: Get Earned Media Press Room operationId: get_earned_media_press_room_api_earned_media_press_room_get responses: '200': description: Successful Response content: application/json: schema: additionalProperties: true type: object title: Response Get Earned Media Press Room Api Earned Media Press Room Get security: - HTTPBearer: [] put: tags: - earned-media summary: Save Earned Media Press Room operationId: save_earned_media_press_room_api_earned_media_press_room_put requestBody: content: application/json: schema: $ref: '#/components/schemas/EarnedMediaPressRoomSaveRequest' required: true responses: '200': description: Successful Response content: application/json: schema: additionalProperties: true type: object title: Response Save Earned Media Press Room Api Earned Media Press Room Put '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/earned-media/press-room/generate: post: tags: - earned-media summary: Generate Earned Media Press Room operationId: generate_earned_media_press_room_api_earned_media_press_room_generate_post requestBody: content: application/json: schema: $ref: '#/components/schemas/EarnedMediaPressRoomGenerateRequest' required: true responses: '200': description: Successful Response content: application/json: schema: additionalProperties: true type: object title: Response Generate Earned Media Press Room Api Earned Media Press Room Generate Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/earned-media/press-room/coverage: post: tags: - earned-media summary: Discover Earned Media Press Coverage description: Claim the press room for a coverage sweep, then hand it to the worker. operationId: discover_earned_media_press_coverage_api_earned_media_press_room_coverage_post responses: '202': description: Successful Response content: application/json: schema: additionalProperties: true type: object title: Response Discover Earned Media Press Coverage Api Earned Media Press Room Coverage Post security: - HTTPBearer: [] /api/earned-media/press-room/coverage/url: post: tags: - earned-media summary: Add Earned Media Press Coverage Url description: Add one page the user already knows about. operationId: add_earned_media_press_coverage_url_api_earned_media_press_room_coverage_url_post requestBody: content: application/json: schema: $ref: '#/components/schemas/EarnedMediaCoverageUrlRequest' required: true responses: '200': description: Successful Response content: application/json: schema: additionalProperties: true type: object title: Response Add Earned Media Press Coverage Url Api Earned Media Press Room Coverage Url Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/experiment-packages: post: tags: - experiment-packages summary: Create Experiment Package description: Persist a test package from a tuned preview at Create Test Campaign time. operationId: create_experiment_package_api_experiment_packages_post security: - HTTPBearer: [] requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ExperimentPackageCreateRequest' responses: '201': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Create Experiment Package Api Experiment Packages Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' get: tags: - experiment-packages summary: List Experiment Packages operationId: list_experiment_packages_api_experiment_packages_get security: - HTTPBearer: [] parameters: - name: source_upload_id in: query required: false schema: anyOf: - type: string - type: 'null' title: Source Upload Id responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response List Experiment Packages Api Experiment Packages Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/experiment-packages/{package_id}/readout: post: tags: - experiment-packages summary: Compute Experiment Package Readout description: Compute and store the lift readout from a paired post-test upload. operationId: compute_experiment_package_readout_api_experiment_packages__package_id__readout_post security: - HTTPBearer: [] parameters: - name: package_id in: path required: true schema: type: string title: Package Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ExperimentReadoutRequest' responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Compute Experiment Package Readout Api Experiment Packages Package Id Readout Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/experiment-packages/{package_id}: get: tags: - experiment-packages summary: Get Experiment Package operationId: get_experiment_package_api_experiment_packages__package_id__get security: - HTTPBearer: [] parameters: - name: package_id in: path required: true schema: type: string title: Package Id responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Get Experiment Package Api Experiment Packages Package Id Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/experiment-packages/{package_id}/campaigns/{campaign_id}: delete: tags: - experiment-packages summary: Remove Experiment Package Campaign description: Remove one launched version's campaign from a test (hard delete, scoped). operationId: remove_experiment_package_campaign_api_experiment_packages__package_id__campaigns__campaign_id__delete security: - HTTPBearer: [] parameters: - name: package_id in: path required: true schema: type: string title: Package Id - name: campaign_id in: path required: true schema: type: string title: Campaign Id responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Remove Experiment Package Campaign Api Experiment Packages Package Id Campaigns Campaign Id Delete '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/experiment-packages/{package_id}/campaigns/{campaign_id}/refresh: post: tags: - experiment-packages summary: Refresh Experiment Package Campaign description: 'Regenerate one launched version''s creative: re-run just that version (image-only) with its stored message/image/budget slice, then replace the old campaign with the freshly generated one. Async — returns a job to poll.' operationId: refresh_experiment_package_campaign_api_experiment_packages__package_id__campaigns__campaign_id__refresh_post security: - HTTPBearer: [] parameters: - name: package_id in: path required: true schema: type: string title: Package Id - name: campaign_id in: path required: true schema: type: string title: Campaign Id responses: '202': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Refresh Experiment Package Campaign Api Experiment Packages Package Id Campaigns Campaign Id Refresh Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/crm/b2b-leads/searches: post: tags: - crm-b2b-leads summary: Search B2B Leads operationId: search_b2b_leads_api_crm_b2b_leads_searches_post security: - HTTPBearer: [] requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/B2BLeadSearchRequest' responses: '202': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/B2BLeadSearchJobResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' get: tags: - crm-b2b-leads summary: List B2B Lead Searches operationId: list_b2b_lead_searches_api_crm_b2b_leads_searches_get security: - HTTPBearer: [] parameters: - name: limit in: query required: false schema: type: integer maximum: 10 minimum: 1 default: 10 title: Limit responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/B2BLeadSearchHistoryResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/crm/b2b-leads/searches/{search_id}: get: tags: - crm-b2b-leads summary: Get B2B Lead Search operationId: get_b2b_lead_search_api_crm_b2b_leads_searches__search_id__get security: - HTTPBearer: [] parameters: - name: search_id in: path required: true schema: type: string title: Search Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/B2BLeadSearchJobResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/crm/b2b-leads/searches/{search_id}/hydrate-emails: post: tags: - crm-b2b-leads summary: Hydrate B2B Lead Emails operationId: hydrate_b2b_lead_emails_api_crm_b2b_leads_searches__search_id__hydrate_emails_post security: - HTTPBearer: [] parameters: - name: search_id in: path required: true schema: type: string title: Search Id requestBody: content: application/json: schema: anyOf: - $ref: '#/components/schemas/B2BHydrateEmailsRequest' - type: 'null' title: Payload responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/B2BHydrateEmailsResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/crm/b2b-leads/searches/{search_id}/accounts/{account_key}/contacts: post: tags: - crm-b2b-leads summary: Expand B2B Account Contacts operationId: expand_b2b_account_contacts_api_crm_b2b_leads_searches__search_id__accounts__account_key__contacts_post security: - HTTPBearer: [] parameters: - name: search_id in: path required: true schema: type: string title: Search Id - name: account_key in: path required: true schema: type: string title: Account Key requestBody: content: application/json: schema: anyOf: - $ref: '#/components/schemas/B2BAccountContactsRequest' - type: 'null' title: Payload responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/B2BAccountContactsResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/crm/b2b-leads/searches/{search_id}/candidates/{candidate_id}/draft: post: tags: - crm-b2b-leads summary: Draft B2B Lead Email operationId: draft_b2b_lead_email_api_crm_b2b_leads_searches__search_id__candidates__candidate_id__draft_post security: - HTTPBearer: [] parameters: - name: search_id in: path required: true schema: type: string title: Search Id - name: candidate_id in: path required: true schema: type: string title: Candidate Id requestBody: content: application/json: schema: anyOf: - $ref: '#/components/schemas/B2BDraftRequest' - type: 'null' title: Payload responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/B2BDraftResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/crm/b2b-leads/searches/{search_id}/candidates/{candidate_id}/save: post: tags: - crm-b2b-leads summary: Save B2B Lead Candidate operationId: save_b2b_lead_candidate_api_crm_b2b_leads_searches__search_id__candidates__candidate_id__save_post security: - HTTPBearer: [] parameters: - name: search_id in: path required: true schema: type: string title: Search Id - name: candidate_id in: path required: true schema: type: string title: Candidate Id requestBody: content: application/json: schema: anyOf: - $ref: '#/components/schemas/B2BSaveCandidateRequest' - type: 'null' title: Payload responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/B2BSaveCandidateResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/crm/b2b-leads/prospects/{prospect_id}/draft: put: tags: - crm-b2b-leads summary: Update B2B Prospect Draft operationId: update_b2b_prospect_draft_api_crm_b2b_leads_prospects__prospect_id__draft_put security: - HTTPBearer: [] parameters: - name: prospect_id in: path required: true schema: type: string title: Prospect Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/B2BUpdateDraftRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/B2BUpdateDraftResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/crm/people: get: tags: - crm-people summary: List Crm People description: Return the unified People projection for the active company profile. operationId: list_crm_people_api_crm_people_get security: - HTTPBearer: [] parameters: - name: limit in: query required: false schema: type: integer maximum: 100 minimum: 1 description: People per page default: 25 title: Limit description: People per page - name: offset in: query required: false schema: type: integer minimum: 0 description: Zero-based offset default: 0 title: Offset description: Zero-based offset - name: source in: query required: false schema: anyOf: - type: string - type: 'null' description: Source filter title: Source description: Source filter - name: stage in: query required: false schema: anyOf: - type: string - type: 'null' description: Unified stage filter title: Stage description: Unified stage filter - name: hubspot in: query required: false schema: anyOf: - type: string - type: 'null' description: HubSpot sync filter title: Hubspot description: HubSpot sync filter - name: signal in: query required: false schema: anyOf: - type: string - type: 'null' description: Dedupe-signal filter title: Signal description: Dedupe-signal filter - name: search in: query required: false schema: anyOf: - type: string maxLength: 200 - type: 'null' description: Search text title: Search description: Search text - name: sort_key in: query required: false schema: type: string description: Sort key default: last_activity title: Sort Key description: Sort key - name: sort_direction in: query required: false schema: type: string description: Sort direction default: desc title: Sort Direction description: Sort direction responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/CrmPeopleListResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/crm/people/export: get: tags: - crm-people summary: Export Crm People description: Download every person matching the active list query as one CSV. operationId: export_crm_people_api_crm_people_export_get security: - HTTPBearer: [] parameters: - name: source in: query required: false schema: anyOf: - type: string - type: 'null' description: Source filter title: Source description: Source filter - name: stage in: query required: false schema: anyOf: - type: string - type: 'null' description: Unified stage filter title: Stage description: Unified stage filter - name: hubspot in: query required: false schema: anyOf: - type: string - type: 'null' description: HubSpot sync filter title: Hubspot description: HubSpot sync filter - name: signal in: query required: false schema: anyOf: - type: string - type: 'null' description: Dedupe-signal filter title: Signal description: Dedupe-signal filter - name: search in: query required: false schema: anyOf: - type: string maxLength: 200 - type: 'null' description: Search text title: Search description: Search text - name: sort_key in: query required: false schema: type: string description: Sort key default: last_activity title: Sort Key description: Sort key - name: sort_direction in: query required: false schema: type: string description: Sort direction default: desc title: Sort Direction description: Sort direction responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/crm/people/{person_ref}: get: tags: - crm-people summary: Get Crm Person description: Return full detail for a single unified person. operationId: get_crm_person_api_crm_people__person_ref__get security: - HTTPBearer: [] parameters: - name: person_ref in: path required: true schema: type: string title: Person Ref responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/CrmPersonDetailResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/crm/people/{person_ref}/contacted: post: tags: - crm-people summary: Mark Person Contacted description: 'Log a manual ``contacted`` touch against a person; return refreshed detail. The single write surface over the otherwise read-through People projection. A 404 means the person_ref does not resolve within the active profile.' operationId: mark_person_contacted_api_crm_people__person_ref__contacted_post security: - HTTPBearer: [] parameters: - name: person_ref in: path required: true schema: type: string title: Person Ref requestBody: content: application/json: schema: anyOf: - $ref: '#/components/schemas/CrmMarkContactedRequest' - type: 'null' title: Payload responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/CrmPersonDetailResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' delete: tags: - crm-people summary: Unmark Person Contacted description: 'Undo: clear this profile''s ``contacted`` touches for a person.' operationId: unmark_person_contacted_api_crm_people__person_ref__contacted_delete security: - HTTPBearer: [] parameters: - name: person_ref in: path required: true schema: type: string title: Person Ref responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/CrmPersonDetailResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/crm/people/{person_ref}/stage: put: tags: - crm-people summary: Set Person Stage description: Manually set a person's pipeline stage (a reversible override over auto). operationId: set_person_stage_api_crm_people__person_ref__stage_put security: - HTTPBearer: [] parameters: - name: person_ref in: path required: true schema: type: string title: Person Ref requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CrmSetStageRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/CrmPersonDetailResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' delete: tags: - crm-people summary: Clear Person Stage description: Revert a manual stage override back to the source-derived auto stage. operationId: clear_person_stage_api_crm_people__person_ref__stage_delete security: - HTTPBearer: [] parameters: - name: person_ref in: path required: true schema: type: string title: Person Ref responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/CrmPersonDetailResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/crm/people/{person_ref}/split: post: tags: - crm-people summary: Split Person Source description: 'Peel one contributing source out of a wrongly-merged person. Records a persistent do-not-merge override so the projection keeps that source as its own standalone person. A 404 means the person_ref does not resolve in the active profile, the source_ref is not one of its sources, or the person has nothing to split (a single source).' operationId: split_person_source_api_crm_people__person_ref__split_post security: - HTTPBearer: [] parameters: - name: person_ref in: path required: true schema: type: string title: Person Ref requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CrmSplitSourceRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/CrmPersonDetailResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' delete: tags: - crm-people summary: Unsplit Person Source description: 'Undo a split — drop the do-not-merge override so the source re-fuses. A 404 means ``person_ref`` no longer resolves in the active profile.' operationId: unsplit_person_source_api_crm_people__person_ref__split_delete security: - HTTPBearer: [] parameters: - name: person_ref in: path required: true schema: type: string title: Person Ref requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CrmSplitSourceRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/CrmPersonDetailResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/crm/sync/hubspot: post: tags: - crm summary: Sync People To Hubspot description: 'Stage or execute a HubSpot sync for the given People. Direct path (policy off) upserts immediately; governed path (policy on, or any agent-initiated request) creates a ChangeRequest gated by the CRM Sync Approvers group. One-diff parity is preserved by build_sync_diff.' operationId: sync_people_to_hubspot_api_crm_sync_hubspot_post requestBody: content: application/json: schema: $ref: '#/components/schemas/CrmSyncRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/CrmSyncResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/crm/audiences: get: tags: - crm summary: Get Audiences operationId: get_audiences_api_crm_audiences_get responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/CrmAudienceListResponse' security: - HTTPBearer: [] /api/crm/audiences/add: post: tags: - crm summary: Add To Audience operationId: add_to_audience_api_crm_audiences_add_post requestBody: content: application/json: schema: $ref: '#/components/schemas/CrmAudienceAddRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/CrmAudienceAddResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/crm/settings: get: tags: - crm summary: Get Crm Settings operationId: get_crm_settings_api_crm_settings_get security: - HTTPBearer: [] responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/CrmSettingsResponse' put: tags: - crm summary: Update Crm Settings operationId: update_crm_settings_api_crm_settings_put security: - HTTPBearer: [] parameters: - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CrmSettingsUpdateRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/CrmSettingsResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/crm/approver-group: get: tags: - crm summary: Get Approver Group operationId: get_approver_group_api_crm_approver_group_get responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/CrmApproverGroupResponse' security: - HTTPBearer: [] /api/external-platform/hubspot/auth: get: tags: - external-platform summary: Hubspot Auth description: "Get the HubSpot OAuth authorization URL for the current company profile.\n\nReturns:\n HubSpotAuthResponse\ \ with the OAuth authorization URL." operationId: hubspot_auth_api_external_platform_hubspot_auth_get responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/HubSpotAuthResponse' security: - HTTPBearer: [] /api/external-platform/hubspot/callback: get: tags: - external-platform summary: Hubspot Callback description: 'Handle the HubSpot OAuth callback and store tokens. Stores credentials in the data_source_integrations table.' operationId: hubspot_callback_api_external_platform_hubspot_callback_get parameters: - name: code in: query required: false schema: type: string title: Code - name: state in: query required: false schema: type: string title: State - name: error in: query required: false schema: type: string title: Error - name: error_description in: query required: false schema: type: string title: Error Description responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/external-platform/hubspot/status: get: tags: - external-platform summary: Get Hubspot Status description: Check HubSpot integration status for the current company profile. operationId: get_hubspot_status_api_external_platform_hubspot_status_get responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/HubSpotStatusResponse' security: - HTTPBearer: [] /api/external-platform/hubspot/health: get: tags: - external-platform summary: Get Hubspot Health description: Get HubSpot connection health status. operationId: get_hubspot_health_api_external_platform_hubspot_health_get responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/HubSpotHealthResponse' security: - HTTPBearer: [] /api/external-platform/hubspot/disconnect: post: tags: - external-platform summary: Disconnect Hubspot description: Disconnect HubSpot by revoking tokens and marking the integration inactive. operationId: disconnect_hubspot_api_external_platform_hubspot_disconnect_post responses: '200': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /api/external-platform/hubspot/initial-sync-status: get: tags: - external-platform summary: Hubspot Initial Sync Status description: Get the HubSpot initial Databricks sync status for the current profile. operationId: hubspot_initial_sync_status_api_external_platform_hubspot_initial_sync_status_get responses: '200': description: Successful Response content: application/json: schema: additionalProperties: true type: object title: Response Hubspot Initial Sync Status Api External Platform Hubspot Initial Sync Status Get security: - HTTPBearer: [] /api/overview/bootstrap: get: tags: - overview - overview summary: Get Overview Bootstrap description: Return the overview page's primary data in one response without changing its UI contract. operationId: get_overview_bootstrap_api_overview_bootstrap_get responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/OverviewBootstrapResponse' security: - HTTPBearer: [] /api/ai-product-lab/product-brainstorm/brainstorm: post: tags: - ai-product-lab - Product Brainstorm summary: Brainstorm Product Ideas description: Generate product ideas based on product offering or company context. operationId: brainstorm_product_ideas_api_ai_product_lab_product_brainstorm_brainstorm_post requestBody: content: application/json: schema: $ref: '#/components/schemas/ProductIdeaBrainstormRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ProductIdeaResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/ai-product-lab/product-brainstorm/sessions: get: tags: - ai-product-lab - Product Brainstorm summary: Get Brainstorm Sessions description: Get previous brainstorming sessions for this company profile. operationId: get_brainstorm_sessions_api_ai_product_lab_product_brainstorm_sessions_get security: - HTTPBearer: [] parameters: - name: product_offering_id in: query required: false schema: anyOf: - type: string format: uuid - type: 'null' title: Product Offering Id - name: limit in: query required: false schema: type: integer maximum: 100 default: 20 title: Limit responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/ProductIdeaResponse' title: Response Get Brainstorm Sessions Api Ai Product Lab Product Brainstorm Sessions Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/ai-product-lab/product-brainstorm/sessions/{session_id}: get: tags: - ai-product-lab - Product Brainstorm summary: Get Brainstorm Session description: Get a specific brainstorming session. operationId: get_brainstorm_session_api_ai_product_lab_product_brainstorm_sessions__session_id__get security: - HTTPBearer: [] parameters: - name: session_id in: path required: true schema: type: string format: uuid title: Session Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ProductIdeaResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' delete: tags: - ai-product-lab - Product Brainstorm summary: Delete Brainstorm Session description: Delete a brainstorming session. operationId: delete_brainstorm_session_api_ai_product_lab_product_brainstorm_sessions__session_id__delete security: - HTTPBearer: [] parameters: - name: session_id in: path required: true schema: type: string format: uuid title: Session Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/ai-product-lab/product-brainstorm/sessions/by-offering/{offering_id}: get: tags: - ai-product-lab - Product Brainstorm summary: Get Sessions By Offering description: Get brainstorming sessions for a specific product offering. operationId: get_sessions_by_offering_api_ai_product_lab_product_brainstorm_sessions_by_offering__offering_id__get security: - HTTPBearer: [] parameters: - name: offering_id in: path required: true schema: type: string format: uuid title: Offering Id responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/ProductIdeaResponse' title: Response Get Sessions By Offering Api Ai Product Lab Product Brainstorm Sessions By Offering Offering Id Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/ai-product-lab/product-brainstorm/test: post: tags: - ai-product-lab - Product Brainstorm Test summary: Test Product Launch description: Start testing a product idea with AI personas. operationId: test_product_launch_api_ai_product_lab_product_brainstorm_test_post requestBody: content: application/json: schema: $ref: '#/components/schemas/ProductLaunchTestRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ProductLaunchTestResult' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/ai-product-lab/product-brainstorm/test/{test_id}: get: tags: - ai-product-lab - Product Brainstorm Test summary: Get Test Results description: Get results of a product launch test with paginated persona responses. operationId: get_test_results_api_ai_product_lab_product_brainstorm_test__test_id__get security: - HTTPBearer: [] parameters: - name: test_id in: path required: true schema: type: string format: uuid title: Test Id - name: page in: query required: false schema: type: integer minimum: 1 default: 1 title: Page - name: page_size in: query required: false schema: type: integer maximum: 50 minimum: 1 default: 10 title: Page Size responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ProductLaunchTestResult' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/ai-product-lab/product-brainstorm/test/{test_id}/responses: get: tags: - ai-product-lab - Product Brainstorm Test summary: Get Test Persona Responses description: Get paginated persona responses for a product launch test. operationId: get_test_persona_responses_api_ai_product_lab_product_brainstorm_test__test_id__responses_get security: - HTTPBearer: [] parameters: - name: test_id in: path required: true schema: type: string format: uuid title: Test Id - name: page in: query required: false schema: type: integer minimum: 1 default: 1 title: Page - name: page_size in: query required: false schema: type: integer maximum: 50 minimum: 1 default: 10 title: Page Size responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/ai-product-lab/product-brainstorm/tests: get: tags: - ai-product-lab - Product Brainstorm Test summary: Get All Tests description: Get all product launch tests for the user's company profile. operationId: get_all_tests_api_ai_product_lab_product_brainstorm_tests_get security: - HTTPBearer: [] parameters: - name: launch_session_id in: query required: false schema: anyOf: - type: string format: uuid - type: 'null' title: Launch Session Id - name: limit in: query required: false schema: type: integer maximum: 100 default: 20 title: Limit responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/ProductLaunchTestResult' title: Response Get All Tests Api Ai Product Lab Product Brainstorm Tests Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/ai-product-lab/product-brainstorm/test/{test_id}/heatmaps: get: tags: - ai-product-lab - Product Brainstorm Test summary: Get Test Heatmaps description: Get heatmap data for a product launch test. operationId: get_test_heatmaps_api_ai_product_lab_product_brainstorm_test__test_id__heatmaps_get security: - HTTPBearer: [] parameters: - name: test_id in: path required: true schema: type: string format: uuid title: Test Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/ai-personas/personas: get: tags: - ai-personas summary: Get Personas description: Get AI personas for the current company profile with pagination. operationId: get_personas_api_ai_personas_personas_get security: - HTTPBearer: [] parameters: - name: product_offering_id in: query required: false schema: anyOf: - type: string format: uuid - type: 'null' description: Filter by specific product offering (None for company-wide) title: Product Offering Id description: Filter by specific product offering (None for company-wide) - name: target_group in: query required: false schema: anyOf: - type: string - type: 'null' description: Filter by target audience group title: Target Group description: Filter by target audience group - name: persona_type in: query required: false schema: anyOf: - type: string - type: 'null' description: Filter by persona type title: Persona Type description: Filter by persona type - name: persona_set_id in: query required: false schema: anyOf: - type: string format: uuid - type: 'null' description: Filter by specific persona set title: Persona Set Id description: Filter by specific persona set - name: limit in: query required: false schema: type: integer maximum: 1000 description: Number of personas to return default: 50 title: Limit description: Number of personas to return - name: offset in: query required: false schema: type: integer minimum: 0 description: Number of personas to skip default: 0 title: Offset description: Number of personas to skip responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/ai-personas/personas/groups: get: tags: - ai-personas summary: Get Persona Groups description: Get all target audience groups with persona counts. operationId: get_persona_groups_api_ai_personas_personas_groups_get security: - HTTPBearer: [] parameters: - name: product_offering_id in: query required: false schema: anyOf: - type: string format: uuid - type: 'null' description: Filter by specific product offering title: Product Offering Id description: Filter by specific product offering responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/ai-personas/personas/generate: post: tags: - ai-personas summary: Generate Personas description: Generate AI personas for company or specific product offering. operationId: generate_personas_api_ai_personas_personas_generate_post requestBody: content: application/json: schema: $ref: '#/components/schemas/routes__ai_personas__GeneratePersonasRequest' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/ai-personas/personas/{persona_id}: delete: tags: - ai-personas summary: Delete Persona description: Delete (deactivate) a specific persona. operationId: delete_persona_api_ai_personas_personas__persona_id__delete security: - HTTPBearer: [] parameters: - name: persona_id in: path required: true schema: type: string format: uuid title: Persona Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/ai-personas/personas/bulk-delete: post: tags: - ai-personas summary: Bulk Delete Personas description: Delete multiple personas at once. operationId: bulk_delete_personas_api_ai_personas_personas_bulk_delete_post requestBody: content: application/json: schema: items: type: string format: uuid type: array title: Persona Ids required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/marketing-wizard/product-offerings/{product_offering_id}/generate-pdp: post: tags: - marketing-wizard summary: Generate Product Description Page description: Start asynchronous PDP generation for a specific product offering. operationId: generate_product_description_page_api_marketing_wizard_product_offerings__product_offering_id__generate_pdp_post security: - HTTPBearer: [] parameters: - name: product_offering_id in: path required: true schema: type: string format: uuid title: Product Offering Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PDPGenerationRequest' responses: '202': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/JobResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/marketing-wizard/product-offerings/{product_offering_id}/pdps: get: tags: - marketing-wizard summary: List Product Description Pages description: Return previously generated PDPs for a product offering. operationId: list_product_description_pages_api_marketing_wizard_product_offerings__product_offering_id__pdps_get security: - HTTPBearer: [] parameters: - name: product_offering_id in: path required: true schema: type: string format: uuid title: Product Offering Id responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/PDPHistoryItem' title: Response List Product Description Pages Api Marketing Wizard Product Offerings Product Offering Id Pdps Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/marketing-wizard/product-offerings/{product_offering_id}/pdps/{pdp_id}: get: tags: - marketing-wizard summary: Get Product Description Page Detail description: Fetch a stored PDP generation for preview within the wizard. operationId: get_product_description_page_detail_api_marketing_wizard_product_offerings__product_offering_id__pdps__pdp_id__get security: - HTTPBearer: [] parameters: - name: product_offering_id in: path required: true schema: type: string format: uuid title: Product Offering Id - name: pdp_id in: path required: true schema: type: string format: uuid title: Pdp Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/PDPGenerationResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/marketing-wizard/product-offerings/{product_offering_id}/pdps/{pdp_id}/download: get: tags: - marketing-wizard summary: Download Product Description Page Html description: Download a persisted PDP variant as a self-contained HTML bundle. operationId: download_product_description_page_html_api_marketing_wizard_product_offerings__product_offering_id__pdps__pdp_id__download_get security: - HTTPBearer: [] parameters: - name: product_offering_id in: path required: true schema: type: string format: uuid title: Product Offering Id - name: pdp_id in: path required: true schema: type: string format: uuid title: Pdp Id - name: variant in: query required: false schema: $ref: '#/components/schemas/PDPVariantType' default: modern responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/marketing-wizard/intelligence/product/{product_id}: get: tags: - marketing-wizard summary: Get Product Intelligence description: "Get market intelligence for a specific product\n\nArgs:\n product_id: ID of the product\n intelligence_type:\ \ Optional filter for intelligence type\n limit: Maximum number of results\n current_user: Authenticated user\n\ \ db: Database session\n\nReturns:\n Dictionary with grouped intelligence data" operationId: get_product_intelligence_api_marketing_wizard_intelligence_product__product_id__get security: - HTTPBearer: [] parameters: - name: product_id in: path required: true schema: type: string format: uuid title: Product Id - name: intelligence_type in: query required: false schema: anyOf: - type: string - type: 'null' title: Intelligence Type - name: limit in: query required: false schema: type: integer maximum: 50 default: 10 title: Limit responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Get Product Intelligence Api Marketing Wizard Intelligence Product Product Id Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/marketing-docs/gamma/deck/generate: post: tags: - marketing-docs summary: Generate Pitch Deck description: Reject new pitch deck generation while the feature is unavailable. operationId: generate_pitch_deck_api_marketing_docs_gamma_deck_generate_post requestBody: content: application/json: schema: $ref: '#/components/schemas/GenerateDeckRequest' required: true responses: '202': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/JobResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/marketing-docs/gamma/deck/status: get: tags: - marketing-docs summary: Get Pitch Deck Status description: 'Proxy status polling to Gamma. Frontend can poll every ~5s. For now, we do on-demand polling per request. If needed we can later persist jobs and background-poll.' operationId: get_pitch_deck_status_api_marketing_docs_gamma_deck_status_get security: - HTTPBearer: [] parameters: - name: doc_id in: query required: true schema: type: string title: Doc Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/DeckStatusResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/marketing-docs/market-opportunity/generate: post: tags: - marketing-docs summary: Generate Market Opportunity Document description: Store one-run supporting files and start document generation. operationId: generate_market_opportunity_document_api_marketing_docs_market_opportunity_generate_post requestBody: content: multipart/form-data: schema: $ref: '#/components/schemas/Body_generate_market_opportunity_document_api_marketing_docs_market_opportunity_generate_post' required: true responses: '202': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/JobResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/marketing-docs/gtm/generate: post: tags: - marketing-docs summary: Generate Gtm Document description: Reject new GTM generation while the feature is unavailable. operationId: generate_gtm_document_api_marketing_docs_gtm_generate_post requestBody: content: application/json: schema: $ref: '#/components/schemas/GenerateGTMRequest' required: true responses: '202': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/JobResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/marketing-docs/gamma/deck/download: get: tags: - marketing-docs summary: Download Pitch Deck description: 'Download the generated deck (pptx or pdf) by proxying Gamma file response. This keeps the API key server-side and streams bytes to the client.' operationId: download_pitch_deck_api_marketing_docs_gamma_deck_download_get security: - HTTPBearer: [] parameters: - name: doc_id in: query required: true schema: type: string title: Doc Id - name: format in: query required: false schema: type: string default: pptx title: Format responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/ab-groups: get: tags: - ab-groups - ab-groups summary: List Ab Groups operationId: list_ab_groups_api_ab_groups_get security: - HTTPBearer: [] parameters: - name: ads_type in: query required: false schema: anyOf: - type: string - type: 'null' title: Ads Type - name: status_filter in: query required: false schema: anyOf: - type: string - type: 'null' title: Status Filter responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/ABGroupResponse' title: Response List Ab Groups Api Ab Groups Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' post: tags: - ab-groups - ab-groups summary: Create Ab Group operationId: create_ab_group_api_ab_groups_post security: - HTTPBearer: [] requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ABGroupCreateRequest' responses: '201': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ABGroupDetailResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/ab-groups/{ab_group_id}: get: tags: - ab-groups - ab-groups summary: Get Ab Group operationId: get_ab_group_api_ab_groups__ab_group_id__get security: - HTTPBearer: [] parameters: - name: ab_group_id in: path required: true schema: type: string format: uuid title: Ab Group Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ABGroupDetailResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' patch: tags: - ab-groups - ab-groups summary: Update Ab Group operationId: update_ab_group_api_ab_groups__ab_group_id__patch security: - HTTPBearer: [] parameters: - name: ab_group_id in: path required: true schema: type: string format: uuid title: Ab Group Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ABGroupUpdateRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ABGroupResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' delete: tags: - ab-groups - ab-groups summary: Delete Ab Group operationId: delete_ab_group_api_ab_groups__ab_group_id__delete security: - HTTPBearer: [] parameters: - name: ab_group_id in: path required: true schema: type: string format: uuid title: Ab Group Id responses: '204': description: Successful Response '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/ab-groups/{ab_group_id}/metrics: get: tags: - ab-groups - ab-groups summary: Get Ab Group Metrics operationId: get_ab_group_metrics_api_ab_groups__ab_group_id__metrics_get security: - HTTPBearer: [] parameters: - name: ab_group_id in: path required: true schema: type: string format: uuid title: Ab Group Id - name: days in: query required: false schema: type: integer default: 30 title: Days responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ABGroupMetricsResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/ab-groups/{ab_group_id}/members: post: tags: - ab-groups - ab-groups summary: Add Members operationId: add_members_api_ab_groups__ab_group_id__members_post security: - HTTPBearer: [] parameters: - name: ab_group_id in: path required: true schema: type: string format: uuid title: Ab Group Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ABGroupAddMembersRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ABGroupDetailResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/ab-groups/{ab_group_id}/members/{ad_id}: delete: tags: - ab-groups - ab-groups summary: Remove Member operationId: remove_member_api_ab_groups__ab_group_id__members__ad_id__delete security: - HTTPBearer: [] parameters: - name: ab_group_id in: path required: true schema: type: string format: uuid title: Ab Group Id - name: ad_id in: path required: true schema: type: string format: uuid title: Ad Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ABGroupDetailResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/ab-groups/{ab_group_id}/members/reorder: post: tags: - ab-groups - ab-groups summary: Reorder Members operationId: reorder_members_api_ab_groups__ab_group_id__members_reorder_post security: - HTTPBearer: [] parameters: - name: ab_group_id in: path required: true schema: type: string format: uuid title: Ab Group Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ABGroupReorderMembersRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ABGroupDetailResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/mcp/resources/read: post: tags: - mcp - mcp summary: Read Resource description: "Read a specific resource by ID.\n\nExample:\n```json\n{\n \"resource_type\": \"company-profile\",\n\ \ \"resource_id\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"params\": {\"include_products\": true}\n}\n\ ```" operationId: read_resource_api_mcp_resources_read_post requestBody: content: application/json: schema: $ref: '#/components/schemas/ResourceReadRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/MCPResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/mcp/resources/list: post: tags: - mcp - mcp summary: List Resources description: "List available resources of a specific type.\n\nExample:\n```json\n{\n \"resource_type\": \"company-profile\"\ ,\n \"params\": {\"limit\": 10, \"offset\": 0}\n}\n```" operationId: list_resources_api_mcp_resources_list_post requestBody: content: application/json: schema: $ref: '#/components/schemas/ResourceListRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/MCPResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/mcp/tools/execute: post: tags: - mcp - mcp summary: Execute Tool description: "Execute an MCP tool.\n\nExample:\n```json\n{\n \"tool_name\": \"generate_campaign_ideas\",\n \"\ company_profile_id\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"arguments\": {\n \"customer_goal\":\ \ \"increase brand awareness\",\n \"target_audiences\": [\n {\"description\": \"Tech-savvy millennials\"\ }\n ]\n }\n}\n```" operationId: execute_tool_api_mcp_tools_execute_post requestBody: content: application/json: schema: $ref: '#/components/schemas/ToolExecuteRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/MCPResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/mcp/tools/list: get: tags: - mcp - mcp summary: List Tools description: 'List all available MCP tools with their schemas. Returns tool definitions suitable for LLM function calling.' operationId: list_tools_api_mcp_tools_list_get responses: '200': description: Successful Response content: application/json: schema: additionalProperties: true type: object title: Response List Tools Api Mcp Tools List Get security: - HTTPBearer: [] /api/mcp/prompts/list: get: tags: - mcp - mcp summary: List Prompt Templates description: "List available prompt templates.\n\nArgs:\n category: Optional category filter (e.g., 'analytics',\ \ 'planning')\n\nReturns:\n List of available prompts" operationId: list_prompt_templates_api_mcp_prompts_list_get security: - HTTPBearer: [] parameters: - name: category in: query required: false schema: anyOf: - type: string - type: 'null' title: Category responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response List Prompt Templates Api Mcp Prompts List Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/mcp/prompts/{prompt_name}: get: tags: - mcp - mcp summary: Get Prompt Template description: "Get a specific prompt template.\n\nArgs:\n prompt_name: Name of the prompt template\n\nReturns:\n \ \ Full prompt template with variables" operationId: get_prompt_template_api_mcp_prompts__prompt_name__get security: - HTTPBearer: [] parameters: - name: prompt_name in: path required: true schema: type: string title: Prompt Name responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Get Prompt Template Api Mcp Prompts Prompt Name Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/mcp/capabilities: get: tags: - mcp - mcp summary: Get Capabilities description: 'Get MCP server capabilities and configuration. Returns information about available resources, tools, and features.' operationId: get_capabilities_api_mcp_capabilities_get responses: '200': description: Successful Response content: application/json: schema: additionalProperties: true type: object title: Response Get Capabilities Api Mcp Capabilities Get security: - HTTPBearer: [] /api/programmatic/v1/hello: get: tags: - programmatic summary: Hello operationId: hello_api_programmatic_v1_hello_get responses: '200': description: Successful Response content: application/json: schema: {} /api/programmatic/v1/campaign-ideas: post: tags: - programmatic summary: Generate Campaign Ideas operationId: generate_campaign_ideas_api_programmatic_v1_campaign_ideas_post requestBody: content: application/json: schema: $ref: '#/components/schemas/ProgrammaticCampaignIdeasRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ProgrammaticCampaignIdeasResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/programmatic/v1/campaign-ideas/generate: post: tags: - programmatic summary: Generate Campaigns From Ideas operationId: generate_campaigns_from_ideas_api_programmatic_v1_campaign_ideas_generate_post requestBody: content: application/json: schema: $ref: '#/components/schemas/ProgrammaticCampaignGenerationRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ProgrammaticCampaignGenerationResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/programmatic-keys: get: tags: - programmatic-keys summary: List Api Keys operationId: list_api_keys_api_programmatic_keys_get responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ApiKeyListResponse' security: - HTTPBearer: [] post: tags: - programmatic-keys summary: Create Api Key For Profile operationId: create_api_key_for_profile_api_programmatic_keys_post requestBody: content: application/json: schema: $ref: '#/components/schemas/ApiKeyCreateRequest' required: true responses: '201': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ApiKeyCreateResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/programmatic-keys/{api_key_id}/revoke: post: tags: - programmatic-keys summary: Revoke Api Key operationId: revoke_api_key_api_programmatic_keys__api_key_id__revoke_post security: - HTTPBearer: [] parameters: - name: api_key_id in: path required: true schema: type: string format: uuid title: Api Key Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ApiKeyRevokeResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/programmatic-keys/{api_key_id}/usage: get: tags: - programmatic-keys summary: List Api Key Usage operationId: list_api_key_usage_api_programmatic_keys__api_key_id__usage_get security: - HTTPBearer: [] parameters: - name: api_key_id in: path required: true schema: type: string format: uuid title: Api Key Id - name: limit in: query required: false schema: type: integer maximum: 200 minimum: 1 default: 50 title: Limit responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ApiKeyUsageResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/chat: post: tags: - agentic-chat - agentic-chat summary: Chat description: 'Agentic chat endpoint with conversation persistence. Delegates all logic to run_chat_turn() which handles: - Access validation - Conversation management - File context persistence across turns - Tool execution and response generation' operationId: chat_api_agentic_chat_post requestBody: content: application/json: schema: $ref: '#/components/schemas/ChatRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ChatResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/agentic/chat/job: post: tags: - agentic-chat - agentic-chat summary: Chat Job description: 'Start an agentic chat turn as an async job. Returns immediately with a `job_id`. Clients can poll the job status endpoint (or subscribe via SSE) to retrieve the final ChatResponse in `result`.' operationId: chat_job_api_agentic_chat_job_post requestBody: content: application/json: schema: $ref: '#/components/schemas/ChatRequest' required: true responses: '202': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/JobResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/agentic/chat/mention-targets: get: tags: - agentic-chat - agentic-chat summary: Mention Targets description: 'Return @mention autocomplete targets: teams and their active agents. Gated by ENABLE_DIRECT_AGENT_CHAT feature flag.' operationId: mention_targets_api_agentic_chat_mention_targets_get security: - HTTPBearer: [] parameters: - name: organization_id in: query required: true schema: type: string format: uuid title: Organization Id - name: company_profile_id in: query required: true schema: type: string format: uuid title: Company Profile Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/MentionTargetsResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/conversations: post: tags: - agentic-conversations - agentic-conversations summary: Create Conversation description: 'Create a new agent conversation. Validates: - User belongs to organization - Company profile belongs to organization - User has access to company profile Returns the created conversation.' operationId: create_conversation_api_agentic_conversations_post security: - HTTPBearer: [] requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AgentConversationCreate' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentConversationResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' get: tags: - agentic-conversations - agentic-conversations summary: List Conversations description: 'List user''s conversations with pagination. Filters: - By organization (required) - By company profile (required) - Only active conversations (is_active=True) - Only conversations with at least one message - Only user''s conversations Sorted by last_message_at descending (most recent first).' operationId: list_conversations_api_agentic_conversations_get security: - HTTPBearer: [] parameters: - name: organization_id in: query required: true schema: type: string format: uuid description: Organization ID to filter by title: Organization Id description: Organization ID to filter by - name: company_profile_id in: query required: true schema: type: string format: uuid description: Company profile ID to filter by title: Company Profile Id description: Company profile ID to filter by - name: page in: query required: false schema: type: integer minimum: 1 description: Page number (1-indexed) default: 1 title: Page description: Page number (1-indexed) - name: page_size in: query required: false schema: type: integer maximum: 100 minimum: 1 description: Items per page (max 100) default: 20 title: Page Size description: Items per page (max 100) responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentConversationListResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/conversations/{conversation_id}/attachments: post: tags: - agentic-conversations - agentic-conversations summary: Upload Attachments description: Bind uploads to one v2 conversation and return opaque handles only. operationId: upload_attachments_api_agentic_conversations__conversation_id__attachments_post security: - HTTPBearer: [] parameters: - name: conversation_id in: path required: true schema: type: string format: uuid title: Conversation Id requestBody: required: true content: multipart/form-data: schema: $ref: '#/components/schemas/Body_upload_attachments_api_agentic_conversations__conversation_id__attachments_post' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ConversationAttachmentsResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/conversations/inbox-summary: get: tags: - agentic-conversations - agentic-conversations summary: Get Conversation Inbox Summary description: Return lightweight unread/preview metadata for closed-state Markee UI. operationId: get_conversation_inbox_summary_api_agentic_conversations_inbox_summary_get security: - HTTPBearer: [] parameters: - name: organization_id in: query required: true schema: type: string format: uuid description: Organization ID to filter by title: Organization Id description: Organization ID to filter by - name: company_profile_id in: query required: false schema: anyOf: - type: string format: uuid - type: 'null' description: Company profile ID to filter by title: Company Profile Id description: Company profile ID to filter by - name: preview_limit in: query required: false schema: type: integer maximum: 10 minimum: 1 description: Number of preview conversations to return default: 3 title: Preview Limit description: Number of preview conversations to return - name: force_refresh in: query required: false schema: type: boolean description: Bypass the shared response cache default: false title: Force Refresh description: Bypass the shared response cache responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentConversationInboxSummaryResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/conversations/{conversation_id}: get: tags: - agentic-conversations - agentic-conversations summary: Get Conversation description: 'Get a specific conversation with all messages. Validates: - Conversation exists - User owns the conversation - User has access to organization and company profile' operationId: get_conversation_api_agentic_conversations__conversation_id__get security: - HTTPBearer: [] parameters: - name: conversation_id in: path required: true schema: type: string format: uuid title: Conversation Id - name: company_profile_id in: query required: false schema: anyOf: - type: string format: uuid - type: 'null' description: Company profile ID to scope this lookup title: Company Profile Id description: Company profile ID to scope this lookup responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentConversationWithMessages' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' patch: tags: - agentic-conversations - agentic-conversations summary: Update Conversation description: 'Update a conversation''s title and/or metadata. Only the conversation owner can update it.' operationId: update_conversation_api_agentic_conversations__conversation_id__patch security: - HTTPBearer: [] parameters: - name: conversation_id in: path required: true schema: type: string format: uuid title: Conversation Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AgentConversationUpdate' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentConversationResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' delete: tags: - agentic-conversations - agentic-conversations summary: Delete Conversation description: 'Soft delete a conversation (sets is_active=False). Only the conversation owner can delete it. Messages are preserved but conversation won''t appear in lists. Linked proactive tasks are paused so no further runs are enqueued.' operationId: delete_conversation_api_agentic_conversations__conversation_id__delete security: - HTTPBearer: [] parameters: - name: conversation_id in: path required: true schema: type: string format: uuid title: Conversation Id responses: '204': description: Successful Response '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/conversations/{conversation_id}/messages/{message_id}/feedback: patch: tags: - agentic-conversations - agentic-conversations summary: Update Message Feedback description: 'Update feedback for an assistant message. Only the conversation owner can update feedback. Feedback can be ''up'', ''down'', or null (to clear).' operationId: update_message_feedback_api_agentic_conversations__conversation_id__messages__message_id__feedback_patch security: - HTTPBearer: [] parameters: - name: conversation_id in: path required: true schema: type: string format: uuid title: Conversation Id - name: message_id in: path required: true schema: type: string format: uuid title: Message Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/MessageFeedbackRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentMessageResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/conversations/{conversation_id}/messages/{message_id}/tool-result: patch: tags: - agentic-conversations - agentic-conversations summary: Update Message Tool Result description: 'Patch a tool call''s result on an assistant message. Used by the frontend after an async artifact generation job completes so generated document/product page context is persisted in the message and available to the LLM on subsequent turns.' operationId: update_message_tool_result_api_agentic_conversations__conversation_id__messages__message_id__tool_result_patch security: - HTTPBearer: [] parameters: - name: conversation_id in: path required: true schema: type: string format: uuid title: Conversation Id - name: message_id in: path required: true schema: type: string format: uuid title: Message Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ToolResultUpdateRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentMessageResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/conversations/{conversation_id}/mark-read: post: tags: - agentic-conversations - agentic-conversations summary: Mark Conversation Read description: 'Mark conversation as read. Called by frontend when SSE message arrives for active conversation. This is the primary way to clear the unread indicator in real-time.' operationId: mark_conversation_read_api_agentic_conversations__conversation_id__mark_read_post security: - HTTPBearer: [] parameters: - name: conversation_id in: path required: true schema: type: string format: uuid title: Conversation Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/MarkReadResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/user/conversation-stream: get: tags: - agentic-user - agentic-user summary: Stream User Conversation Events description: "Single SSE stream for all conversation updates for a user.\n\nPublishes events when:\n- New messages are\ \ added to any of the user's conversations (e.g., campaign completion)\n\nEvent payload:\n{\n \"type\": \"message_added\"\ ,\n \"conversation_id\": \"\",\n \"message\": {\n \"id\": \"\",\n \"role\": \"assistant\"\ ,\n \"content\": \"...\",\n \"created_at\": \"...\"\n }\n}\n\nSupports reconnection via last_event_id\ \ for delta fetch." operationId: stream_user_conversation_events_api_agentic_user_conversation_stream_get security: - HTTPBearer: [] parameters: - name: last_event_id in: query required: false schema: anyOf: - type: string - type: 'null' description: Last event ID for replay on reconnection title: Last Event Id description: Last event ID for replay on reconnection responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/tasks/capability-check: post: tags: - agentic-tasks - agentic-tasks summary: Capability Check operationId: capability_check_api_agentic_tasks_capability_check_post requestBody: content: application/json: schema: additionalProperties: true type: object title: Request required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentTaskCapabilityResult' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/agentic/tasks: post: tags: - agentic-tasks - agentic-tasks summary: Create Agent Task operationId: create_agent_task_api_agentic_tasks_post security: - HTTPBearer: [] requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AgentTaskCreate' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentTaskResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' get: tags: - agentic-tasks - agentic-tasks summary: List Agent Tasks operationId: list_agent_tasks_api_agentic_tasks_get security: - HTTPBearer: [] parameters: - name: organization_id in: query required: true schema: type: string format: uuid title: Organization Id - name: company_profile_id in: query required: false schema: anyOf: - type: string format: uuid - type: 'null' title: Company Profile Id - name: conversation_id in: query required: false schema: anyOf: - type: string format: uuid - type: 'null' title: Conversation Id - name: include_paused in: query required: false schema: type: boolean default: true title: Include Paused responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentTaskListResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/tasks/{task_id}: patch: tags: - agentic-tasks - agentic-tasks summary: Patch Agent Task operationId: patch_agent_task_api_agentic_tasks__task_id__patch security: - HTTPBearer: [] parameters: - name: task_id in: path required: true schema: type: string format: uuid title: Task Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AgentTaskUpdate' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentTaskResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' delete: tags: - agentic-tasks - agentic-tasks summary: Delete Agent Task operationId: delete_agent_task_api_agentic_tasks__task_id__delete security: - HTTPBearer: [] parameters: - name: task_id in: path required: true schema: type: string format: uuid title: Task Id responses: '204': description: Successful Response '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/tasks/{task_id}/run-now: post: tags: - agentic-tasks - agentic-tasks summary: Run Task Now operationId: run_task_now_api_agentic_tasks__task_id__run_now_post security: - HTTPBearer: [] parameters: - name: task_id in: path required: true schema: type: string format: uuid title: Task Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentTaskRunNowResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/tasks/{task_id}/runs: get: tags: - agentic-tasks - agentic-tasks summary: List Task Runs operationId: list_task_runs_api_agentic_tasks__task_id__runs_get security: - HTTPBearer: [] parameters: - name: task_id in: path required: true schema: type: string format: uuid title: Task Id - name: limit in: query required: false schema: type: integer maximum: 100 minimum: 1 default: 20 title: Limit responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentTaskRunListResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/teams: post: tags: - agentic-teams - agentic-teams summary: Create Team operationId: create_team_api_agentic_teams_post security: - HTTPBearer: [] requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AgentTeamCreate' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentTeamDetailResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' get: tags: - agentic-teams - agentic-teams summary: List Teams operationId: list_teams_api_agentic_teams_get security: - HTTPBearer: [] parameters: - name: organization_id in: query required: true schema: type: string format: uuid title: Organization Id - name: company_profile_id in: query required: false schema: anyOf: - type: string format: uuid - type: 'null' title: Company Profile Id - name: include_deleted in: query required: false schema: type: boolean default: false title: Include Deleted responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentTeamListResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/teams/templates: get: tags: - agentic-teams - agentic-teams summary: List Team Templates description: Return the catalog of available team templates. operationId: list_team_templates_api_agentic_teams_templates_get responses: '200': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /api/agentic/teams/policy: get: tags: - agentic-teams - agentic-teams summary: Get Team Policy operationId: get_team_policy_api_agentic_teams_policy_get security: - HTTPBearer: [] parameters: - name: organization_id in: query required: true schema: type: string format: uuid title: Organization Id - name: company_profile_id in: query required: false schema: anyOf: - type: string format: uuid - type: 'null' title: Company Profile Id - name: template_version in: query required: false schema: type: string default: data_intel_team title: Template Version responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentTeamPolicyResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/teams/active: get: tags: - agentic-teams - agentic-teams summary: Get Active Team operationId: get_active_team_api_agentic_teams_active_get security: - HTTPBearer: [] parameters: - name: organization_id in: query required: true schema: type: string format: uuid title: Organization Id - name: company_profile_id in: query required: true schema: type: string format: uuid title: Company Profile Id responses: '200': description: Successful Response content: application/json: schema: anyOf: - $ref: '#/components/schemas/AgentTeamDetailResponse' - type: 'null' title: Response Get Active Team Api Agentic Teams Active Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/teams/fleet: get: tags: - agentic-teams - agentic-teams summary: Get Team Fleet Snapshot operationId: get_team_fleet_snapshot_api_agentic_teams_fleet_get security: - HTTPBearer: [] parameters: - name: organization_id in: query required: true schema: type: string format: uuid title: Organization Id - name: company_profile_id in: query required: false schema: anyOf: - type: string format: uuid - type: 'null' title: Company Profile Id - name: limit in: query required: false schema: type: integer maximum: 500 minimum: 1 default: 200 title: Limit - name: offset in: query required: false schema: type: integer minimum: 0 default: 0 title: Offset - name: status in: query required: false schema: anyOf: - type: string - type: 'null' description: Filter by team status title: Status description: Filter by team status - name: blocked_only in: query required: false schema: type: boolean description: Include only blocked teams default: false title: Blocked Only description: Include only blocked teams - name: sort_by in: query required: false schema: type: string description: Sort key default: updated_at title: Sort By description: Sort key - name: sort_order in: query required: false schema: type: string description: Sort order (asc|desc) default: desc title: Sort Order description: Sort order (asc|desc) responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentTeamFleetSnapshotResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/teams/workspace-init: get: tags: - agentic-teams - agentic-teams summary: Get Team Workspace Init operationId: get_team_workspace_init_api_agentic_teams_workspace_init_get security: - HTTPBearer: [] parameters: - name: organization_id in: query required: true schema: type: string format: uuid title: Organization Id - name: company_profile_id in: query required: true schema: type: string format: uuid title: Company Profile Id - name: template_version in: query required: false schema: type: string default: data_intel_team title: Template Version - name: include_workspace_data in: query required: false schema: type: boolean default: true title: Include Workspace Data - name: include_report_summary in: query required: false schema: type: boolean default: false title: Include Report Summary - name: include_presentation_daily_report in: query required: false schema: anyOf: - type: boolean - type: 'null' title: Include Presentation Daily Report - name: report_run_id in: query required: false schema: anyOf: - type: string - type: 'null' title: Report Run Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentTeamWorkspaceInitResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/teams/{team_id}/agents/{agent_id}: patch: tags: - agentic-teams - agentic-teams summary: Update Team Agent operationId: update_team_agent_api_agentic_teams__team_id__agents__agent_id__patch security: - HTTPBearer: [] parameters: - name: team_id in: path required: true schema: type: string format: uuid title: Team Id - name: agent_id in: path required: true schema: type: string format: uuid title: Agent Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AgentTeamAgentUpdate' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentTeamAgentResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/teams/{team_id}: patch: tags: - agentic-teams - agentic-teams summary: Update Team Settings operationId: update_team_settings_api_agentic_teams__team_id__patch security: - HTTPBearer: [] parameters: - name: team_id in: path required: true schema: type: string format: uuid title: Team Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AgentTeamUpdate' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentTeamResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' get: tags: - agentic-teams - agentic-teams summary: Get Team operationId: get_team_api_agentic_teams__team_id__get security: - HTTPBearer: [] parameters: - name: team_id in: path required: true schema: type: string format: uuid title: Team Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentTeamDetailResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/teams/{team_id}/control-snapshot: get: tags: - agentic-teams - agentic-teams summary: Get Team Control Snapshot description: Read current card preflight state without synchronizing team policy. operationId: get_team_control_snapshot_api_agentic_teams__team_id__control_snapshot_get security: - HTTPBearer: [] parameters: - name: team_id in: path required: true schema: type: string format: uuid title: Team Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentTeamControlSnapshotResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/teams/{team_id}/interaction-policy: get: tags: - agentic-teams - agentic-teams summary: Get Team Interaction Policy operationId: get_team_interaction_policy_api_agentic_teams__team_id__interaction_policy_get security: - HTTPBearer: [] parameters: - name: team_id in: path required: true schema: type: string format: uuid title: Team Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentTeamInteractionPolicyResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' patch: tags: - agentic-teams - agentic-teams summary: Update Team Interaction Policy operationId: update_team_interaction_policy_api_agentic_teams__team_id__interaction_policy_patch security: - HTTPBearer: [] parameters: - name: team_id in: path required: true schema: type: string format: uuid title: Team Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AgentTeamInteractionPolicyUpdateRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentTeamInteractionPolicyResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/teams/{team_id}/consult: post: tags: - agentic-teams - agentic-teams summary: Consult Team Agent operationId: consult_team_agent_api_agentic_teams__team_id__consult_post security: - HTTPBearer: [] parameters: - name: team_id in: path required: true schema: type: string format: uuid title: Team Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AgentTeamConsultRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentTeamConsultResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/teams/{team_id}/run-guidance: put: tags: - agentic-teams - agentic-teams summary: Save Team Run Guidance description: 'Save (or clear) the focus the team''s next run should use. Saving never starts a run: the next run to start — scheduled or manual — consumes the saved focus and clears it.' operationId: save_team_run_guidance_api_agentic_teams__team_id__run_guidance_put security: - HTTPBearer: [] parameters: - name: team_id in: path required: true schema: type: string format: uuid title: Team Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AgentTeamRunGuidanceSaveRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentTeamPendingRunGuidanceResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/teams/{team_id}/run-now: post: tags: - agentic-teams - agentic-teams summary: Run Team Now operationId: run_team_now_api_agentic_teams__team_id__run_now_post security: - HTTPBearer: [] parameters: - name: team_id in: path required: true schema: type: string format: uuid title: Team Id requestBody: content: application/json: schema: anyOf: - $ref: '#/components/schemas/AgentTeamRunNowRequest' - type: 'null' title: Request responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentTeamRunNowResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/teams/{team_id}/pause: post: tags: - agentic-teams - agentic-teams summary: Pause Team operationId: pause_team_api_agentic_teams__team_id__pause_post security: - HTTPBearer: [] parameters: - name: team_id in: path required: true schema: type: string format: uuid title: Team Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentTeamResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/teams/{team_id}/resume: post: tags: - agentic-teams - agentic-teams summary: Resume Team operationId: resume_team_api_agentic_teams__team_id__resume_post security: - HTTPBearer: [] parameters: - name: team_id in: path required: true schema: type: string format: uuid title: Team Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentTeamResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/teams/{team_id}/start-fresh: post: tags: - agentic-teams - agentic-teams summary: Start Team Fresh operationId: start_team_fresh_api_agentic_teams__team_id__start_fresh_post security: - HTTPBearer: [] parameters: - name: team_id in: path required: true schema: type: string format: uuid title: Team Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AgentTeamStartFreshRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentTeamStartFreshResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/teams/{team_id}/runs: get: tags: - agentic-teams - agentic-teams summary: List Team Runs operationId: list_team_runs_api_agentic_teams__team_id__runs_get security: - HTTPBearer: [] parameters: - name: team_id in: path required: true schema: type: string format: uuid title: Team Id - name: limit in: query required: false schema: type: integer maximum: 200 minimum: 1 default: 20 title: Limit responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentTeamRunListResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/teams/{team_id}/runs/{run_id}/graph: get: tags: - agentic-teams - agentic-teams summary: Get Team Run Graph operationId: get_team_run_graph_api_agentic_teams__team_id__runs__run_id__graph_get security: - HTTPBearer: [] parameters: - name: team_id in: path required: true schema: type: string format: uuid title: Team Id - name: run_id in: path required: true schema: type: string format: uuid title: Run Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentTeamRunGraphResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/teams/{team_id}/runs/{run_id}/stop: post: tags: - agentic-teams - agentic-teams summary: Stop Team Run operationId: stop_team_run_api_agentic_teams__team_id__runs__run_id__stop_post security: - HTTPBearer: [] parameters: - name: team_id in: path required: true schema: type: string format: uuid title: Team Id - name: run_id in: path required: true schema: type: string format: uuid title: Run Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AgentTeamRunStopRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentTeamRunResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/teams/{team_id}/runs/{run_id}/graph/intervene: post: tags: - agentic-teams - agentic-teams summary: Intervene Team Run Graph Node operationId: intervene_team_run_graph_node_api_agentic_teams__team_id__runs__run_id__graph_intervene_post security: - HTTPBearer: [] parameters: - name: team_id in: path required: true schema: type: string format: uuid title: Team Id - name: run_id in: path required: true schema: type: string format: uuid title: Run Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AgentTeamRunNodeInterventionRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentTeamRunNodeInterventionResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/teams/{team_id}/events: get: tags: - agentic-teams - agentic-teams summary: List Team Events operationId: list_team_events_api_agentic_teams__team_id__events_get security: - HTTPBearer: [] parameters: - name: team_id in: path required: true schema: type: string format: uuid title: Team Id - name: run_id in: query required: false schema: anyOf: - type: string format: uuid - type: 'null' title: Run Id - name: limit in: query required: false schema: type: integer maximum: 500 minimum: 1 default: 200 title: Limit - name: cursor_created_at in: query required: false schema: anyOf: - type: string format: date-time - type: 'null' title: Cursor Created At - name: cursor_id in: query required: false schema: anyOf: - type: string format: uuid - type: 'null' title: Cursor Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentTeamEventListResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/teams/{team_id}/messages: get: tags: - agentic-teams - agentic-teams summary: List Team Messages operationId: list_team_messages_api_agentic_teams__team_id__messages_get security: - HTTPBearer: [] parameters: - name: team_id in: path required: true schema: type: string format: uuid title: Team Id - name: run_id in: query required: false schema: anyOf: - type: string format: uuid - type: 'null' title: Run Id - name: limit in: query required: false schema: type: integer maximum: 500 minimum: 1 default: 200 title: Limit - name: cursor_created_at in: query required: false schema: anyOf: - type: string format: date-time - type: 'null' title: Cursor Created At - name: cursor_id in: query required: false schema: anyOf: - type: string format: uuid - type: 'null' title: Cursor Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentTeamMessageListResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/teams/{team_id}/mission-feed: get: tags: - agentic-teams - agentic-teams summary: List Team Mission Feed operationId: list_team_mission_feed_api_agentic_teams__team_id__mission_feed_get security: - HTTPBearer: [] parameters: - name: team_id in: path required: true schema: type: string format: uuid title: Team Id - name: run_id in: query required: false schema: anyOf: - type: string format: uuid - type: 'null' title: Run Id - name: limit in: query required: false schema: type: integer maximum: 500 minimum: 1 default: 200 title: Limit - name: cursor_created_at in: query required: false schema: anyOf: - type: string format: date-time - type: 'null' title: Cursor Created At - name: cursor_id in: query required: false schema: anyOf: - type: string - type: 'null' title: Cursor Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentTeamMissionFeedListResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/teams/{team_id}/workspace-bootstrap: get: tags: - agentic-teams - agentic-teams summary: Get Team Workspace Bootstrap operationId: get_team_workspace_bootstrap_api_agentic_teams__team_id__workspace_bootstrap_get security: - HTTPBearer: [] parameters: - name: team_id in: path required: true schema: type: string format: uuid title: Team Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentTeamWorkspaceBootstrapResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/teams/{team_id}/reports/workspace: get: tags: - agentic-teams - agentic-teams summary: Get Team Report Workspace operationId: get_team_report_workspace_api_agentic_teams__team_id__reports_workspace_get security: - HTTPBearer: [] parameters: - name: team_id in: path required: true schema: type: string format: uuid title: Team Id - name: section_key in: query required: true schema: type: string description: Report section key title: Section Key description: Report section key - name: report_id in: query required: false schema: anyOf: - type: string format: uuid - type: 'null' title: Report Id - name: run_id in: query required: false schema: anyOf: - type: string - type: 'null' description: Scope to a single agent-team run. title: Run Id description: Scope to a single agent-team run. - name: states in: query required: false schema: anyOf: - type: string - type: 'null' description: Optional comma-separated approval states for lifecycle-specific report views. title: States description: Optional comma-separated approval states for lifecycle-specific report views. - name: limit in: query required: false schema: type: integer maximum: 500 minimum: 1 default: 3 title: Limit - name: offset in: query required: false schema: type: integer minimum: 0 default: 0 title: Offset - name: include_linked in: query required: false schema: type: boolean description: Include linked recommendations and actions for detail views. default: false title: Include Linked description: Include linked recommendations and actions for detail views. responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentTeamReportWorkspaceResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/teams/{team_id}/stream: get: tags: - agentic-teams - agentic-teams summary: Stream Team Activity operationId: stream_team_activity_api_agentic_teams__team_id__stream_get security: - HTTPBearer: [] parameters: - name: team_id in: path required: true schema: type: string format: uuid title: Team Id - name: run_id in: query required: false schema: anyOf: - type: string format: uuid - type: 'null' title: Run Id - name: cursor in: query required: false schema: anyOf: - type: string - type: 'null' description: ISO cursor timestamp to resume stream title: Cursor description: ISO cursor timestamp to resume stream - name: poll_seconds in: query required: false schema: type: number maximum: 5.0 minimum: 0.5 default: 1.5 title: Poll Seconds responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/teams/{team_id}/recommendations: get: tags: - agentic-teams - agentic-teams summary: List Team Recommendations operationId: list_team_recommendations_api_agentic_teams__team_id__recommendations_get security: - HTTPBearer: [] parameters: - name: team_id in: path required: true schema: type: string format: uuid title: Team Id - name: states in: query required: false schema: anyOf: - type: string - type: 'null' description: Comma-separated lifecycle states title: States description: Comma-separated lifecycle states - name: limit in: query required: false schema: type: integer maximum: 500 minimum: 1 default: 200 title: Limit responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentTeamRecommendationListResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/teams/{team_id}/mmm/latest: get: tags: - agentic-teams - agentic-teams summary: Get Latest Mmm Measurement operationId: get_latest_mmm_measurement_api_agentic_teams__team_id__mmm_latest_get security: - HTTPBearer: [] parameters: - name: team_id in: path required: true schema: type: string format: uuid title: Team Id responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Get Latest Mmm Measurement Api Agentic Teams Team Id Mmm Latest Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/teams/{team_id}/mmm/reports: get: tags: - agentic-teams - agentic-teams summary: List Mmm Measurement Reports operationId: list_mmm_measurement_reports_api_agentic_teams__team_id__mmm_reports_get security: - HTTPBearer: [] parameters: - name: team_id in: path required: true schema: type: string format: uuid title: Team Id - name: limit in: query required: false schema: type: integer maximum: 100 minimum: 1 default: 3 title: Limit - name: offset in: query required: false schema: type: integer minimum: 0 default: 0 title: Offset - name: run_id in: query required: false schema: anyOf: - type: string - type: 'null' description: Scope to a single agent-team run. title: Run Id description: Scope to a single agent-team run. responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response List Mmm Measurement Reports Api Agentic Teams Team Id Mmm Reports Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/teams/{team_id}/search-readiness/reports: get: tags: - agentic-teams - agentic-teams summary: List Search Readiness Reports operationId: list_search_readiness_reports_api_agentic_teams__team_id__search_readiness_reports_get security: - HTTPBearer: [] parameters: - name: team_id in: path required: true schema: type: string format: uuid title: Team Id - name: limit in: query required: false schema: type: integer maximum: 100 minimum: 1 default: 3 title: Limit - name: offset in: query required: false schema: type: integer minimum: 0 default: 0 title: Offset - name: run_id in: query required: false schema: anyOf: - type: string - type: 'null' description: Scope to a single agent-team run. title: Run Id description: Scope to a single agent-team run. responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response List Search Readiness Reports Api Agentic Teams Team Id Search Readiness Reports Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/teams/{team_id}/search-readiness/summary: get: tags: - agentic-teams - agentic-teams summary: Get Search Readiness Summary operationId: get_search_readiness_summary_api_agentic_teams__team_id__search_readiness_summary_get security: - HTTPBearer: [] parameters: - name: team_id in: path required: true schema: type: string format: uuid title: Team Id - name: window in: query required: false schema: type: integer maximum: 26 minimum: 2 default: 8 title: Window - name: run_id in: query required: false schema: anyOf: - type: string - type: 'null' description: Scope to a single agent-team run. title: Run Id description: Scope to a single agent-team run. - name: compact in: query required: false schema: type: boolean description: Return only the aggregate report fields needed by dashboard cards. default: false title: Compact description: Return only the aggregate report fields needed by dashboard cards. responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Get Search Readiness Summary Api Agentic Teams Team Id Search Readiness Summary Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/teams/{team_id}/search-readiness/actions/{action_key}: put: tags: - agentic-teams - agentic-teams summary: Update Search Readiness Action Status operationId: update_search_readiness_action_status_api_agentic_teams__team_id__search_readiness_actions__action_key__put security: - HTTPBearer: [] parameters: - name: team_id in: path required: true schema: type: string format: uuid title: Team Id - name: action_key in: path required: true schema: type: string title: Action Key requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AeoActionStatusUpdateRequest' responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Update Search Readiness Action Status Api Agentic Teams Team Id Search Readiness Actions Action Key Put '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/teams/{team_id}/actions: get: tags: - agentic-teams - agentic-teams summary: List Team Actions operationId: list_team_actions_api_agentic_teams__team_id__actions_get security: - HTTPBearer: [] parameters: - name: team_id in: path required: true schema: type: string format: uuid title: Team Id - name: statuses in: query required: false schema: anyOf: - type: string - type: 'null' description: Comma-separated action statuses title: Statuses description: Comma-separated action statuses - name: owner_agent_keys in: query required: false schema: anyOf: - type: string - type: 'null' description: Comma-separated owner agent keys title: Owner Agent Keys description: Comma-separated owner agent keys - name: limit in: query required: false schema: type: integer maximum: 500 minimum: 1 default: 200 title: Limit - name: cursor_updated_at in: query required: false schema: anyOf: - type: string format: date-time - type: 'null' title: Cursor Updated At - name: cursor_id in: query required: false schema: anyOf: - type: string format: uuid - type: 'null' title: Cursor Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentTeamActionListResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/teams/{team_id}/actions/{action_id}/status: patch: tags: - agentic-teams - agentic-teams summary: Update Team Action Status operationId: update_team_action_status_api_agentic_teams__team_id__actions__action_id__status_patch security: - HTTPBearer: [] parameters: - name: team_id in: path required: true schema: type: string format: uuid title: Team Id - name: action_id in: path required: true schema: type: string format: uuid title: Action Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AgentTeamActionStatusUpdateRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentTeamActionResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/teams/{team_id}/actions/{action_id}/retry: post: tags: - agentic-teams - agentic-teams summary: Retry Team Action Execution operationId: retry_team_action_execution_api_agentic_teams__team_id__actions__action_id__retry_post security: - HTTPBearer: [] parameters: - name: team_id in: path required: true schema: type: string format: uuid title: Team Id - name: action_id in: path required: true schema: type: string format: uuid title: Action Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AgentTeamActionRetryRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentTeamActionResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/teams/{team_id}/goal-contract: get: tags: - agentic-teams - agentic-teams summary: Get Team Goal Contract operationId: get_team_goal_contract_api_agentic_teams__team_id__goal_contract_get security: - HTTPBearer: [] parameters: - name: team_id in: path required: true schema: type: string format: uuid title: Team Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentTeamGoalContractResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' patch: tags: - agentic-teams - agentic-teams summary: Update Team Goal Contract operationId: update_team_goal_contract_api_agentic_teams__team_id__goal_contract_patch security: - HTTPBearer: [] parameters: - name: team_id in: path required: true schema: type: string format: uuid title: Team Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AgentTeamGoalContractRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentTeamGoalContractResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/teams/{team_id}/daily-summaries: get: tags: - agentic-teams - agentic-teams summary: List Daily Summaries operationId: list_daily_summaries_api_agentic_teams__team_id__daily_summaries_get security: - HTTPBearer: [] parameters: - name: team_id in: path required: true schema: type: string format: uuid title: Team Id - name: limit in: query required: false schema: type: integer maximum: 90 minimum: 1 default: 30 title: Limit - name: cursor_created_at in: query required: false schema: anyOf: - type: string format: date-time - type: 'null' title: Cursor Created At - name: cursor_id in: query required: false schema: anyOf: - type: string format: uuid - type: 'null' title: Cursor Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentTeamDailySummaryListResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/teams/{team_id}/digest-emails: get: tags: - agentic-teams - agentic-teams summary: List Team Digest Emails description: 'List a team''s delivered daily digest emails. The digest belongs to the company profile, not to whichever teammate the email happened to be addressed to, so visibility is scoped to the team — ``_get_team_or_404`` has already validated org + profile access — and never to ``recipient_user_id``.' operationId: list_team_digest_emails_api_agentic_teams__team_id__digest_emails_get security: - HTTPBearer: [] parameters: - name: team_id in: path required: true schema: type: string format: uuid title: Team Id - name: limit in: query required: false schema: type: integer maximum: 90 minimum: 1 default: 30 title: Limit - name: cursor_sent_at in: query required: false schema: anyOf: - type: string format: date-time - type: 'null' title: Cursor Sent At - name: cursor_id in: query required: false schema: anyOf: - type: string format: uuid - type: 'null' title: Cursor Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AITeamDigestEmailListResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/teams/{team_id}/digest-emails/{send_id}: get: tags: - agentic-teams - agentic-teams summary: Get Team Digest Email description: 'Return a single delivered digest email''s browser-renderable HTML. Readable by anyone with access to the team''s company profile (see ``list_team_digest_emails``); the team filter still blocks reads across profiles. Signed image URLs nearing expiry are refreshed (and re-persisted) before the HTML is returned, so old digests keep rendering their creative thumbnails.' operationId: get_team_digest_email_api_agentic_teams__team_id__digest_emails__send_id__get security: - HTTPBearer: [] parameters: - name: team_id in: path required: true schema: type: string format: uuid title: Team Id - name: send_id in: path required: true schema: type: string format: uuid title: Send Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AITeamDigestEmailHtmlResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/teams/{team_id}/commands: post: tags: - agentic-teams - agentic-teams summary: Create Team Command operationId: create_team_command_api_agentic_teams__team_id__commands_post security: - HTTPBearer: [] parameters: - name: team_id in: path required: true schema: type: string format: uuid title: Team Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AgentTeamCommandCreate' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentTeamCommandResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' get: tags: - agentic-teams - agentic-teams summary: List Team Commands operationId: list_team_commands_api_agentic_teams__team_id__commands_get security: - HTTPBearer: [] parameters: - name: team_id in: path required: true schema: type: string format: uuid title: Team Id - name: limit in: query required: false schema: type: integer maximum: 200 minimum: 1 default: 50 title: Limit responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentTeamCommandListResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/teams/{team_id}/approvals: get: tags: - agentic-teams - agentic-teams summary: List Team Approvals operationId: list_team_approvals_api_agentic_teams__team_id__approvals_get security: - HTTPBearer: [] parameters: - name: team_id in: path required: true schema: type: string format: uuid title: Team Id - name: states in: query required: false schema: anyOf: - type: string - type: 'null' description: Comma-separated approval states title: States description: Comma-separated approval states - name: limit in: query required: false schema: type: integer maximum: 500 minimum: 1 default: 100 title: Limit responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentTeamApprovalListResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/teams/{team_id}/approvals/bulk-decision: post: tags: - agentic-teams - agentic-teams summary: Decide Team Approvals Bulk operationId: decide_team_approvals_bulk_api_agentic_teams__team_id__approvals_bulk_decision_post security: - HTTPBearer: [] parameters: - name: team_id in: path required: true schema: type: string format: uuid title: Team Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AgentTeamApprovalBulkDecisionRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentTeamApprovalBulkDecisionResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/teams/{team_id}/approvals/{approval_id}/items/{item_id}/generate: post: tags: - agentic-teams - agentic-teams summary: Generate Team Approval Bundle Item description: 'Draft one item of a selectable bundle, leaving the rest of it open. The bundle approval can be decided only once, so drafting a single story through the decision route would take the rest of the week''s plan with it.' operationId: generate_team_approval_bundle_item_api_agentic_teams__team_id__approvals__approval_id__items__item_id__generate_post security: - HTTPBearer: [] parameters: - name: team_id in: path required: true schema: type: string format: uuid title: Team Id - name: approval_id in: path required: true schema: type: string format: uuid title: Approval Id - name: item_id in: path required: true schema: type: string title: Item Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentTeamBundleItemGenerationResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/teams/{team_id}/approvals/{approval_id}/items/{item_id}/skip: post: tags: - agentic-teams - agentic-teams summary: Skip Team Approval Bundle Item description: Decline one item of a selectable bundle, leaving the rest of it open. operationId: skip_team_approval_bundle_item_api_agentic_teams__team_id__approvals__approval_id__items__item_id__skip_post security: - HTTPBearer: [] parameters: - name: team_id in: path required: true schema: type: string format: uuid title: Team Id - name: approval_id in: path required: true schema: type: string format: uuid title: Approval Id - name: item_id in: path required: true schema: type: string title: Item Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentTeamBundleItemSkipResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/teams/{team_id}/approvals/{approval_id}/decision: post: tags: - agentic-teams - agentic-teams summary: Decide Team Approval operationId: decide_team_approval_api_agentic_teams__team_id__approvals__approval_id__decision_post security: - HTTPBearer: [] parameters: - name: team_id in: path required: true schema: type: string format: uuid title: Team Id - name: approval_id in: path required: true schema: type: string format: uuid title: Approval Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AgentTeamApprovalDecisionRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentTeamApprovalResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/teams/{team_id}/agent-reliability: get: tags: - agentic-teams - agentic-teams summary: List Team Agent Reliability operationId: list_team_agent_reliability_api_agentic_teams__team_id__agent_reliability_get security: - HTTPBearer: [] parameters: - name: team_id in: path required: true schema: type: string format: uuid title: Team Id responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/AgentTeamAgentReliabilityResponse' title: Response List Team Agent Reliability Api Agentic Teams Team Id Agent Reliability Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/teams/{team_id}/learning/summary: get: tags: - agentic-teams - agentic-teams summary: Get Team Learning Summary operationId: get_team_learning_summary_api_agentic_teams__team_id__learning_summary_get security: - HTTPBearer: [] parameters: - name: team_id in: path required: true schema: type: string format: uuid title: Team Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentTeamLearningSummaryResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/teams/{team_id}/learning/notes/{category}: patch: tags: - agentic-teams - agentic-teams summary: Update Team Learning Note operationId: update_team_learning_note_api_agentic_teams__team_id__learning_notes__category__patch security: - HTTPBearer: [] parameters: - name: team_id in: path required: true schema: type: string format: uuid title: Team Id - name: category in: path required: true schema: type: string title: Category requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AgentTeamLearningNoteUpdateRequest' responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Update Team Learning Note Api Agentic Teams Team Id Learning Notes Category Patch '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/agentic/teams/{team_id}/recommendations/{recommendation_id}/outcome: post: tags: - agentic-teams - agentic-teams summary: Record Team Recommendation Outcome operationId: record_team_recommendation_outcome_api_agentic_teams__team_id__recommendations__recommendation_id__outcome_post security: - HTTPBearer: [] parameters: - name: team_id in: path required: true schema: type: string format: uuid title: Team Id - name: recommendation_id in: path required: true schema: type: string title: Recommendation Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AgentTeamRecommendationOutcomeRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AgentTeamRecommendationOutcomeResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/chat/agentic/async: post: tags: - agent-jobs - agent-jobs summary: Start Async Job description: 'Start an async job (returns immediately with job_id). Job runs in background. Client can monitor via SSE stream or poll status. Per Issue #271 specification.' operationId: start_async_job_api_chat_agentic_async_post requestBody: content: application/json: schema: $ref: '#/components/schemas/AsyncJobRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/JobResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/chat/agentic/jobs/{job_id}/stream: get: tags: - agent-jobs - agent-jobs summary: Stream Job Progress description: "SSE endpoint for real-time job progress.\n\nStream format:\n event: started\n data: {\"job_id\"\ : \"...\", \"job_type\": \"...\", \"timestamp\": \"...\"}\n\n event: progress\n data: {\"step\": \"...\", \"\ message\": \"...\", \"progress\": 0.5}\n\n event: completed\n data: {\"job_id\": \"...\", \"result\": {...},\ \ \"duration_seconds\": 45.2}\n\n event: failed\n data: {\"job_id\": \"...\", \"error\": \"...\", \"error_type\"\ : \"...\"}\n\nPer Issue #271 specification." operationId: stream_job_progress_api_chat_agentic_jobs__job_id__stream_get security: - HTTPBearer: [] parameters: - name: job_id in: path required: true schema: type: string title: Job Id - name: Last-Event-ID in: header required: false schema: anyOf: - type: string - type: 'null' title: Last-Event-Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/chat/agentic/jobs/{job_id}: get: tags: - agent-jobs - agent-jobs summary: Get Job Status description: 'Poll job status (for clients that don''t want to use SSE). Per Issue #271 specification.' operationId: get_job_status_api_chat_agentic_jobs__job_id__get security: - HTTPBearer: [] parameters: - name: job_id in: path required: true schema: type: string title: Job Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/JobStatusResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/chat/agentic/jobs/{job_id}/cancel: post: tags: - agent-jobs - agent-jobs summary: Cancel Job description: 'Cancel a running job. Returns 204 No Content on success.' operationId: cancel_job_api_chat_agentic_jobs__job_id__cancel_post security: - HTTPBearer: [] parameters: - name: job_id in: path required: true schema: type: string title: Job Id responses: '204': description: Successful Response '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/chat/agentic/jobs: get: tags: - agent-jobs - agent-jobs summary: List Jobs description: 'List user''s jobs. Filters: - status: Optional filter by job status (running, completed, failed, cancelled) - limit: Maximum number of jobs (default 100, max 1000) Returns jobs sorted by created_at descending (most recent first).' operationId: list_jobs_api_chat_agentic_jobs_get security: - HTTPBearer: [] parameters: - 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: 1000 description: Maximum number of jobs to return default: 100 title: Limit description: Maximum number of jobs to return responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/JobListResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/feedback/bug-report: post: tags: - feedback summary: Submit a bug report with diagnostics description: Submit a bug report with sanitized browser diagnostics and an optional screenshot artifact. operationId: create_bug_report_api_feedback_bug_report_post security: - HTTPBearer: [] parameters: - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Company-Profile-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Company-Profile-Id - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id requestBody: required: true content: multipart/form-data: schema: $ref: '#/components/schemas/Body_create_bug_report_api_feedback_bug_report_post' responses: '201': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/FeedbackBugReportResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/feedback: post: tags: - feedback summary: Submit user feedback description: Submit feedback including bug reports, feature requests, or general comments. operationId: create_feedback_api_feedback_post security: - HTTPBearer: [] parameters: - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/FeedbackCreate' responses: '201': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/FeedbackResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' get: tags: - feedback summary: List user's feedback description: Get a paginated list of the current user's feedback submissions. operationId: list_my_feedback_api_feedback_get security: - HTTPBearer: [] parameters: - name: page in: query required: false schema: type: integer minimum: 1 description: Page number default: 1 title: Page description: Page number - name: page_size in: query required: false schema: type: integer maximum: 50 minimum: 1 description: Items per page default: 10 title: Page Size description: Items per page - name: feedback_type in: query required: false schema: anyOf: - $ref: '#/components/schemas/FeedbackType' - type: 'null' description: Filter by feedback type title: Feedback Type description: Filter by feedback type - name: company_profile_id in: query required: false schema: anyOf: - type: string format: uuid - type: 'null' description: Filter by company profile title: Company Profile Id description: Filter by company profile - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/FeedbackListResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/feedback/screenshot: post: tags: - feedback summary: Upload a screenshot for feedback description: Upload a screenshot image to attach to feedback submission. operationId: upload_screenshot_api_feedback_screenshot_post requestBody: content: multipart/form-data: schema: $ref: '#/components/schemas/Body_upload_screenshot_api_feedback_screenshot_post' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ScreenshotUploadResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/feedback/{feedback_id}: get: tags: - feedback summary: Get feedback details description: Get details of a specific feedback submission. operationId: get_feedback_api_feedback__feedback_id__get security: - HTTPBearer: [] parameters: - name: feedback_id in: path required: true schema: type: string format: uuid title: Feedback Id - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/FeedbackResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/contact-submissions: post: tags: - contact-submissions summary: Create Contact Submission operationId: create_contact_submission_api_contact_submissions_post requestBody: content: application/json: schema: $ref: '#/components/schemas/ContactSubmissionCreate' required: true responses: '201': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/contact-submissions/{submission_id}/confirm-scheduling: post: tags: - contact-submissions summary: Confirm Demo Scheduling description: Send the appropriate demo email after the user interacts with the calendar. operationId: confirm_demo_scheduling_api_contact_submissions__submission_id__confirm_scheduling_post parameters: - name: submission_id in: path required: true schema: type: string title: Submission Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/DemoSchedulingConfirmation' responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/feeling-lucky/pick: post: tags: - feeling-lucky summary: Lucky Pick description: 'Pick the best candidate from a list using AI. This endpoint is used by the Feeling Lucky flow in the campaign builder and by the chatbot wizard to auto-select the best audience or campaign idea.' operationId: lucky_pick_api_feeling_lucky_pick_post requestBody: content: application/json: schema: $ref: '#/components/schemas/LuckyPickRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/LuckyPickResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/seo/analyze: post: tags: - SEO Analysis summary: Create Seo Analysis description: "Create a new SEO analysis for a company profile.\n\nThis endpoint:\n1. Validates user has access to the\ \ company profile\n2. Validates workflow prerequisite (current_step >= 2)\n3. Creates the SEO analysis record with\ \ status='pending'\n4. Launches background task via TaskSupervisor\n5. Returns the analysis record immediately\n\n\ Frontend should then:\n- Poll GET /api/seo/analysis/{analysis_id} for status updates\n\nThe analysis process includes:\n\ - Collecting SEO data from crawled pages\n- Fetching Core Web Vitals from PageSpeed API\n- Calculating scores across\ \ multiple categories\n- Generating actionable recommendations\n\nPrerequisites:\n- Workflow must be at Step 2 or\ \ later (current_step >= 2)\n- This ensures web crawl inventory data is available for analysis\n\nArgs:\n request_data:\ \ SEOAnalysisCreate with company_profile_id and primary_url\n current_user: Authenticated user\n db: Database\ \ session\n\nReturns:\n SEOAnalysisResponse with analysis record (status='pending')\n\nRaises:\n HTTPException:\ \ 404 if company profile not found, 403 if access denied,\n 400 if workflow prerequisite not met" operationId: create_seo_analysis_api_seo_analyze_post requestBody: content: application/json: schema: $ref: '#/components/schemas/SEOAnalysisCreate' required: true responses: '201': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/SEOAnalysisResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/seo/analysis/{analysis_id}: get: tags: - SEO Analysis summary: Get Seo Analysis description: "Get detailed SEO analysis by ID.\n\nReturns complete analysis data including all scores, metrics,\nand\ \ metadata. Frontend can poll this endpoint for status updates.\n\nArgs:\n analysis_id: UUID of the analysis\n\ \ current_user: Authenticated user\n db: Database session\n\nReturns:\n SEOAnalysisResponse with full analysis\ \ details\n\nRaises:\n HTTPException: 404 if not found, 403 if access denied" operationId: get_seo_analysis_api_seo_analysis__analysis_id__get security: - HTTPBearer: [] parameters: - name: analysis_id in: path required: true schema: type: string format: uuid title: Analysis Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/SEOAnalysisResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/seo/analysis/{analysis_id}/score-breakdown/{category}: get: tags: - SEO Analysis summary: Get Score Breakdown description: "Get detailed score breakdown for a specific SEO category.\n\nThis endpoint provides a granular breakdown\ \ of how a specific score was calculated,\nincluding individual checks, points awarded, and explanations for each\ \ component.\n\nCategories:\n- technical: Technical SEO (HTTPS, robots.txt, sitemap, canonical, viewport, etc.)\n\ - on_page: On-page SEO (title, description, headings, word count)\n- structured_data: Schema markup and structured\ \ data\n- images: Image optimization (alt text, lazy loading, responsive images)\n- social_meta: Social media meta\ \ tags (Open Graph, Twitter Cards)\n\nArgs:\n analysis_id: UUID of the analysis\n category: Score category (technical|on_page|structured_data|images|social_meta)\n\ \ current_user: Authenticated user\n db: Database session\n\nReturns:\n ScoreBreakdownResponse with detailed\ \ scoring breakdown\n\nRaises:\n HTTPException: 404 if not found, 400 if invalid category, 403 if access denied" operationId: get_score_breakdown_api_seo_analysis__analysis_id__score_breakdown__category__get security: - HTTPBearer: [] parameters: - name: analysis_id in: path required: true schema: type: string format: uuid title: Analysis Id - name: category in: path required: true schema: type: string title: Category responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ScoreBreakdownResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/seo/company/{company_profile_id}/analyses: get: tags: - SEO Analysis summary: List Seo Analyses description: "List all SEO analyses for a company profile with pagination.\n\nReturns analyses in reverse chronological\ \ order (newest first).\nEach item contains summary data suitable for display in lists/tables.\n\nArgs:\n company_profile_id:\ \ UUID of the company profile\n skip: Number of records to skip (for pagination)\n limit: Number of records\ \ to return (default 50, max 100)\n current_user: Authenticated user\n db: Database session\n\nReturns:\n \ \ List[SEOAnalysisListResponse] with paginated analyses\n\nRaises:\n HTTPException: 404 if company profile not\ \ found, 403 if access denied" operationId: list_seo_analyses_api_seo_company__company_profile_id__analyses_get security: - HTTPBearer: [] parameters: - name: company_profile_id in: path required: true schema: type: string format: uuid title: Company Profile Id - name: skip in: query required: false schema: type: integer minimum: 0 description: Number of records to skip default: 0 title: Skip description: Number of records to skip - name: limit in: query required: false schema: type: integer maximum: 100 minimum: 1 description: Number of records to return (max 100) default: 50 title: Limit description: Number of records to return (max 100) responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/SEOAnalysisListResponse' title: Response List Seo Analyses Api Seo Company Company Profile Id Analyses Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/seo/analysis/{analysis_id}/recommendations: get: tags: - SEO Analysis summary: Get Seo Recommendations description: "Get SEO recommendations for an analysis with optional filtering.\n\nRecommendations are actionable suggestions\ \ for improving SEO scores.\nEach includes impact assessment, effort estimation, and fix guidance.\n\nFiltering:\n\ - priority: critical|important|nice_to_have\n- category: technical|on_page|performance|structured_data|images|social\n\ - include_dismissed: Show dismissed recommendations (default: false)\n\nArgs:\n analysis_id: UUID of the analysis\n\ \ priority: Optional priority filter\n category: Optional category filter\n include_dismissed: Include dismissed\ \ recommendations\n current_user: Authenticated user\n db: Database session\n\nReturns:\n List[SEORecommendationResponse]\ \ with filtered recommendations\n\nRaises:\n HTTPException: 404 if analysis not found, 403 if access denied" operationId: get_seo_recommendations_api_seo_analysis__analysis_id__recommendations_get security: - HTTPBearer: [] parameters: - name: analysis_id in: path required: true schema: type: string format: uuid title: Analysis Id - name: priority in: query required: false schema: anyOf: - type: string - type: 'null' description: Filter by priority (critical, important, nice_to_have) title: Priority description: Filter by priority (critical, important, nice_to_have) - name: category in: query required: false schema: anyOf: - type: string - type: 'null' description: Filter by category (technical, on_page, performance, structured_data, images, social) title: Category description: Filter by category (technical, on_page, performance, structured_data, images, social) - name: include_dismissed in: query required: false schema: type: boolean description: Include dismissed recommendations default: false title: Include Dismissed description: Include dismissed recommendations responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/SEORecommendationResponse' title: Response Get Seo Recommendations Api Seo Analysis Analysis Id Recommendations Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/seo/recommendation/{rec_id}/dismiss: put: tags: - SEO Analysis summary: Dismiss Recommendation description: "Dismiss an SEO recommendation.\n\nMarks a recommendation as dismissed, optionally adding user notes.\n\ Dismissed recommendations are excluded from default queries unless\nexplicitly requested via include_dismissed=true.\n\ \nArgs:\n rec_id: UUID of the recommendation\n update_data: SEORecommendationUpdate with is_dismissed=true and\ \ optional user_notes\n current_user: Authenticated user\n db: Database session\n\nReturns:\n SEORecommendationResponse\ \ with updated recommendation\n\nRaises:\n HTTPException: 404 if not found, 403 if access denied" operationId: dismiss_recommendation_api_seo_recommendation__rec_id__dismiss_put security: - HTTPBearer: [] parameters: - name: rec_id in: path required: true schema: type: string format: uuid title: Rec Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SEORecommendationUpdate' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/SEORecommendationResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/seo/recommendation/{rec_id}/complete: put: tags: - SEO Analysis summary: Complete Recommendation description: "Mark an SEO recommendation as completed.\n\nRecords that the user has implemented the recommended fix.\n\ Optionally include notes about the implementation.\n\nArgs:\n rec_id: UUID of the recommendation\n update_data:\ \ SEORecommendationUpdate with is_completed=true and optional user_notes\n current_user: Authenticated user\n \ \ db: Database session\n\nReturns:\n SEORecommendationResponse with updated recommendation\n\nRaises:\n HTTPException:\ \ 404 if not found, 403 if access denied" operationId: complete_recommendation_api_seo_recommendation__rec_id__complete_put security: - HTTPBearer: [] parameters: - name: rec_id in: path required: true schema: type: string format: uuid title: Rec Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SEORecommendationUpdate' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/SEORecommendationResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/seo/analysis/{analysis_id}/pages: get: tags: - SEO Analysis summary: Get Analysis Pages description: "Get per-page SEO analysis with screenshots for a specific analysis.\n\nThis endpoint returns detailed\ \ SEO metrics for each page analyzed,\nincluding:\n- Page URL and title\n- SEO issues (critical and important)\n-\ \ Content metrics (word count, links, images)\n- Screenshot URL from the crawler\n- Schema markup and social meta\ \ presence\n\nArgs:\n analysis_id: UUID of the analysis\n current_user: Authenticated user\n db: Database\ \ session\n\nReturns:\n List of SEOPageResponse with per-page details and screenshots\n\nRaises:\n HTTPException:\ \ 404 if analysis not found, 403 if access denied" operationId: get_analysis_pages_api_seo_analysis__analysis_id__pages_get security: - HTTPBearer: [] parameters: - name: analysis_id in: path required: true schema: type: string format: uuid title: Analysis Id responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/SEOPageResponse' title: Response Get Analysis Pages Api Seo Analysis Analysis Id Pages Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/seo/company/{company_profile_id}/latest: get: tags: - SEO Analysis summary: Get Latest Seo Analysis description: "Get the most recent SEO analysis for a company profile.\n\nReturns the latest completed or in-progress\ \ analysis.\nUseful for dashboards and quick status checks.\n\nArgs:\n company_profile_id: UUID of the company\ \ profile\n current_user: Authenticated user\n db: Database session\n\nReturns:\n SEOAnalysisResponse with\ \ latest analysis\n\nRaises:\n HTTPException: 404 if no analysis found or company profile not found, 403 if access\ \ denied" operationId: get_latest_seo_analysis_api_seo_company__company_profile_id__latest_get security: - HTTPBearer: [] parameters: - name: company_profile_id in: path required: true schema: type: string format: uuid title: Company Profile Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/SEOAnalysisResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/seo/analysis/{analysis_id}/recalculate/{category}: post: tags: - SEO Analysis summary: Recalculate Category Score description: "Recalculate score for a specific SEO category.\n\nThis endpoint recalculates the score for a single category\ \ using the stored\nanalysis data. Useful for fixing scoring issues without re-running the entire\nanalysis.\n\nValid\ \ categories:\n- technical: Technical SEO score\n- on_page: On-page SEO score\n- structured_data: Schema markup score\n\ - images: Image optimization score\n- social_meta: Social media meta tags score\n- performance: Performance score\ \ (Core Web Vitals)\n\nArgs:\n analysis_id: UUID of the analysis\n category: Category to recalculate\n current_user:\ \ Authenticated user\n db: Database session\n\nReturns:\n dict with recalculated category score\n\nRaises:\n\ \ HTTPException: 404 if not found, 400 if invalid category, 403 if access denied" operationId: recalculate_category_score_api_seo_analysis__analysis_id__recalculate__category__post security: - HTTPBearer: [] parameters: - name: analysis_id in: path required: true schema: type: string format: uuid title: Analysis Id - name: category in: path required: true schema: type: string title: Category responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Recalculate Category Score Api Seo Analysis Analysis Id Recalculate Category Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/seo/analysis/{analysis_id}/recalculate-all: post: tags: - SEO Analysis summary: Recalculate All Scores description: "Recalculate all SEO scores for an analysis.\n\nThis endpoint recalculates all category scores and the\ \ overall score using the\nstored analysis data. Useful for fixing scoring issues after algorithm updates\nor bug\ \ fixes.\n\nArgs:\n analysis_id: UUID of the analysis\n current_user: Authenticated user\n db: Database session\n\ \nReturns:\n dict with all recalculated scores\n\nRaises:\n HTTPException: 404 if not found, 403 if access denied" operationId: recalculate_all_scores_api_seo_analysis__analysis_id__recalculate_all_post security: - HTTPBearer: [] parameters: - name: analysis_id in: path required: true schema: type: string format: uuid title: Analysis Id responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Recalculate All Scores Api Seo Analysis Analysis Id Recalculate All Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/seo/analysis/{analysis_id}/debug/{category}: get: tags: - SEO Analysis summary: Get Category Debug Info description: "Get detailed debug information for a specific SEO category.\n\nThis endpoint provides comprehensive debugging\ \ information including:\n- Current score\n- Input data used for scoring\n- Detailed breakdown of how the score was\ \ calculated\n- Validation issues if any\n\nValid categories:\n- technical: Technical SEO\n- on_page: On-page SEO\n\ - structured_data: Schema markup\n- images: Image optimization\n- social_meta: Social media meta tags\n\nArgs:\n \ \ analysis_id: UUID of the analysis\n category: Category to debug\n current_user: Authenticated user\n \ \ db: Database session\n\nReturns:\n dict with detailed debug information\n\nRaises:\n HTTPException: 404 if\ \ not found, 400 if invalid category, 403 if access denied" operationId: get_category_debug_info_api_seo_analysis__analysis_id__debug__category__get security: - HTTPBearer: [] parameters: - name: analysis_id in: path required: true schema: type: string format: uuid title: Analysis Id - name: category in: path required: true schema: type: string title: Category responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Get Category Debug Info Api Seo Analysis Analysis Id Debug Category Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/seo/admin/cleanup-stuck: post: tags: - SEO Analysis summary: Cleanup Stuck Analyses Endpoint description: "Admin endpoint to cleanup stuck SEO analyses.\n\nThis endpoint allows administrators to manually trigger\ \ cleanup of stuck analyses\nthat are in processing/pending state for too long.\n\nRequires authentication. Typically\ \ used for:\n- Manual recovery after server crashes\n- Monitoring/alerting integrations\n- Debugging stuck analyses\n\ \nArgs:\n threshold_minutes: Minutes before considering an analysis stuck (5-1440, default: 60)\n dry_run: If\ \ true, only report stuck analyses without marking them as failed\n current_user: Authenticated user\n db: Database\ \ session\n\nReturns:\n dict: Summary of cleanup operation including count and details" operationId: cleanup_stuck_analyses_endpoint_api_seo_admin_cleanup_stuck_post security: - HTTPBearer: [] parameters: - name: threshold_minutes in: query required: false schema: type: integer maximum: 1440 minimum: 5 description: Minutes before considering analysis stuck default: 60 title: Threshold Minutes description: Minutes before considering analysis stuck - name: dry_run in: query required: false schema: type: boolean description: If true, only report without fixing default: false title: Dry Run description: If true, only report without fixing responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Cleanup Stuck Analyses Endpoint Api Seo Admin Cleanup Stuck Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/seo/analysis/{analysis_id}/pages/{page_id}/compute-content-quality: post: tags: - SEO Analysis summary: Compute Content Quality description: "Compute content quality metrics for a specific page on-demand.\n\nThis endpoint allows computing or recomputing\ \ content quality metrics\n(readability, E-E-A-T, originality) for a specific page. This is useful\nwhen content quality\ \ was skipped during initial analysis for performance\nreasons, or when you want to refresh the metrics after content\ \ updates.\n\nContent quality metrics include:\n- Readability score (Flesch Reading Ease)\n- Readability grade (Flesch-Kincaid\ \ Grade Level)\n- E-E-A-T signals score\n- Content originality score\n- AI-generated content detection\n- Duplicate\ \ content detection\n\nArgs:\n analysis_id: UUID of the SEO analysis\n page_id: UUID of the specific page\n\ \ current_user: Authenticated user\n db: Database session\n\nReturns:\n SEOPageResponse with updated content\ \ quality metrics\n\nRaises:\n HTTPException: 404 if analysis/page not found, 403 if access denied" operationId: compute_content_quality_api_seo_analysis__analysis_id__pages__page_id__compute_content_quality_post security: - HTTPBearer: [] parameters: - name: analysis_id in: path required: true schema: type: string format: uuid title: Analysis Id - name: page_id in: path required: true schema: type: string format: uuid title: Page Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/SEOPageResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/notifications/organization-inbox: get: tags: - notifications summary: Get Organization Notifications description: Get a merged notifications inbox for the current user in the active organization. operationId: get_organization_notifications_api_notifications_organization_inbox_get security: - HTTPBearer: [] parameters: - name: unread_only in: query required: false schema: type: boolean description: Return only unread notifications default: false title: Unread Only description: Return only unread notifications - name: limit in: query required: false schema: type: integer maximum: 100 minimum: 1 description: Maximum number of notifications default: 50 title: Limit description: Maximum number of notifications - name: offset in: query required: false schema: type: integer minimum: 0 description: Offset for pagination default: 0 title: Offset description: Offset for pagination - name: force_refresh in: query required: false schema: type: boolean description: Bypass the shared response cache default: false title: Force Refresh description: Bypass the shared response cache - name: allow_inactive_subscription in: query required: false schema: type: boolean default: false title: Allow Inactive Subscription - name: X-Organization-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Organization-Id responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Get Organization Notifications Api Notifications Organization Inbox Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/notifications/company-profile/{company_profile_id}: get: tags: - notifications summary: Get Notifications description: "Get notifications for a company profile.\n\nArgs:\n company_profile_id: Company profile ID\n unread_only:\ \ Whether to return only unread notifications\n limit: Maximum number of notifications to return\n offset: Offset\ \ for pagination\n current_user: Current authenticated user\n db: Database session\n\nReturns:\n Dictionary\ \ with notifications, total count, and pagination info" operationId: get_notifications_api_notifications_company_profile__company_profile_id__get security: - HTTPBearer: [] parameters: - name: company_profile_id in: path required: true schema: type: string format: uuid title: Company Profile Id - name: unread_only in: query required: false schema: type: boolean description: Return only unread notifications default: false title: Unread Only description: Return only unread notifications - name: limit in: query required: false schema: type: integer maximum: 100 minimum: 1 description: Maximum number of notifications default: 50 title: Limit description: Maximum number of notifications - name: offset in: query required: false schema: type: integer minimum: 0 description: Offset for pagination default: 0 title: Offset description: Offset for pagination - name: force_refresh in: query required: false schema: type: boolean description: Bypass the shared response cache default: false title: Force Refresh description: Bypass the shared response cache responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Get Notifications Api Notifications Company Profile Company Profile Id Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/notifications/{notification_id}/action: post: tags: - notifications summary: Apply Notification Action description: Apply an action (accepted/declined) to a notification. operationId: apply_notification_action_api_notifications__notification_id__action_post security: - HTTPBearer: [] parameters: - name: notification_id in: path required: true schema: type: string format: uuid title: Notification Id requestBody: required: true content: application/json: schema: type: object additionalProperties: true title: Payload example: action: accepted payload: applied_at: '2024-05-20T10:00:00Z' responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Apply Notification Action Api Notifications Notification Id Action Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/notifications/{notification_id}/read: post: tags: - notifications summary: Mark Notification Read description: "Mark a notification as read.\n\nArgs:\n notification_id: Notification ID\n current_user: Current\ \ authenticated user\n db: Database session\n\nReturns:\n Success status" operationId: mark_notification_read_api_notifications__notification_id__read_post security: - HTTPBearer: [] parameters: - name: notification_id in: path required: true schema: type: string format: uuid title: Notification Id responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Mark Notification Read Api Notifications Notification Id Read Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/notifications/company-profile/{company_profile_id}/mark-all-read: post: tags: - notifications summary: Mark All Notifications Read description: "Mark all notifications as read for a company profile.\nUses optimized bulk SQL operations.\n\nArgs:\n\ \ company_profile_id: Company profile ID\n current_user: Current authenticated user\n db: Database session\n\ \nReturns:\n Number of notifications marked as read" operationId: mark_all_notifications_read_api_notifications_company_profile__company_profile_id__mark_all_read_post security: - HTTPBearer: [] parameters: - name: company_profile_id in: path required: true schema: type: string format: uuid title: Company Profile Id responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Mark All Notifications Read Api Notifications Company Profile Company Profile Id Mark All Read Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/notifications/company-profile/{company_profile_id}/unread-count: get: tags: - notifications summary: Get Unread Count description: "Get count of unread notifications with multi-tab deduplication support.\n\nArgs:\n company_profile_id:\ \ Company profile ID\n session_id: Optional session ID for multi-tab deduplication\n current_user: Current authenticated\ \ user\n db: Database session\n\nReturns:\n Count of unread notifications" operationId: get_unread_count_api_notifications_company_profile__company_profile_id__unread_count_get security: - HTTPBearer: [] parameters: - name: company_profile_id in: path required: true schema: type: string format: uuid title: Company Profile Id - name: session_id in: query required: false schema: anyOf: - type: string - type: 'null' description: Session ID for multi-tab deduplication title: Session Id description: Session ID for multi-tab deduplication responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Get Unread Count Api Notifications Company Profile Company Profile Id Unread Count Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/notifications/company-profile/{company_profile_id}/stats: get: tags: - notifications summary: Get Notification Stats description: "Get notification delivery statistics for monitoring.\n\nArgs:\n company_profile_id: Company profile\ \ ID\n days: Number of days to look back\n current_user: Current authenticated user\n db: Database session\n\ \nReturns:\n Delivery statistics" operationId: get_notification_stats_api_notifications_company_profile__company_profile_id__stats_get security: - HTTPBearer: [] parameters: - name: company_profile_id in: path required: true schema: type: string format: uuid title: Company Profile Id - name: days in: query required: false schema: type: integer maximum: 30 minimum: 1 description: Number of days to look back default: 7 title: Days description: Number of days to look back responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Get Notification Stats Api Notifications Company Profile Company Profile Id Stats Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/udm/revenue/daily: get: tags: - udm - Unified Data Model summary: Get daily revenue by channel description: Returns daily revenue breakdown by vendor and channel (in-store, online, etc.) operationId: get_revenue_daily_api_udm_revenue_daily_get security: - HTTPBearer: [] parameters: - name: start_date in: query required: false schema: anyOf: - type: string format: date - type: 'null' description: Start date (YYYY-MM-DD). Defaults to 30 days ago. title: Start Date description: Start date (YYYY-MM-DD). Defaults to 30 days ago. - name: end_date in: query required: false schema: anyOf: - type: string format: date - type: 'null' description: End date (YYYY-MM-DD). Defaults to today. title: End Date description: End date (YYYY-MM-DD). Defaults to today. - name: preset in: query required: false schema: anyOf: - type: string - type: 'null' description: 'Date preset: today, yesterday, last_7_days, last_30_days, this_month, last_month, this_quarter, year_to_date' title: Preset description: 'Date preset: today, yesterday, last_7_days, last_30_days, this_month, last_month, this_quarter, year_to_date' responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/RevenueByChannelResponse' title: Response Get Revenue Daily Api Udm Revenue Daily Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/udm/revenue/summary: get: tags: - udm - Unified Data Model summary: Get revenue summary description: Returns aggregated revenue metrics for the specified date range operationId: get_revenue_summary_api_udm_revenue_summary_get security: - HTTPBearer: [] parameters: - name: start_date in: query required: false schema: anyOf: - type: string format: date - type: 'null' title: Start Date - name: end_date in: query required: false schema: anyOf: - type: string format: date - type: 'null' title: End Date - name: preset in: query required: false schema: anyOf: - type: string - type: 'null' title: Preset responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/RevenueSummaryResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/udm/ads/performance: get: tags: - udm - Unified Data Model summary: Get daily ad performance description: Returns daily ad performance metrics by platform operationId: get_ad_performance_api_udm_ads_performance_get security: - HTTPBearer: [] parameters: - name: start_date in: query required: false schema: anyOf: - type: string format: date - type: 'null' title: Start Date - name: end_date in: query required: false schema: anyOf: - type: string format: date - type: 'null' title: End Date - name: preset in: query required: false schema: anyOf: - type: string - type: 'null' title: Preset - name: platform in: query required: false schema: anyOf: - type: string - type: 'null' description: 'Filter by platform: meta, tiktok' title: Platform description: 'Filter by platform: meta, tiktok' responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/AdPerformanceResponse' title: Response Get Ad Performance Api Udm Ads Performance Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/udm/ads/roas: get: tags: - udm - Unified Data Model summary: Get blended ROAS description: Returns blended ROAS across all advertising platforms operationId: get_blended_roas_api_udm_ads_roas_get security: - HTTPBearer: [] parameters: - name: start_date in: query required: false schema: anyOf: - type: string format: date - type: 'null' title: Start Date - name: end_date in: query required: false schema: anyOf: - type: string format: date - type: 'null' title: End Date - name: preset in: query required: false schema: anyOf: - type: string - type: 'null' title: Preset responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/BlendedROASResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/udm/customers/top: get: tags: - udm - Unified Data Model summary: Get top customers description: Returns top customers by LTV or other metrics operationId: get_top_customers_api_udm_customers_top_get security: - HTTPBearer: [] parameters: - name: limit in: query required: false schema: type: integer maximum: 1000 minimum: 1 description: Number of customers to return default: 100 title: Limit description: Number of customers to return - name: order_by in: query required: false schema: type: string description: 'Sort by: ltv_cents, total_orders, total_spent_cents' default: ltv_cents title: Order By description: 'Sort by: ltv_cents, total_orders, total_spent_cents' responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/CustomerSummaryResponse' title: Response Get Top Customers Api Udm Customers Top Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/udm/customers/quality-segments: get: tags: - udm - Unified Data Model summary: Get customer quality segments description: Returns high-LTV, repeat, one-time, discount-heavy, at-risk, and lapsed customer segments. operationId: get_customer_quality_segments_api_udm_customers_quality_segments_get security: - HTTPBearer: [] parameters: - name: source_vendor in: query required: false schema: anyOf: - type: string - type: 'null' description: Optional source vendor filter, e.g. shopify title: Source Vendor description: Optional source vendor filter, e.g. shopify responses: '200': description: Successful Response content: application/json: schema: type: array items: type: object additionalProperties: true title: Response Get Customer Quality Segments Api Udm Customers Quality Segments Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/udm/customers/acquisition-quality: get: tags: - udm - Unified Data Model summary: Get acquisition source quality description: Returns customer quality grouped by first observed Shopify source/UTM campaign. operationId: get_acquisition_source_quality_api_udm_customers_acquisition_quality_get security: - HTTPBearer: [] parameters: - name: limit in: query required: false schema: type: integer maximum: 500 minimum: 1 default: 50 title: Limit - name: order_by in: query required: false schema: type: string default: avg_ltv_cents title: Order By responses: '200': description: Successful Response content: application/json: schema: type: array items: type: object additionalProperties: true title: Response Get Acquisition Source Quality Api Udm Customers Acquisition Quality Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/udm/customers/discount-quality: get: tags: - udm - Unified Data Model summary: Get discount buyer quality description: Returns repeat/LTV outcomes for full-price, discount-exposed, and discount-heavy buyers. operationId: get_discount_buyer_quality_api_udm_customers_discount_quality_get responses: '200': description: Successful Response content: application/json: schema: items: additionalProperties: true type: object type: array title: Response Get Discount Buyer Quality Api Udm Customers Discount Quality Get security: - HTTPBearer: [] /api/udm/customers/geo-quality: get: tags: - udm - Unified Data Model summary: Get customer geo quality description: Returns geography clusters for high-quality customer demand. operationId: get_customer_geo_quality_api_udm_customers_geo_quality_get security: - HTTPBearer: [] parameters: - name: limit in: query required: false schema: type: integer maximum: 500 minimum: 1 default: 100 title: Limit - name: order_by in: query required: false schema: type: string default: avg_ltv_cents title: Order By responses: '200': description: Successful Response content: application/json: schema: type: array items: type: object additionalProperties: true title: Response Get Customer Geo Quality Api Udm Customers Geo Quality Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/udm/customers/quality-pack: get: tags: - udm - Unified Data Model summary: Get customer quality intelligence pack description: Returns customer segments, acquisition quality, discount buyer quality, product quality, and geo quality. operationId: get_customer_quality_pack_api_udm_customers_quality_pack_get security: - HTTPBearer: [] parameters: - name: limit in: query required: false schema: type: integer maximum: 500 minimum: 1 default: 100 title: Limit responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Get Customer Quality Pack Api Udm Customers Quality Pack Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/udm/products/quality: get: tags: - udm - Unified Data Model summary: Get product quality description: Returns product and variant quality metrics tied to customer LTV, repeat behavior, and discounts. operationId: get_product_quality_api_udm_products_quality_get security: - HTTPBearer: [] parameters: - name: limit in: query required: false schema: type: integer maximum: 500 minimum: 1 default: 100 title: Limit - name: order_by in: query required: false schema: type: string default: net_revenue_cents title: Order By responses: '200': description: Successful Response content: application/json: schema: type: array items: type: object additionalProperties: true title: Response Get Product Quality Api Udm Products Quality Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/udm/customers/{customer_key}: get: tags: - udm - Unified Data Model summary: Get customer 360 view description: Returns comprehensive view of a customer including orders, LTV, and segmentation operationId: get_customer_api_udm_customers__customer_key__get security: - HTTPBearer: [] parameters: - name: customer_key in: path required: true schema: type: string title: Customer Key responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/CustomerSummaryResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/udm/cross-channel: get: tags: - udm - Unified Data Model summary: Get cross-channel metrics description: Returns daily blended metrics combining revenue and ad spend operationId: get_cross_channel_metrics_api_udm_cross_channel_get security: - HTTPBearer: [] parameters: - name: start_date in: query required: false schema: anyOf: - type: string format: date - type: 'null' title: Start Date - name: end_date in: query required: false schema: anyOf: - type: string format: date - type: 'null' title: End Date - name: preset in: query required: false schema: anyOf: - type: string - type: 'null' title: Preset responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/CrossChannelMetricsResponse' title: Response Get Cross Channel Metrics Api Udm Cross Channel Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/udm/google-analytics/channel-inputs: get: tags: - udm - Unified Data Model summary: Get GA4 Gold daily channel inputs description: Returns GA4-derived daily channel rows from the Gold MMM input table. These rows are refreshed by the UDM pipeline on its daily schedule. operationId: get_google_analytics_channel_inputs_api_udm_google_analytics_channel_inputs_get security: - HTTPBearer: [] parameters: - name: start_date in: query required: false schema: anyOf: - type: string format: date - type: 'null' description: Start date (YYYY-MM-DD) title: Start Date description: Start date (YYYY-MM-DD) - name: end_date in: query required: false schema: anyOf: - type: string format: date - type: 'null' description: End date (YYYY-MM-DD) title: End Date description: End date (YYYY-MM-DD) - name: preset in: query required: false schema: anyOf: - type: string - type: 'null' description: Date preset default: last_30_days title: Preset description: Date preset - name: limit in: query required: false schema: type: integer maximum: 20000 minimum: 1 description: Maximum Gold rows to return default: 500 title: Limit description: Maximum Gold rows to return responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/GoogleAnalyticsChannelInputResponse' title: Response Get Google Analytics Channel Inputs Api Udm Google Analytics Channel Inputs Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/udm/quickbooks/daily: get: tags: - udm - Unified Data Model summary: Get daily QuickBooks financials description: Get daily QuickBooks financial metrics for the company. operationId: get_qb_daily_financials_api_udm_quickbooks_daily_get security: - HTTPBearer: [] parameters: - name: start_date in: query required: false schema: anyOf: - type: string format: date - type: 'null' description: Start date (YYYY-MM-DD) title: Start Date description: Start date (YYYY-MM-DD) - name: end_date in: query required: false schema: anyOf: - type: string format: date - type: 'null' description: End date (YYYY-MM-DD) title: End Date description: End date (YYYY-MM-DD) - name: preset in: query required: false schema: anyOf: - type: string - type: 'null' description: Date preset (last_7_days, last_30_days, etc.) title: Preset description: Date preset (last_7_days, last_30_days, etc.) responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/QBDailyFinancialsResponse' title: Response Get Qb Daily Financials Api Udm Quickbooks Daily Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/udm/quickbooks/summary: get: tags: - udm - Unified Data Model summary: Get QuickBooks summary for date range description: Get QuickBooks summary metrics for the company. operationId: get_qb_summary_api_udm_quickbooks_summary_get security: - HTTPBearer: [] parameters: - name: start_date in: query required: false schema: anyOf: - type: string format: date - type: 'null' description: Start date (YYYY-MM-DD) title: Start Date description: Start date (YYYY-MM-DD) - name: end_date in: query required: false schema: anyOf: - type: string format: date - type: 'null' description: End date (YYYY-MM-DD) title: End Date description: End date (YYYY-MM-DD) - name: preset in: query required: false schema: anyOf: - type: string - type: 'null' description: Date preset (last_7_days, last_30_days, etc.) title: Preset description: Date preset (last_7_days, last_30_days, etc.) responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/QBRangeSummaryResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/udm/quickbooks/customers: get: tags: - udm - Unified Data Model summary: Get top customers from QuickBooks description: Get top customers by revenue from QuickBooks. operationId: get_qb_customers_api_udm_quickbooks_customers_get security: - HTTPBearer: [] parameters: - name: limit in: query required: false schema: type: integer maximum: 1000 minimum: 1 description: Number of customers to return default: 100 title: Limit description: Number of customers to return responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/QBCustomerSummaryResponse' title: Response Get Qb Customers Api Udm Quickbooks Customers Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/udm/quickbooks/vendors: get: tags: - udm - Unified Data Model summary: Get top vendors from QuickBooks description: Get top vendors by expense from QuickBooks. operationId: get_qb_vendors_api_udm_quickbooks_vendors_get security: - HTTPBearer: [] parameters: - name: limit in: query required: false schema: type: integer maximum: 1000 minimum: 1 description: Number of vendors to return default: 100 title: Limit description: Number of vendors to return responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/QBVendorSummaryResponse' title: Response Get Qb Vendors Api Udm Quickbooks Vendors Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/udm/quickbooks/products: get: tags: - udm - Unified Data Model summary: Get sales by product from QuickBooks description: Get product-level sales from QuickBooks invoice lines. operationId: get_qb_sales_by_product_api_udm_quickbooks_products_get security: - HTTPBearer: [] parameters: - name: limit in: query required: false schema: type: integer maximum: 1000 minimum: 1 description: Number of products to return default: 100 title: Limit description: Number of products to return responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/QBSalesByProductResponse' title: Response Get Qb Sales By Product Api Udm Quickbooks Products Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/udm/quickbooks/monthly: get: tags: - udm - Unified Data Model summary: Get monthly QuickBooks financials with MoM trends description: Get monthly QuickBooks financials with month-over-month trends. operationId: get_qb_monthly_financials_api_udm_quickbooks_monthly_get security: - HTTPBearer: [] parameters: - name: start_month in: query required: false schema: anyOf: - type: string - type: 'null' description: Start month (YYYY-MM). Defaults to 12 months ago. title: Start Month description: Start month (YYYY-MM). Defaults to 12 months ago. - name: end_month in: query required: false schema: anyOf: - type: string - type: 'null' description: End month (YYYY-MM). Defaults to current month. title: End Month description: End month (YYYY-MM). Defaults to current month. responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/QBMonthlyFinancialsResponse' title: Response Get Qb Monthly Financials Api Udm Quickbooks Monthly Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/udm/quickbooks/marketing: get: tags: - udm - Unified Data Model summary: Get marketing spend by category from QuickBooks description: Returns monthly marketing expense breakdown by category and entity type operationId: get_qb_marketing_by_category_api_udm_quickbooks_marketing_get security: - HTTPBearer: [] parameters: - name: start_month in: query required: false schema: anyOf: - type: string - type: 'null' description: Start month (YYYY-MM). Defaults to 12 months ago. title: Start Month description: Start month (YYYY-MM). Defaults to 12 months ago. - name: end_month in: query required: false schema: anyOf: - type: string - type: 'null' description: End month (YYYY-MM). Defaults to current month. title: End Month description: End month (YYYY-MM). Defaults to current month. responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/QBMarketingByCategoryResponse' title: Response Get Qb Marketing By Category Api Udm Quickbooks Marketing Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/udm/quickbooks/daily-full: get: tags: - udm - Unified Data Model summary: Get full daily QuickBooks financials with all entity columns description: Get full daily QuickBooks financials with all entity-level columns. operationId: get_qb_daily_financials_full_api_udm_quickbooks_daily_full_get security: - HTTPBearer: [] parameters: - name: start_date in: query required: false schema: anyOf: - type: string format: date - type: 'null' description: Start date (YYYY-MM-DD) title: Start Date description: Start date (YYYY-MM-DD) - name: end_date in: query required: false schema: anyOf: - type: string format: date - type: 'null' description: End date (YYYY-MM-DD) title: End Date description: End date (YYYY-MM-DD) - name: preset in: query required: false schema: anyOf: - type: string - type: 'null' description: Date preset (last_7_days, last_30_days, etc.) title: Preset description: Date preset (last_7_days, last_30_days, etc.) responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/QBDailyFinancialsFullResponse' title: Response Get Qb Daily Financials Full Api Udm Quickbooks Daily Full Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/udm/quickbooks/daily-marketing: get: tags: - udm - Unified Data Model summary: Get daily marketing spend totals from QuickBooks description: Get daily marketing spend totals from QuickBooks. operationId: get_qb_daily_marketing_spend_api_udm_quickbooks_daily_marketing_get security: - HTTPBearer: [] parameters: - name: start_date in: query required: false schema: anyOf: - type: string format: date - type: 'null' description: Start date (YYYY-MM-DD) title: Start Date description: Start date (YYYY-MM-DD) - name: end_date in: query required: false schema: anyOf: - type: string format: date - type: 'null' description: End date (YYYY-MM-DD) title: End Date description: End date (YYYY-MM-DD) - name: preset in: query required: false schema: anyOf: - type: string - type: 'null' description: Date preset (last_7_days, last_30_days, etc.) title: Preset description: Date preset (last_7_days, last_30_days, etc.) responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/QBDailyMarketingSpendResponse' title: Response Get Qb Daily Marketing Spend Api Udm Quickbooks Daily Marketing Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/udm/quickbooks/daily-marketing-by-category: get: tags: - udm - Unified Data Model summary: Get daily marketing spend by category from QuickBooks description: Get daily marketing spend by category from QuickBooks. operationId: get_qb_daily_marketing_by_category_api_udm_quickbooks_daily_marketing_by_category_get security: - HTTPBearer: [] parameters: - name: start_date in: query required: false schema: anyOf: - type: string format: date - type: 'null' description: Start date (YYYY-MM-DD) title: Start Date description: Start date (YYYY-MM-DD) - name: end_date in: query required: false schema: anyOf: - type: string format: date - type: 'null' description: End date (YYYY-MM-DD) title: End Date description: End date (YYYY-MM-DD) - name: preset in: query required: false schema: anyOf: - type: string - type: 'null' description: Date preset (last_7_days, last_30_days, etc.) title: Preset description: Date preset (last_7_days, last_30_days, etc.) responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/QBDailyMarketingByCategoryResponse' title: Response Get Qb Daily Marketing By Category Api Udm Quickbooks Daily Marketing By Category Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/udm/quickbooks/date/{txn_date}: get: tags: - udm - Unified Data Model summary: Get all QuickBooks transactions for a single date description: Get all QuickBooks transactions for a single date from Silver tables. operationId: get_qb_date_detail_api_udm_quickbooks_date__txn_date__get security: - HTTPBearer: [] parameters: - name: txn_date in: path required: true schema: type: string format: date title: Txn Date responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/QBTransactionResponse' title: Response Get Qb Date Detail Api Udm Quickbooks Date Txn Date Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/udm/square/daily-sales: get: tags: - udm - Unified Data Model summary: Get daily Square sales metrics description: Get daily Square sales metrics for the company. operationId: get_sq_daily_sales_api_udm_square_daily_sales_get security: - HTTPBearer: [] parameters: - name: start_date in: query required: false schema: anyOf: - type: string format: date - type: 'null' description: Start date (YYYY-MM-DD) title: Start Date description: Start date (YYYY-MM-DD) - name: end_date in: query required: false schema: anyOf: - type: string format: date - type: 'null' description: End date (YYYY-MM-DD) title: End Date description: End date (YYYY-MM-DD) responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/SQDailySalesResponse' title: Response Get Sq Daily Sales Api Udm Square Daily Sales Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/udm/square/daily-sales-by-location: get: tags: - udm - Unified Data Model summary: Get daily Square sales by location description: Get daily Square sales broken down by location. operationId: get_sq_daily_sales_by_location_api_udm_square_daily_sales_by_location_get security: - HTTPBearer: [] parameters: - name: start_date in: query required: false schema: anyOf: - type: string format: date - type: 'null' description: Start date (YYYY-MM-DD) title: Start Date description: Start date (YYYY-MM-DD) - name: end_date in: query required: false schema: anyOf: - type: string format: date - type: 'null' description: End date (YYYY-MM-DD) title: End Date description: End date (YYYY-MM-DD) responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/SQDailySalesByLocationResponse' title: Response Get Sq Daily Sales By Location Api Udm Square Daily Sales By Location Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/udm/square/summary: get: tags: - udm - Unified Data Model summary: Get Square summary for date range description: Get Square summary metrics for the company. operationId: get_sq_summary_api_udm_square_summary_get security: - HTTPBearer: [] parameters: - name: start_date in: query required: false schema: anyOf: - type: string format: date - type: 'null' description: Start date (YYYY-MM-DD) title: Start Date description: Start date (YYYY-MM-DD) - name: end_date in: query required: false schema: anyOf: - type: string format: date - type: 'null' description: End date (YYYY-MM-DD) title: End Date description: End date (YYYY-MM-DD) responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/SQRangeSummaryResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/udm/square/products: get: tags: - udm - Unified Data Model summary: Get sales by product from Square description: Get product-level sales from Square. operationId: get_sq_products_api_udm_square_products_get security: - HTTPBearer: [] parameters: - name: start_date in: query required: false schema: anyOf: - type: string format: date - type: 'null' description: Start date (YYYY-MM-DD) title: Start Date description: Start date (YYYY-MM-DD) - name: end_date in: query required: false schema: anyOf: - type: string format: date - type: 'null' description: End date (YYYY-MM-DD) title: End Date description: End date (YYYY-MM-DD) - name: limit in: query required: false schema: type: integer maximum: 500 minimum: 1 description: Max products to return default: 50 title: Limit description: Max products to return responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/SQProductSalesResponse' title: Response Get Sq Products Api Udm Square Products Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/udm/square/locations: get: tags: - udm - Unified Data Model summary: Get sales by location from Square description: Get monthly location-level sales from Square. operationId: get_sq_locations_api_udm_square_locations_get security: - HTTPBearer: [] parameters: - name: start_date in: query required: false schema: anyOf: - type: string format: date - type: 'null' description: Start date (YYYY-MM-DD) title: Start Date description: Start date (YYYY-MM-DD) - name: end_date in: query required: false schema: anyOf: - type: string format: date - type: 'null' description: End date (YYYY-MM-DD) title: End Date description: End date (YYYY-MM-DD) responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/SQLocationSalesResponse' title: Response Get Sq Locations Api Udm Square Locations Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/udm/square/date/{txn_date}: get: tags: - udm - Unified Data Model summary: Get all Square transactions for a single date description: Get all Square transactions for a single date from Silver tables. operationId: get_sq_date_detail_api_udm_square_date__txn_date__get security: - HTTPBearer: [] parameters: - name: txn_date in: path required: true schema: type: string format: date title: Txn Date responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/SQTransactionResponse' title: Response Get Sq Date Detail Api Udm Square Date Txn Date Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/udm/stripe/daily-sales: get: tags: - udm - Unified Data Model summary: Get daily Stripe sales metrics description: Get daily Stripe sales metrics for the company. operationId: get_st_daily_sales_route_api_udm_stripe_daily_sales_get security: - HTTPBearer: [] parameters: - name: start_date in: query required: false schema: anyOf: - type: string format: date - type: 'null' description: Start date (YYYY-MM-DD) title: Start Date description: Start date (YYYY-MM-DD) - name: end_date in: query required: false schema: anyOf: - type: string format: date - type: 'null' description: End date (YYYY-MM-DD) title: End Date description: End date (YYYY-MM-DD) responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/StripeDailySalesResponse' title: Response Get St Daily Sales Route Api Udm Stripe Daily Sales Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/udm/stripe/summary: get: tags: - udm - Unified Data Model summary: Get Stripe summary for date range description: Get Stripe summary metrics for the company. operationId: get_st_summary_route_api_udm_stripe_summary_get security: - HTTPBearer: [] parameters: - name: start_date in: query required: false schema: anyOf: - type: string format: date - type: 'null' description: Start date (YYYY-MM-DD) title: Start Date description: Start date (YYYY-MM-DD) - name: end_date in: query required: false schema: anyOf: - type: string format: date - type: 'null' description: End date (YYYY-MM-DD) title: End Date description: End date (YYYY-MM-DD) responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/StripeRangeSummaryResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/udm/klaviyo/daily-email-performance: get: tags: - udm - Unified Data Model summary: Get daily Klaviyo email performance metrics description: Get daily Klaviyo email performance metrics for the company. operationId: get_kl_daily_email_performance_api_udm_klaviyo_daily_email_performance_get security: - HTTPBearer: [] parameters: - name: start_date in: query required: true schema: type: string description: Start date (YYYY-MM-DD) title: Start Date description: Start date (YYYY-MM-DD) - name: end_date in: query required: true schema: type: string description: End date (YYYY-MM-DD) title: End Date description: End date (YYYY-MM-DD) responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/KLDailyEmailPerformanceResponse' title: Response Get Kl Daily Email Performance Api Udm Klaviyo Daily Email Performance Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/udm/klaviyo/campaigns: get: tags: - udm - Unified Data Model summary: Get Klaviyo campaign performance description: Get Klaviyo campaign performance metrics for the company. operationId: get_kl_campaigns_api_udm_klaviyo_campaigns_get security: - HTTPBearer: [] parameters: - name: start_date in: query required: true schema: type: string description: Start date (YYYY-MM-DD) title: Start Date description: Start date (YYYY-MM-DD) - name: end_date in: query required: true schema: type: string description: End date (YYYY-MM-DD) title: End Date description: End date (YYYY-MM-DD) - name: limit in: query required: false schema: type: integer maximum: 500 minimum: 1 description: Max campaigns to return default: 20 title: Limit description: Max campaigns to return responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/KLCampaignPerformanceResponse' title: Response Get Kl Campaigns Api Udm Klaviyo Campaigns Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/udm/klaviyo/flows: get: tags: - udm - Unified Data Model summary: Get Klaviyo flow performance description: Get Klaviyo flow performance metrics for the company. operationId: get_kl_flows_api_udm_klaviyo_flows_get security: - HTTPBearer: [] parameters: - name: limit in: query required: false schema: type: integer maximum: 500 minimum: 1 description: Max flows to return default: 20 title: Limit description: Max flows to return responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/KLFlowPerformanceResponse' title: Response Get Kl Flows Api Udm Klaviyo Flows Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/udm/klaviyo/lists: get: tags: - udm - Unified Data Model summary: Get Klaviyo list growth metrics description: Get Klaviyo list growth metrics for the company. operationId: get_kl_lists_api_udm_klaviyo_lists_get security: - HTTPBearer: [] parameters: - name: start_date in: query required: true schema: type: string description: Start date (YYYY-MM-DD) title: Start Date description: Start date (YYYY-MM-DD) - name: end_date in: query required: true schema: type: string description: End date (YYYY-MM-DD) title: End Date description: End date (YYYY-MM-DD) responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/KLListGrowthResponse' title: Response Get Kl Lists Api Udm Klaviyo Lists Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/udm/klaviyo/summary: get: tags: - udm - Unified Data Model summary: Get Klaviyo summary for date range description: Get Klaviyo summary metrics for the company. operationId: get_kl_summary_api_udm_klaviyo_summary_get security: - HTTPBearer: [] parameters: - name: start_date in: query required: true schema: type: string description: Start date (YYYY-MM-DD) title: Start Date description: Start date (YYYY-MM-DD) - name: end_date in: query required: true schema: type: string description: End date (YYYY-MM-DD) title: End Date description: End date (YYYY-MM-DD) responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/KLRangeSummaryResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/udm/klaviyo/date/{date}: get: tags: - udm - Unified Data Model summary: Get all Klaviyo events for a single date description: Get all Klaviyo events for a single date from Silver tables. operationId: get_kl_date_detail_api_udm_klaviyo_date__date__get security: - HTTPBearer: [] parameters: - name: date in: path required: true schema: type: string title: Date responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/KLTransactionRowResponse' title: Response Get Kl Date Detail Api Udm Klaviyo Date Date Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/udm/shopify/daily-sales: get: tags: - udm - Unified Data Model summary: Get daily Shopify sales metrics description: Get daily Shopify sales metrics for the company. operationId: get_sh_daily_sales_api_udm_shopify_daily_sales_get security: - HTTPBearer: [] parameters: - name: start_date in: query required: false schema: anyOf: - type: string format: date - type: 'null' description: Start date (YYYY-MM-DD) title: Start Date description: Start date (YYYY-MM-DD) - name: end_date in: query required: false schema: anyOf: - type: string format: date - type: 'null' description: End date (YYYY-MM-DD) title: End Date description: End date (YYYY-MM-DD) responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/SHDailySalesResponse' title: Response Get Sh Daily Sales Api Udm Shopify Daily Sales Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/udm/shopify/products: get: tags: - udm - Unified Data Model summary: Get product catalog from Shopify description: Get product catalog from Shopify Silver tables. operationId: get_sh_products_api_udm_shopify_products_get security: - HTTPBearer: [] parameters: - name: limit in: query required: false schema: type: integer maximum: 500 minimum: 1 description: Max products to return default: 100 title: Limit description: Max products to return responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/SHProductCatalogResponse' title: Response Get Sh Products Api Udm Shopify Products Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/udm/shopify/customers: get: tags: - udm - Unified Data Model summary: Get Shopify customer overview description: Get monthly customer overview from Shopify. operationId: get_sh_customers_api_udm_shopify_customers_get security: - HTTPBearer: [] parameters: - name: start_date in: query required: false schema: anyOf: - type: string format: date - type: 'null' description: Start date (YYYY-MM-DD) title: Start Date description: Start date (YYYY-MM-DD) - name: end_date in: query required: false schema: anyOf: - type: string format: date - type: 'null' description: End date (YYYY-MM-DD) title: End Date description: End date (YYYY-MM-DD) responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/SHCustomerOverviewResponse' title: Response Get Sh Customers Api Udm Shopify Customers Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/udm/shopify/fulfillment: get: tags: - udm - Unified Data Model summary: Get Shopify fulfillment status description: Get daily fulfillment status from Shopify. operationId: get_sh_fulfillment_api_udm_shopify_fulfillment_get security: - HTTPBearer: [] parameters: - name: start_date in: query required: false schema: anyOf: - type: string format: date - type: 'null' description: Start date (YYYY-MM-DD) title: Start Date description: Start date (YYYY-MM-DD) - name: end_date in: query required: false schema: anyOf: - type: string format: date - type: 'null' description: End date (YYYY-MM-DD) title: End Date description: End date (YYYY-MM-DD) responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/SHFulfillmentStatusResponse' title: Response Get Sh Fulfillment Api Udm Shopify Fulfillment Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/udm/shopify/summary: get: tags: - udm - Unified Data Model summary: Get Shopify summary for date range description: Get Shopify summary metrics for the company. operationId: get_sh_summary_api_udm_shopify_summary_get security: - HTTPBearer: [] parameters: - name: start_date in: query required: false schema: anyOf: - type: string format: date - type: 'null' description: Start date (YYYY-MM-DD) title: Start Date description: Start date (YYYY-MM-DD) - name: end_date in: query required: false schema: anyOf: - type: string format: date - type: 'null' description: End date (YYYY-MM-DD) title: End Date description: End date (YYYY-MM-DD) responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/SHRangeSummaryResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/udm/shopify/date/{txn_date}: get: tags: - udm - Unified Data Model summary: Get all Shopify orders for a single date description: Get all Shopify orders for a single date from Silver tables. operationId: get_sh_date_detail_api_udm_shopify_date__txn_date__get security: - HTTPBearer: [] parameters: - name: txn_date in: path required: true schema: type: string format: date title: Txn Date responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/SHTransactionResponse' title: Response Get Sh Date Detail Api Udm Shopify Date Txn Date Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /: get: summary: Root operationId: root__get responses: '200': description: Successful Response content: application/json: schema: {} /robots.txt: get: summary: Robots Txt description: Serve robots.txt for search engine crawlers operationId: robots_txt_robots_txt_get responses: '200': description: Successful Response content: application/json: schema: {} /llms.txt: get: summary: Llms Txt description: Serve llms.txt for AI crawlers and LLMs operationId: llms_txt_llms_txt_get responses: '200': description: Successful Response content: application/json: schema: {} /sitemap.xml: get: summary: Sitemap Xml description: Serve sitemap.xml for search engines operationId: sitemap_xml_sitemap_xml_get responses: '200': description: Successful Response content: application/json: schema: {} /health/live: get: summary: Liveness Check description: 'Kubernetes liveness probe - is the process alive? This should always succeed if the process is running. Failing this causes container restart.' operationId: liveness_check_health_live_get responses: '200': description: Successful Response content: application/json: schema: {} /health/ready: get: summary: Readiness Check description: 'Kubernetes readiness probe - can the app accept traffic? Checks database connectivity and auth configuration. Failing this removes the pod from the service load balancer.' operationId: readiness_check_health_ready_get responses: '200': description: Successful Response content: application/json: schema: {} /health: get: summary: Health Check description: 'Standard health check for load balancers. Quick check that the app can respond and database is accessible. Includes database latency and pool utilization.' operationId: health_check_health_get responses: '200': description: Successful Response content: application/json: schema: {} /health/detailed: get: summary: Detailed Health Check description: 'Detailed health check for debugging and monitoring. Comprehensive check of all system components: - Database connectivity and latency - Connection pool status - Critical tables existence - Redis connectivity and latency' operationId: detailed_health_check_health_detailed_get responses: '200': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /health/database: get: summary: Database Health Check description: 'Database-specific health check. Provides detailed information about the database status, including connection pool statistics and configuration.' operationId: database_health_check_health_database_get responses: '200': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /test-logging: get: summary: Test Logging description: 'Test endpoint to verify request ID logging is working. This will log messages with the request ID and user ID.' operationId: test_logging_test_logging_get responses: '200': description: Successful Response content: application/json: schema: {} security: - HTTPBearer: [] /health/events: get: summary: Check Event System Health description: Check health of the event system operationId: check_event_system_health_health_events_get responses: '200': description: Successful Response content: application/json: schema: {} /health/events/redis: get: summary: Check Redis Health description: Check Redis connectivity operationId: check_redis_health_health_events_redis_get responses: '200': description: Successful Response content: application/json: schema: {} /health/events/sse: get: summary: Check Sse Health description: Check SSE connections operationId: check_sse_health_health_events_sse_get responses: '200': description: Successful Response content: application/json: schema: {} components: schemas: ABGroupAddMembersRequest: properties: ad_ids: items: type: string format: uuid type: array title: Ad Ids type: object required: - ad_ids title: ABGroupAddMembersRequest ABGroupCreateRequest: properties: name: type: string title: Name ads_type: type: string title: Ads Type description: Canonical ads type key, e.g., google_display ad_ids: anyOf: - items: type: string format: uuid type: array - type: 'null' title: Ad Ids description: Initial member Ad IDs for the given type settings: anyOf: - additionalProperties: true type: object - type: 'null' title: Settings type: object required: - name - ads_type title: ABGroupCreateRequest ABGroupDetailResponse: properties: id: type: string format: uuid title: Id name: type: string title: Name ads_type: type: string title: Ads Type status: anyOf: - type: string - type: 'null' title: Status settings: anyOf: - additionalProperties: true type: object - type: 'null' title: Settings created_at: anyOf: - type: string - type: 'null' title: Created At updated_at: anyOf: - type: string - type: 'null' title: Updated At member_count: type: integer title: Member Count members: items: $ref: '#/components/schemas/ABGroupMemberResponse' type: array title: Members type: object required: - id - name - ads_type - member_count - members title: ABGroupDetailResponse ABGroupMemberResponse: properties: ad_id: type: string format: uuid title: Ad Id position: anyOf: - type: integer - type: 'null' title: Position name: anyOf: - type: string - type: 'null' title: Name status: anyOf: - type: string - type: 'null' title: Status type: object required: - ad_id title: ABGroupMemberResponse ABGroupMetricsResponse: properties: summary: $ref: '#/components/schemas/ABGroupMetricsSummary' trends: items: $ref: '#/components/schemas/ABGroupMetricsTrend' type: array title: Trends variants: additionalProperties: $ref: '#/components/schemas/ABGroupMetricsSummary' type: object title: Variants per_variant_trends: additionalProperties: items: $ref: '#/components/schemas/ABGroupMetricsTrend' type: array type: object title: Per Variant Trends variant_labels: additionalProperties: type: string type: object title: Variant Labels type: object required: - summary - trends - variants title: ABGroupMetricsResponse ABGroupMetricsSummary: properties: impressions: type: integer title: Impressions default: 0 clicks: type: integer title: Clicks default: 0 cost_micros: type: integer title: Cost Micros default: 0 conversions: type: number title: Conversions default: 0.0 video_views: type: integer title: Video Views default: 0 ctr: type: number title: Ctr default: 0.0 average_cpc: type: number title: Average Cpc default: 0.0 cost_per_conversion: type: number title: Cost Per Conversion default: 0.0 type: object title: ABGroupMetricsSummary ABGroupMetricsTrend: properties: date: type: string title: Date impressions: type: integer title: Impressions clicks: type: integer title: Clicks cost_micros: type: integer title: Cost Micros type: object required: - date - impressions - clicks - cost_micros title: ABGroupMetricsTrend ABGroupReorderMembersRequest: properties: ordered_ad_ids: items: type: string format: uuid type: array title: Ordered Ad Ids type: object required: - ordered_ad_ids title: ABGroupReorderMembersRequest ABGroupResponse: properties: id: type: string format: uuid title: Id name: type: string title: Name ads_type: type: string title: Ads Type status: anyOf: - type: string - type: 'null' title: Status settings: anyOf: - additionalProperties: true type: object - type: 'null' title: Settings created_at: anyOf: - type: string - type: 'null' title: Created At updated_at: anyOf: - type: string - type: 'null' title: Updated At member_count: type: integer title: Member Count type: object required: - id - name - ads_type - member_count title: ABGroupResponse ABGroupUpdateRequest: properties: name: anyOf: - type: string - type: 'null' title: Name status: anyOf: - type: string - type: 'null' title: Status description: draft|active|paused|ended settings: anyOf: - additionalProperties: true type: object - type: 'null' title: Settings type: object title: ABGroupUpdateRequest ABTestConfig: properties: test_type: type: string pattern: ^(subject_line|content|send_time|from_name|multivariate)$ title: Test Type test_name: anyOf: - type: string - type: 'null' title: Test Name test_size: type: number maximum: 50.0 minimum: 5.0 title: Test Size default: 20.0 winner_metric: type: string pattern: ^(open_rate|click_rate|conversion_rate)$ title: Winner Metric default: click_rate duration_hours: type: integer maximum: 168.0 minimum: 1.0 title: Duration Hours default: 24 auto_select: type: boolean title: Auto Select default: true min_sample_size: type: integer minimum: 50.0 title: Min Sample Size default: 100 variants: items: additionalProperties: true type: object type: array title: Variants type: object required: - test_type - variants title: ABTestConfig description: A/B test configuration AICampaignAssetReference: properties: id: anyOf: - type: string - type: 'null' title: Id gallery_id: anyOf: - type: string - type: 'null' title: Gallery Id title: anyOf: - type: string - type: 'null' title: Title description: anyOf: - type: string - type: 'null' title: Description media_url: type: string title: Media Url thumbnail_url: anyOf: - type: string - type: 'null' title: Thumbnail Url media_type: type: string enum: - image - video title: Media Type default: image category: anyOf: - type: string - type: 'null' title: Category source_type: anyOf: - type: string - type: 'null' title: Source Type tags: items: type: string type: array title: Tags width: anyOf: - type: integer - type: 'null' title: Width height: anyOf: - type: integer - type: 'null' title: Height duration: anyOf: - type: number - type: 'null' title: Duration type: object required: - media_url title: AICampaignAssetReference AICampaignFromIntelligenceRequest: properties: source_type: type: string enum: - trend - social_summary - ads_winner - asset_set title: Source Type preferred_mode: type: string enum: - auto - ads_campaign - social_post_campaign title: Preferred Mode default: auto source_payload: $ref: '#/components/schemas/AICampaignSourcePayload' type: object required: - source_type - source_payload title: AICampaignFromIntelligenceRequest AICampaignOfferingSuggestionResponse: properties: selected_offering_id: type: string title: Selected Offering Id selected_offering_reason: type: string title: Selected Offering Reason type: object required: - selected_offering_id - selected_offering_reason title: AICampaignOfferingSuggestionResponse AICampaignReference: properties: title: type: string title: Title url: anyOf: - type: string - type: 'null' title: Url timestamp: anyOf: - type: string - type: 'null' title: Timestamp type: object required: - title title: AICampaignReference AICampaignRelevantProduct: properties: id: type: string title: Id name: type: string title: Name type: object required: - id - name title: AICampaignRelevantProduct AICampaignSourcePayload: properties: title: type: string title: Title summary: anyOf: - type: string - type: 'null' title: Summary recommendation: anyOf: - type: string - type: 'null' title: Recommendation user_prompt: anyOf: - type: string - type: 'null' title: User Prompt platform: anyOf: - type: string - type: 'null' title: Platform confirmed_offering_id: anyOf: - type: string - type: 'null' title: Confirmed Offering Id locations: items: additionalProperties: true type: object type: array title: Locations raw_ids: additionalProperties: true type: object title: Raw Ids references: items: $ref: '#/components/schemas/AICampaignReference' type: array title: References relevant_products: items: $ref: '#/components/schemas/AICampaignRelevantProduct' type: array title: Relevant Products assets: items: $ref: '#/components/schemas/AICampaignAssetReference' type: array title: Assets trend_context: anyOf: - $ref: '#/components/schemas/AICampaignTrendContext' - type: 'null' social_context: anyOf: - additionalProperties: true type: object - type: 'null' title: Social Context type: object required: - title title: AICampaignSourcePayload AICampaignTrendContext: properties: trend_title: anyOf: - type: string - type: 'null' title: Trend Title platform: anyOf: - type: string - type: 'null' title: Platform analysis_summary: anyOf: - type: string - type: 'null' title: Analysis Summary priority_label: anyOf: - type: string - type: 'null' title: Priority Label trend_keywords: items: type: string type: array title: Trend Keywords supporting_keywords: items: type: string type: array title: Supporting Keywords signal_points: items: type: string type: array title: Signal Points recommendation_points: items: type: string type: array title: Recommendation Points relevant_product_names: items: type: string type: array title: Relevant Product Names source_examples: items: $ref: '#/components/schemas/AICampaignTrendSourceExample' type: array title: Source Examples type: object title: AICampaignTrendContext AICampaignTrendSourceExample: properties: title: type: string title: Title subtitle: anyOf: - type: string - type: 'null' title: Subtitle metric: anyOf: - type: string - type: 'null' title: Metric url: anyOf: - type: string - type: 'null' title: Url type: object required: - title title: AICampaignTrendSourceExample AIPersonaCreate: properties: name: type: string title: Name description: anyOf: - type: string - type: 'null' title: Description demographics: anyOf: - additionalProperties: true type: object - type: 'null' title: Demographics interests: anyOf: - items: type: string type: array - type: 'null' title: Interests behaviors: anyOf: - additionalProperties: true type: object - type: 'null' title: Behaviors pain_points: anyOf: - items: type: string type: array - type: 'null' title: Pain Points goals: anyOf: - items: type: string type: array - type: 'null' title: Goals preferred_channels: anyOf: - items: type: string type: array - type: 'null' title: Preferred Channels company_profile_id: anyOf: - type: string format: uuid - type: 'null' title: Company Profile Id type: object required: - name title: AIPersonaCreate AIPersonaResponse: properties: id: type: string format: uuid title: Id name: type: string title: Name description: anyOf: - type: string - type: 'null' title: Description demographics: anyOf: - additionalProperties: true type: object - type: 'null' title: Demographics interests: anyOf: - items: type: string type: array - type: 'null' title: Interests behaviors: anyOf: - additionalProperties: true type: object - type: 'null' title: Behaviors pain_points: anyOf: - items: type: string type: array - type: 'null' title: Pain Points goals: anyOf: - items: type: string type: array - type: 'null' title: Goals preferred_channels: anyOf: - items: type: string type: array - type: 'null' title: Preferred Channels is_active: type: boolean title: Is Active created_at: type: string format: date-time title: Created At updated_at: type: string format: date-time title: Updated At type: object required: - id - name - description - demographics - behaviors - is_active - created_at - updated_at title: AIPersonaResponse AITeamDigestEmailHighlights: properties: recommendation_count: anyOf: - type: integer - type: 'null' title: Recommendation Count decision_count: anyOf: - type: integer - type: 'null' title: Decision Count ads_draft_count: anyOf: - type: integer - type: 'null' title: Ads Draft Count social_draft_count: anyOf: - type: integer - type: 'null' title: Social Draft Count type: object title: AITeamDigestEmailHighlights description: Compact per-digest activity counts for the history rail glance line. AITeamDigestEmailHtmlResponse: properties: id: type: string format: uuid title: Id subject: anyOf: - type: string - type: 'null' title: Subject sent_at: anyOf: - type: string format: date-time - type: 'null' title: Sent At summary_date: anyOf: - type: string - type: 'null' title: Summary Date highlights: anyOf: - $ref: '#/components/schemas/AITeamDigestEmailHighlights' - type: 'null' rendered_html: type: string title: Rendered Html type: object required: - id - rendered_html title: AITeamDigestEmailHtmlResponse description: A single delivered digest plus its browser-renderable HTML body. AITeamDigestEmailListItem: properties: id: type: string format: uuid title: Id subject: anyOf: - type: string - type: 'null' title: Subject sent_at: anyOf: - type: string format: date-time - type: 'null' title: Sent At summary_date: anyOf: - type: string - type: 'null' title: Summary Date highlights: anyOf: - $ref: '#/components/schemas/AITeamDigestEmailHighlights' - type: 'null' type: object required: - id title: AITeamDigestEmailListItem description: One delivered daily digest email available for in-app re-display. AITeamDigestEmailListResponse: properties: digests: items: $ref: '#/components/schemas/AITeamDigestEmailListItem' type: array title: Digests total: type: integer title: Total has_more: type: boolean title: Has More default: false next_cursor_sent_at: anyOf: - type: string format: date-time - type: 'null' title: Next Cursor Sent At next_cursor_id: anyOf: - type: string format: uuid - type: 'null' title: Next Cursor Id type: object required: - digests - total title: AITeamDigestEmailListResponse AITestRequest: properties: ad_id: type: string title: Ad Id ad_platform: anyOf: - type: string - type: 'null' title: Ad Platform persona_ids: anyOf: - items: type: string format: uuid type: array - type: 'null' title: Persona Ids audience_groups: anyOf: - items: type: string type: array - type: 'null' title: Audience Groups target_audience_data: anyOf: - items: additionalProperties: true type: object type: array - type: 'null' title: Target Audience Data persona_set_id: anyOf: - type: string format: uuid - type: 'null' title: Persona Set Id type: object required: - ad_id title: AITestRequest AITestSessionResponse: properties: id: type: string format: uuid title: Id session_id: type: string format: uuid title: Session Id persona_ids: anyOf: - items: type: string format: uuid type: array - type: 'null' title: Persona Ids summary: anyOf: - additionalProperties: true type: object - type: 'null' title: Summary overall_score: anyOf: - type: number - type: 'null' title: Overall Score status: type: string title: Status started_at: anyOf: - type: string format: date-time - type: 'null' title: Started At completed_at: anyOf: - type: string format: date-time - type: 'null' title: Completed At created_at: type: string format: date-time title: Created At test_results: anyOf: - items: additionalProperties: true type: object type: array - type: 'null' title: Test Results default: [] pagination: anyOf: - additionalProperties: true type: object - type: 'null' title: Pagination type: object required: - id - session_id - persona_ids - summary - overall_score - status - started_at - completed_at - created_at title: AITestSessionResponse AcceptInvitationRequest: properties: invite_token: type: string title: Invite Token name: anyOf: - type: string - type: 'null' title: Name title: anyOf: - type: string - type: 'null' title: Title tos_hash: type: string title: Tos Hash tos_version: anyOf: - type: string - type: 'null' title: Tos Version type: object required: - invite_token - tos_hash title: AcceptInvitationRequest description: 'Request schema for accepting an organization invitation. Used by both new users and existing users joining additional organizations.' AcceptInvitationResponse: properties: success: type: boolean title: Success message: type: string title: Message user_id: anyOf: - type: string format: uuid - type: 'null' title: User Id organization_id: anyOf: - type: string format: uuid - type: 'null' title: Organization Id organization_name: anyOf: - type: string - type: 'null' title: Organization Name is_new_user: type: boolean title: Is New User default: false on_waitlist: anyOf: - type: boolean - type: 'null' title: On Waitlist default: false type: object required: - success - message title: AcceptInvitationResponse description: Response from accept invitation endpoint. AdPerformanceResponse: properties: metric_date: type: string format: date title: Metric Date source_platform: type: string title: Source Platform impressions: type: integer title: Impressions clicks: type: integer title: Clicks spend_cents: type: integer title: Spend Cents conversions: type: integer title: Conversions purchase_value_cents: type: integer title: Purchase Value Cents roas: type: number title: Roas cpc_cents: type: integer title: Cpc Cents cpm_cents: type: integer title: Cpm Cents type: object required: - metric_date - source_platform - impressions - clicks - spend_cents - conversions - purchase_value_cents - roas - cpc_cents - cpm_cents title: AdPerformanceResponse description: Response model for ad performance. AddCreatorToListsRequest: properties: list_ids: items: type: string type: array minItems: 1 title: List Ids type: object required: - list_ids title: AddCreatorToListsRequest AddCreatorsToListRequest: properties: creator_ids: items: type: string type: array minItems: 1 title: Creator Ids positions_by_creator_id: anyOf: - additionalProperties: type: integer type: object - type: 'null' title: Positions By Creator Id type: object required: - creator_ids title: AddCreatorsToListRequest AdsCampaignUpdateRequest: properties: campaign_id: type: string title: Campaign Id ad_id: anyOf: - type: string - type: 'null' title: Ad Id name: anyOf: - type: string - type: 'null' title: Name headline: anyOf: - type: string - type: 'null' title: Headline long_headline: anyOf: - type: string - type: 'null' title: Long Headline description: anyOf: - type: string - type: 'null' title: Description ad_name: anyOf: - type: string - type: 'null' title: Ad Name call_to_action: anyOf: - type: string - type: 'null' title: Call To Action keywords: anyOf: - items: additionalProperties: true type: object type: array - items: $ref: '#/components/schemas/KeywordWithCpc' type: array - items: type: string type: array - type: 'null' title: Keywords negative_keywords: anyOf: - items: additionalProperties: true type: object type: array - items: $ref: '#/components/schemas/KeywordWithCpc' type: array - items: type: string type: array - type: 'null' title: Negative Keywords country: anyOf: - type: string - type: 'null' title: Country state_province: anyOf: - type: string - type: 'null' title: State Province city: anyOf: - type: string - type: 'null' title: City recommended_daily_budget: anyOf: - type: integer - type: 'null' title: Recommended Daily Budget total_budget: anyOf: - type: integer - type: 'null' title: Total Budget duration: anyOf: - type: integer - type: 'null' title: Duration target_platform: anyOf: - type: string - type: 'null' title: Target Platform start_date: anyOf: - type: string - type: 'null' title: Start Date end_date: anyOf: - type: string - type: 'null' title: End Date business_name: anyOf: - type: string - type: 'null' title: Business Name final_url: anyOf: - type: string - type: 'null' title: Final Url headlines: anyOf: - items: type: string type: array - type: 'null' title: Headlines descriptions: anyOf: - items: type: string type: array - type: 'null' title: Descriptions format_setting: anyOf: - type: string - type: 'null' title: Format Setting primary_text: anyOf: - type: string - type: 'null' title: Primary Text destination_url: anyOf: - type: string - type: 'null' title: Destination Url ad_format: anyOf: - type: string - type: 'null' title: Ad Format placements: anyOf: - items: type: string type: array - type: 'null' title: Placements introductory_text: anyOf: - type: string - type: 'null' title: Introductory Text alt_text: anyOf: - type: string - type: 'null' title: Alt Text aspect_ratio: anyOf: - type: string - type: 'null' title: Aspect Ratio thumbnail_url: anyOf: - type: string - type: 'null' title: Thumbnail Url linkedin_lead_form_config: anyOf: - additionalProperties: true type: object - type: 'null' title: Linkedin Lead Form Config google_lead_form_config: anyOf: - additionalProperties: true type: object - type: 'null' title: Google Lead Form Config meta_lead_form_config: anyOf: - additionalProperties: true type: object - type: 'null' title: Meta Lead Form Config asin: anyOf: - type: string - type: 'null' title: Asin sku: anyOf: - type: string - type: 'null' title: Sku targeting_type: anyOf: - type: string - type: 'null' title: Targeting Type bidding_strategy: anyOf: - type: string - type: 'null' title: Bidding Strategy default_bid: anyOf: - type: number - type: 'null' title: Default Bid brand_name: anyOf: - type: string - type: 'null' title: Brand Name landing_page_url: anyOf: - type: string - type: 'null' title: Landing Page Url showcase_products: anyOf: - items: type: string type: array - type: 'null' title: Showcase Products targeting_products: anyOf: - items: type: string type: array - type: 'null' title: Targeting Products audience_segments: anyOf: - items: type: string type: array - type: 'null' title: Audience Segments interests: anyOf: - items: type: string type: array - type: 'null' title: Interests lead_form_enabled: anyOf: - type: boolean - type: 'null' title: Lead Form Enabled bid_strategy: anyOf: - type: string - type: 'null' title: Bid Strategy max_cpc: anyOf: - type: number - type: 'null' title: Max Cpc ad_text: anyOf: - type: string - type: 'null' title: Ad Text display_name: anyOf: - type: string - type: 'null' title: Display Name objective_type: anyOf: - type: string - type: 'null' title: Objective Type video_length: anyOf: - type: integer - type: 'null' title: Video Length dayparting_config: anyOf: - additionalProperties: true type: object - type: string - type: 'null' title: Dayparting Config media_operations: anyOf: - items: $ref: '#/components/schemas/CampaignMediaOperation' type: array - type: 'null' title: Media Operations type: object required: - campaign_id title: AdsCampaignUpdateRequest description: Request model for updating ad campaign data AdsCampaignUpdateResponse: properties: status: type: string title: Status message: type: string title: Message campaign_id: type: string title: Campaign Id campaign: anyOf: - $ref: '#/components/schemas/CampaignResponse' - type: 'null' ad: anyOf: - {} - type: 'null' title: Ad type: object required: - status - message - campaign_id title: AdsCampaignUpdateResponse description: Standardized response for ad update operations within a campaign. AdsWinnerItem: properties: id: anyOf: - type: string - type: 'null' title: Id industry_id: anyOf: - type: string - type: 'null' title: Industry Id industry: anyOf: - type: string - type: 'null' title: Industry sub_industry_id: anyOf: - type: string - type: 'null' title: Sub Industry Id sub_industry: anyOf: - type: string - type: 'null' title: Sub Industry country: anyOf: - type: string - type: 'null' title: Country ad_id: anyOf: - type: string - type: 'null' title: Ad Id ad_title: anyOf: - type: string - type: 'null' title: Ad Title analysis: anyOf: - type: string - type: 'null' title: Analysis brand_name: anyOf: - type: string - type: 'null' title: Brand Name like: anyOf: - type: integer - type: 'null' title: Like cost: anyOf: - type: number - type: 'null' title: Cost ctr: anyOf: - type: number - type: 'null' title: Ctr video_id: anyOf: - type: string - type: 'null' title: Video Id video_url: anyOf: - type: string - type: 'null' title: Video Url thumbnail: anyOf: - type: string - type: 'null' title: Thumbnail created_date: anyOf: - type: string - type: 'null' title: Created Date updated_date: anyOf: - type: string - type: 'null' title: Updated Date type: object title: AdsWinnerItem AdsWinnerResponse: properties: search_mode: type: string enum: - general - precise title: Search Mode default: general industry_ids: items: type: string type: array title: Industry Ids sub_industries: items: type: string type: array title: Sub Industries items: items: $ref: '#/components/schemas/AdsWinnerItem' type: array title: Items type: object required: - industry_ids - sub_industries - items title: AdsWinnerResponse AeoActionStatusUpdateRequest: properties: status: type: string enum: - open - done - dismissed title: Status title: type: string maxLength: 512 minLength: 1 title: Title report_id: anyOf: - type: string format: uuid - type: 'null' title: Report Id type: object required: - status - title title: AeoActionStatusUpdateRequest description: Set the lifecycle state of a recommended AEO/GEO action. AgentConversationCreate: properties: organization_id: type: string format: uuid title: Organization Id description: Organization ID for multi-tenant scoping company_profile_id: type: string format: uuid title: Company Profile Id description: Company profile ID for MCP context title: anyOf: - type: string maxLength: 255 - type: 'null' title: Title description: Conversation title (auto-generated if not provided) extra: anyOf: - additionalProperties: true type: object - type: 'null' title: Extra description: Additional data (workflow stage, custom fields) type: object required: - organization_id - company_profile_id title: AgentConversationCreate description: 'Request schema for creating a new agent conversation. Required fields: - organization_id: Organization context (for multi-tenant scoping) - company_profile_id: Company context (for MCP tools) Optional fields: - title: Custom title (if not provided, auto-generated from first message) - extra: Initial extra data (workflow stage, etc.)' example: company_profile_id: 123e4567-e89b-12d3-a456-426614174001 extra: workflow_stage: campaign_creation organization_id: 123e4567-e89b-12d3-a456-426614174000 title: Campaign Strategy Discussion AgentConversationInboxPreview: properties: id: type: string format: uuid title: Id description: Conversation ID title: anyOf: - type: string - type: 'null' title: Title description: Conversation title conversation_source: type: string enum: - web - slack title: Conversation Source description: Conversation source label used for UI filtering default: web has_unread: type: boolean title: Has Unread description: Whether the conversation has unread activity default: false last_message_at: type: string format: date-time title: Last Message At description: Timestamp of latest activity type: object required: - id - last_message_at title: AgentConversationInboxPreview AgentConversationInboxSummaryResponse: properties: unread_conversation_count: type: integer title: Unread Conversation Count description: Unread conversation count for this scope latest_activity_at: anyOf: - type: string format: date-time - type: 'null' title: Latest Activity At description: Latest conversation activity timestamp for this scope previews: items: $ref: '#/components/schemas/AgentConversationInboxPreview' type: array title: Previews description: Recent conversation metadata for lightweight closed-state previews type: object required: - unread_conversation_count title: AgentConversationInboxSummaryResponse AgentConversationListResponse: properties: conversations: items: $ref: '#/components/schemas/AgentConversationResponse' type: array title: Conversations description: List of conversations total: type: integer title: Total description: Total number of conversations (before pagination) page: type: integer title: Page description: Current page number (1-indexed) page_size: type: integer title: Page Size description: Number of items per page has_more: type: boolean title: Has More description: Whether there are more pages type: object required: - conversations - total - page - page_size - has_more title: AgentConversationListResponse description: 'Response schema for paginated conversation list. Used for GET /conversations endpoint.' example: conversations: - company_profile_id: 123e4567-e89b-12d3-a456-426614174001 created_at: '2025-11-05T20:00:00Z' extra: {} id: 123e4567-e89b-12d3-a456-426614174002 is_active: true last_message_at: '2025-11-05T20:30:00Z' message_count: 15 organization_id: 123e4567-e89b-12d3-a456-426614174000 title: Campaign Strategy updated_at: '2025-11-05T20:30:00Z' user_id: 123e4567-e89b-12d3-a456-426614174003 has_more: true page: 1 page_size: 20 total: 25 AgentConversationResponse: properties: id: anyOf: - type: string - type: 'null' title: Id description: Conversation ID organization_id: anyOf: - type: string - type: 'null' title: Organization Id description: Organization ID user_id: anyOf: - type: string - type: 'null' title: User Id description: User ID who owns this conversation company_profile_id: anyOf: - type: string - type: 'null' title: Company Profile Id description: Company profile ID title: anyOf: - type: string - type: 'null' title: Title description: Conversation title conversation_source: type: string enum: - web - slack title: Conversation Source description: Conversation source label used for UI filtering default: web runtime_key: $ref: '#/components/schemas/RuntimeKey' description: Immutable server-selected Markee engine version default: legacy message_count: type: integer title: Message Count description: Number of messages in conversation is_active: type: boolean title: Is Active description: Whether conversation is active (not soft-deleted) has_unread: type: boolean title: Has Unread description: True when new messages added by system, False when user views default: false extra: anyOf: - additionalProperties: true type: object - type: 'null' title: Extra description: Additional data (stats, workflow state, etc.) created_at: type: string format: date-time title: Created At description: Conversation creation timestamp updated_at: type: string format: date-time title: Updated At description: Last update timestamp last_message_at: type: string format: date-time title: Last Message At description: Timestamp of last message type: object required: - id - organization_id - user_id - company_profile_id - message_count - is_active - created_at - updated_at - last_message_at title: AgentConversationResponse description: 'Response schema for agent conversation. Uses mixins for consistent UUID serialization: - UUIDIdentifierMixin: Handles ''id'' field - UserScopedMixin: Handles ''user_id'' field - OrganizationScopedMixin: Handles ''organization_id'' field - CompanyProfileScopedMixin: Handles ''company_profile_id'' field' example: company_profile_id: 123e4567-e89b-12d3-a456-426614174001 created_at: '2025-11-05T20:00:00Z' extra: total_tokens: 1500 total_tool_calls: 5 workflow_stage: campaign_creation id: 123e4567-e89b-12d3-a456-426614174002 is_active: true last_message_at: '2025-11-05T20:30:00Z' message_count: 15 organization_id: 123e4567-e89b-12d3-a456-426614174000 title: Campaign Strategy Discussion updated_at: '2025-11-05T20:30:00Z' user_id: 123e4567-e89b-12d3-a456-426614174003 AgentConversationUpdate: properties: title: anyOf: - type: string maxLength: 255 - type: 'null' title: Title description: Updated title extra: anyOf: - additionalProperties: true type: object - type: 'null' title: Extra description: Updated extra data (merges with existing) type: object title: AgentConversationUpdate description: 'Request schema for updating an existing conversation. All fields are optional - only provided fields will be updated.' example: extra: reviewed_by: user@example.com workflow_stage: review title: Updated Campaign Strategy AgentConversationWithMessages: properties: id: anyOf: - type: string - type: 'null' title: Id description: Conversation ID organization_id: anyOf: - type: string - type: 'null' title: Organization Id description: Organization ID user_id: anyOf: - type: string - type: 'null' title: User Id description: User ID who owns this conversation company_profile_id: anyOf: - type: string - type: 'null' title: Company Profile Id description: Company profile ID title: anyOf: - type: string - type: 'null' title: Title description: Conversation title conversation_source: type: string enum: - web - slack title: Conversation Source description: Conversation source label used for UI filtering default: web runtime_key: $ref: '#/components/schemas/RuntimeKey' description: Immutable server-selected Markee engine version default: legacy message_count: type: integer title: Message Count description: Number of messages in conversation is_active: type: boolean title: Is Active description: Whether conversation is active (not soft-deleted) has_unread: type: boolean title: Has Unread description: True when new messages added by system, False when user views default: false extra: anyOf: - additionalProperties: true type: object - type: 'null' title: Extra description: Additional data (stats, workflow state, etc.) created_at: type: string format: date-time title: Created At description: Conversation creation timestamp updated_at: type: string format: date-time title: Updated At description: Last update timestamp last_message_at: type: string format: date-time title: Last Message At description: Timestamp of last message messages: items: $ref: '#/components/schemas/AgentMessageResponse' type: array title: Messages description: Conversation messages message_refs: additionalProperties: items: $ref: '#/components/schemas/ReferencedDocument' type: array type: object title: Message Refs description: Per-message document references (message_id -> list of docs) public_executions: additionalProperties: $ref: '#/components/schemas/PublicExecutionSummary' type: object title: Public Executions description: Durable public execution snapshots keyed by producer job id. Each value is a complete revisioned replacement snapshot. type: object required: - id - organization_id - user_id - company_profile_id - message_count - is_active - created_at - updated_at - last_message_at title: AgentConversationWithMessages description: 'Extended response schema that includes messages. Used for GET /conversations/{id} endpoint.' example: company_profile_id: 123e4567-e89b-12d3-a456-426614174001 created_at: '2025-11-05T20:00:00Z' extra: total_tokens: 1500 total_tool_calls: 5 workflow_stage: campaign_creation id: 123e4567-e89b-12d3-a456-426614174002 is_active: true last_message_at: '2025-11-05T20:30:00Z' message_count: 15 organization_id: 123e4567-e89b-12d3-a456-426614174000 title: Campaign Strategy Discussion updated_at: '2025-11-05T20:30:00Z' user_id: 123e4567-e89b-12d3-a456-426614174003 AgentMessageResponse: properties: id: anyOf: - type: string - type: 'null' title: Id description: Message ID conversation_id: type: string format: uuid title: Conversation Id description: Parent conversation ID producer_job_id: anyOf: - type: string format: uuid - type: 'null' title: Producer Job Id description: Durable chat job that produced this message pair role: type: string title: Role description: 'Message role: ''user'' or ''assistant''' content: type: string title: Content description: Message text content ui_tool_calls: anyOf: - items: additionalProperties: true type: object type: array - type: 'null' title: Ui Tool Calls description: User-facing tool payloads rendered as chat cards web_citations: anyOf: - items: additionalProperties: true type: object type: array - type: 'null' title: Web Citations description: Web citations extracted from tool payloads for message-level rendering. citations: anyOf: - items: $ref: '#/components/schemas/ResolvedCitationResponse' type: array - type: 'null' title: Citations description: Canonical claim-linked Markee v2 citations. Internal evidence locators are intentionally excluded. workspace_attributions: anyOf: - items: $ref: '#/components/schemas/ResolvedWorkspaceAttributionResponse' type: array - type: 'null' title: Workspace Attributions description: Server-resolved workspace source labels without private locators. message_metadata: anyOf: - additionalProperties: true type: object - type: 'null' title: Message Metadata description: Structured UI metadata for message-level affordances. tokens_used: anyOf: - type: integer - type: 'null' title: Tokens Used description: Total tokens consumed (input + output) turns: anyOf: - type: integer - type: 'null' title: Turns description: Number of agentic iterations user_feedback: anyOf: - type: string enum: - up - down - type: 'null' title: User Feedback description: User feedback on response quality sender_key: anyOf: - type: string - type: 'null' title: Sender Key description: Who produced this message (agent_key or 'user') target_key: anyOf: - type: string - type: 'null' title: Target Key description: Who this message was directed at via @mention agent_trace: anyOf: - items: $ref: '#/components/schemas/AgentTraceStep' type: array - type: 'null' title: Agent Trace description: Inter-agent delegation trace for direct agent chat messages created_at: type: string format: date-time title: Created At description: Message creation timestamp type: object required: - id - conversation_id - role - content - created_at title: AgentMessageResponse description: 'Response schema for agent message. Includes: - Message content (role, content) - MCP tool execution history (tool_calls) - Cost tracking (tokens_used) - Agentic iteration count (turns)' example: content: Your campaigns have an average ROAS of 3.2 over the last 30 days. conversation_id: 123e4567-e89b-12d3-a456-426614174002 created_at: '2025-11-05T20:30:00Z' id: 123e4567-e89b-12d3-a456-426614174004 role: assistant tokens_used: 450 turns: 2 ui_tool_calls: - arguments: date_range_days: 30 execution_time_ms: 245 result: clicks: 1500 roas: 3.2 success: true tool: get_campaign_analytics AgentModeStartRequest: properties: company_url: anyOf: - type: string maxLength: 2083 minLength: 1 format: uri - type: string title: Company Url company_profile_id: type: string format: uuid title: Company Profile Id keep_existing_images: type: boolean title: Keep Existing Images default: false force_restart: type: boolean title: Force Restart default: false social_overrides: anyOf: - additionalProperties: true type: object - type: 'null' title: Social Overrides type: object required: - company_url - company_profile_id title: AgentModeStartRequest description: Request payload for starting agent mode on a brand workflow. AgentSelection: properties: agent_key: type: string maxLength: 64 minLength: 1 title: Agent Key enabled: type: boolean title: Enabled default: true display_name: anyOf: - type: string maxLength: 255 - type: 'null' title: Display Name type: object required: - agent_key title: AgentSelection AgentTaskCapabilityResult: properties: supported: type: boolean title: Supported task_type: anyOf: - type: string - type: 'null' title: Task Type reason: anyOf: - type: string - type: 'null' title: Reason suggestions: items: type: string type: array title: Suggestions type: object required: - supported title: AgentTaskCapabilityResult AgentTaskCreate: properties: organization_id: type: string format: uuid title: Organization Id company_profile_id: type: string format: uuid title: Company Profile Id conversation_id: type: string format: uuid title: Conversation Id objective_nl: type: string maxLength: 2000 minLength: 6 title: Objective Nl name: anyOf: - type: string maxLength: 255 - type: 'null' title: Name task_type: anyOf: - type: string enum: - competitor_new_ads - competitor_top_ads - campaign_metrics - market_trends_changes - industry_intel_digest - social_mentions - campaign_ideas_lucky - type: 'null' title: Task Type no_change_behavior: type: string enum: - silent - notify_no_change title: No Change Behavior default: silent delivery_mode: type: string enum: - immediate - digest title: Delivery Mode default: immediate delivery_destination: type: string enum: - thread - slack - both title: Delivery Destination default: thread schedule: $ref: '#/components/schemas/AgentTaskScheduleInput' thresholds: anyOf: - additionalProperties: true type: object - type: 'null' title: Thresholds quiet_hours: anyOf: - additionalProperties: true type: object - type: 'null' title: Quiet Hours type: object required: - organization_id - company_profile_id - conversation_id - objective_nl title: AgentTaskCreate AgentTaskListResponse: properties: tasks: items: $ref: '#/components/schemas/AgentTaskResponse' type: array title: Tasks total: type: integer title: Total type: object required: - tasks - total title: AgentTaskListResponse AgentTaskResponse: properties: id: anyOf: - type: string - type: 'null' title: Id organization_id: type: string format: uuid title: Organization Id user_id: type: string format: uuid title: User Id company_profile_id: type: string format: uuid title: Company Profile Id conversation_id: type: string format: uuid title: Conversation Id name: type: string title: Name objective_nl: type: string title: Objective Nl objective_structured_json: anyOf: - additionalProperties: true type: object - type: 'null' title: Objective Structured Json task_type: type: string title: Task Type tool_profile: type: string title: Tool Profile schedule_type: type: string title: Schedule Type schedule_expression: type: string title: Schedule Expression timezone: type: string title: Timezone status: type: string title: Status no_change_behavior: type: string title: No Change Behavior delivery_mode: type: string title: Delivery Mode delivery_destination: type: string title: Delivery Destination quiet_hours_json: anyOf: - additionalProperties: true type: object - type: 'null' title: Quiet Hours Json thresholds_json: anyOf: - additionalProperties: true type: object - type: 'null' title: Thresholds Json next_run_at: type: string format: date-time title: Next Run At last_run_at: anyOf: - type: string format: date-time - type: 'null' title: Last Run At last_run_status: anyOf: - type: string - type: 'null' title: Last Run Status last_result_summary: anyOf: - type: string - type: 'null' title: Last Result Summary run_count: type: integer title: Run Count default: 0 created_at: type: string format: date-time title: Created At updated_at: type: string format: date-time title: Updated At type: object required: - id - organization_id - user_id - company_profile_id - conversation_id - name - objective_nl - task_type - tool_profile - schedule_type - schedule_expression - timezone - status - no_change_behavior - delivery_mode - delivery_destination - next_run_at - created_at - updated_at title: AgentTaskResponse AgentTaskRunListResponse: properties: runs: items: $ref: '#/components/schemas/AgentTaskRunResponse' type: array title: Runs total: type: integer title: Total type: object required: - runs - total title: AgentTaskRunListResponse AgentTaskRunNowResponse: properties: task: $ref: '#/components/schemas/AgentTaskResponse' run: $ref: '#/components/schemas/AgentTaskRunResponse' type: object required: - task - run title: AgentTaskRunNowResponse AgentTaskRunResponse: properties: id: anyOf: - type: string - type: 'null' title: Id task_id: type: string format: uuid title: Task Id run_key: type: string title: Run Key status: type: string title: Status scheduled_at: type: string format: date-time title: Scheduled At started_at: anyOf: - type: string format: date-time - type: 'null' title: Started At completed_at: anyOf: - type: string format: date-time - type: 'null' title: Completed At summary_json: anyOf: - additionalProperties: true type: object - type: 'null' title: Summary Json source_refs_json: anyOf: - additionalProperties: true type: object - type: 'null' title: Source Refs Json alert_emitted: type: boolean title: Alert Emitted emitted_message_id: anyOf: - type: string format: uuid - type: 'null' title: Emitted Message Id error_text: anyOf: - type: string - type: 'null' title: Error Text retry_count: type: integer title: Retry Count attempt: type: integer title: Attempt lease_expires_at: anyOf: - type: string format: date-time - type: 'null' title: Lease Expires At heartbeat_at: anyOf: - type: string format: date-time - type: 'null' title: Heartbeat At worker_id: anyOf: - type: string - type: 'null' title: Worker Id recovery_reason: anyOf: - type: string - type: 'null' title: Recovery 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 - task_id - run_key - status - scheduled_at - alert_emitted - retry_count - attempt - created_at - updated_at title: AgentTaskRunResponse AgentTaskScheduleInput: properties: interval_minutes: type: integer maximum: 10080.0 minimum: 5.0 title: Interval Minutes description: Run interval in minutes default: 1440 type: object title: AgentTaskScheduleInput description: Simple interval schedule (minutes). AgentTaskUpdate: properties: name: anyOf: - type: string maxLength: 255 - type: 'null' title: Name status: anyOf: - type: string enum: - active - paused - error - deleted - type: 'null' title: Status no_change_behavior: anyOf: - type: string enum: - silent - notify_no_change - type: 'null' title: No Change Behavior delivery_mode: anyOf: - type: string enum: - immediate - digest - type: 'null' title: Delivery Mode delivery_destination: anyOf: - type: string enum: - thread - slack - both - type: 'null' title: Delivery Destination schedule: anyOf: - $ref: '#/components/schemas/AgentTaskScheduleInput' - type: 'null' thresholds: anyOf: - additionalProperties: true type: object - type: 'null' title: Thresholds quiet_hours: anyOf: - additionalProperties: true type: object - type: 'null' title: Quiet Hours type: object title: AgentTaskUpdate AgentTeamActionListResponse: properties: actions: items: $ref: '#/components/schemas/AgentTeamActionResponse' type: array title: Actions total: type: integer title: Total has_more: type: boolean title: Has More default: false next_cursor_updated_at: anyOf: - type: string format: date-time - type: 'null' title: Next Cursor Updated At next_cursor_id: anyOf: - type: string format: uuid - type: 'null' title: Next Cursor Id type: object required: - actions - total title: AgentTeamActionListResponse AgentTeamActionResponse: properties: id: type: string format: uuid title: Id team_id: type: string format: uuid title: Team Id run_id: anyOf: - type: string format: uuid - type: 'null' title: Run Id recommendation_id: anyOf: - type: string format: uuid - type: 'null' title: Recommendation Id recommendation_key: type: string title: Recommendation Key recommendation_external_id: anyOf: - type: string - type: 'null' title: Recommendation External Id approval_id: anyOf: - type: string format: uuid - type: 'null' title: Approval Id owner_agent_key: anyOf: - type: string - type: 'null' title: Owner Agent Key title: type: string title: Title priority: anyOf: - type: string - type: 'null' title: Priority risk: anyOf: - type: string - type: 'null' title: Risk status: anyOf: - type: string enum: - proposed - needs_approval - approved - executing - in_progress - live - completed - failed - blocked - cancelled - type: string title: Status status_reason: anyOf: - type: string - type: 'null' title: Status Reason due_at: anyOf: - type: string format: date-time - type: 'null' title: Due At change_scope: anyOf: - type: string - type: 'null' title: Change Scope change_from: anyOf: - type: string - type: 'null' title: Change From change_to: anyOf: - type: string - type: 'null' title: Change To why_now: anyOf: - type: string - type: 'null' title: Why Now impact_estimate: anyOf: - type: string - type: 'null' title: Impact Estimate rationale: anyOf: - type: string - type: 'null' title: Rationale execution_started_at: anyOf: - type: string format: date-time - type: 'null' title: Execution Started At execution_completed_at: anyOf: - type: string format: date-time - type: 'null' title: Execution Completed At outcome_state: anyOf: - type: string - type: 'null' title: Outcome State outcome_summary: anyOf: - type: string - type: 'null' title: Outcome Summary payload_json: anyOf: - additionalProperties: true type: object - type: 'null' title: Payload Json first_seen_at: type: string format: date-time title: First Seen At last_seen_at: type: string format: date-time title: Last Seen At last_transition_at: anyOf: - type: string format: date-time - type: 'null' title: Last Transition 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 - team_id - recommendation_key - title - status - first_seen_at - last_seen_at - created_at - updated_at title: AgentTeamActionResponse AgentTeamActionRetryRequest: properties: note: anyOf: - type: string maxLength: 2000 - type: 'null' title: Note launch_account_overrides: anyOf: - $ref: '#/components/schemas/AgentTeamLaunchAccountOverrides' - type: 'null' type: object title: AgentTeamActionRetryRequest AgentTeamActionStatusUpdateRequest: properties: status: type: string enum: - proposed - needs_approval - approved - executing - in_progress - live - completed - failed - blocked - cancelled title: Status note: anyOf: - type: string maxLength: 2000 - type: 'null' title: Note outcome_state: anyOf: - type: string maxLength: 64 - type: 'null' title: Outcome State outcome_summary: anyOf: - type: string maxLength: 4000 - type: 'null' title: Outcome Summary type: object required: - status title: AgentTeamActionStatusUpdateRequest AgentTeamAgentReliabilityResponse: properties: agent_key: type: string title: Agent Key display_name: type: string title: Display Name success_count: type: integer title: Success Count default: 0 failure_count: type: integer title: Failure Count default: 0 neutral_count: type: integer title: Neutral Count default: 0 total_count: type: integer title: Total Count default: 0 score: type: number title: Score default: 0.0 score_level: anyOf: - type: string - type: 'null' title: Score Level rubric_version: anyOf: - type: string - type: 'null' title: Rubric Version updated_at: anyOf: - type: string format: date-time - type: 'null' title: Updated At type: object required: - agent_key - display_name title: AgentTeamAgentReliabilityResponse AgentTeamAgentResponse: properties: id: type: string format: uuid title: Id team_id: type: string format: uuid title: Team Id agent_key: type: string title: Agent Key display_name: type: string title: Display Name role: type: string title: Role is_active: type: boolean title: Is Active capabilities_json: items: type: string type: array title: Capabilities Json tool_allowlist_json: items: type: string type: array title: Tool Allowlist Json config_json: anyOf: - additionalProperties: true type: object - type: 'null' title: Config Json prompt_text: anyOf: - type: string - type: 'null' title: Prompt Text base_daily_routine: items: $ref: '#/components/schemas/AgentTeamRoutineStepResponse' type: array title: Base Daily Routine effective_daily_routine: items: $ref: '#/components/schemas/AgentTeamRoutineStepResponse' type: array title: Effective Daily Routine custom_daily_routine_text: anyOf: - type: string - type: 'null' title: Custom Daily Routine Text custom_daily_routine_updated_at: anyOf: - type: string format: date-time - type: 'null' title: Custom Daily Routine Updated At custom_daily_routine_updated_by_user_id: anyOf: - type: string - type: 'null' title: Custom Daily Routine Updated By User Id custom_daily_routine_updated_by_agent_key: anyOf: - type: string - type: 'null' title: Custom Daily Routine Updated By Agent Key custom_daily_routine_update_source: anyOf: - type: string - type: 'null' title: Custom Daily Routine Update Source effective_is_active: anyOf: - type: boolean - type: 'null' title: Effective Is Active module_key: anyOf: - type: string - type: 'null' title: Module Key disabled_by_module_key: anyOf: - type: string - type: 'null' title: Disabled By Module Key created_at: type: string format: date-time title: Created At updated_at: type: string format: date-time title: Updated At type: object required: - id - team_id - agent_key - display_name - role - is_active - capabilities_json - tool_allowlist_json - created_at - updated_at title: AgentTeamAgentResponse AgentTeamAgentUpdate: properties: enabled: anyOf: - type: boolean - type: 'null' title: Enabled display_name: anyOf: - type: string maxLength: 255 - type: 'null' title: Display Name custom_daily_routine_text: anyOf: - type: string maxLength: 8000 - type: 'null' title: Custom Daily Routine Text type: object title: AgentTeamAgentUpdate AgentTeamApprovalBulkDecisionError: properties: approval_id: type: string format: uuid title: Approval Id message: type: string title: Message type: object required: - approval_id - message title: AgentTeamApprovalBulkDecisionError AgentTeamApprovalBulkDecisionRequest: properties: approval_ids: items: type: string format: uuid type: array title: Approval Ids decision: type: string enum: - approved - rejected - deferred title: Decision note: anyOf: - type: string maxLength: 2000 - type: 'null' title: Note defer_hours: anyOf: - type: integer maximum: 168.0 minimum: 1.0 - type: 'null' title: Defer Hours type: object required: - decision title: AgentTeamApprovalBulkDecisionRequest AgentTeamApprovalBulkDecisionResponse: properties: approvals: items: $ref: '#/components/schemas/AgentTeamApprovalResponse' type: array title: Approvals applied_count: type: integer title: Applied Count default: 0 skipped_count: type: integer title: Skipped Count default: 0 errors: items: $ref: '#/components/schemas/AgentTeamApprovalBulkDecisionError' type: array title: Errors type: object title: AgentTeamApprovalBulkDecisionResponse AgentTeamApprovalDecisionRequest: properties: decision: type: string enum: - approved - rejected - deferred title: Decision note: anyOf: - type: string maxLength: 2000 - type: 'null' title: Note defer_hours: anyOf: - type: integer maximum: 168.0 minimum: 1.0 - type: 'null' title: Defer Hours selected_bundle_item_ids: anyOf: - items: type: string type: array maxItems: 100 - type: 'null' title: Selected Bundle Item Ids selected_plan_ids: anyOf: - items: type: string type: array maxItems: 100 - type: 'null' title: Selected Plan Ids selected_creative_ids: items: type: string type: array maxItems: 100 title: Selected Creative Ids creative_schedule_overrides: items: $ref: '#/components/schemas/AgentTeamCreativeScheduleOverride' type: array maxItems: 100 title: Creative Schedule Overrides launch_account_overrides: anyOf: - $ref: '#/components/schemas/AgentTeamLaunchAccountOverrides' - type: 'null' selected_optimization_option_id: anyOf: - type: string maxLength: 200 - type: 'null' title: Selected Optimization Option Id selected_optimization_option_ids: items: type: string type: array maxItems: 200 title: Selected Optimization Option Ids selected_optimization_action_ids: anyOf: - items: type: string type: array maxItems: 400 - type: 'null' title: Selected Optimization Action Ids type: object required: - decision title: AgentTeamApprovalDecisionRequest AgentTeamApprovalListResponse: properties: approvals: items: $ref: '#/components/schemas/AgentTeamApprovalResponse' type: array title: Approvals total: type: integer title: Total matching_total: type: integer title: Matching Total default: 0 type: object required: - approvals - total title: AgentTeamApprovalListResponse AgentTeamApprovalResponse: properties: id: type: string format: uuid title: Id team_id: type: string format: uuid title: Team Id run_id: anyOf: - type: string format: uuid - type: 'null' title: Run Id recommendation_id: anyOf: - type: string - type: 'null' title: Recommendation Id owner_agent_key: anyOf: - type: string - type: 'null' title: Owner Agent Key title: type: string title: Title priority: anyOf: - type: string - type: 'null' title: Priority risk: anyOf: - type: string - type: 'null' title: Risk approval_state: anyOf: - type: string enum: - pending_approval - approved - rejected - auto_approved - deferred - escalated - expired - type: string title: Approval State approval_reason: anyOf: - type: string - type: 'null' title: Approval Reason decision_note: anyOf: - type: string - type: 'null' title: Decision Note decided_by_user_id: anyOf: - type: string format: uuid - type: 'null' title: Decided By User Id decided_at: anyOf: - type: string format: date-time - type: 'null' title: Decided At defer_until_at: anyOf: - type: string format: date-time - type: 'null' title: Defer Until At escalated_at: anyOf: - type: string format: date-time - type: 'null' title: Escalated At expired_at: anyOf: - type: string format: date-time - type: 'null' title: Expired At payload_json: anyOf: - additionalProperties: true type: object - type: 'null' title: Payload Json created_at: type: string format: date-time title: Created At updated_at: type: string format: date-time title: Updated At type: object required: - id - team_id - title - approval_state - created_at - updated_at title: AgentTeamApprovalResponse AgentTeamBundleItemGenerationResponse: properties: approval: $ref: '#/components/schemas/AgentTeamApprovalResponse' action_id: type: string format: uuid title: Action Id item_id: type: string title: Item Id generated_item_ids: items: type: string type: array title: Generated Item Ids remaining_item_ids: items: type: string type: array title: Remaining Item Ids approval_resolved: type: boolean title: Approval Resolved project_id: anyOf: - type: string format: uuid - type: 'null' title: Project Id type: object required: - approval - action_id - item_id - generated_item_ids - remaining_item_ids - approval_resolved title: AgentTeamBundleItemGenerationResponse description: Result of sending one selectable bundle item to private generation. AgentTeamBundleItemSkipResponse: properties: approval: $ref: '#/components/schemas/AgentTeamApprovalResponse' item_id: type: string title: Item Id skipped_item_ids: items: type: string type: array title: Skipped Item Ids remaining_item_ids: items: type: string type: array title: Remaining Item Ids approval_resolved: type: boolean title: Approval Resolved type: object required: - approval - item_id - skipped_item_ids - remaining_item_ids - approval_resolved title: AgentTeamBundleItemSkipResponse description: Result of declining one selectable bundle item. AgentTeamCommandCreate: properties: content: type: string maxLength: 4000 minLength: 1 title: Content context_json: anyOf: - additionalProperties: true type: object - type: 'null' title: Context Json type: object required: - content title: AgentTeamCommandCreate AgentTeamCommandListResponse: properties: commands: items: $ref: '#/components/schemas/AgentTeamCommandResponse' type: array title: Commands total: type: integer title: Total type: object required: - commands - total title: AgentTeamCommandListResponse AgentTeamCommandResponse: properties: id: type: string format: uuid title: Id team_id: type: string format: uuid title: Team Id user_id: anyOf: - type: string format: uuid - type: 'null' title: User Id run_id: anyOf: - type: string format: uuid - type: 'null' title: Run Id content: type: string title: Content context_json: anyOf: - additionalProperties: true type: object - type: 'null' title: Context Json status: type: string title: Status consumed_at: anyOf: - type: string format: date-time - type: 'null' title: Consumed 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 - team_id - content - status - created_at - updated_at title: AgentTeamCommandResponse AgentTeamConsultRequest: properties: agent_key: type: string maxLength: 64 minLength: 1 title: Agent Key message: type: string maxLength: 4000 minLength: 1 title: Message intent: type: string enum: - ask - propose title: Intent default: ask context_json: anyOf: - additionalProperties: true type: object - type: 'null' title: Context Json type: object required: - agent_key - message title: AgentTeamConsultRequest AgentTeamConsultResponse: properties: policy: $ref: '#/components/schemas/AgentTeamInteractionPolicyResponse' run: $ref: '#/components/schemas/AgentTeamRunResponse' target_agent_key: type: string title: Target Agent Key user_message: $ref: '#/components/schemas/AgentTeamMessageResponse' agent_response: anyOf: - $ref: '#/components/schemas/AgentTeamMessageResponse' - type: 'null' manager_handoff_message: anyOf: - $ref: '#/components/schemas/AgentTeamMessageResponse' - type: 'null' manager_decision_message: anyOf: - $ref: '#/components/schemas/AgentTeamMessageResponse' - type: 'null' type: object required: - policy - run - target_agent_key - user_message title: AgentTeamConsultResponse AgentTeamControlSnapshotResponse: properties: id: type: string format: uuid title: Id organization_id: type: string format: uuid title: Organization Id company_profile_id: type: string format: uuid title: Company Profile Id status: type: string enum: - active - paused - error - deleted title: Status updated_at: type: string format: date-time title: Updated At type: object required: - id - organization_id - company_profile_id - status - updated_at title: AgentTeamControlSnapshotResponse description: Minimal read-only preflight for a server-authored chat control card. AgentTeamCreate: properties: organization_id: type: string format: uuid title: Organization Id company_profile_id: type: string format: uuid title: Company Profile Id name: anyOf: - type: string maxLength: 255 - type: 'null' title: Name schedule_minutes: type: integer maximum: 10080.0 minimum: 1.0 title: Schedule Minutes default: 1440 approval_mode: type: string enum: - approval_first - auto_low_risk - auto_all title: Approval Mode default: approval_first template_version: type: string maxLength: 80 minLength: 1 title: Template Version default: data_intel_team agents: anyOf: - items: $ref: '#/components/schemas/AgentSelection' type: array - type: 'null' title: Agents goal_contract_json: anyOf: - additionalProperties: true type: object - type: 'null' title: Goal Contract Json type: object required: - organization_id - company_profile_id title: AgentTeamCreate AgentTeamCreativeScheduleOverride: properties: selection_id: type: string maxLength: 200 minLength: 1 title: Selection Id scheduled_local_date: anyOf: - type: string maxLength: 20 - type: 'null' title: Scheduled Local Date scheduled_local_time: anyOf: - type: string maxLength: 10 - type: 'null' title: Scheduled Local Time schedule_timezone: anyOf: - type: string maxLength: 80 - type: 'null' title: Schedule Timezone type: object required: - selection_id title: AgentTeamCreativeScheduleOverride AgentTeamDailySummaryListResponse: properties: summaries: items: $ref: '#/components/schemas/AgentTeamDailySummaryResponse' type: array title: Summaries total: type: integer title: Total has_more: type: boolean title: Has More default: false next_cursor_created_at: anyOf: - type: string format: date-time - type: 'null' title: Next Cursor Created At next_cursor_id: anyOf: - type: string format: uuid - type: 'null' title: Next Cursor Id type: object required: - summaries - total title: AgentTeamDailySummaryListResponse AgentTeamDailySummaryResponse: properties: id: type: string format: uuid title: Id team_id: type: string format: uuid title: Team Id run_id: anyOf: - type: string format: uuid - type: 'null' title: Run Id summary_date: type: string format: date title: Summary Date title: type: string title: Title ops_blog_markdown: type: string title: Ops Blog Markdown marketing_blog_markdown: type: string title: Marketing Blog Markdown highlights_json: anyOf: - additionalProperties: true type: object - type: 'null' title: Highlights Json created_at: type: string format: date-time title: Created At type: object required: - id - team_id - summary_date - title - ops_blog_markdown - marketing_blog_markdown - created_at title: AgentTeamDailySummaryResponse AgentTeamDetailResponse: properties: id: type: string format: uuid title: Id organization_id: type: string format: uuid title: Organization Id company_profile_id: type: string format: uuid title: Company Profile Id created_by_user_id: anyOf: - type: string format: uuid - type: 'null' title: Created By User Id name: type: string title: Name status: type: string enum: - active - paused - error - deleted title: Status approval_mode: type: string title: Approval Mode template_version: type: string title: Template Version default_schedule_minutes: type: integer title: Default Schedule Minutes next_run_at: anyOf: - type: string format: date-time - type: 'null' title: Next Run At last_run_at: anyOf: - type: string format: date-time - type: 'null' title: Last Run At last_run_status: anyOf: - type: string - type: 'null' title: Last Run Status task_id: anyOf: - type: string format: uuid - type: 'null' title: Task Id conversation_id: anyOf: - type: string format: uuid - type: 'null' title: Conversation Id settings_json: anyOf: - additionalProperties: true type: object - type: 'null' title: Settings Json created_at: type: string format: date-time title: Created At updated_at: type: string format: date-time title: Updated At primary_agent_key: anyOf: - type: string - type: 'null' title: Primary Agent Key agents: items: $ref: '#/components/schemas/AgentTeamAgentResponse' type: array title: Agents modules: items: $ref: '#/components/schemas/AgentTeamModuleResponse' type: array title: Modules pending_run_guidance: anyOf: - $ref: '#/components/schemas/AgentTeamRunGuidanceResponse' - type: 'null' type: object required: - id - organization_id - company_profile_id - name - status - approval_mode - template_version - default_schedule_minutes - created_at - updated_at title: AgentTeamDetailResponse AgentTeamDirectorInsightProjectionResponse: properties: run_id: type: string format: uuid title: Run Id package: $ref: '#/components/schemas/DirectorInsightPackageResponse' type: object required: - run_id - package title: AgentTeamDirectorInsightProjectionResponse description: Run-bound Director package for the lightweight daily-report endpoint. AgentTeamEventListResponse: properties: events: items: $ref: '#/components/schemas/AgentTeamEventResponse' type: array title: Events total: type: integer title: Total has_more: type: boolean title: Has More default: false next_cursor_created_at: anyOf: - type: string format: date-time - type: 'null' title: Next Cursor Created At next_cursor_id: anyOf: - type: string format: uuid - type: 'null' title: Next Cursor Id type: object required: - events - total title: AgentTeamEventListResponse AgentTeamEventResponse: properties: id: type: string format: uuid title: Id team_id: type: string format: uuid title: Team Id run_id: type: string format: uuid title: Run Id agent_key: anyOf: - type: string - type: 'null' title: Agent Key event_type: type: string title: Event Type title: type: string title: Title content: anyOf: - type: string - type: 'null' title: Content payload_json: anyOf: - additionalProperties: true type: object - type: 'null' title: Payload Json created_at: type: string format: date-time title: Created At type: object required: - id - team_id - run_id - event_type - title - created_at title: AgentTeamEventResponse AgentTeamFleetSnapshotResponse: properties: organization_id: type: string format: uuid title: Organization Id generated_at: type: string format: date-time title: Generated At offset: type: integer title: Offset default: 0 limit: type: integer title: Limit default: 200 has_more: type: boolean title: Has More default: false sort_by: type: string title: Sort By default: updated_at sort_order: type: string title: Sort Order default: desc status_filter: anyOf: - type: string - type: 'null' title: Status Filter blocked_only: type: boolean title: Blocked Only default: false totals: additionalProperties: type: integer type: object title: Totals teams: items: $ref: '#/components/schemas/AgentTeamFleetTeamResponse' type: array title: Teams type: object required: - organization_id - generated_at title: AgentTeamFleetSnapshotResponse AgentTeamFleetTeamResponse: properties: team_id: type: string format: uuid title: Team Id company_profile_id: type: string format: uuid title: Company Profile Id team_name: type: string title: Team Name status: anyOf: - type: string enum: - active - paused - error - deleted - type: string title: Status updated_at: anyOf: - type: string format: date-time - type: 'null' title: Updated At last_run_status: anyOf: - type: string - type: 'null' title: Last Run Status last_run_at: anyOf: - type: string format: date-time - type: 'null' title: Last Run At next_run_at: anyOf: - type: string format: date-time - type: 'null' title: Next Run At pending_approvals: type: integer title: Pending Approvals default: 0 escalated_approvals: type: integer title: Escalated Approvals default: 0 open_approvals: type: integer title: Open Approvals default: 0 live_runs: type: integer title: Live Runs default: 0 recommendation_counts: additionalProperties: type: integer type: object title: Recommendation Counts blocked: type: boolean title: Blocked default: false blocker_reasons: items: type: string type: array title: Blocker Reasons type: object required: - team_id - company_profile_id - team_name - status title: AgentTeamFleetTeamResponse AgentTeamGoalContractRequest: properties: goal_contract_json: additionalProperties: true type: object title: Goal Contract Json type: object title: AgentTeamGoalContractRequest AgentTeamGoalContractResponse: properties: goal_contract_json: additionalProperties: true type: object title: Goal Contract Json type: object title: AgentTeamGoalContractResponse AgentTeamInteractionPolicyResponse: properties: phase: type: integer enum: - 1 - 2 - 3 title: Phase phase_label: type: string title: Phase Label manager_control_plane: type: boolean title: Manager Control Plane default: true manager_commit_required: type: boolean title: Manager Commit Required default: true commit_intents_enabled: type: boolean title: Commit Intents Enabled default: false non_manager_proposal_only: type: boolean title: Non Manager Proposal Only default: true phase1_specialist_key: anyOf: - type: string - type: 'null' title: Phase1 Specialist Key allowed_non_manager_agent_keys: items: type: string type: array title: Allowed Non Manager Agent Keys allowed_agent_keys: items: type: string type: array title: Allowed Agent Keys active_agent_keys: items: type: string type: array title: Active Agent Keys updated_at: anyOf: - type: string - type: 'null' title: Updated At updated_by_user_id: anyOf: - type: string - type: 'null' title: Updated By User Id type: object required: - phase - phase_label title: AgentTeamInteractionPolicyResponse AgentTeamInteractionPolicyUpdateRequest: properties: phase: type: integer enum: - 1 - 2 - 3 title: Phase phase1_specialist_key: anyOf: - type: string maxLength: 64 minLength: 1 - type: 'null' title: Phase1 Specialist Key type: object required: - phase title: AgentTeamInteractionPolicyUpdateRequest AgentTeamLaunchAccountOverrides: properties: google_account_id: anyOf: - type: string maxLength: 80 - type: 'null' title: Google Account Id login_customer_id: anyOf: - type: string maxLength: 80 - type: 'null' title: Login Customer Id ad_account_id: anyOf: - type: string maxLength: 80 - type: 'null' title: Ad Account Id meta_account_id: anyOf: - type: string maxLength: 80 - type: 'null' title: Meta Account Id page_id: anyOf: - type: string maxLength: 80 - type: 'null' title: Page Id instagram_account_id: anyOf: - type: string maxLength: 80 - type: 'null' title: Instagram Account Id advertiser_id: anyOf: - type: string maxLength: 80 - type: 'null' title: Advertiser Id tiktok_advertiser_id: anyOf: - type: string maxLength: 80 - type: 'null' title: Tiktok Advertiser Id type: object title: AgentTeamLaunchAccountOverrides AgentTeamLearningNoteUpdateRequest: properties: markdown: type: string maxLength: 20000 minLength: 1 title: Markdown type: object required: - markdown title: AgentTeamLearningNoteUpdateRequest AgentTeamLearningSummaryResponse: properties: learning_notes: items: additionalProperties: true type: object type: array title: Learning Notes type: object title: AgentTeamLearningSummaryResponse AgentTeamListResponse: properties: teams: items: $ref: '#/components/schemas/AgentTeamResponse' type: array title: Teams total: type: integer title: Total type: object required: - teams - total title: AgentTeamListResponse AgentTeamMessageListResponse: properties: messages: items: $ref: '#/components/schemas/AgentTeamMessageResponse' type: array title: Messages total: type: integer title: Total has_more: type: boolean title: Has More default: false next_cursor_created_at: anyOf: - type: string format: date-time - type: 'null' title: Next Cursor Created At next_cursor_id: anyOf: - type: string format: uuid - type: 'null' title: Next Cursor Id type: object required: - messages - total title: AgentTeamMessageListResponse AgentTeamMessageResponse: properties: id: type: string format: uuid title: Id team_id: type: string format: uuid title: Team Id run_id: type: string format: uuid title: Run Id from_agent_key: type: string title: From Agent Key to_agent_key: type: string title: To Agent Key message_type: type: string title: Message Type content: type: string title: Content payload_json: anyOf: - additionalProperties: true type: object - type: 'null' title: Payload Json correlation_id: anyOf: - type: string - type: 'null' title: Correlation Id created_at: type: string format: date-time title: Created At type: object required: - id - team_id - run_id - from_agent_key - to_agent_key - message_type - content - created_at title: AgentTeamMessageResponse AgentTeamMissionFeedEntryResponse: properties: id: type: string title: Id team_id: type: string format: uuid title: Team Id run_id: anyOf: - type: string format: uuid - type: 'null' title: Run Id source_type: type: string title: Source Type event_type: anyOf: - type: string - type: 'null' title: Event Type actor: type: string title: Actor title: type: string title: Title body: anyOf: - type: string - type: 'null' title: Body status: anyOf: - type: string - type: 'null' title: Status severity: anyOf: - type: string - type: 'null' title: Severity payload_json: anyOf: - additionalProperties: true type: object - type: 'null' title: Payload Json created_at: type: string format: date-time title: Created At type: object required: - id - team_id - source_type - actor - title - created_at title: AgentTeamMissionFeedEntryResponse AgentTeamMissionFeedListResponse: properties: entries: items: $ref: '#/components/schemas/AgentTeamMissionFeedEntryResponse' type: array title: Entries total: type: integer title: Total has_more: type: boolean title: Has More default: false next_cursor_created_at: anyOf: - type: string format: date-time - type: 'null' title: Next Cursor Created At next_cursor_id: anyOf: - type: string - type: 'null' title: Next Cursor Id type: object required: - entries - total title: AgentTeamMissionFeedListResponse AgentTeamModuleResponse: properties: key: type: string title: Key label: type: string title: Label description: type: string title: Description enabled: type: boolean title: Enabled disableable: type: boolean title: Disableable default: true coordinator_key: anyOf: - type: string - type: 'null' title: Coordinator Key member_agent_keys: items: type: string type: array title: Member Agent Keys member_display_names: items: type: string type: array title: Member Display Names disabled_reason: anyOf: - type: string - type: 'null' title: Disabled Reason updated_at: anyOf: - type: string - type: 'null' title: Updated At updated_by_user_id: anyOf: - type: string - type: 'null' title: Updated By User Id type: object required: - key - label - description - enabled title: AgentTeamModuleResponse AgentTeamModuleUpdate: properties: enabled: type: boolean title: Enabled type: object required: - enabled title: AgentTeamModuleUpdate AgentTeamPendingRunGuidanceResponse: properties: team_id: type: string format: uuid title: Team Id run_guidance: anyOf: - $ref: '#/components/schemas/AgentTeamRunGuidanceResponse' - type: 'null' type: object required: - team_id title: AgentTeamPendingRunGuidanceResponse AgentTeamPolicyAgentResponse: properties: agent_key: type: string title: Agent Key label: type: string title: Label description: type: string title: Description default_display_name: type: string title: Default Display Name role: type: string title: Role required: type: boolean title: Required configurable: type: boolean title: Configurable enabled_by_default: type: boolean title: Enabled By Default type: object required: - agent_key - label - description - default_display_name - role - required - configurable - enabled_by_default title: AgentTeamPolicyAgentResponse AgentTeamPolicyModuleResponse: properties: key: type: string title: Key label: type: string title: Label description: type: string title: Description coordinator_key: anyOf: - type: string - type: 'null' title: Coordinator Key member_agent_keys: items: type: string type: array title: Member Agent Keys type: object required: - key - label - description - member_agent_keys title: AgentTeamPolicyModuleResponse AgentTeamPolicyResponse: properties: feature_enabled: type: boolean title: Feature Enabled feature_access: type: boolean title: Feature Access required_tier: type: string title: Required Tier current_tier: type: string title: Current Tier upgrade_url: type: string title: Upgrade Url required_agent_keys: items: type: string type: array title: Required Agent Keys optional_agent_keys: items: type: string type: array title: Optional Agent Keys available_agents: items: $ref: '#/components/schemas/AgentTeamPolicyAgentResponse' type: array title: Available Agents modules: items: $ref: '#/components/schemas/AgentTeamPolicyModuleResponse' type: array title: Modules default_schedule_minutes: type: integer title: Default Schedule Minutes schedule_options_minutes: items: type: integer type: array title: Schedule Options Minutes default_approval_mode: type: string enum: - approval_first - auto_low_risk - auto_all title: Default Approval Mode startup_contract: additionalProperties: true type: object title: Startup Contract type: object required: - feature_enabled - feature_access - required_tier - current_tier - upgrade_url - required_agent_keys - optional_agent_keys - available_agents - default_schedule_minutes - schedule_options_minutes - default_approval_mode - startup_contract title: AgentTeamPolicyResponse AgentTeamRecommendationListResponse: properties: recommendations: items: $ref: '#/components/schemas/AgentTeamRecommendationResponse' type: array title: Recommendations total: type: integer title: Total type: object required: - recommendations - total title: AgentTeamRecommendationListResponse AgentTeamRecommendationOutcomeRequest: properties: outcome: type: string enum: - improved - neutral - regressed - failed - unknown title: Outcome summary: anyOf: - type: string maxLength: 4000 - type: 'null' title: Summary kpi_delta_json: anyOf: - additionalProperties: true type: object - type: 'null' title: Kpi Delta Json observed_at: anyOf: - type: string format: date-time - type: 'null' title: Observed At type: object required: - outcome title: AgentTeamRecommendationOutcomeRequest AgentTeamRecommendationOutcomeResponse: properties: recommendation: $ref: '#/components/schemas/AgentTeamRecommendationResponse' reliability: anyOf: - $ref: '#/components/schemas/AgentTeamAgentReliabilityResponse' - type: 'null' followup_run_id: anyOf: - type: string format: uuid - type: 'null' title: Followup Run Id followup_reused_inflight: type: boolean title: Followup Reused Inflight default: false type: object required: - recommendation title: AgentTeamRecommendationOutcomeResponse AgentTeamRecommendationResponse: properties: id: type: string format: uuid title: Id team_id: type: string format: uuid title: Team Id run_id: anyOf: - type: string format: uuid - type: 'null' title: Run Id recommendation_key: type: string title: Recommendation Key recommendation_id: anyOf: - type: string - type: 'null' title: Recommendation Id owner_agent_key: anyOf: - type: string - type: 'null' title: Owner Agent Key title: type: string title: Title priority: anyOf: - type: string - type: 'null' title: Priority risk: anyOf: - type: string - type: 'null' title: Risk rationale: anyOf: - type: string - type: 'null' title: Rationale approval_state: type: string title: Approval State lifecycle_state: anyOf: - type: string enum: - proposed - needs_approval - approved - rejected - ready_for_execution - observing - completed - cancelled - type: string title: Lifecycle State status_note: anyOf: - type: string - type: 'null' title: Status Note approval_id: anyOf: - type: string format: uuid - type: 'null' title: Approval Id approved_by_user_id: anyOf: - type: string format: uuid - type: 'null' title: Approved By User Id rejected_by_user_id: anyOf: - type: string format: uuid - type: 'null' title: Rejected By User Id first_seen_at: type: string format: date-time title: First Seen At last_seen_at: type: string format: date-time title: Last Seen At approved_at: anyOf: - type: string format: date-time - type: 'null' title: Approved At rejected_at: anyOf: - type: string format: date-time - type: 'null' title: Rejected At kpi_snapshot_json: anyOf: - additionalProperties: true type: object - type: 'null' title: Kpi Snapshot Json kpi_delta_json: anyOf: - additionalProperties: true type: object - type: 'null' title: Kpi Delta Json metadata_json: anyOf: - additionalProperties: true type: object - type: 'null' title: Metadata Json latest_outcome_json: anyOf: - additionalProperties: true type: object - type: 'null' title: Latest Outcome Json outcome_history_json: anyOf: - items: additionalProperties: true type: object type: array - type: 'null' title: Outcome History Json goal_alignment_score: anyOf: - type: number - type: 'null' title: Goal Alignment Score goal_alignment_level: anyOf: - type: string - type: 'null' title: Goal Alignment Level goal_alignment_notes: anyOf: - items: type: string type: array - type: 'null' title: Goal Alignment Notes evidence_json: anyOf: - items: additionalProperties: true type: object type: array - type: 'null' title: Evidence Json citation_urls: anyOf: - items: type: string type: array - type: 'null' title: Citation Urls created_at: type: string format: date-time title: Created At updated_at: type: string format: date-time title: Updated At type: object required: - id - team_id - recommendation_key - title - approval_state - lifecycle_state - first_seen_at - last_seen_at - created_at - updated_at title: AgentTeamRecommendationResponse AgentTeamReportHomeSummaryResponse: properties: decision_items: type: integer title: Decision Items default: 0 creative_assets: type: integer title: Creative Assets default: 0 latest_title: anyOf: - type: string - type: 'null' title: Latest Title latest_at: anyOf: - type: string format: date-time - type: 'null' title: Latest At run_guidance: anyOf: - $ref: '#/components/schemas/AgentTeamRunGuidanceResponse' - type: 'null' sections: additionalProperties: $ref: '#/components/schemas/AgentTeamReportSectionSummaryResponse' type: object title: Sections authored_summary: anyOf: - type: string - type: 'null' title: Authored Summary authored_summary_generated_at: anyOf: - type: string format: date-time - type: 'null' title: Authored Summary Generated At type: object title: AgentTeamReportHomeSummaryResponse AgentTeamReportSectionEvidenceResponse: properties: label: type: string title: Label value: anyOf: - type: string - type: 'null' title: Value detail: anyOf: - type: string - type: 'null' title: Detail tone: anyOf: - type: string - type: 'null' title: Tone metadata: additionalProperties: true type: object title: Metadata type: object required: - label title: AgentTeamReportSectionEvidenceResponse AgentTeamReportSectionSummaryResponse: properties: item_count: type: integer title: Item Count default: 0 asset_count: type: integer title: Asset Count default: 0 latest_title: anyOf: - type: string - type: 'null' title: Latest Title latest_at: anyOf: - type: string format: date-time - type: 'null' title: Latest At headline_metric: anyOf: - type: string - type: 'null' title: Headline Metric headline_delta: anyOf: - type: string - type: 'null' title: Headline Delta status_label: anyOf: - type: string - type: 'null' title: Status Label status_tone: anyOf: - type: string - type: 'null' title: Status Tone note: anyOf: - type: string - type: 'null' title: Note attention_count: anyOf: - type: integer - type: 'null' title: Attention Count evidence: items: $ref: '#/components/schemas/AgentTeamReportSectionEvidenceResponse' type: array title: Evidence type: object title: AgentTeamReportSectionSummaryResponse AgentTeamReportSelectionResponse: properties: status: type: string enum: - latest - resolved - not_found title: Status requested_run_id: anyOf: - type: string format: uuid - type: 'null' title: Requested Run Id resolved_run_id: anyOf: - type: string format: uuid - type: 'null' title: Resolved Run Id type: object required: - status title: AgentTeamReportSelectionResponse description: Authoritative resolution of the report run requested by the client. AgentTeamReportWorkspaceResponse: properties: approvals: items: $ref: '#/components/schemas/AgentTeamApprovalResponse' type: array title: Approvals recommendations: items: $ref: '#/components/schemas/AgentTeamRecommendationResponse' type: array title: Recommendations actions: items: $ref: '#/components/schemas/AgentTeamActionResponse' type: array title: Actions ads_performance_reports: items: additionalProperties: true type: object type: array title: Ads Performance Reports total: type: integer title: Total default: 0 has_more: type: boolean title: Has More default: false offset: type: integer title: Offset default: 0 limit: type: integer title: Limit default: 0 next_offset: anyOf: - type: integer - type: 'null' title: Next Offset timings_ms: additionalProperties: type: number type: object title: Timings Ms type: object title: AgentTeamReportWorkspaceResponse AgentTeamResponse: properties: id: type: string format: uuid title: Id organization_id: type: string format: uuid title: Organization Id company_profile_id: type: string format: uuid title: Company Profile Id created_by_user_id: anyOf: - type: string format: uuid - type: 'null' title: Created By User Id name: type: string title: Name status: type: string enum: - active - paused - error - deleted title: Status approval_mode: type: string title: Approval Mode template_version: type: string title: Template Version default_schedule_minutes: type: integer title: Default Schedule Minutes next_run_at: anyOf: - type: string format: date-time - type: 'null' title: Next Run At last_run_at: anyOf: - type: string format: date-time - type: 'null' title: Last Run At last_run_status: anyOf: - type: string - type: 'null' title: Last Run Status task_id: anyOf: - type: string format: uuid - type: 'null' title: Task Id conversation_id: anyOf: - type: string format: uuid - type: 'null' title: Conversation Id settings_json: anyOf: - additionalProperties: true type: object - type: 'null' title: Settings Json created_at: type: string format: date-time title: Created At updated_at: type: string format: date-time title: Updated At type: object required: - id - organization_id - company_profile_id - name - status - approval_mode - template_version - default_schedule_minutes - created_at - updated_at title: AgentTeamResponse AgentTeamRoutineStepResponse: properties: step_id: type: string title: Step Id label: type: string title: Label required_tool_packs: items: type: string type: array title: Required Tool Packs type: object required: - step_id - label title: AgentTeamRoutineStepResponse AgentTeamRunGraphResponse: properties: team_id: type: string format: uuid title: Team Id run_id: type: string format: uuid title: Run Id version: type: integer title: Version default: 1 template: type: string title: Template default: team_graph_v1 created_at: anyOf: - type: string - type: 'null' title: Created At updated_at: anyOf: - type: string - type: 'null' title: Updated At meta: additionalProperties: true type: object title: Meta progress: additionalProperties: type: integer type: object title: Progress diagnostics: items: additionalProperties: true type: object type: array title: Diagnostics critical_path: additionalProperties: true type: object title: Critical Path nodes: items: additionalProperties: true type: object type: array title: Nodes edges: items: additionalProperties: type: string type: object type: array title: Edges type: object required: - team_id - run_id title: AgentTeamRunGraphResponse AgentTeamRunGuidanceResponse: properties: version: type: integer title: Version default: 1 source: anyOf: - type: string - type: 'null' title: Source text: type: string title: Text created_by_user_id: anyOf: - type: string format: uuid - type: 'null' title: Created By User Id created_by_name: anyOf: - type: string - type: 'null' title: Created By Name created_by_email: anyOf: - type: string - type: 'null' title: Created By Email created_at: anyOf: - type: string format: date-time - type: 'null' title: Created At type: object required: - text title: AgentTeamRunGuidanceResponse AgentTeamRunGuidanceSaveRequest: properties: custom_instructions: anyOf: - type: string maxLength: 600 - type: 'null' title: Custom Instructions description: Focus saved for the team's next run. Empty or null clears the saved focus. type: object title: AgentTeamRunGuidanceSaveRequest AgentTeamRunListResponse: properties: runs: items: $ref: '#/components/schemas/AgentTeamRunResponse' type: array title: Runs total: type: integer title: Total type: object required: - runs - total title: AgentTeamRunListResponse AgentTeamRunNodeInterventionRequest: properties: action: type: string enum: - retry - skip - reprioritize title: Action node_id: type: string maxLength: 255 minLength: 3 title: Node Id note: anyOf: - type: string maxLength: 2000 - type: 'null' title: Note backoff_seconds: anyOf: - type: integer maximum: 900.0 minimum: 1.0 - type: 'null' title: Backoff Seconds priority_boost: anyOf: - type: number maximum: 5.0 minimum: -5.0 - type: 'null' title: Priority Boost type: object required: - action - node_id title: AgentTeamRunNodeInterventionRequest AgentTeamRunNodeInterventionResponse: properties: run: $ref: '#/components/schemas/AgentTeamRunResponse' graph: $ref: '#/components/schemas/AgentTeamRunGraphResponse' type: object required: - run - graph title: AgentTeamRunNodeInterventionResponse AgentTeamRunNowRequest: properties: custom_instructions: anyOf: - type: string maxLength: 600 - type: 'null' title: Custom Instructions description: Optional one-run guidance used as an AI Team prioritization lens. ad_optimization_metric_mode: anyOf: - type: string const: simulation - type: 'null' title: Ad Optimization Metric Mode description: Explicitly run the paid-media audit against isolated simulation facts. Omitted means production provider evidence. Simulation runs never poll providers and never execute recommendations. type: object title: AgentTeamRunNowRequest AgentTeamRunNowResponse: properties: team: $ref: '#/components/schemas/AgentTeamResponse' run: $ref: '#/components/schemas/AgentTeamRunResponse' created_new: type: boolean title: Created New default: false reused_inflight: type: boolean title: Reused Inflight default: false type: object required: - team - run title: AgentTeamRunNowResponse AgentTeamRunResponse: properties: id: type: string format: uuid title: Id team_id: type: string format: uuid title: Team Id trigger_type: type: string title: Trigger Type status: type: string enum: - queued - running - cancelling - cancelled - completed - failed title: Status started_at: anyOf: - type: string format: date-time - type: 'null' title: Started At completed_at: anyOf: - type: string format: date-time - type: 'null' title: Completed At summary_text: anyOf: - type: string - type: 'null' title: Summary Text summary_markdown: anyOf: - type: string - type: 'null' title: Summary Markdown report_headline: anyOf: - type: string - type: 'null' title: Report Headline run_guidance: anyOf: - $ref: '#/components/schemas/AgentTeamRunGuidanceResponse' - type: 'null' stats_json: anyOf: - additionalProperties: true type: object - type: 'null' title: Stats Json run_lifecycle: anyOf: - additionalProperties: true type: object - type: 'null' title: Run Lifecycle error_text: anyOf: - type: string - type: 'null' title: Error Text created_at: type: string format: date-time title: Created At updated_at: type: string format: date-time title: Updated At type: object required: - id - team_id - trigger_type - status - created_at - updated_at title: AgentTeamRunResponse AgentTeamRunStopRequest: properties: note: anyOf: - type: string maxLength: 2000 - type: 'null' title: Note type: object title: AgentTeamRunStopRequest AgentTeamRuntimeControlsUpdate: properties: execution_mode: anyOf: - type: string enum: - prepare_only - approval_gated_execute - type: 'null' title: Execution Mode require_approval_for_external_actions: anyOf: - type: boolean - type: 'null' title: Require Approval For External Actions max_external_actions_per_run: anyOf: - type: integer maximum: 10.0 minimum: 0.0 - type: 'null' title: Max External Actions Per Run inbox_max_drafts_per_run: anyOf: - type: integer maximum: 250.0 minimum: 0.0 - type: 'null' title: Inbox Max Drafts Per Run allow_high_risk_execution: anyOf: - type: boolean - type: 'null' title: Allow High Risk Execution max_creative_generations_per_run: anyOf: - type: integer maximum: 10.0 minimum: 0.0 - type: 'null' title: Max Creative Generations Per Run auto_progress_approved_actions: anyOf: - type: boolean - type: 'null' title: Auto Progress Approved Actions max_auto_progress_per_run: anyOf: - type: integer maximum: 10.0 minimum: 0.0 - type: 'null' title: Max Auto Progress Per Run auto_progress_allow_high_risk: anyOf: - type: boolean - type: 'null' title: Auto Progress Allow High Risk slack_send_manager_reports: anyOf: - type: boolean - type: 'null' title: Slack Send Manager Reports slack_send_approval_alerts: anyOf: - type: boolean - type: 'null' title: Slack Send Approval Alerts slack_channel_id: anyOf: - type: string maxLength: 64 - type: 'null' title: Slack Channel Id type: object title: AgentTeamRuntimeControlsUpdate AgentTeamScheduleSettingsUpdate: properties: jitter_enabled: anyOf: - type: boolean - type: 'null' title: Jitter Enabled jitter_seconds_max: anyOf: - type: integer maximum: 600.0 minimum: 0.0 - type: 'null' title: Jitter Seconds Max type: object title: AgentTeamScheduleSettingsUpdate AgentTeamStartFreshRequest: properties: clear_agent_memory: type: boolean title: Clear Agent Memory default: true clear_pending_commands: type: boolean title: Clear Pending Commands default: true clear_open_approvals: type: boolean title: Clear Open Approvals default: true clear_active_recommendations: type: boolean title: Clear Active Recommendations default: true clear_active_actions: type: boolean title: Clear Active Actions default: true clear_run_history: type: boolean title: Clear Run History default: true note: anyOf: - type: string maxLength: 2000 - type: 'null' title: Note type: object title: AgentTeamStartFreshRequest AgentTeamStartFreshResponse: properties: team: $ref: '#/components/schemas/AgentTeamResponse' started_fresh_at: type: string format: date-time title: Started Fresh At cleared_memory_items: type: integer minimum: 0.0 title: Cleared Memory Items default: 0 dismissed_commands: type: integer minimum: 0.0 title: Dismissed Commands default: 0 expired_approvals: type: integer minimum: 0.0 title: Expired Approvals default: 0 cancelled_recommendations: type: integer minimum: 0.0 title: Cancelled Recommendations default: 0 cancelled_actions: type: integer minimum: 0.0 title: Cancelled Actions default: 0 cleared_events: type: integer minimum: 0.0 title: Cleared Events default: 0 cleared_messages: type: integer minimum: 0.0 title: Cleared Messages default: 0 cleared_runs: type: integer minimum: 0.0 title: Cleared Runs default: 0 cleared_summaries: type: integer minimum: 0.0 title: Cleared Summaries default: 0 audit_run_id: anyOf: - type: string format: uuid - type: 'null' title: Audit Run Id type: object required: - team - started_fresh_at title: AgentTeamStartFreshResponse AgentTeamUpdate: properties: name: anyOf: - type: string maxLength: 255 - type: 'null' title: Name schedule_minutes: anyOf: - type: integer maximum: 10080.0 minimum: 1.0 - type: 'null' title: Schedule Minutes approval_mode: anyOf: - type: string enum: - approval_first - auto_low_risk - auto_all - type: 'null' title: Approval Mode runtime_controls: anyOf: - $ref: '#/components/schemas/AgentTeamRuntimeControlsUpdate' - type: 'null' schedule_settings: anyOf: - $ref: '#/components/schemas/AgentTeamScheduleSettingsUpdate' - type: 'null' module_settings: anyOf: - additionalProperties: $ref: '#/components/schemas/AgentTeamModuleUpdate' type: object - type: 'null' title: Module Settings type: object title: AgentTeamUpdate AgentTeamWorkspaceBootstrapResponse: properties: approvals: items: $ref: '#/components/schemas/AgentTeamApprovalResponse' type: array title: Approvals recommendations: items: $ref: '#/components/schemas/AgentTeamRecommendationResponse' type: array title: Recommendations actions: items: $ref: '#/components/schemas/AgentTeamActionResponse' type: array title: Actions runs: items: $ref: '#/components/schemas/AgentTeamRunResponse' type: array title: Runs mission_feed: items: $ref: '#/components/schemas/AgentTeamMissionFeedEntryResponse' type: array title: Mission Feed timings_ms: additionalProperties: type: number type: object title: Timings Ms type: object required: - approvals - recommendations - actions - runs - mission_feed title: AgentTeamWorkspaceBootstrapResponse AgentTeamWorkspaceInitResponse: properties: policy: $ref: '#/components/schemas/AgentTeamPolicyResponse' team: anyOf: - $ref: '#/components/schemas/AgentTeamDetailResponse' - type: 'null' approvals: items: $ref: '#/components/schemas/AgentTeamApprovalResponse' type: array title: Approvals recommendations: items: $ref: '#/components/schemas/AgentTeamRecommendationResponse' type: array title: Recommendations actions: items: $ref: '#/components/schemas/AgentTeamActionResponse' type: array title: Actions runs: items: $ref: '#/components/schemas/AgentTeamRunResponse' type: array title: Runs mission_feed: items: $ref: '#/components/schemas/AgentTeamMissionFeedEntryResponse' type: array title: Mission Feed report_summary: anyOf: - $ref: '#/components/schemas/AgentTeamReportHomeSummaryResponse' - type: 'null' presentation_daily_report: anyOf: - $ref: '#/components/schemas/PresentationDailyReportResponse' - type: 'null' report_selection: anyOf: - $ref: '#/components/schemas/AgentTeamReportSelectionResponse' - type: 'null' director_insight_projection: anyOf: - $ref: '#/components/schemas/AgentTeamDirectorInsightProjectionResponse' - type: 'null' ads_performance_reports: items: additionalProperties: true type: object type: array title: Ads Performance Reports timings_ms: additionalProperties: type: number type: object title: Timings Ms type: object required: - policy title: AgentTeamWorkspaceInitResponse AgentTraceStep: properties: agent_key: type: string title: Agent Key description: Agent key, e.g. 'market_intelligence' agent_display_name: type: string title: Agent Display Name description: Human-readable name, e.g. 'Market Intelligence Agent' agent_role: type: string title: Agent Role description: 'Role: ''specialist'' or ''manager''' message_type: type: string title: Message Type description: 'Step type: ''analysis'' or ''synthesis''' status: type: string title: Status description: 'Step status: ''thinking'' or ''done''' default: done content: anyOf: - type: string - type: 'null' title: Content description: Full markdown content (null while thinking) type: object required: - agent_key - agent_display_name - agent_role - message_type title: AgentTraceStep description: One step in the agent delegation trace (specialist analysis or manager synthesis). AgenticChatWithFilesResponse: properties: response: type: string title: Response ui_tool_calls: items: additionalProperties: true type: object type: array title: Ui Tool Calls web_citations: items: additionalProperties: true type: object type: array title: Web Citations tokens_used: type: integer title: Tokens Used turns: type: integer title: Turns uploaded_files: items: additionalProperties: true type: object type: array title: Uploaded Files conversation_id: anyOf: - type: string - type: 'null' title: Conversation Id user_message: anyOf: - additionalProperties: true type: object - type: 'null' title: User Message assistant_message: anyOf: - additionalProperties: true type: object - type: 'null' title: Assistant Message ai_policy_eval: anyOf: - additionalProperties: true type: object - type: 'null' title: Ai Policy Eval type: object required: - response - tokens_used - turns title: AgenticChatWithFilesResponse AiPolicyActivateVersionRequest: properties: version_id: anyOf: - type: string - type: 'null' title: Version Id version_ids: anyOf: - items: type: string type: array - type: 'null' title: Version Ids type: object title: AiPolicyActivateVersionRequest description: 'Backwards-compatible activation request. - `version_id`: activate a single version - `version_ids`: activate a policy set (multiple versions), in the provided order' AiPolicyContextWarningResponse: properties: found: type: boolean title: Found default: false evaluation_id: anyOf: - type: string - type: 'null' title: Evaluation Id created_at: anyOf: - type: string - type: 'null' title: Created At ai_policy_eval: anyOf: - additionalProperties: true type: object - type: 'null' title: Ai Policy Eval type: object title: AiPolicyContextWarningResponse description: 'Lightweight lookup for the latest warn-only evaluation matching a UI context. This is intended for inline warnings in campaign details pages (ads/social) and similar surfaces.' AiPolicyDraft: properties: text: type: string title: Text description: Editable draft policy text default: '' source: anyOf: - type: string - type: 'null' title: Source description: 'draft source: generated|manual' updated_at: anyOf: - type: string - type: 'null' title: Updated At description: ISO timestamp updated_by_user_id: anyOf: - type: string - type: 'null' title: Updated By User Id description: User ID who last edited the draft type: object title: AiPolicyDraft AiPolicyDraftUpdateRequest: properties: text: type: string title: Text description: Updated draft policy text type: object required: - text title: AiPolicyDraftUpdateRequest AiPolicyEnabledSurfaces: properties: chat: type: boolean title: Chat default: true ads: type: boolean title: Ads default: true social: type: boolean title: Social default: true images: type: boolean title: Images default: true type: object title: AiPolicyEnabledSurfaces AiPolicyGenerateVersionNameRequest: properties: text: type: string title: Text description: Policy text used to generate a short version name max_length: type: integer maximum: 80.0 minimum: 16.0 title: Max Length description: Maximum output length for the generated version name default: 48 type: object required: - text title: AiPolicyGenerateVersionNameRequest AiPolicyGenerateVersionNameResponse: properties: name: type: string title: Name description: Generated policy version name type: object required: - name title: AiPolicyGenerateVersionNameResponse AiPolicySaveVersionRequest: properties: name: anyOf: - type: string - type: 'null' title: Name activate: type: boolean title: Activate default: false text: anyOf: - type: string - type: 'null' title: Text description: Optional editor text to save as a version without requiring a separate draft save first type: object title: AiPolicySaveVersionRequest AiPolicySettingsUpdateRequest: properties: enabled: type: boolean title: Enabled enabled_surfaces: anyOf: - $ref: '#/components/schemas/AiPolicyEnabledSurfaces' - type: 'null' type: object required: - enabled title: AiPolicySettingsUpdateRequest AiPolicyStateResponse: properties: policy_purpose: anyOf: - type: string enum: - compliance - brand_guidelines - type: 'null' title: Policy Purpose enabled: type: boolean title: Enabled mode: type: string title: Mode enabled_surfaces: anyOf: - $ref: '#/components/schemas/AiPolicyEnabledSurfaces' - type: 'null' active_version_id: anyOf: - type: string - type: 'null' title: Active Version Id active_version_ids: anyOf: - items: type: string type: array - type: 'null' title: Active Version Ids draft: anyOf: - $ref: '#/components/schemas/AiPolicyDraft' - type: 'null' versions: items: $ref: '#/components/schemas/AiPolicyVersion' type: array title: Versions type: object required: - enabled - mode title: AiPolicyStateResponse AiPolicyVersion: properties: id: type: string title: Id policy_purpose: anyOf: - type: string enum: - compliance - brand_guidelines - type: 'null' title: Policy Purpose name: anyOf: - type: string - type: 'null' title: Name text: type: string title: Text created_at: anyOf: - type: string - type: 'null' title: Created At created_by_user_id: anyOf: - type: string - type: 'null' title: Created By User Id type: object required: - id - text title: AiPolicyVersion AiPolicyViolationEvent: properties: id: type: string title: Id created_at: type: string title: Created At user_id: type: string title: User Id user_email: anyOf: - type: string - type: 'null' title: User Email endpoint: type: string title: Endpoint event_name: anyOf: - type: string - type: 'null' title: Event Name event_metadata: anyOf: - additionalProperties: true type: object - type: 'null' title: Event Metadata type: object required: - id - created_at - user_id - endpoint title: AiPolicyViolationEvent AiTeamActivityCounts: properties: executed: type: integer title: Executed default: 0 approved: type: integer title: Approved default: 0 declined: type: integer title: Declined default: 0 failed: type: integer title: Failed default: 0 total: type: integer title: Total default: 0 type: object title: AiTeamActivityCounts AiTeamActivityItem: properties: id: type: string format: uuid title: Id title: type: string title: Title stage: type: string title: Stage activity_type: type: string title: Activity Type activity_type_label: type: string title: Activity Type Label owner_agent_key: anyOf: - type: string - type: 'null' title: Owner Agent Key change_scope: anyOf: - type: string - type: 'null' title: Change Scope actioned_at: anyOf: - type: string - type: 'null' title: Actioned At outcome_state: type: string title: Outcome State default: measuring outcome_summary: anyOf: - type: string - type: 'null' title: Outcome Summary optimization_details: anyOf: - $ref: '#/components/schemas/CampaignAppliedOptimization' - type: 'null' type: object required: - id - title - stage - activity_type - activity_type_label title: AiTeamActivityItem AiTeamActivityResponse: properties: items: items: $ref: '#/components/schemas/AiTeamActivityItem' type: array title: Items counts: $ref: '#/components/schemas/AiTeamActivityCounts' total: type: integer title: Total has_more: type: boolean title: Has More note: anyOf: - type: string - type: 'null' title: Note type: object required: - items - counts - total - has_more title: AiTeamActivityResponse AmazonAccountsResponseModel: properties: accounts: items: additionalProperties: anyOf: - type: string - type: integer type: object type: array title: Accounts type: object required: - accounts title: AmazonAccountsResponseModel AmazonAdGroupRequest: properties: profile_id: type: string title: Profile Id campaign_id: type: string title: Campaign Id name: type: string title: Name default_bid: type: number title: Default Bid default: 1.0 type: object required: - profile_id - campaign_id - name title: AmazonAdGroupRequest AmazonAuthResponseModel: properties: auth_url: type: string title: Auth Url type: object required: - auth_url title: AmazonAuthResponseModel AmazonCampaignActionRequest: properties: platform_type: type: string title: Platform Type description: 'Type of ad platform: amazon_sponsored_products, amazon_sponsored_brands, or amazon_sponsored_display' ad_id: type: string title: Ad Id description: ID of the specific ad to act on profile_id: type: string title: Profile Id description: Amazon advertising profile ID action: type: string title: Action description: 'Action to perform: pause or delete' type: object required: - platform_type - ad_id - profile_id - action title: AmazonCampaignActionRequest description: Request model for pausing/deleting an Amazon campaign. AmazonCampaignRequest: properties: profile_id: type: string title: Profile Id name: type: string title: Name campaign_type: type: string title: Campaign Type default: sponsoredProducts targeting_type: type: string title: Targeting Type default: manual daily_budget: type: number title: Daily Budget default: 10.0 start_date: anyOf: - type: string - type: 'null' title: Start Date end_date: anyOf: - type: string - type: 'null' title: End Date type: object required: - profile_id - name title: AmazonCampaignRequest AmazonKeywordsRequest: properties: profile_id: type: string title: Profile Id ad_group_id: type: string title: Ad Group Id keywords: items: additionalProperties: true type: object type: array title: Keywords type: object required: - profile_id - ad_group_id - keywords title: AmazonKeywordsRequest AmazonProductAdRequest: properties: profile_id: type: string title: Profile Id ad_group_id: type: string title: Ad Group Id asin: type: string title: Asin type: object required: - profile_id - ad_group_id - asin title: AmazonProductAdRequest AmazonSponsoredBrandsAdRequest: properties: product_description: type: string title: Product Description description: Description of the product or service target_audience: type: string title: Target Audience description: Target audience description company_profile_id: type: string format: uuid title: Company Profile Id description: Company profile ID (required) campaign_goals: anyOf: - items: type: string type: array - type: 'null' title: Campaign Goals description: List of campaign goals key_selling_points: type: string title: Key Selling Points description: Key selling points default: '' num_ads: type: integer maximum: 10.0 minimum: 1.0 title: Num Ads description: Number of ad variations to generate default: 3 bid_strategy: type: string title: Bid Strategy description: Bidding strategy default: maximize_conversions budget_range: type: string title: Budget Range description: Budget range (low, medium, high, custom) default: medium country: anyOf: - type: string - type: 'null' title: Country description: Target country state_province: anyOf: - type: string - type: 'null' title: State Province description: Target state/province city: anyOf: - type: string - type: 'null' title: City description: Target city locations: anyOf: - items: $ref: '#/components/schemas/LocationItem' type: array - type: 'null' title: Locations description: List of locations to target (countries/regions/states/cities/postal codes/proximities). This does not split budget per location; all locations share the campaign budget. reference_images: anyOf: - items: type: string type: array maxItems: 3 - type: 'null' title: Reference Images description: List of reference image base64 data URLs (max 3) lead_form_enabled: anyOf: - type: boolean - type: 'null' title: Lead Form Enabled description: Whether to use lead form extension where supported default: false max_cpc: anyOf: - type: number minimum: 0.01 - type: 'null' title: Max Cpc description: Maximum cost per click in dollars (e.g., 1.50 for $1.50). Required when bid_strategy is 'MANUAL_CPC' experiment_package_id: anyOf: - type: string maxLength: 64 - type: 'null' title: Experiment Package Id description: Test package id; created campaigns are stamped with this linkage launch_strategy_mode: anyOf: - type: string pattern: ^(test_learn_pilot|direct_campaign)$ - type: 'null' title: Launch Strategy Mode description: test_learn_pilot or direct_campaign dayparting_enabled: anyOf: - type: boolean - type: 'null' title: Dayparting Enabled description: Whether dayparting/ad scheduling is enabled for this campaign default: false dayparting_config: anyOf: - additionalProperties: true type: object - type: 'null' title: Dayparting Config description: Dayparting configuration including schedule, timezone, and platform-specific settings brand_name: type: string title: Brand Name description: Brand name num_images_per_ad: type: integer maximum: 3.0 minimum: 1.0 title: Num Images Per Ad description: Number of images per ad default: 1 showcase_products: anyOf: - items: type: string type: array - type: 'null' title: Showcase Products description: Products to showcase ad_format: anyOf: - type: string - type: 'null' title: Ad Format description: Selected ad format (product_collection, store_spotlight, or video) video_length: anyOf: - type: integer - type: 'null' title: Video Length description: Video duration in seconds (for video format) type: object required: - product_description - target_audience - company_profile_id - brand_name title: AmazonSponsoredBrandsAdRequest description: Request model for Amazon Sponsored Brands ads AmazonSponsoredDisplayAdRequest: properties: product_description: type: string title: Product Description description: Description of the product or service target_audience: type: string title: Target Audience description: Target audience description company_profile_id: type: string format: uuid title: Company Profile Id description: Company profile ID (required) campaign_goals: anyOf: - items: type: string type: array - type: 'null' title: Campaign Goals description: List of campaign goals key_selling_points: type: string title: Key Selling Points description: Key selling points default: '' num_ads: type: integer maximum: 10.0 minimum: 1.0 title: Num Ads description: Number of ad variations to generate default: 3 bid_strategy: type: string title: Bid Strategy description: Bidding strategy default: maximize_conversions budget_range: type: string title: Budget Range description: Budget range (low, medium, high, custom) default: medium country: anyOf: - type: string - type: 'null' title: Country description: Target country state_province: anyOf: - type: string - type: 'null' title: State Province description: Target state/province city: anyOf: - type: string - type: 'null' title: City description: Target city locations: anyOf: - items: $ref: '#/components/schemas/LocationItem' type: array - type: 'null' title: Locations description: List of locations to target (countries/regions/states/cities/postal codes/proximities). This does not split budget per location; all locations share the campaign budget. reference_images: anyOf: - items: type: string type: array maxItems: 3 - type: 'null' title: Reference Images description: List of reference image base64 data URLs (max 3) lead_form_enabled: anyOf: - type: boolean - type: 'null' title: Lead Form Enabled description: Whether to use lead form extension where supported default: false max_cpc: anyOf: - type: number minimum: 0.01 - type: 'null' title: Max Cpc description: Maximum cost per click in dollars (e.g., 1.50 for $1.50). Required when bid_strategy is 'MANUAL_CPC' experiment_package_id: anyOf: - type: string maxLength: 64 - type: 'null' title: Experiment Package Id description: Test package id; created campaigns are stamped with this linkage launch_strategy_mode: anyOf: - type: string pattern: ^(test_learn_pilot|direct_campaign)$ - type: 'null' title: Launch Strategy Mode description: test_learn_pilot or direct_campaign dayparting_enabled: anyOf: - type: boolean - type: 'null' title: Dayparting Enabled description: Whether dayparting/ad scheduling is enabled for this campaign default: false dayparting_config: anyOf: - additionalProperties: true type: object - type: 'null' title: Dayparting Config description: Dayparting configuration including schedule, timezone, and platform-specific settings ad_format: type: string title: Ad Format description: Ad format (image or video) default: image num_images_per_ad: type: integer maximum: 5.0 minimum: 1.0 title: Num Images Per Ad description: Number of images per ad (for image format) default: 2 video_length: anyOf: - type: integer - type: 'null' title: Video Length description: Video duration in seconds (for video format) type: object required: - product_description - target_audience - company_profile_id title: AmazonSponsoredDisplayAdRequest description: Request model for Amazon Sponsored Display ads AmazonSponsoredProductsAdRequest: properties: product_description: type: string title: Product Description description: Description of the product or service target_audience: type: string title: Target Audience description: Target audience description company_profile_id: type: string format: uuid title: Company Profile Id description: Company profile ID (required) campaign_goals: anyOf: - items: type: string type: array - type: 'null' title: Campaign Goals description: List of campaign goals key_selling_points: type: string title: Key Selling Points description: Key selling points default: '' num_ads: type: integer maximum: 10.0 minimum: 1.0 title: Num Ads description: Number of ad variations to generate default: 3 bid_strategy: type: string title: Bid Strategy description: Bidding strategy default: maximize_conversions budget_range: type: string title: Budget Range description: Budget range (low, medium, high, custom) default: medium country: anyOf: - type: string - type: 'null' title: Country description: Target country state_province: anyOf: - type: string - type: 'null' title: State Province description: Target state/province city: anyOf: - type: string - type: 'null' title: City description: Target city locations: anyOf: - items: $ref: '#/components/schemas/LocationItem' type: array - type: 'null' title: Locations description: List of locations to target (countries/regions/states/cities/postal codes/proximities). This does not split budget per location; all locations share the campaign budget. reference_images: anyOf: - items: type: string type: array maxItems: 3 - type: 'null' title: Reference Images description: List of reference image base64 data URLs (max 3) lead_form_enabled: anyOf: - type: boolean - type: 'null' title: Lead Form Enabled description: Whether to use lead form extension where supported default: false max_cpc: anyOf: - type: number minimum: 0.01 - type: 'null' title: Max Cpc description: Maximum cost per click in dollars (e.g., 1.50 for $1.50). Required when bid_strategy is 'MANUAL_CPC' experiment_package_id: anyOf: - type: string maxLength: 64 - type: 'null' title: Experiment Package Id description: Test package id; created campaigns are stamped with this linkage launch_strategy_mode: anyOf: - type: string pattern: ^(test_learn_pilot|direct_campaign)$ - type: 'null' title: Launch Strategy Mode description: test_learn_pilot or direct_campaign dayparting_enabled: anyOf: - type: boolean - type: 'null' title: Dayparting Enabled description: Whether dayparting/ad scheduling is enabled for this campaign default: false dayparting_config: anyOf: - additionalProperties: true type: object - type: 'null' title: Dayparting Config description: Dayparting configuration including schedule, timezone, and platform-specific settings asin: anyOf: - type: string - type: 'null' title: Asin description: Amazon Standard Identification Number sku: anyOf: - type: string - type: 'null' title: Sku description: Stock Keeping Unit type: object required: - product_description - target_audience - company_profile_id title: AmazonSponsoredProductsAdRequest description: Request model for Amazon Sponsored Products ads ApiKeyCreateRequest: properties: name: type: string maxLength: 255 minLength: 1 title: Name scopes: anyOf: - items: type: string type: array - type: 'null' title: Scopes expires_at: anyOf: - type: string format: date-time - type: 'null' title: Expires At type: object required: - name title: ApiKeyCreateRequest ApiKeyCreateResponse: properties: api_key: type: string title: Api Key key: $ref: '#/components/schemas/ApiKeyListItem' type: object required: - api_key - key title: ApiKeyCreateResponse ApiKeyListItem: properties: id: type: string format: uuid title: Id name: type: string title: Name key_prefix: type: string title: Key Prefix scopes: items: type: string type: array title: Scopes status: type: string title: Status 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 created_at: type: string format: date-time title: Created At type: object required: - id - name - key_prefix - scopes - status - created_at title: ApiKeyListItem ApiKeyListResponse: properties: keys: items: $ref: '#/components/schemas/ApiKeyListItem' type: array title: Keys type: object required: - keys title: ApiKeyListResponse ApiKeyRevokeResponse: properties: success: type: boolean title: Success key: $ref: '#/components/schemas/ApiKeyListItem' type: object required: - success - key title: ApiKeyRevokeResponse ApiKeyUsageEvent: properties: id: type: string format: uuid title: Id action: type: string title: Action timestamp: type: string format: date-time title: Timestamp ip: anyOf: - type: string - type: 'null' title: Ip user_agent: anyOf: - type: string - type: 'null' title: User Agent metadata: anyOf: - additionalProperties: true type: object - type: 'null' title: Metadata type: object required: - id - action - timestamp title: ApiKeyUsageEvent ApiKeyUsageResponse: properties: events: items: $ref: '#/components/schemas/ApiKeyUsageEvent' type: array title: Events type: object required: - events title: ApiKeyUsageResponse AppHomeBeginInstallResponse: properties: authorize_url: type: string title: Authorize Url description: Shopify OAuth authorize URL for this shop type: object required: - authorize_url title: AppHomeBeginInstallResponse description: Shopify OAuth authorize URL for (re)running the install handshake. AppHomeStatusResponse: properties: bound: type: boolean title: Bound description: Whether the shop is bound to an active Pomo profile shop_domain: anyOf: - type: string - type: 'null' title: Shop Domain description: The shop's myshopify.com domain from the session token shop_name: anyOf: - type: string - type: 'null' title: Shop Name description: Human-readable shop name, if known company_profile_id: anyOf: - type: string - type: 'null' title: Company Profile Id description: Bound company profile id (string UUID, sanitized) company_profile_name: anyOf: - type: string - type: 'null' title: Company Profile Name description: Bound company profile name connection_health: anyOf: - type: string - type: 'null' title: Connection Health description: '''healthy'' | ''warning'' | ''critical'' | ''unknown'' | null' initial_sync_status: anyOf: - type: string - type: 'null' title: Initial Sync Status description: '''pending'' | ''running'' | ''completed'' | ''failed'' | ''skipped'' | null' last_sync_at: anyOf: - type: string format: date-time - type: 'null' title: Last Sync At description: Last successful sync timestamp onboarding_complete: type: boolean title: Onboarding Complete description: Whether the bound profile has finished onboarding default: false pomo_url: type: string title: Pomo Url description: Deep-link into the full Pomo app type: object required: - bound - pomo_url title: AppHomeStatusResponse description: 'Status of an embedded shop as seen from the App Home. ``bound`` is the primary discriminator: when false the shop has no active Pomo binding and every profile-related field is null, but ``shop_domain`` is still populated from the verified session token so the UI can address the store.' AppHomeSyncResponse: properties: sync_status: type: string title: Sync Status description: Result of trigger_initial_sync() message: type: string title: Message description: Human-readable status message type: object required: - sync_status - message title: AppHomeSyncResponse description: Result of a catalog re-sync triggered from the App Home. ApprovalGroupCreateRequest: properties: name: type: string maxLength: 100 minLength: 1 title: Name description: anyOf: - type: string maxLength: 2000 - type: 'null' title: Description type: object required: - name title: ApprovalGroupCreateRequest ApprovalGroupMemberResponse: properties: user_id: type: string title: User Id created_at: type: string format: date-time title: Created At type: object required: - user_id - created_at title: ApprovalGroupMemberResponse ApprovalGroupResponse: properties: id: type: string title: Id organization_id: type: string title: Organization Id name: type: string title: Name description: anyOf: - type: string - type: 'null' title: Description created_at: type: string format: date-time title: Created At updated_at: type: string format: date-time title: Updated At members: items: $ref: '#/components/schemas/ApprovalGroupMemberResponse' type: array title: Members type: object required: - id - organization_id - name - created_at - updated_at title: ApprovalGroupResponse ApprovalGroupSetMembersRequest: properties: user_ids: items: type: string type: array title: User Ids type: object title: ApprovalGroupSetMembersRequest ApprovalGroupUpdateRequest: properties: name: anyOf: - type: string maxLength: 100 minLength: 1 - type: 'null' title: Name description: anyOf: - type: string maxLength: 2000 - type: 'null' title: Description type: object title: ApprovalGroupUpdateRequest AsyncJobRequest: properties: job_type: type: string title: Job Type description: Type of job to execute job_data: additionalProperties: true type: object title: Job Data description: Job-specific parameters organization_id: type: string format: uuid title: Organization Id description: Organization context company_profile_id: anyOf: - type: string format: uuid - type: 'null' title: Company Profile Id description: Optional company profile context type: object required: - job_type - job_data - organization_id title: AsyncJobRequest description: Request to start an async job example: company_profile_id: 123e4567-e89b-12d3-a456-426614174001 job_data: campaign_name: Summer Sale 2025 copy_prompt: 50% off all products creative_prompt: Beach vacation theme platform: facebook job_type: ad_creation organization_id: 123e4567-e89b-12d3-a456-426614174000 AudienceEstimateRequest: properties: audiences: items: additionalProperties: true type: object type: array title: Audiences country: anyOf: - type: string - type: 'null' title: Country description: Country code (e.g., US) state: anyOf: - items: type: string type: array - type: string - type: 'null' title: State description: State/region names or codes city: anyOf: - items: type: string type: array - type: string - type: 'null' title: City description: City names type: object title: AudienceEstimateRequest B2BAccountContactsRequest: properties: limit: type: integer maximum: 3.0 minimum: 1.0 title: Limit default: 3 force_refresh: type: boolean title: Force Refresh default: false type: object title: B2BAccountContactsRequest B2BAccountContactsResponse: properties: search: $ref: '#/components/schemas/B2BLeadSearchResponse' account_key: type: string title: Account Key added_count: type: integer maximum: 3.0 minimum: 0.0 title: Added Count replaced_count: type: integer maximum: 3.0 minimum: 0.0 title: Replaced Count type: object required: - search - account_key - added_count - replaced_count title: B2BAccountContactsResponse B2BActiveLeadSearchSummary: properties: search_id: type: string title: Search Id query: type: string title: Query started_at: type: string title: Started At type: object required: - search_id - query - started_at title: B2BActiveLeadSearchSummary description: A durable search that should resume polling after a page reload. B2BCompanyContactRoute: properties: email: type: string title: Email source_url: type: string title: Source Url evidence_text: type: string title: Evidence Text type: object required: - email - source_url - evidence_text title: B2BCompanyContactRoute description: A company-level public inbox, never a named person's email. B2BDraftRequest: properties: force_refresh: type: boolean title: Force Refresh default: false type: object title: B2BDraftRequest B2BDraftResponse: properties: candidate: $ref: '#/components/schemas/B2BLeadCandidate' type: object required: - candidate title: B2BDraftResponse B2BEditableDraft: properties: subject: type: string maxLength: 160 minLength: 1 title: Subject body: type: string maxLength: 1200 minLength: 1 title: Body type: object required: - subject - body title: B2BEditableDraft B2BFitEvidence: properties: kind: type: string enum: - company - person title: Kind default: person claim: type: string title: Claim source_url: type: string title: Source Url evidence_text: type: string title: Evidence Text verification_method: type: string enum: - page_exact - openai_web_search - openai_web_search_ai_critic title: Verification Method default: openai_web_search type: object required: - claim - source_url - evidence_text title: B2BFitEvidence B2BHydrateEmailsRequest: properties: candidate_ids: items: type: string type: array maxItems: 15 title: Candidate Ids retry_not_found: type: boolean title: Retry Not Found default: false type: object title: B2BHydrateEmailsRequest B2BHydrateEmailsResponse: properties: search: $ref: '#/components/schemas/B2BLeadSearchResponse' attempted_count: type: integer maximum: 15.0 minimum: 0.0 title: Attempted Count found_count: type: integer maximum: 15.0 minimum: 0.0 title: Found Count direct_email_found_count: type: integer maximum: 15.0 minimum: 0.0 title: Direct Email Found Count default: 0 company_contact_found_count: type: integer maximum: 15.0 minimum: 0.0 title: Company Contact Found Count default: 0 provider_attempted_count: type: integer maximum: 15.0 minimum: 0.0 title: Provider Attempted Count default: 0 provider_verified_count: type: integer maximum: 15.0 minimum: 0.0 title: Provider Verified Count default: 0 provider_failure_count: type: integer maximum: 15.0 minimum: 0.0 title: Provider Failure Count default: 0 remaining_count: type: integer maximum: 15.0 minimum: 0.0 title: Remaining Count type: object required: - search - attempted_count - found_count - remaining_count title: B2BHydrateEmailsResponse B2BLeadCandidate: properties: candidate_id: type: string title: Candidate Id account_key: type: string title: Account Key default: '' full_name: type: string title: Full Name headline: anyOf: - type: string - type: 'null' title: Headline company: anyOf: - type: string - type: 'null' title: Company company_url: anyOf: - type: string - type: 'null' title: Company Url location: anyOf: - type: string - type: 'null' title: Location linkedin_url: anyOf: - type: string - type: 'null' title: Linkedin Url linkedin_status: anyOf: - type: string enum: - found - not_found - unavailable - type: 'null' title: Linkedin Status profile_url: anyOf: - type: string - type: 'null' title: Profile Url avatar_url: anyOf: - type: string - type: 'null' title: Avatar Url fit_reason: type: string title: Fit Reason company_fit_reason: type: string title: Company Fit Reason default: '' person_fit_reason: type: string title: Person Fit Reason default: '' outreach_angle: type: string title: Outreach Angle default: '' fit_evidence: items: $ref: '#/components/schemas/B2BFitEvidence' type: array title: Fit Evidence sources: items: $ref: '#/components/schemas/B2BLeadSource' type: array title: Sources contact: $ref: '#/components/schemas/B2BLeadContact' company_contact: anyOf: - $ref: '#/components/schemas/B2BCompanyContactRoute' - type: 'null' draft: anyOf: - $ref: '#/components/schemas/B2BLeadDraft' - type: 'null' crm: $ref: '#/components/schemas/B2BLeadCrmState' type: object required: - candidate_id - full_name - fit_reason - contact title: B2BLeadCandidate B2BLeadContact: properties: email: anyOf: - type: string - type: 'null' title: Email status: type: string enum: - publicly_listed - provider_verified - not_hydrated - not_found title: Status kind: anyOf: - type: string enum: - person_business - company_contact - type: 'null' title: Kind source_url: anyOf: - type: string - type: 'null' title: Source Url evidence_text: anyOf: - type: string - type: 'null' title: Evidence Text provider_status: anyOf: - type: string const: valid - type: 'null' title: Provider Status confidence_score: anyOf: - type: integer maximum: 100.0 minimum: 0.0 - type: 'null' title: Confidence Score verified_at: anyOf: - type: string - type: 'null' title: Verified At type: object required: - status title: B2BLeadContact B2BLeadCrmState: properties: saved: type: boolean title: Saved default: false prospect_id: anyOf: - type: string - type: 'null' title: Prospect Id person_ref: anyOf: - type: string - type: 'null' title: Person Ref type: object title: B2BLeadCrmState B2BLeadDraft: properties: subject: type: string title: Subject body: type: string title: Body status: type: string enum: - generated - edited title: Status default: generated type: object required: - subject - body title: B2BLeadDraft B2BLeadSearchHistoryResponse: properties: searches: items: $ref: '#/components/schemas/B2BLeadSearchSummary' type: array title: Searches active_searches: items: $ref: '#/components/schemas/B2BActiveLeadSearchSummary' type: array title: Active Searches type: object title: B2BLeadSearchHistoryResponse B2BLeadSearchJobResponse: properties: search_id: type: string title: Search Id job_id: anyOf: - type: string - type: 'null' title: Job Id status: type: string enum: - processing - completed - failed - cancelled title: Status poll_url: type: string title: Poll Url search: anyOf: - $ref: '#/components/schemas/B2BLeadSearchResponse' - type: 'null' error: anyOf: - type: string - type: 'null' title: Error type: object required: - search_id - status - poll_url title: B2BLeadSearchJobResponse description: 'Durable discovery submission and polling envelope. A completed cache hit can return its search immediately. Queued work keeps the same small contract and exposes the completed snapshot only after the worker has committed it atomically.' B2BLeadSearchRequest: properties: query: type: string maxLength: 500 minLength: 2 title: Query limit: type: integer maximum: 5.0 minimum: 3.0 title: Limit default: 5 force_refresh: type: boolean title: Force Refresh default: false type: object required: - query title: B2BLeadSearchRequest B2BLeadSearchResponse: properties: search_id: type: string title: Search Id query: type: string title: Query interpreted_query: type: string title: Interpreted Query status: type: string const: completed title: Status default: completed cache_hit: type: boolean title: Cache Hit default: false generated_at: type: string title: Generated At expires_at: type: string title: Expires At email_hydration_status: type: string enum: - not_started - completed title: Email Hydration Status result_count: type: integer maximum: 15.0 minimum: 0.0 title: Result Count candidates: items: $ref: '#/components/schemas/B2BLeadCandidate' type: array maxItems: 15 title: Candidates sources: items: $ref: '#/components/schemas/B2BLeadSource' type: array title: Sources type: object required: - search_id - query - interpreted_query - generated_at - expires_at - email_hydration_status - result_count title: B2BLeadSearchResponse B2BLeadSearchSummary: properties: search_id: type: string title: Search Id query: type: string title: Query interpreted_query: type: string title: Interpreted Query result_count: type: integer maximum: 15.0 minimum: 0.0 title: Result Count company_count: type: integer maximum: 5.0 minimum: 0.0 title: Company Count contact_count: type: integer maximum: 15.0 minimum: 0.0 title: Contact Count generated_at: type: string title: Generated At expires_at: type: string title: Expires At email_hydration_status: type: string enum: - not_started - completed title: Email Hydration Status type: object required: - search_id - query - interpreted_query - result_count - company_count - contact_count - generated_at - expires_at - email_hydration_status title: B2BLeadSearchSummary B2BLeadSource: properties: url: type: string title: Url title: anyOf: - type: string - type: 'null' title: Title type: anyOf: - type: string - type: 'null' title: Type type: object required: - url title: B2BLeadSource B2BSaveCandidateRequest: properties: idempotency_key: anyOf: - type: string maxLength: 128 - type: 'null' title: Idempotency Key draft: anyOf: - $ref: '#/components/schemas/B2BEditableDraft' - type: 'null' type: object title: B2BSaveCandidateRequest B2BSaveCandidateResponse: properties: prospect_id: type: string title: Prospect Id person_ref: type: string title: Person Ref created: type: boolean title: Created candidate: $ref: '#/components/schemas/B2BLeadCandidate' type: object required: - prospect_id - person_ref - created - candidate title: B2BSaveCandidateResponse B2BUpdateDraftRequest: properties: subject: type: string maxLength: 160 minLength: 1 title: Subject body: type: string maxLength: 1200 minLength: 1 title: Body type: object required: - subject - body title: B2BUpdateDraftRequest B2BUpdateDraftResponse: properties: prospect_id: type: string title: Prospect Id person_ref: type: string title: Person Ref draft: $ref: '#/components/schemas/B2BLeadDraft' type: object required: - prospect_id - person_ref - draft title: B2BUpdateDraftResponse BaseAdsCampaignRequest: properties: product_description: type: string title: Product Description description: Description of the product or service target_audience: type: string title: Target Audience description: Target audience description company_profile_id: type: string format: uuid title: Company Profile Id description: Company profile ID (required) campaign_goals: anyOf: - items: type: string type: array - type: 'null' title: Campaign Goals description: List of campaign goals key_selling_points: type: string title: Key Selling Points description: Key selling points default: '' num_ads: type: integer maximum: 10.0 minimum: 1.0 title: Num Ads description: Number of ad variations to generate default: 3 bid_strategy: type: string title: Bid Strategy description: Bidding strategy default: maximize_conversions budget_range: type: string title: Budget Range description: Budget range (low, medium, high, custom) default: medium country: anyOf: - type: string - type: 'null' title: Country description: Target country state_province: anyOf: - type: string - type: 'null' title: State Province description: Target state/province city: anyOf: - type: string - type: 'null' title: City description: Target city locations: anyOf: - items: $ref: '#/components/schemas/LocationItem' type: array - type: 'null' title: Locations description: List of locations to target (countries/regions/states/cities/postal codes/proximities). This does not split budget per location; all locations share the campaign budget. reference_images: anyOf: - items: type: string type: array maxItems: 3 - type: 'null' title: Reference Images description: List of reference image base64 data URLs (max 3) lead_form_enabled: anyOf: - type: boolean - type: 'null' title: Lead Form Enabled description: Whether to use lead form extension where supported default: false max_cpc: anyOf: - type: number minimum: 0.01 - type: 'null' title: Max Cpc description: Maximum cost per click in dollars (e.g., 1.50 for $1.50). Required when bid_strategy is 'MANUAL_CPC' experiment_package_id: anyOf: - type: string maxLength: 64 - type: 'null' title: Experiment Package Id description: Test package id; created campaigns are stamped with this linkage launch_strategy_mode: anyOf: - type: string pattern: ^(test_learn_pilot|direct_campaign)$ - type: 'null' title: Launch Strategy Mode description: test_learn_pilot or direct_campaign dayparting_enabled: anyOf: - type: boolean - type: 'null' title: Dayparting Enabled description: Whether dayparting/ad scheduling is enabled for this campaign default: false dayparting_config: anyOf: - additionalProperties: true type: object - type: 'null' title: Dayparting Config description: Dayparting configuration including schedule, timezone, and platform-specific settings type: object required: - product_description - target_audience - company_profile_id title: BaseAdsCampaignRequest description: Base request model for creating ad campaigns. BatchGenerateRequest: properties: product_description: type: string title: Product Description target_audience: type: string title: Target Audience platforms: items: additionalProperties: type: string type: object type: array title: Platforms description: List of platform configurations campaign_goals: anyOf: - items: type: string type: array - type: 'null' title: Campaign Goals key_selling_points: anyOf: - type: string - type: 'null' title: Key Selling Points default: '' reference_images: anyOf: - items: type: string type: array - type: 'null' title: Reference Images use_brand_style: type: boolean title: Use Brand Style default: false num_posts: type: integer maximum: 5.0 minimum: 1.0 title: Num Posts default: 1 type: object required: - product_description - target_audience - platforms title: BatchGenerateRequest description: Request model for batch generation across multiple platforms. BatchPostMetricsRequest: properties: instagram_account_id: type: string title: Instagram Account Id post_ids: items: type: string type: array title: Post Ids type: object required: - instagram_account_id - post_ids title: BatchPostMetricsRequest description: Request model for getting metrics for multiple Instagram posts. BillingPortalSessionResponse: properties: status: type: string title: Status portal_url: type: string title: Portal Url type: object required: - status - portal_url title: BillingPortalSessionResponse description: Response model for a Stripe billing portal session. BlendedROASResponse: properties: total_spend_cents: type: integer title: Total Spend Cents total_purchase_value_cents: type: integer title: Total Purchase Value Cents total_impressions: type: integer title: Total Impressions total_clicks: type: integer title: Total Clicks total_conversions: type: integer title: Total Conversions blended_roas: type: number title: Blended Roas start_date: type: string title: Start Date end_date: type: string title: End Date type: object required: - total_spend_cents - total_purchase_value_cents - total_impressions - total_clicks - total_conversions - blended_roas - start_date - end_date title: BlendedROASResponse description: Response model for blended ROAS. Body_agentic_chat_with_files_api_chat_agentic_with_files_post: properties: message: type: string title: Message company_profile_id: anyOf: - type: string format: uuid - type: 'null' title: Company Profile Id organization_id: anyOf: - type: string format: uuid - type: 'null' title: Organization Id conversation_id: anyOf: - type: string - type: 'null' title: Conversation Id workflow_stage: anyOf: - type: string - type: 'null' title: Workflow Stage page_context: anyOf: - type: string - type: 'null' title: Page Context history: anyOf: - type: string - type: 'null' title: History default: '[]' files: items: type: string format: binary type: array title: Files default: [] type: object required: - message title: Body_agentic_chat_with_files_api_chat_agentic_with_files_post Body_create_ads_campaign_endpoint_api_guided_workflow_create_ads_campaign_post: properties: user_prompt: type: string title: User Prompt description: User's description of what they want to do target_audience: type: string title: Target Audience description: Description of the target audience custom_instructions: anyOf: - type: string - type: 'null' title: Custom Instructions description: Free-text user instructions/preferences to respect across idea and creative generation selected_target_audience: anyOf: - type: string - type: 'null' title: Selected Target Audience description: JSON object for the selected audience selected_campaign_idea: anyOf: - type: string - type: 'null' title: Selected Campaign Idea description: JSON object for the selected campaign idea campaign_timing: anyOf: - type: string - type: 'null' title: Campaign Timing description: JSON object for structured campaign timing campaign_budget: anyOf: - type: string - type: 'null' title: Campaign Budget description: JSON object for structured campaign budget campaign_budget_constraints: anyOf: - type: string - type: 'null' title: Campaign Budget Constraints description: JSON object for reviewed campaign budget constraints company_profile_id: type: string format: uuid title: Company Profile Id description: Company profile ID (required) target_platforms: type: string title: Target Platforms description: JSON array of target platforms num_ads: anyOf: - type: integer - type: 'null' title: Num Ads description: Number of ads to generate (max 3) default: 3 num_images_per_ad: anyOf: - type: integer - type: 'null' title: Num Images Per Ad description: Number of images per ad (max 3) default: 2 experiment_package_id: anyOf: - type: string - type: 'null' title: Experiment Package Id description: Test package id for A/B linkage launch_strategy_mode: anyOf: - type: string - type: 'null' title: Launch Strategy Mode description: test_learn_pilot or direct_campaign experiment_variants: anyOf: - type: string - type: 'null' title: Experiment Variants description: JSON array of A/B creative versions for per-version campaign fan-out video_length: anyOf: - type: integer - type: 'null' title: Video Length description: Video duration is fixed at 10 seconds for video ads default: 10 video_lengths: anyOf: - type: string - type: 'null' title: Video Lengths description: JSON object mapping video platforms to video duration; values are normalized to 10 seconds video_quality: anyOf: - type: string - type: 'null' title: Video Quality description: Fallback video quality for video ads default: 1080p video_qualities: anyOf: - type: string - type: 'null' title: Video Qualities description: JSON object mapping video platforms to requested video quality country: anyOf: - type: string - type: 'null' title: Country description: Target country state_province: anyOf: - type: string - type: 'null' title: State Province description: Target state/province city: anyOf: - type: string - type: 'null' title: City description: Target city lead_form_enabled: anyOf: - type: boolean - type: 'null' title: Lead Form Enabled description: Whether to use lead form extension default: false lead_forms_by_ad_type: anyOf: - type: string - type: 'null' title: Lead Forms By Ad Type description: Lead form settings keyed by ad type JSON reference_image_urls: anyOf: - type: string - type: 'null' title: Reference Image Urls description: JSON array of reference image URLs platform_sub_formats: anyOf: - type: string - type: 'null' title: Platform Sub Formats description: JSON object with platform-specific sub-formats product_offering_id: anyOf: - type: string format: uuid - type: 'null' title: Product Offering Id description: Product offering ID if campaign is for a specific product objective: anyOf: - type: string - type: 'null' title: Objective description: Campaign objective (for TikTok, only TRAFFIC is currently supported) ad_format: anyOf: - type: string - type: 'null' title: Ad Format description: 'Ad format (e.g., for TikTok: SINGLE_IMAGE, VIDEO)' locations: anyOf: - type: string - type: 'null' title: Locations description: JSON array of multi-geo locations (LocationItem[]) dayparting_enabled: anyOf: - type: boolean - type: 'null' title: Dayparting Enabled description: Whether dayparting is enabled for this campaign default: false dayparting_config: anyOf: - type: string - type: 'null' title: Dayparting Config description: JSON object with dayparting configuration ugc_style_enabled: anyOf: - type: boolean - type: 'null' title: Ugc Style Enabled description: Whether requested video creatives should use creator-led UGC style default: false provided_media_assets: anyOf: - type: string - type: 'null' title: Provided Media Assets description: JSON array of user-provided media assets to use as ad creative files: anyOf: - {} - type: 'null' title: Files description: Optional reference images (max 5) youtube_logo_image_url: anyOf: - type: string - type: 'null' title: Youtube Logo Image Url description: Optional square logo URL for YouTube/Google Video type: object required: - user_prompt - target_audience - company_profile_id - target_platforms title: Body_create_ads_campaign_endpoint_api_guided_workflow_create_ads_campaign_post Body_create_bug_report_api_feedback_bug_report_post: properties: report_json: type: string title: Report Json screenshot: anyOf: - type: string format: binary - type: 'null' title: Screenshot type: object required: - report_json title: Body_create_bug_report_api_feedback_bug_report_post Body_create_email_campaign_api_guided_workflow_create_email_campaign_post: properties: user_prompt: type: string title: User Prompt description: User's description of what they want to do target_audience: type: string title: Target Audience description: Description of the target audience custom_instructions: anyOf: - type: string - type: 'null' title: Custom Instructions description: Free-text user instructions/preferences to respect across idea and creative generation reference_image_urls: anyOf: - type: string - type: 'null' title: Reference Image Urls description: JSON array of reference image URLs files: anyOf: - {} - type: 'null' title: Files description: Optional reference images (max 5) num_samples: anyOf: - type: integer - type: 'null' title: Num Samples description: Number of email samples to generate (max 5) default: 3 num_images_per_sample: anyOf: - type: integer - type: 'null' title: Num Images Per Sample description: Number of images per email sample (max 5) default: 2 product_offering_id: anyOf: - type: string format: uuid - type: 'null' title: Product Offering Id description: Product offering ID if campaign is for a specific product type: object required: - user_prompt - target_audience title: Body_create_email_campaign_api_guided_workflow_create_email_campaign_post Body_create_first_party_data_upload_api_first_party_data_uploads_post: properties: file: type: string format: binary title: File mapping_overrides: anyOf: - type: string - type: 'null' title: Mapping Overrides product_mapping: anyOf: - type: string - type: 'null' title: Product Mapping analysis_layer_preferences: anyOf: - type: string - type: 'null' title: Analysis Layer Preferences workspace_name: anyOf: - type: string - type: 'null' title: Workspace Name import_upload_id: anyOf: - type: string - type: 'null' title: Import Upload Id allow_duplicate: type: boolean title: Allow Duplicate default: false type: object required: - file title: Body_create_first_party_data_upload_api_first_party_data_uploads_post Body_create_first_party_data_upload_async_job_api_first_party_data_uploads_async_post: properties: file: type: string format: binary title: File mapping_overrides: anyOf: - type: string - type: 'null' title: Mapping Overrides product_mapping: anyOf: - type: string - type: 'null' title: Product Mapping analysis_layer_preferences: anyOf: - type: string - type: 'null' title: Analysis Layer Preferences workspace_name: anyOf: - type: string - type: 'null' title: Workspace Name import_upload_id: anyOf: - type: string - type: 'null' title: Import Upload Id allow_duplicate: type: boolean title: Allow Duplicate default: false type: object required: - file title: Body_create_first_party_data_upload_async_job_api_first_party_data_uploads_async_post Body_create_gallery_image_with_ai_api_gallery_create_with_ai_post: properties: prompt: type: string title: Prompt size: type: string title: Size default: 1024x1024 aspect_ratio: anyOf: - type: string - type: 'null' title: Aspect Ratio num_images: type: integer title: Num Images default: 1 use_company_style: type: boolean title: Use Company Style default: true title: anyOf: - type: string - type: 'null' title: Title description: anyOf: - type: string - type: 'null' title: Description tags: anyOf: - type: string - type: 'null' title: Tags reference_gallery_ids: anyOf: - items: type: string type: array - type: string - type: 'null' title: Reference Gallery Ids reference_images: anyOf: - items: type: string format: binary type: array - type: 'null' title: Reference Images type: object required: - prompt title: Body_create_gallery_image_with_ai_api_gallery_create_with_ai_post Body_create_gallery_image_with_ai_job_api_gallery_create_with_ai_job_post: properties: prompt: type: string title: Prompt size: type: string title: Size default: 1024x1024 aspect_ratio: anyOf: - type: string - type: 'null' title: Aspect Ratio num_images: type: integer title: Num Images default: 1 use_company_style: type: boolean title: Use Company Style default: true title: anyOf: - type: string - type: 'null' title: Title description: anyOf: - type: string - type: 'null' title: Description tags: anyOf: - type: string - type: 'null' title: Tags reference_gallery_ids: anyOf: - items: type: string type: array - type: string - type: 'null' title: Reference Gallery Ids type: object required: - prompt title: Body_create_gallery_image_with_ai_job_api_gallery_create_with_ai_job_post Body_create_social_post_campaign_api_guided_workflow_create_social_post_campaign_post: properties: user_prompt: type: string title: User Prompt description: User's description of what they want to do target_audience: type: string title: Target Audience description: Description of the target audience custom_instructions: anyOf: - type: string - type: 'null' title: Custom Instructions description: Free-text user instructions/preferences to respect across idea and creative generation experiment_package_id: anyOf: - type: string - type: 'null' title: Experiment Package Id description: Test package id for A/B linkage launch_strategy_mode: anyOf: - type: string - type: 'null' title: Launch Strategy Mode description: test_learn_pilot or direct_campaign selected_target_audience: anyOf: - type: string - type: 'null' title: Selected Target Audience description: JSON object for the selected audience selected_campaign_idea: anyOf: - type: string - type: 'null' title: Selected Campaign Idea description: JSON object for the selected campaign idea campaign_timing: anyOf: - type: string - type: 'null' title: Campaign Timing description: JSON object for structured campaign timing campaign_budget: anyOf: - type: string - type: 'null' title: Campaign Budget description: JSON object for structured campaign budget campaign_budget_constraints: anyOf: - type: string - type: 'null' title: Campaign Budget Constraints description: JSON object for reviewed campaign budget constraints reference_image_urls: anyOf: - type: string - type: 'null' title: Reference Image Urls description: JSON array of reference image URLs files: anyOf: - {} - type: 'null' title: Files description: Optional reference images (max 5) num_posts: anyOf: - type: integer - type: 'null' title: Num Posts description: Number of posts to generate (max 3) default: 3 num_images_per_post: anyOf: - type: integer - type: 'null' title: Num Images Per Post description: Number of images per post (max 5) default: 2 platforms: anyOf: - type: string - type: 'null' title: Platforms description: JSON array of platforms to generate posts for post_type: anyOf: - type: string - type: 'null' title: Post Type description: Type of post (for single platform) media_type: anyOf: - type: string - type: 'null' title: Media Type description: Media type (for single platform) video_duration: anyOf: - type: integer - type: 'null' title: Video Duration description: Video duration is fixed at 10 seconds for video posts default: 10 video_quality: anyOf: - type: string - type: 'null' title: Video Quality description: Fallback video quality for video posts default: 1080p use_batch_endpoint: anyOf: - type: string - type: 'null' title: Use Batch Endpoint description: Flag to use batch endpoint for multi-platform product_offering_id: anyOf: - type: string format: uuid - type: 'null' title: Product Offering Id description: Product offering ID if campaign is for a specific product ugc_style_enabled: anyOf: - type: boolean - type: 'null' title: Ugc Style Enabled description: Whether requested social video creatives should use creator-led UGC style default: false provided_media_assets: anyOf: - type: string - type: 'null' title: Provided Media Assets description: JSON array of user-provided media assets to use as social post creative type: object required: - user_prompt - target_audience title: Body_create_social_post_campaign_api_guided_workflow_create_social_post_campaign_post Body_direct_edit_social_post_api_campaigns_social_post_direct_edit_social_post_post: properties: campaign_id: type: string title: Campaign Id description: Campaign ID of the social post to edit idea_number: type: integer title: Idea Number description: Social post idea number variation: anyOf: - type: integer - type: 'null' title: Variation description: Social post variation being edited updated_post: additionalProperties: true type: object title: Updated Post description: Updated post content with name, caption, hashtags, etc. type: object required: - campaign_id - idea_number - updated_post title: Body_direct_edit_social_post_api_campaigns_social_post_direct_edit_social_post_post Body_edit_campaign_content_api_campaigns_email_edit_content_post: properties: campaign_id: type: string title: Campaign Id description: Campaign ID of the content to edit idea_number: type: integer title: Idea Number description: Campaign idea number content: type: string title: Content description: Existing HTML content to edit edit_prompt: type: string title: Edit Prompt description: Instructions for editing the content type: object required: - campaign_id - idea_number - content - edit_prompt title: Body_edit_campaign_content_api_campaigns_email_edit_content_post Body_edit_campaign_image_api_campaigns_email_edit_image_post: properties: campaign_id: type: string title: Campaign Id description: Campaign ID of the image to edit idea_number: type: integer title: Idea Number description: Campaign idea number image_url: type: string title: Image Url description: URL of the image to edit edit_prompt: type: string title: Edit Prompt description: Instructions for editing the image type: object required: - campaign_id - idea_number - image_url - edit_prompt title: Body_edit_campaign_image_api_campaigns_email_edit_image_post Body_edit_image_api_content_editing_edit_image_post: properties: image: type: string format: binary title: Image prompt: type: string title: Prompt use_company_style: type: boolean title: Use Company Style default: false product_image: anyOf: - type: string format: binary - type: 'null' title: Product Image logo_image: anyOf: - type: string format: binary - type: 'null' title: Logo Image num_variations: type: integer title: Num Variations default: 3 type: object required: - image - prompt title: Body_edit_image_api_content_editing_edit_image_post Body_edit_social_post_content_api_campaigns_social_post_edit_content_post: properties: campaign_id: type: string title: Campaign Id description: Campaign ID of the social post to edit idea_number: type: integer title: Idea Number description: Social post idea number content: type: string title: Content description: Existing content as JSON string (title, caption and hashtags) edit_prompt: type: string title: Edit Prompt description: Instructions for editing the social post content type: object required: - campaign_id - idea_number - content - edit_prompt title: Body_edit_social_post_content_api_campaigns_social_post_edit_content_post Body_edit_social_post_image_api_campaigns_social_post_edit_social_post_image_post: properties: campaign_id: type: string title: Campaign Id idea_number: type: integer title: Idea Number image_url: type: string title: Image Url edit_prompt: type: string title: Edit Prompt type: object required: - campaign_id - idea_number - image_url - edit_prompt title: Body_edit_social_post_image_api_campaigns_social_post_edit_social_post_image_post Body_generate_image_api_content_editing_generate_image_post: properties: prompt: type: string title: Prompt size: type: string title: Size default: 1024x1024 aspect_ratio: anyOf: - type: string - type: 'null' title: Aspect Ratio num_images: type: integer title: Num Images default: 1 reference_images: items: type: string format: binary type: array title: Reference Images use_company_style: type: boolean title: Use Company Style default: false type: object required: - prompt title: Body_generate_image_api_content_editing_generate_image_post Body_generate_market_opportunity_document_api_marketing_docs_market_opportunity_generate_post: properties: request_json: type: string title: Request Json files: items: type: string format: binary type: array title: Files default: [] type: object required: - request_json title: Body_generate_market_opportunity_document_api_marketing_docs_market_opportunity_generate_post Body_profile_first_party_data_file_api_first_party_data_profile_post: properties: file: type: string format: binary title: File type: object required: - file title: Body_profile_first_party_data_file_api_first_party_data_profile_post Body_replace_image_upload_api_images_replace_upload_post: properties: url: type: string title: Url file: type: string format: binary title: File content_type: anyOf: - type: string - type: 'null' title: Content Type type: object required: - url - file title: Body_replace_image_upload_api_images_replace_upload_post Body_upload_analysis_files_api_workflow_brand_generation_step1_upload_files_post: properties: files: items: type: string format: binary type: array title: Files company_url: type: string title: Company Url company_profile_id: type: string format: uuid title: Company Profile Id type: object required: - files - company_url - company_profile_id title: Body_upload_analysis_files_api_workflow_brand_generation_step1_upload_files_post Body_upload_attachments_api_agentic_conversations__conversation_id__attachments_post: properties: files: items: type: string format: binary type: array title: Files type: object required: - files title: Body_upload_attachments_api_agentic_conversations__conversation_id__attachments_post Body_upload_campaign_image_api_campaigns_email_upload_campaign_image_post: properties: file: type: string format: binary title: File description: New image file to upload campaign_id: type: string title: Campaign Id description: Campaign ID idea_number: type: integer title: Idea Number description: Campaign idea number image_type: type: string title: Image Type description: Type of image (EMAIL_BANNER, EMAIL_IMAGE, etc.) default: EMAIL_IMAGE type: object required: - file - campaign_id - idea_number title: Body_upload_campaign_image_api_campaigns_email_upload_campaign_image_post Body_upload_campaign_images_api_campaigns_email_upload_campaign_images_post: properties: files: items: type: string format: binary type: array title: Files description: List of image files to upload (max 15) campaign_id: type: string title: Campaign Id description: Campaign ID idea_number: type: integer title: Idea Number description: Campaign idea number image_type: type: string title: Image Type description: Type of image (EMAIL_BANNER, EMAIL_IMAGE, etc.) default: EMAIL_IMAGE type: object required: - files - campaign_id - idea_number title: Body_upload_campaign_images_api_campaigns_email_upload_campaign_images_post Body_upload_company_logo_api_company_profile__profile_id__upload_logo_post: properties: file: type: string format: binary title: File type: object required: - file title: Body_upload_company_logo_api_company_profile__profile_id__upload_logo_post Body_upload_consumers_to_group_api_consumer_group_upload_consumers__group_id__post: properties: file: type: string format: binary title: File type: object required: - file title: Body_upload_consumers_to_group_api_consumer_group_upload_consumers__group_id__post Body_upload_email_campaign_image_general_api_campaigns_email_upload_image_post: properties: file: type: string format: binary title: File description: New image file to upload campaign_id: type: string title: Campaign Id description: Campaign ID idea_number: type: integer title: Idea Number description: Campaign idea number image_type: type: string title: Image Type description: Type of image (EMAIL_BANNER, EMAIL_IMAGE, etc.) default: EMAIL_IMAGE type: object required: - file - campaign_id - idea_number title: Body_upload_email_campaign_image_general_api_campaigns_email_upload_image_post Body_upload_gallery_image_api_gallery_upload_post: properties: file: type: string format: binary title: File title: anyOf: - type: string - type: 'null' title: Title description: anyOf: - type: string - type: 'null' title: Description category: type: string title: Category default: uploaded tags: anyOf: - type: string - type: 'null' title: Tags type: object required: - file title: Body_upload_gallery_image_api_gallery_upload_post Body_upload_gallery_images_bulk_api_gallery_upload_bulk_post: properties: files: items: type: string format: binary type: array title: Files titles: anyOf: - items: type: string type: array - type: string - type: 'null' title: Titles descriptions: anyOf: - items: type: string type: array - type: string - type: 'null' title: Descriptions category: type: string title: Category default: uploaded tags: anyOf: - type: string - type: 'null' title: Tags type: object required: - files title: Body_upload_gallery_images_bulk_api_gallery_upload_bulk_post Body_upload_image_api_company_profile__profile_id__upload_image_post: properties: file: type: string format: binary title: File type: object required: - file title: Body_upload_image_api_company_profile__profile_id__upload_image_post Body_upload_product_offering_images_api_product_offerings__product_offering_id__images_upload_post: properties: files: items: type: string format: binary type: array title: Files titles: anyOf: - items: type: string type: array - type: string - type: 'null' title: Titles descriptions: anyOf: - items: type: string type: array - type: string - type: 'null' title: Descriptions tags: anyOf: - type: string - type: 'null' title: Tags type: object required: - files title: Body_upload_product_offering_images_api_product_offerings__product_offering_id__images_upload_post Body_upload_screenshot_api_feedback_screenshot_post: properties: file: type: string format: binary title: File type: object required: - file title: Body_upload_screenshot_api_feedback_screenshot_post Body_upload_social_post_image_api_campaigns_social_post_upload_social_post_image_post: properties: file: type: string format: binary title: File description: Image file to upload campaign_id: type: string title: Campaign Id description: Campaign ID idea_number: type: integer title: Idea Number description: Campaign idea number current_image_url: type: string title: Current Image Url description: URL of the current image (required if replace is True) replace: type: boolean title: Replace description: Whether to replace existing image (True) or append as new image (False) default: true type: object required: - file - campaign_id - idea_number title: Body_upload_social_post_image_api_campaigns_social_post_upload_social_post_image_post Body_upload_to_knowledge_base_api_chat_knowledge_base_upload_post: properties: files: items: type: string format: binary type: array title: Files type: object required: - files title: Body_upload_to_knowledge_base_api_chat_knowledge_base_upload_post Body_validate_competitor_url_api_workflow_brand_generation_step3_validate_competitor_post: properties: url: type: string title: Url type: object required: - url title: Body_validate_competitor_url_api_workflow_brand_generation_step3_validate_competitor_post BrandFacebookOfficialUrlResponse: properties: facebook_url: anyOf: - type: string - type: 'null' title: Facebook Url facebook_page_id: anyOf: - type: string - type: 'null' title: Facebook Page Id facebook_page_name: anyOf: - type: string - type: 'null' title: Facebook Page Name facebook_page_about: anyOf: - additionalProperties: true type: object - type: 'null' title: Facebook Page About facebook_ads_library: anyOf: - additionalProperties: true type: object - type: 'null' title: Facebook Ads Library message: type: string title: Message source: type: string title: Source updated: type: boolean title: Updated default: false type: object required: - message - source title: BrandFacebookOfficialUrlResponse description: Facebook official URL resolution status for the active brand profile. BudgetEstimateRequest: properties: goal: type: string title: Goal description: User's marketing goal currency: type: string title: Currency description: Currency code (e.g., USD) locations: items: $ref: '#/components/schemas/LocationItem' type: array title: Locations description: List of target locations product_offering_id: anyOf: - type: string - type: 'null' title: Product Offering Id description: Optional product offering identifier start_date: anyOf: - type: string - type: 'null' title: Start Date description: Optional start date in ISO format (YYYY-MM-DD) end_date: anyOf: - type: string - type: 'null' title: End Date description: Optional end date in ISO format (YYYY-MM-DD) type: object required: - goal - currency title: BudgetEstimateRequest description: Input payload for budget estimation. BudgetEstimateResponse: properties: currency: type: string title: Currency description: ISO currency code (e.g., TWD, USD) budget_recommendation: $ref: '#/components/schemas/BudgetRecommendationRange' description: Recommended budget range duration_days: type: integer title: Duration Days description: Recommended duration in days reasoning: type: string title: Reasoning description: Concise explanation for recommendation type: object required: - currency - budget_recommendation - duration_days - reasoning title: BudgetEstimateResponse description: Structured response for budget estimate. BudgetGuardrailConfig: properties: enabled: type: boolean title: Enabled default: false default_limit: anyOf: - $ref: '#/components/schemas/BudgetLimitConfig' - type: 'null' brand_overrides: additionalProperties: $ref: '#/components/schemas/BudgetLimitConfig' type: object title: Brand Overrides type: object title: BudgetGuardrailConfig BudgetLimitConfig: properties: amount: type: number exclusiveMinimum: 0.0 title: Amount currency: type: string maxLength: 8 minLength: 3 title: Currency type: object required: - amount - currency title: BudgetLimitConfig BudgetRecommendationRange: properties: min_value: type: number title: Min Value description: Absolute minimum viable daily budget max_value: type: number title: Max Value description: Maximum efficient daily budget before diminishing returns suggested_value: type: number title: Suggested Value description: Recommended starting daily budget type: object required: - min_value - max_value - suggested_value title: BudgetRecommendationRange description: Recommended daily budget range. BulkCompanyProfileAccessRequest: properties: user_ids: items: type: string format: uuid type: array title: User Ids description: List of user IDs role: $ref: '#/components/schemas/ProjectRoleEnum' description: Role to assign to all users type: object required: - user_ids - role title: BulkCompanyProfileAccessRequest description: Request to grant company profile access to multiple users. BulkCompanyProfileAccessResponse: properties: successful: items: type: string format: uuid type: array title: Successful description: User IDs successfully granted access failed: items: additionalProperties: true type: object type: array title: Failed description: User IDs that failed with error messages total_processed: type: integer title: Total Processed type: object required: - total_processed title: BulkCompanyProfileAccessResponse description: Response for bulk company profile access operations. CalculateChargeRequest: properties: organization_id: type: string title: Organization Id daily_budget: type: number title: Daily Budget campaign_days: type: integer title: Campaign Days currency: type: string title: Currency description: Currency code for display (e.g., USD, INR) ad_account_currency: anyOf: - type: string - type: 'null' title: Ad Account Currency description: Currency code used by the selected ad account type: object required: - organization_id - daily_budget - campaign_days - currency title: CalculateChargeRequest description: Request to calculate charge for ad campaign. CalculateChargeResponse: properties: ad_spend: type: number title: Ad Spend commission_rate: type: number title: Commission Rate commission_amount: type: number title: Commission Amount total_charge: type: number title: Total Charge tier_used: type: string title: Tier Used current_balance: type: number title: Current Balance has_sufficient_credits: type: boolean title: Has Sufficient Credits currency: type: string title: Currency default: USD billing_currency: type: string title: Billing Currency default: USD fx_rate_to_usd: type: number title: Fx Rate To Usd type: object required: - ad_spend - commission_rate - commission_amount - total_charge - tier_used - current_balance - has_sufficient_credits - fx_rate_to_usd title: CalculateChargeResponse description: Response with calculated charges. CampaignAnalyticsImpact: properties: metric_key: anyOf: - type: string - type: 'null' title: Metric Key relative_delta: anyOf: - type: number - type: 'null' title: Relative Delta outcome_state: type: string title: Outcome State default: measuring post_days_observed: anyOf: - type: integer - type: 'null' title: Post Days Observed optimization_executed_at: anyOf: - type: string - type: 'null' title: Optimization Executed At pre_value: anyOf: - type: number - type: 'null' title: Pre Value post_value: anyOf: - type: number - type: 'null' title: Post Value change_summary: anyOf: - type: string - type: 'null' title: Change Summary type: object title: CampaignAnalyticsImpact description: 'One executed optimization move''s measured after-effect on the campaign. ``outcome_state`` is ``measuring`` until enough post-change days accrue, then the scored verdict (``improved`` | ``neutral`` | ``regressed``) from the AI team''s single learning brain.' CampaignAnalyticsResponse: properties: impressions: type: integer minimum: 0.0 title: Impressions default: 0 clicks: type: integer minimum: 0.0 title: Clicks default: 0 conversions: type: integer minimum: 0.0 title: Conversions default: 0 leads: type: integer minimum: 0.0 title: Leads default: 0 spend: type: number minimum: 0.0 title: Spend default: 0.0 revenue: type: number minimum: 0.0 title: Revenue default: 0.0 ctr: type: number minimum: 0.0 title: Ctr default: 0.0 conversion_rate: type: number minimum: 0.0 title: Conversion Rate default: 0.0 cpc: type: number minimum: 0.0 title: Cpc default: 0.0 cpa: type: number minimum: 0.0 title: Cpa default: 0.0 roas: type: number minimum: 0.0 title: Roas default: 0.0 id: anyOf: - type: string - type: 'null' title: Id company_profile_id: anyOf: - type: string - type: 'null' title: Company Profile Id campaign_id: type: string title: Campaign Id campaign_type: type: string title: Campaign Type platform: type: string title: Platform platform_campaign_id: anyOf: - type: string - type: 'null' title: Platform Campaign Id platform_ad_set_id: anyOf: - type: string - type: 'null' title: Platform Ad Set Id platform_ad_id: anyOf: - type: string - type: 'null' title: Platform Ad Id additional_metrics: anyOf: - additionalProperties: true type: object - type: 'null' title: Additional Metrics last_synced_at: anyOf: - type: string format: date-time - type: 'null' title: Last Synced At sync_status: type: string title: Sync Status default: pending sync_error: anyOf: - type: string - type: 'null' title: Sync Error created_at: type: string format: date-time title: Created At updated_at: type: string format: date-time title: Updated At type: object required: - id - company_profile_id - campaign_id - campaign_type - platform - created_at - updated_at title: CampaignAnalyticsResponse description: Response schema for campaign analytics CampaignAnalyticsStrip: properties: as_of_date: anyOf: - type: string - type: 'null' title: As Of Date currency_code: anyOf: - type: string - type: 'null' title: Currency Code spark: anyOf: - items: anyOf: - type: number - type: 'null' type: array - type: 'null' title: Spark general: items: $ref: '#/components/schemas/CampaignAnalyticsWindow' type: array title: General default: [] post_optimization: items: $ref: '#/components/schemas/CampaignAnalyticsImpact' type: array title: Post Optimization default: [] has_big_movement: type: boolean title: Has Big Movement default: false conversion_status: anyOf: - type: string - type: 'null' title: Conversion Status sample_size: anyOf: - type: integer - type: 'null' title: Sample Size sample_unit: anyOf: - type: string - type: 'null' title: Sample Unit type: object title: CampaignAnalyticsStrip description: 'The close-the-loop analytics shown under a campaign row: general DoD/WoW for the headline metric, plus one entry per optimization move''s after-effect.' CampaignAnalyticsSummary: properties: total_impressions: type: integer title: Total Impressions total_clicks: type: integer title: Total Clicks total_conversions: type: integer title: Total Conversions total_spend: type: number title: Total Spend total_revenue: type: number title: Total Revenue overall_ctr: type: number title: Overall Ctr overall_conversion_rate: type: number title: Overall Conversion Rate overall_roas: type: number title: Overall Roas campaign_types: additionalProperties: $ref: '#/components/schemas/CampaignTypeMetrics' type: object title: Campaign Types trends: items: $ref: '#/components/schemas/TrendData' type: array title: Trends trends_by_channel: items: $ref: '#/components/schemas/ChannelTrendData' type: array title: Trends By Channel default: [] channel_labels: additionalProperties: type: string type: object title: Channel Labels default: {} last_updated: anyOf: - type: string format: date-time - type: 'null' title: Last Updated type: object required: - total_impressions - total_clicks - total_conversions - total_spend - total_revenue - overall_ctr - overall_conversion_rate - overall_roas - campaign_types - trends title: CampaignAnalyticsSummary description: Dashboard summary of all campaign analytics CampaignAnalyticsWindow: properties: window_type: type: string title: Window Type metric_key: anyOf: - type: string - type: 'null' title: Metric Key current_value: anyOf: - type: number - type: 'null' title: Current Value baseline_value: anyOf: - type: number - type: 'null' title: Baseline Value relative_delta: anyOf: - type: number - type: 'null' title: Relative Delta data_sufficiency: anyOf: - type: string - type: 'null' title: Data Sufficiency is_big_movement: type: boolean title: Is Big Movement default: false movement_reason: anyOf: - type: string - type: 'null' title: Movement Reason type: object required: - window_type title: CampaignAnalyticsWindow description: 'One general DoD/WoW movement for a campaign''s headline metric. ``relative_delta`` is null when the baseline is ~0 (an honest "new/!comparable", never a fabricated %); ``data_sufficiency`` is ``ok`` once the window has enough days, else ``insufficient`` (e.g. WoW with under a full prior week).' CampaignAppliedOptimization: properties: action_id: type: string title: Action Id action_ids: items: type: string type: array title: Action Ids default: [] rollbackable_action_ids: items: type: string type: array title: Rollbackable Action Ids default: [] title: type: string title: Title executed_at: type: string title: Executed At change_scope: anyOf: - type: string - type: 'null' title: Change Scope change_scope_label: anyOf: - type: string - type: 'null' title: Change Scope Label outcome_state: type: string title: Outcome State default: measuring changes: items: $ref: '#/components/schemas/CampaignOptimizationChange' type: array title: Changes default: [] is_rollback: type: boolean title: Is Rollback default: false rollback_available: type: boolean title: Rollback Available default: false rollback_unavailable_reason: anyOf: - type: string - type: 'null' title: Rollback Unavailable Reason type: object required: - action_id - title - executed_at title: CampaignAppliedOptimization description: 'The most recent provider-executed optimization for one campaign. This is the durable, read-only counterpart to ``pending_recommendation``: the campaign row can keep showing exactly what changed after the approval disappears from the open queue.' CampaignDaypartingRequest: properties: campaign_id: type: string format: uuid title: Campaign Id platform_configs: additionalProperties: $ref: '#/components/schemas/PlatformDaypartingConfig' type: object title: Platform Configs type: object required: - campaign_id - platform_configs title: CampaignDaypartingRequest CampaignInfo: properties: id: type: string format: uuid title: Id ad_type: anyOf: - type: string - type: 'null' title: Ad Type source: anyOf: - type: string - type: 'null' title: Source ad_creative_id: anyOf: - type: string - type: 'null' title: Ad Creative Id headline: anyOf: - type: string - type: 'null' title: Headline description: anyOf: - type: string - type: 'null' title: Description cta_text: anyOf: - type: string - type: 'null' title: Cta Text ad_format: anyOf: - type: string - type: 'null' title: Ad Format creative_type: anyOf: - type: string - type: 'null' title: Creative Type ad_creative_urls: anyOf: - items: type: string type: array - type: 'null' title: Ad Creative Urls cached_url: anyOf: - type: string - type: 'null' title: Cached Url video_url: anyOf: - type: string - type: 'null' title: Video Url thumbnail_url: anyOf: - type: string - type: 'null' title: Thumbnail Url page_name: anyOf: - type: string - type: 'null' title: Page Name page_id: anyOf: - type: string - type: 'null' title: Page Id publisher_platforms: anyOf: - items: type: string type: array - type: 'null' title: Publisher Platforms ad_snapshot_url: anyOf: - type: string - type: 'null' title: Ad Snapshot Url width: anyOf: - type: integer - type: 'null' title: Width height: anyOf: - type: integer - type: 'null' title: Height duration_days: anyOf: - type: integer - type: 'null' title: Duration Days detected_at: type: string format: date-time title: Detected At updated_at: anyOf: - type: string format: date-time - type: 'null' title: Updated At posted_at: anyOf: - type: string format: date-time - type: 'null' title: Posted At first_shown: anyOf: - type: string format: date-time - type: 'null' title: First Shown last_shown: anyOf: - type: string format: date-time - type: 'null' title: Last Shown is_active: type: boolean title: Is Active confidence_score: anyOf: - type: number - type: 'null' title: Confidence Score matched_product_offering_ids: anyOf: - items: type: string type: array - type: 'null' title: Matched Product Offering Ids matched_offerings: anyOf: - items: additionalProperties: true type: object type: array - type: 'null' title: Matched Offerings competition_reasons: anyOf: - items: type: string type: array - type: 'null' title: Competition Reasons ai_analysis: anyOf: - additionalProperties: true type: object - type: 'null' title: Ai Analysis detected_offers: anyOf: - items: additionalProperties: true type: object type: array - type: 'null' title: Detected Offers detected_products: anyOf: - items: additionalProperties: true type: object type: array - type: 'null' title: Detected Products type: object required: - id - detected_at - is_active title: CampaignInfo description: Competitor ad campaign (aligned to CompetitorAd fields). CampaignMediaOperation: properties: action: type: string enum: - replace - add - add_and_set_primary title: Action media_type: type: string enum: - image - video title: Media Type selected_url: type: string title: Selected Url previous_url: anyOf: - type: string - type: 'null' title: Previous Url source_index: anyOf: - type: integer - type: 'null' title: Source Index type: object required: - action - media_type - selected_url title: CampaignMediaOperation description: Campaign Edit Mode media change applied by the outer Save/Sync transaction. CampaignOptimizationChange: properties: title: type: string title: Title type: anyOf: - type: string - type: 'null' title: Type rationale: anyOf: - type: string - type: 'null' title: Rationale campaign: anyOf: - type: string - type: 'null' title: Campaign campaign_id: anyOf: - type: string - type: 'null' title: Campaign Id option_id: anyOf: - type: string - type: 'null' title: Option Id selection_id: anyOf: - type: string - type: 'null' title: Selection Id source_action_id: anyOf: - type: string - type: 'null' title: Source Action Id edits: items: $ref: '#/components/schemas/CampaignOptimizationFieldEdit' type: array title: Edits default: [] type: object required: - title title: CampaignOptimizationChange description: 'One concrete change inside a pending optimization, for a before/after review. Carries the data-backed *why* (``rationale``) and the list of literal field/asset ``edits`` (each a clean before -> after), so accepting a live-campaign change is informed -- the reviewer sees exactly which fields/assets change and the reason.' CampaignOptimizationFieldEdit: properties: label: type: string title: Label kind: type: string title: Kind before: anyOf: - type: string - type: 'null' title: Before after: anyOf: - type: string - type: 'null' title: After image_url: anyOf: - type: string - type: 'null' title: Image Url before_image_url: anyOf: - type: string - type: 'null' title: Before Image Url note: anyOf: - type: string - type: 'null' title: Note gloss: anyOf: - type: string - type: 'null' title: Gloss match_type: anyOf: - type: string - type: 'null' title: Match Type type: object required: - label - kind title: CampaignOptimizationFieldEdit description: 'One concrete field/asset edit, as a clean before -> after mapping. Sourced from a single ``optimization_action`` (not the option-level prose), so each row is the literal thing changing: a copy field (headline/description) with its current vs proposed text, the new creative image, or a keyword operation (pause / add / add-negative) with the metric evidence behind it.' CampaignOptimizationRollbackRequest: properties: action_ids: items: type: string format: uuid type: array maxItems: 50 minItems: 1 title: Action Ids type: object required: - action_ids title: CampaignOptimizationRollbackRequest CampaignOptimizationRollbackResponse: properties: mutation_id: type: string title: Mutation Id rollback_action_id: type: string title: Rollback Action Id applied_fields: items: type: string type: array title: Applied Fields excluded_fields: items: type: string type: array title: Excluded Fields campaign: additionalProperties: true type: object title: Campaign type: object required: - mutation_id - rollback_action_id - applied_fields - excluded_fields - campaign title: CampaignOptimizationRollbackResponse CampaignOptimizationSummary: properties: campaign_id: type: string title: Campaign Id count: type: integer title: Count executed: type: integer title: Executed last_actioned_at: anyOf: - type: string - type: 'null' title: Last Actioned At last_activity_type: anyOf: - type: string - type: 'null' title: Last Activity Type last_activity_type_label: anyOf: - type: string - type: 'null' title: Last Activity Type Label outcome_state: type: string title: Outcome State default: measuring pending_recommendations: items: $ref: '#/components/schemas/CampaignPendingRecommendation' type: array title: Pending Recommendations default: [] pending_recommendation: anyOf: - $ref: '#/components/schemas/CampaignPendingRecommendation' - type: 'null' latest_applied_optimization: anyOf: - $ref: '#/components/schemas/CampaignAppliedOptimization' - type: 'null' analytics_strip: anyOf: - $ref: '#/components/schemas/CampaignAnalyticsStrip' - type: 'null' type: object required: - campaign_id - count - executed title: CampaignOptimizationSummary description: 'A per-campaign rollup of AI-team activity, keyed by the campaign''s public id. ``campaign_id`` is the same public id the dashboard exposes on each card (``ads_`` for paid, ``social_`` / ``batch__`` for social), so the frontend can merge this onto a card with a direct lookup.' CampaignOptimizationSummaryResponse: properties: summaries: items: $ref: '#/components/schemas/CampaignOptimizationSummary' type: array title: Summaries type: object required: - summaries title: CampaignOptimizationSummaryResponse CampaignPendingRecommendation: properties: approval_id: type: string title: Approval Id team_id: type: string title: Team Id title: type: string title: Title change_scope: anyOf: - type: string - type: 'null' title: Change Scope change_scope_label: anyOf: - type: string - type: 'null' title: Change Scope Label priority: anyOf: - type: string - type: 'null' title: Priority detail: anyOf: - type: string - type: 'null' title: Detail option_ids: items: type: string type: array title: Option Ids default: [] action_ids: items: type: string type: array title: Action Ids default: [] changes: items: $ref: '#/components/schemas/CampaignOptimizationChange' type: array title: Changes default: [] requested_at: anyOf: - type: string - type: 'null' title: Requested At updated_at: anyOf: - type: string - type: 'null' title: Updated At type: object required: - approval_id - team_id - title title: CampaignPendingRecommendation description: 'A still-open AI-team optimization the user can Accept/Decline from the card. Sourced from an ``AgentTeamApproval`` in an OPEN state (pending/deferred/ escalated) whose decision payload references this campaign. ``approval_id`` + ``team_id`` are what the frontend passes to the approvals decision endpoint, so the card never has to resolve the active team itself.' CampaignPerfHistoryPoint: properties: date: type: string title: Date value: anyOf: - type: number - type: 'null' title: Value spend: anyOf: - type: number - type: 'null' title: Spend conversions: anyOf: - type: number - type: 'null' title: Conversions clicks: anyOf: - type: number - type: 'null' title: Clicks type: object required: - date title: CampaignPerfHistoryPoint description: 'One day of the campaign''s headline metric, for the expanded-row trend chart. ``value`` is null on a day with no spend (an honest gap, not a fabricated zero).' CampaignPerfHistoryResponse: properties: campaign_id: type: string title: Campaign Id headline_metric: anyOf: - type: string - type: 'null' title: Headline Metric headline_label: anyOf: - type: string - type: 'null' title: Headline Label higher_is_better: type: boolean title: Higher Is Better default: true currency_code: anyOf: - type: string - type: 'null' title: Currency Code conversion_status: anyOf: - type: string - type: 'null' title: Conversion Status points: items: $ref: '#/components/schemas/CampaignPerfHistoryPoint' type: array title: Points default: [] optimizations: items: $ref: '#/components/schemas/CampaignPerfOptimizationMarker' type: array title: Optimizations default: [] revisions: items: $ref: '#/components/schemas/CampaignPerfRevision' type: array title: Revisions default: [] type: object required: - campaign_id title: CampaignPerfHistoryResponse CampaignPerfOptimizationMarker: properties: date: type: string title: Date label: type: string title: Label type: object required: - date - label title: CampaignPerfOptimizationMarker description: An executed AI-team optimization, drawn on the chart so the before/after is visible. CampaignPerfRevision: properties: executed_at: type: string title: Executed At change_summary: anyOf: - type: string - type: 'null' title: Change Summary change_from: anyOf: - type: string - type: 'null' title: Change From change_to: anyOf: - type: string - type: 'null' title: Change To change_scope: anyOf: - type: string - type: 'null' title: Change Scope metric_key: anyOf: - type: string - type: 'null' title: Metric Key pre_value: anyOf: - type: number - type: 'null' title: Pre Value post_value: anyOf: - type: number - type: 'null' title: Post Value post_days_observed: anyOf: - type: integer - type: 'null' title: Post Days Observed outcome_state: type: string title: Outcome State default: measuring type: object required: - executed_at title: CampaignPerfRevision description: 'One entry in the campaign''s optimization/revision history: what the AI changed, when, and the measured before/after result. Built entirely from data we already store (the action''s change_from/change_to + the per-optimization metric snapshots) -- a real "what was it, what did we change, did it work" trail without any new capture layer.' CampaignPostsResponse: properties: posts: items: $ref: '#/components/schemas/PostModel' type: array title: Posts type: object required: - posts title: CampaignPostsResponse CampaignResponse: properties: id: anyOf: - type: integer - type: 'null' title: Id campaign_id: type: string title: Campaign Id name: type: string title: Name target_platforms: items: type: string type: array title: Target Platforms target_audience: anyOf: - type: string - type: 'null' title: Target Audience user_prompt: anyOf: - type: string - type: 'null' title: User Prompt status: anyOf: - type: string - type: 'null' title: Status country: anyOf: - type: string - type: 'null' title: Country state_province: anyOf: - type: string - type: 'null' title: State Province city: anyOf: - type: string - type: 'null' title: City creation_date: anyOf: - type: string - type: 'null' title: Creation Date last_modified: anyOf: - type: string - type: 'null' title: Last Modified deployed_at: anyOf: - type: string - type: 'null' title: Deployed At metadata: anyOf: - additionalProperties: true type: object - type: 'null' title: Metadata creation_source: anyOf: - type: string - type: 'null' title: Creation Source type: object required: - campaign_id - name - target_platforms title: CampaignResponse description: Base class for campaign metadata response. CampaignReverseGeocodeResponse: properties: postal_code: anyOf: - type: string - type: 'null' title: Postal Code city: anyOf: - type: string - type: 'null' title: City region: anyOf: - type: string - type: 'null' title: Region region_code: anyOf: - type: string - type: 'null' title: Region Code country_code: anyOf: - type: string - type: 'null' title: Country Code country_name: anyOf: - type: string - type: 'null' title: Country Name display_label: anyOf: - type: string - type: 'null' title: Display Label latitude: anyOf: - type: number - type: 'null' title: Latitude longitude: anyOf: - type: number - type: 'null' title: Longitude geojson: anyOf: - additionalProperties: true type: object - type: 'null' title: Geojson type: object title: CampaignReverseGeocodeResponse CampaignTypeMetrics: properties: impressions: type: integer title: Impressions default: 0 clicks: type: integer title: Clicks default: 0 conversions: type: integer title: Conversions default: 0 spend: type: number title: Spend default: 0.0 revenue: type: number title: Revenue default: 0.0 campaigns: items: additionalProperties: true type: object type: array title: Campaigns default: [] type: object title: CampaignTypeMetrics description: Metrics aggregated by campaign type CancelSubscriptionRequest: properties: at_period_end: type: boolean title: At Period End description: If True, cancellation occurs at period end (default). default: true cancellation_reason_category: anyOf: - $ref: '#/components/schemas/CancellationReason' - type: 'null' description: High-level reason the user is cancelling (for churn analysis). cancellation_note: anyOf: - type: string maxLength: 500 - type: 'null' title: Cancellation Note description: Optional free-text elaboration on why the user is cancelling. type: object title: CancelSubscriptionRequest description: Request model for cancelling a subscription. CancellationReason: type: string enum: - too_expensive - missing_features - not_using - switched_competitor - technical_issues - hard_to_use - temporary - other title: CancellationReason description: 'High-level reason a user selects when cancelling a subscription. Kept in sync with the frontend cancellation reason form. The order here is not significant; values are persisted verbatim for churn analysis.' ChangeApprovalResponse: properties: id: type: string title: Id approver_user_id: anyOf: - type: string - type: 'null' title: Approver User Id approver_name: anyOf: - type: string - type: 'null' title: Approver Name approver_email: anyOf: - type: string - type: 'null' title: Approver Email decision: type: string title: Decision rationale: anyOf: - type: string - type: 'null' title: Rationale requirement_key: anyOf: - type: string - type: 'null' title: Requirement Key created_at: type: string format: date-time title: Created At type: object required: - id - decision - created_at title: ChangeApprovalResponse ChangeManagementSettingsResponse: properties: enabled: type: boolean title: Enabled default: false enforce_writes: type: boolean title: Enforce Writes default: false budget_guardrail: $ref: '#/components/schemas/BudgetGuardrailConfig' type: object title: ChangeManagementSettingsResponse ChangeManagementSettingsUpdateRequest: properties: enabled: type: boolean title: Enabled default: false enforce_writes: type: boolean title: Enforce Writes default: false budget_guardrail: anyOf: - $ref: '#/components/schemas/BudgetGuardrailConfig' - type: 'null' type: object title: ChangeManagementSettingsUpdateRequest ChangeOperationCreateRequest: properties: kind: type: string maxLength: 50 minLength: 1 title: Kind title: anyOf: - type: string maxLength: 300 - type: 'null' title: Title tool_name: anyOf: - type: string maxLength: 200 - type: 'null' title: Tool Name tool_arguments: anyOf: - additionalProperties: true type: object - type: 'null' title: Tool Arguments job_type: anyOf: - type: string maxLength: 200 - type: 'null' title: Job Type job_data: anyOf: - additionalProperties: true type: object - type: 'null' title: Job Data diff: anyOf: - additionalProperties: true type: object - type: 'null' title: Diff type: object required: - kind title: ChangeOperationCreateRequest ChangeOperationExecuteOverride: properties: operation_id: type: string title: Operation Id job_data: anyOf: - additionalProperties: true type: object - type: 'null' title: Job Data type: object required: - operation_id title: ChangeOperationExecuteOverride ChangeOperationResponse: properties: id: type: string title: Id kind: type: string title: Kind operation_key: anyOf: - type: string - type: 'null' title: Operation Key title: anyOf: - type: string - type: 'null' title: Title tool_name: anyOf: - type: string - type: 'null' title: Tool Name tool_arguments: anyOf: - additionalProperties: true type: object - type: 'null' title: Tool Arguments job_type: anyOf: - type: string - type: 'null' title: Job Type job_data: anyOf: - additionalProperties: true type: object - type: 'null' title: Job Data diff: anyOf: - additionalProperties: true type: object - type: 'null' title: Diff execution_status: type: string title: Execution Status execution_result: anyOf: - additionalProperties: true type: object - type: 'null' title: Execution Result execution_error: anyOf: - type: string - type: 'null' title: Execution Error execution_started_at: anyOf: - type: string format: date-time - type: 'null' title: Execution Started 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 - kind - execution_status - created_at - updated_at title: ChangeOperationResponse ChangePlanRequest: properties: organization_id: type: string title: Organization Id target_plan: type: string title: Target Plan billing_interval: anyOf: - type: string - type: 'null' title: Billing Interval type: object required: - organization_id - target_plan title: ChangePlanRequest description: Request model for changing subscription plan. ChangeRequestApproveRequest: properties: decision: type: string pattern: ^(approved|rejected|changes_requested)$ title: Decision rationale: anyOf: - type: string maxLength: 5000 - type: 'null' title: Rationale requirement_key: anyOf: - type: string maxLength: 200 - type: 'null' title: Requirement Key type: object required: - decision title: ChangeRequestApproveRequest ChangeRequestCommentResponse: properties: id: type: string title: Id author_user_id: anyOf: - type: string - type: 'null' title: Author User Id author_name: anyOf: - type: string - type: 'null' title: Author Name author_email: anyOf: - type: string - type: 'null' title: Author Email kind: type: string title: Kind message: anyOf: - type: string - type: 'null' title: Message decision: anyOf: - type: string - type: 'null' title: Decision source_approval_id: anyOf: - type: string - type: 'null' title: Source Approval Id created_at: type: string format: date-time title: Created At type: object required: - id - kind - created_at title: ChangeRequestCommentResponse ChangeRequestCreateRequest: properties: company_profile_id: anyOf: - type: string - type: 'null' title: Company Profile Id source: type: string maxLength: 50 title: Source default: manual title: type: string maxLength: 300 minLength: 1 title: Title description: anyOf: - type: string maxLength: 5000 - type: 'null' title: Description risk_score: type: integer maximum: 100.0 minimum: 0.0 title: Risk Score default: 0 risk_factors: anyOf: - additionalProperties: true type: object - type: 'null' title: Risk Factors policy_results: anyOf: - additionalProperties: true type: object - type: 'null' title: Policy Results required_approvals: anyOf: - items: additionalProperties: true type: object type: array - type: 'null' title: Required Approvals operations: items: $ref: '#/components/schemas/ChangeOperationCreateRequest' type: array title: Operations type: object required: - title title: ChangeRequestCreateRequest ChangeRequestExecuteRequest: properties: operation_overrides: anyOf: - items: $ref: '#/components/schemas/ChangeOperationExecuteOverride' type: array - type: 'null' title: Operation Overrides type: object title: ChangeRequestExecuteRequest ChangeRequestPreviewResponse: properties: platform_type: anyOf: - type: string - type: 'null' title: Platform Type ad_id: anyOf: - type: string - type: 'null' title: Ad Id ad: anyOf: - additionalProperties: true type: object - type: 'null' title: Ad message: anyOf: - type: string - type: 'null' title: Message type: object title: ChangeRequestPreviewResponse ChangeRequestResponse: properties: id: type: string title: Id organization_id: type: string title: Organization Id company_profile_id: anyOf: - type: string - type: 'null' title: Company Profile Id created_by_user_id: anyOf: - type: string - type: 'null' title: Created By User Id source: type: string title: Source proposer_kind: type: string title: Proposer Kind default: user proposer_key: anyOf: - type: string - type: 'null' title: Proposer Key evidence_references: items: type: string type: array title: Evidence References title: type: string title: Title description: anyOf: - type: string - type: 'null' title: Description status: type: string title: Status can_approve: type: boolean title: Can Approve default: false can_execute: type: boolean title: Can Execute default: false risk_score: type: integer title: Risk Score risk_factors: anyOf: - additionalProperties: true type: object - type: 'null' title: Risk Factors policy_results: anyOf: - additionalProperties: true type: object - type: 'null' title: Policy Results required_approvals: anyOf: - items: additionalProperties: true type: object type: array - type: 'null' title: Required Approvals executed_by_user_id: anyOf: - type: string - type: 'null' title: Executed By User Id executed_at: anyOf: - type: string format: date-time - type: 'null' title: Executed At created_at: type: string format: date-time title: Created At updated_at: type: string format: date-time title: Updated At operations: items: $ref: '#/components/schemas/ChangeOperationResponse' type: array title: Operations approvals: items: $ref: '#/components/schemas/ChangeApprovalResponse' type: array title: Approvals comments: items: $ref: '#/components/schemas/ChangeRequestCommentResponse' type: array title: Comments type: object required: - id - organization_id - source - title - status - risk_score - created_at - updated_at title: ChangeRequestResponse ChangeRequestSummaryResponse: properties: enabled: type: boolean title: Enabled enforce_writes: type: boolean title: Enforce Writes pending_total: type: integer title: Pending Total awaiting_my_review: type: integer title: Awaiting My Review is_approver: type: boolean title: Is Approver type: object required: - enabled - enforce_writes - pending_total - awaiting_my_review - is_approver title: ChangeRequestSummaryResponse ChannelTrendData: properties: date: type: string title: Date channel: type: string title: Channel impressions: type: integer title: Impressions clicks: type: integer title: Clicks type: object required: - date - channel - impressions - clicks title: ChannelTrendData description: Daily trend data by channel/platform ChatAttachmentHandle: properties: handle: type: string maxLength: 500 minLength: 16 title: Handle name: type: string maxLength: 500 minLength: 1 title: Name media_type: type: string maxLength: 200 minLength: 1 title: Media Type size_bytes: type: integer minimum: 0.0 title: Size Bytes type: object required: - handle - name - media_type - size_bytes title: ChatAttachmentHandle description: Opaque Core-issued attachment metadata accepted by the async bridge. ChatFollowUpSelection: properties: source_message_id: type: string format: uuid title: Source Message Id option_ids: items: type: string type: array maxItems: 5 minItems: 1 title: Option Ids additionalProperties: false type: object required: - source_message_id - option_ids title: ChatFollowUpSelection description: Untrusted identities for selecting a persisted v2 follow-up panel. ChatRequest: properties: message: type: string minLength: 1 title: Message description: User message conversation_id: anyOf: - type: string format: uuid - type: 'null' title: Conversation Id description: Existing conversation ID (creates new if omitted) company_profile_id: type: string format: uuid title: Company Profile Id description: Company profile context for MCP tools organization_id: type: string format: uuid title: Organization Id description: Organization context for multi-tenant scoping workflow_stage: anyOf: - type: string - type: 'null' title: Workflow Stage description: Current workflow stage for context page_context: anyOf: - $ref: '#/components/schemas/PageContext' - type: 'null' description: Optional UI page context to ground the assistant target_team_id: anyOf: - type: string format: uuid - type: 'null' title: Target Team Id description: Target team ID for @team or @agent routing (required when target_agent_key is set) target_agent_key: anyOf: - type: string - type: 'null' title: Target Agent Key description: Target agent key for @agent routing (requires target_team_id) files: items: $ref: '#/components/schemas/ChatAttachmentHandle' type: array maxItems: 20 title: Files description: Opaque conversation attachment handles issued by Pomo core idempotency_key: anyOf: - type: string maxLength: 200 minLength: 16 - type: 'null' title: Idempotency Key description: Opaque retry key for an existing-conversation asynchronous v2 turn follow_up_selection: anyOf: - $ref: '#/components/schemas/ChatFollowUpSelection' - type: 'null' description: Selected option identities from a persisted Markee v2 assistant panel type: object required: - message - company_profile_id - organization_id title: ChatRequest description: 'Request schema for sending a message to agentic chat. Can either: 1. Continue existing conversation (provide conversation_id) 2. Create new conversation (omit conversation_id)' example: company_profile_id: 123e4567-e89b-12d3-a456-426614174001 conversation_id: 123e4567-e89b-12d3-a456-426614174002 message: What are my top performing campaigns? organization_id: 123e4567-e89b-12d3-a456-426614174000 page_context: entity_id: po_123 entity_name: Pro Suite source: product-detail tab: marketing workflow_stage: campaign_analysis ChatResponse: properties: conversation_id: type: string format: uuid title: Conversation Id description: Conversation ID (created or existing) conversation: anyOf: - additionalProperties: true type: object - type: 'null' title: Conversation description: Full conversation object with updated metadata user_message: $ref: '#/components/schemas/AgentMessageResponse' description: User message that was saved assistant_message: $ref: '#/components/schemas/AgentMessageResponse' description: Assistant response that was saved response: type: string title: Response description: Assistant's response text (convenience field) ui_tool_calls: items: additionalProperties: true type: object type: array title: Ui Tool Calls description: User-facing tool payloads for this turn web_citations: items: additionalProperties: true type: object type: array title: Web Citations description: Web citations extracted from tool payloads for this turn tokens_used: type: integer title: Tokens Used description: Total tokens consumed turns: type: integer title: Turns description: Number of agentic iterations referenced_documents: items: $ref: '#/components/schemas/ReferencedDocument' type: array title: Referenced Documents description: Documents referenced in generating this response (for UI display) ai_policy_eval: anyOf: - additionalProperties: true type: object - type: 'null' title: Ai Policy Eval description: Org AI policy evaluation result for this response (warn-only) sender_key: anyOf: - type: string - type: 'null' title: Sender Key description: 'Who responded: agent_key or null for general chatbot' sender_display_name: anyOf: - type: string - type: 'null' title: Sender Display Name description: Human-readable name of responding agent sender_role: anyOf: - type: string - type: 'null' title: Sender Role description: 'Role of responding agent: manager, strategist, specialist' target_mode: anyOf: - type: string - type: 'null' title: Target Mode description: 'Routing mode: ''agent_chat'' or null for general chatbot' agent_trace: anyOf: - items: $ref: '#/components/schemas/AgentTraceStep' type: array - type: 'null' title: Agent Trace description: Inter-agent delegation trace for direct agent chat (specialist analysis + manager synthesis) type: object required: - conversation_id - user_message - assistant_message - response - tokens_used - turns title: ChatResponse description: 'Response schema for agentic chat. Includes: - conversation_id: ID of conversation (created or existing) - conversation: Full conversation object with updated title - user_message: The user''s message that was saved - assistant_message: The assistant''s response that was saved - response: The assistant''s response text (convenience field) - tool_calls: MCP tools that were executed - tokens_used: Total tokens for this turn - turns: Number of agentic iterations - referenced_documents: Documents used to generate the response (for UI display)' example: assistant_message: content: Your top campaigns have ROAS of 3.2 conversation_id: 123e4567-e89b-12d3-a456-426614174002 created_at: '2025-11-05T20:30:01Z' id: 123e4567-e89b-12d3-a456-426614174006 role: assistant tokens_used: 450 turns: 2 ui_tool_calls: - arguments: date_range_days: 30 result: roas: 3.2 success: true tool: get_campaign_analytics conversation_id: 123e4567-e89b-12d3-a456-426614174002 response: Your top campaigns have ROAS of 3.2 tokens_used: 450 turns: 2 ui_tool_calls: - arguments: date_range_days: 30 result: roas: 3.2 success: true tool: get_campaign_analytics user_message: content: What are my top performing campaigns? conversation_id: 123e4567-e89b-12d3-a456-426614174002 created_at: '2025-11-05T20:30:00Z' id: 123e4567-e89b-12d3-a456-426614174005 role: user CompanyImageResponse: properties: image_type: type: string title: Image Type image_url: type: string title: Image Url alt_text: anyOf: - type: string - type: 'null' title: Alt Text image_metadata: anyOf: - additionalProperties: true type: object - type: 'null' title: Image Metadata id: anyOf: - type: string - type: 'null' title: Id company_profile_id: anyOf: - type: string - type: 'null' title: Company Profile Id created_at: anyOf: - type: string - type: 'null' title: Created At type: object required: - image_type - image_url - id - company_profile_id - created_at title: CompanyImageResponse CompanyInfo: properties: name: type: string title: Name description: type: string title: Description industry: type: string title: Industry location: anyOf: - type: string - type: 'null' title: Location company_size: anyOf: - type: string - type: 'null' title: Company Size target_market: anyOf: - items: type: string type: array - type: 'null' title: Target Market unique_selling_proposition: anyOf: - type: string - type: 'null' title: Unique Selling Proposition primary_business_model: anyOf: - type: string - type: 'null' title: Primary Business Model secondary_business_models: anyOf: - items: type: string type: array - type: 'null' title: Secondary Business Models business_model_metadata: anyOf: - additionalProperties: true type: object - type: 'null' title: Business Model Metadata marketing_goal: anyOf: - type: string - type: 'null' title: Marketing Goal average_monthly_campaign_budget: anyOf: - type: number - type: 'null' title: Average Monthly Campaign Budget average_monthly_campaign_budget_currency: anyOf: - type: string - type: 'null' title: Average Monthly Campaign Budget Currency operating_cities: anyOf: - items: type: string type: array - type: 'null' title: Operating Cities additionalProperties: true type: object required: - name - description - industry title: CompanyInfo CompanyMessageCreate: properties: message_type: type: string title: Message Type content: type: string title: Content message_metadata: anyOf: - additionalProperties: true type: object - type: 'null' title: Message Metadata type: object required: - message_type - content title: CompanyMessageCreate CompanyMessageResponse: properties: message_type: type: string title: Message Type content: type: string title: Content message_metadata: anyOf: - additionalProperties: true type: object - type: 'null' title: Message Metadata id: anyOf: - type: string - type: 'null' title: Id company_profile_id: anyOf: - type: string - type: 'null' title: Company Profile Id created_at: anyOf: - type: string - type: 'null' title: Created At type: object required: - message_type - content - id - company_profile_id - created_at title: CompanyMessageResponse CompanyProfileAccessGrantRequest: properties: user_id: type: string format: uuid title: User Id description: ID of the user to grant access role: $ref: '#/components/schemas/ProjectRoleEnum' description: Company profile role to assign type: object required: - user_id - role title: CompanyProfileAccessGrantRequest description: Request to grant company profile access to a user. CompanyProfileAccessListResponse: properties: access_list: items: $ref: '#/components/schemas/CompanyProfileAccessResponse' type: array title: Access List total_count: type: integer title: Total Count company_profile_id: type: string format: uuid title: Company Profile Id company_profile_name: anyOf: - type: string - type: 'null' title: Company Profile Name type: object required: - access_list - total_count - company_profile_id title: CompanyProfileAccessListResponse description: Response model for listing company profile access. CompanyProfileAccessResponse: properties: id: anyOf: - type: string - type: 'null' title: Id user_id: anyOf: - type: string - type: 'null' title: User Id company_profile_id: anyOf: - type: string - type: 'null' title: Company Profile Id role: type: string title: Role user_name: anyOf: - type: string - type: 'null' title: User Name user_email: anyOf: - type: string - type: 'null' title: User Email granted_by: anyOf: - type: string format: uuid - type: 'null' title: Granted By created_at: type: string title: Created At updated_at: type: string title: Updated At is_org_owner: type: boolean title: Is Org Owner default: false type: object required: - id - user_id - company_profile_id - role - created_at - updated_at title: CompanyProfileAccessResponse description: Response model for company profile access information. CompanyProfileAccessUpdateRequest: properties: role: $ref: '#/components/schemas/ProjectRoleEnum' description: New company profile role type: object required: - role title: CompanyProfileAccessUpdateRequest description: Request to update a user's company profile access. CompanyProfileCreate: properties: name: anyOf: - type: string - type: 'null' title: Name description: anyOf: - type: string - type: 'null' title: Description company_links: anyOf: - items: type: string type: array - type: 'null' title: Company Links brand_attributes: anyOf: - additionalProperties: true type: object - type: 'null' title: Brand Attributes categories: anyOf: - {} - type: 'null' title: Categories primary_business_model: anyOf: - type: string - type: 'null' title: Primary Business Model secondary_business_models: anyOf: - items: type: string type: array - type: 'null' title: Secondary Business Models business_model_metadata: anyOf: - additionalProperties: true type: object - type: 'null' title: Business Model Metadata additional_metadata: anyOf: - additionalProperties: true type: object - type: 'null' title: Additional Metadata competitive_analysis: anyOf: - additionalProperties: true type: object - type: 'null' title: Competitive Analysis recommended_marketing_strategy: anyOf: - additionalProperties: true type: object - type: 'null' title: Recommended Marketing Strategy marketing_goal: anyOf: - type: string - type: 'null' title: Marketing Goal marketing_campaign_goal: anyOf: - type: string - type: 'null' title: Marketing Campaign Goal campaign_custom_instructions: anyOf: - type: string - type: 'null' title: Campaign Custom Instructions average_monthly_campaign_budget: anyOf: - type: number - type: 'null' title: Average Monthly Campaign Budget average_monthly_campaign_budget_currency: anyOf: - type: string - type: 'null' title: Average Monthly Campaign Budget Currency document_summaries: anyOf: - additionalProperties: true type: object - type: 'null' title: Document Summaries operating_regions: anyOf: - items: type: string type: array - type: 'null' title: Operating Regions logo_image: anyOf: - type: string - type: 'null' title: Logo Image logo_url: anyOf: - type: string - type: 'null' title: Logo Url is_completed: anyOf: - type: boolean - type: 'null' title: Is Completed default: false status: anyOf: - $ref: '#/components/schemas/CompanyProfileStatus' - type: 'null' default: active type: object title: CompanyProfileCreate CompanyProfileDailySpendSummaryResponse: properties: metric_date: type: string format: date title: Metric Date company_profile_id: type: string title: Company Profile Id organization_id: anyOf: - type: string - type: 'null' title: Organization Id google_spend: type: number title: Google Spend default: 0.0 meta_spend: type: number title: Meta Spend default: 0.0 tiktok_spend: type: number title: Tiktok Spend default: 0.0 linkedin_spend: type: number title: Linkedin Spend default: 0.0 total_spend: type: number title: Total Spend default: 0.0 google_spend_pct: type: number title: Google Spend Pct default: 0.0 meta_spend_pct: type: number title: Meta Spend Pct default: 0.0 tiktok_spend_pct: type: number title: Tiktok Spend Pct default: 0.0 linkedin_spend_pct: type: number title: Linkedin Spend Pct default: 0.0 contains_shared_spend: type: boolean title: Contains Shared Spend default: false generated_at: anyOf: - type: string format: date-time - type: 'null' title: Generated At type: object required: - metric_date - company_profile_id title: CompanyProfileDailySpendSummaryResponse CompanyProfileListScope: type: string enum: - active_org - my_accessible title: CompanyProfileListScope CompanyProfileResponse: properties: name: anyOf: - type: string - type: 'null' title: Name description: anyOf: - type: string - type: 'null' title: Description company_links: anyOf: - items: type: string type: array - type: 'null' title: Company Links brand_attributes: anyOf: - additionalProperties: true type: object - type: 'null' title: Brand Attributes categories: anyOf: - {} - type: 'null' title: Categories primary_business_model: anyOf: - type: string - type: 'null' title: Primary Business Model secondary_business_models: anyOf: - items: type: string type: array - type: 'null' title: Secondary Business Models business_model_metadata: anyOf: - additionalProperties: true type: object - type: 'null' title: Business Model Metadata additional_metadata: anyOf: - additionalProperties: true type: object - type: 'null' title: Additional Metadata competitive_analysis: anyOf: - additionalProperties: true type: object - type: 'null' title: Competitive Analysis recommended_marketing_strategy: anyOf: - additionalProperties: true type: object - type: 'null' title: Recommended Marketing Strategy marketing_goal: anyOf: - type: string - type: 'null' title: Marketing Goal marketing_campaign_goal: anyOf: - type: string - type: 'null' title: Marketing Campaign Goal campaign_custom_instructions: anyOf: - type: string - type: 'null' title: Campaign Custom Instructions average_monthly_campaign_budget: anyOf: - type: number - type: 'null' title: Average Monthly Campaign Budget average_monthly_campaign_budget_currency: anyOf: - type: string - type: 'null' title: Average Monthly Campaign Budget Currency document_summaries: anyOf: - additionalProperties: true type: object - type: 'null' title: Document Summaries operating_regions: anyOf: - items: type: string type: array - type: 'null' title: Operating Regions logo_image: anyOf: - type: string - type: 'null' title: Logo Image logo_url: anyOf: - type: string - type: 'null' title: Logo Url is_completed: anyOf: - type: boolean - type: 'null' title: Is Completed default: false status: anyOf: - type: string - type: 'null' id: anyOf: - type: string - type: 'null' title: Id organization_id: anyOf: - type: string - type: 'null' title: Organization Id creator_id: anyOf: - type: string - type: 'null' title: Creator Id created_at: anyOf: - type: string - type: 'null' title: Created At updated_at: anyOf: - type: string - type: 'null' title: Updated At company_messages: items: $ref: '#/components/schemas/CompanyMessageResponse' type: array title: Company Messages default: [] company_images: items: $ref: '#/components/schemas/CompanyImageResponse' type: array title: Company Images default: [] category_attributes: anyOf: - {} - type: 'null' title: Category Attributes marketing_profile_completed: type: boolean title: Marketing Profile Completed default: false type: object required: - id - organization_id - creator_id - created_at - updated_at title: CompanyProfileResponse CompanyProfileStatus: type: string enum: - active - archived - deleted title: CompanyProfileStatus description: Lifecycle status for a company profile. CompanyProfileStatusUpdateRequest: properties: status: $ref: '#/components/schemas/CompanyProfileStatus' description: New status for the company profile (archived or deleted) type: object required: - status title: CompanyProfileStatusUpdateRequest CompanyProfileStatusUpdateResponse: properties: success: type: boolean title: Success message: type: string title: Message profile: $ref: '#/components/schemas/CompanyProfileResponse' type: object required: - success - message - profile title: CompanyProfileStatusUpdateResponse CompanyProfileSummaryResponse: properties: id: anyOf: - type: string - type: 'null' title: Id organization_id: anyOf: - type: string - type: 'null' title: Organization Id name: anyOf: - type: string - type: 'null' title: Name company_links: items: type: string type: array title: Company Links logo_url: anyOf: - type: string - type: 'null' title: Logo Url status: type: string marketing_profile_completed: type: boolean title: Marketing Profile Completed default: false type: object required: - id - organization_id - status title: CompanyProfileSummaryResponse description: Compact company-profile projection for workspace navigation. CompanyProfileUpdate: properties: name: anyOf: - type: string - type: 'null' title: Name description: anyOf: - type: string - type: 'null' title: Description company_links: anyOf: - items: type: string type: array - type: 'null' title: Company Links brand_attributes: anyOf: - additionalProperties: true type: object - type: 'null' title: Brand Attributes categories: anyOf: - {} - type: 'null' title: Categories primary_business_model: anyOf: - type: string - type: 'null' title: Primary Business Model secondary_business_models: anyOf: - items: type: string type: array - type: 'null' title: Secondary Business Models business_model_metadata: anyOf: - additionalProperties: true type: object - type: 'null' title: Business Model Metadata additional_metadata: anyOf: - additionalProperties: true type: object - type: 'null' title: Additional Metadata competitive_analysis: anyOf: - additionalProperties: true type: object - type: 'null' title: Competitive Analysis recommended_marketing_strategy: anyOf: - additionalProperties: true type: object - type: 'null' title: Recommended Marketing Strategy marketing_goal: anyOf: - type: string - type: 'null' title: Marketing Goal marketing_campaign_goal: anyOf: - type: string - type: 'null' title: Marketing Campaign Goal campaign_custom_instructions: anyOf: - type: string - type: 'null' title: Campaign Custom Instructions average_monthly_campaign_budget: anyOf: - type: number - type: 'null' title: Average Monthly Campaign Budget average_monthly_campaign_budget_currency: anyOf: - type: string - type: 'null' title: Average Monthly Campaign Budget Currency document_summaries: anyOf: - additionalProperties: true type: object - type: 'null' title: Document Summaries operating_regions: anyOf: - items: type: string type: array - type: 'null' title: Operating Regions logo_image: anyOf: - type: string - type: 'null' title: Logo Image logo_url: anyOf: - type: string - type: 'null' title: Logo Url is_completed: anyOf: - type: boolean - type: 'null' title: Is Completed default: false status: anyOf: - $ref: '#/components/schemas/CompanyProfileStatus' - type: 'null' default: active type: object title: CompanyProfileUpdate CompanyStylebookBrandNuance: properties: implicit_brand_differentiators: items: type: string type: array title: Implicit Brand Differentiators distinctive_positioning: type: string title: Distinctive Positioning default: '' generic_positioning_to_avoid: items: type: string type: array title: Generic Positioning To Avoid must_preserve_in_downstream_generation: items: type: string type: array title: Must Preserve In Downstream Generation value_propositions: items: type: string type: array title: Value Propositions messaging_pillars: items: type: string type: array title: Messaging Pillars type: object title: CompanyStylebookBrandNuance CompanyStylebookBusinessModel: properties: summary: type: string title: Summary type: object required: - summary title: CompanyStylebookBusinessModel CompanyStylebookChipSection: properties: chips: items: type: string type: array title: Chips type: object title: CompanyStylebookChipSection CompanyStylebookColors: properties: description: type: string title: Description swatches: items: $ref: '#/components/schemas/CompanyStylebookSwatch' type: array title: Swatches type: object required: - description title: CompanyStylebookColors CompanyStylebookGenerateRequest: properties: workflow_id: anyOf: - type: string format: uuid - type: 'null' title: Workflow Id force: type: boolean title: Force default: false type: object title: CompanyStylebookGenerateRequest CompanyStylebookHero: properties: company_name: type: string title: Company Name summary: type: string title: Summary location_value: type: string title: Location Value company_size_value: type: string title: Company Size Value map_regions: items: type: string type: array title: Map Regions type: object required: - company_name - summary - location_value - company_size_value title: CompanyStylebookHero CompanyStylebookImageItem: properties: id: type: string title: Id image_url: type: string title: Image Url label: type: string title: Label source: anyOf: - type: string - type: 'null' title: Source type: object required: - id - image_url - label title: CompanyStylebookImageItem CompanyStylebookListSection: properties: items: items: type: string type: array title: Items type: object title: CompanyStylebookListSection CompanyStylebookLogo: properties: image_url: anyOf: - type: string - type: 'null' title: Image Url description: type: string title: Description type: object required: - description title: CompanyStylebookLogo CompanyStylebookPage: properties: id: type: string title: Id title: type: string title: Title summary: type: string title: Summary default: '' sections: items: $ref: '#/components/schemas/CompanyStylebookPageSection' type: array title: Sections type: object required: - id - title title: CompanyStylebookPage CompanyStylebookPageSection: properties: title: type: string title: Title body: type: string title: Body default: '' bullets: items: type: string type: array title: Bullets chips: items: type: string type: array title: Chips evidence_refs: items: type: string type: array title: Evidence Refs examples: items: additionalProperties: true type: object type: array title: Examples confidence: anyOf: - type: string enum: - high - medium - low - type: 'null' title: Confidence type: object required: - title title: CompanyStylebookPageSection CompanyStylebookPayload-Input: properties: hero: $ref: '#/components/schemas/CompanyStylebookHero' logo: $ref: '#/components/schemas/CompanyStylebookLogo' colors: $ref: '#/components/schemas/CompanyStylebookColors' promo_references: $ref: '#/components/schemas/CompanyStylebookPromoReferences' value_propositions: $ref: '#/components/schemas/CompanyStylebookListSection' target_audience: $ref: '#/components/schemas/CompanyStylebookChipSection' business_model: $ref: '#/components/schemas/CompanyStylebookBusinessModel' categories: $ref: '#/components/schemas/CompanyStylebookChipSection' available_reference_images: items: $ref: '#/components/schemas/CompanyStylebookImageItem' type: array title: Available Reference Images brand_nuance: $ref: '#/components/schemas/CompanyStylebookBrandNuance' brand_foundation: additionalProperties: true type: object title: Brand Foundation messaging_pillars: items: type: string type: array title: Messaging Pillars must_preserve: items: type: string type: array title: Must Preserve canonical_profile: additionalProperties: true type: object title: Canonical Profile design_tokens: additionalProperties: true type: object title: Design Tokens visual_system: additionalProperties: true type: object title: Visual System accessibility_system: additionalProperties: true type: object title: Accessibility System asset_usage_system: additionalProperties: true type: object title: Asset Usage System messaging_system: additionalProperties: true type: object title: Messaging System content_style_system: additionalProperties: true type: object title: Content Style System products_audiences: additionalProperties: true type: object title: Products Audiences campaign_playbook: additionalProperties: true type: object title: Campaign Playbook market_learning: additionalProperties: true type: object title: Market Learning brand_validation_system: additionalProperties: true type: object title: Brand Validation System source_inventory: additionalProperties: true type: object title: Source Inventory stylebook_governance: additionalProperties: true type: object title: Stylebook Governance pages: items: $ref: '#/components/schemas/CompanyStylebookPage' type: array title: Pages type: object required: - hero - logo - colors - promo_references - value_propositions - target_audience - business_model - categories title: CompanyStylebookPayload CompanyStylebookPayload-Output: properties: hero: $ref: '#/components/schemas/CompanyStylebookHero' logo: $ref: '#/components/schemas/CompanyStylebookLogo' colors: $ref: '#/components/schemas/CompanyStylebookColors' promo_references: $ref: '#/components/schemas/CompanyStylebookPromoReferences' value_propositions: $ref: '#/components/schemas/CompanyStylebookListSection' target_audience: $ref: '#/components/schemas/CompanyStylebookChipSection' business_model: $ref: '#/components/schemas/CompanyStylebookBusinessModel' categories: $ref: '#/components/schemas/CompanyStylebookChipSection' available_reference_images: items: $ref: '#/components/schemas/CompanyStylebookImageItem' type: array title: Available Reference Images brand_nuance: $ref: '#/components/schemas/CompanyStylebookBrandNuance' brand_foundation: additionalProperties: true type: object title: Brand Foundation messaging_pillars: items: type: string type: array title: Messaging Pillars must_preserve: items: type: string type: array title: Must Preserve canonical_profile: additionalProperties: true type: object title: Canonical Profile design_tokens: additionalProperties: true type: object title: Design Tokens visual_system: additionalProperties: true type: object title: Visual System accessibility_system: additionalProperties: true type: object title: Accessibility System asset_usage_system: additionalProperties: true type: object title: Asset Usage System messaging_system: additionalProperties: true type: object title: Messaging System content_style_system: additionalProperties: true type: object title: Content Style System products_audiences: additionalProperties: true type: object title: Products Audiences campaign_playbook: additionalProperties: true type: object title: Campaign Playbook market_learning: additionalProperties: true type: object title: Market Learning brand_validation_system: additionalProperties: true type: object title: Brand Validation System source_inventory: additionalProperties: true type: object title: Source Inventory stylebook_governance: additionalProperties: true type: object title: Stylebook Governance pages: items: $ref: '#/components/schemas/CompanyStylebookPage' type: array title: Pages type: object required: - hero - logo - colors - promo_references - value_propositions - target_audience - business_model - categories title: CompanyStylebookPayload CompanyStylebookPromoReferences: properties: subtitle: type: string title: Subtitle items: items: $ref: '#/components/schemas/CompanyStylebookImageItem' type: array title: Items type: object required: - subtitle title: CompanyStylebookPromoReferences CompanyStylebookResponse: properties: status: type: string enum: - pending - processing - ready - failed title: Status schema_version: type: integer title: Schema Version generated_at: anyOf: - type: string - type: 'null' title: Generated At updated_at: anyOf: - type: string - type: 'null' title: Updated At manually_edited: type: boolean title: Manually Edited default: false retryable: type: boolean title: Retryable default: false error_message: anyOf: - type: string - type: 'null' title: Error Message payload: anyOf: - $ref: '#/components/schemas/CompanyStylebookPayload-Output' - type: 'null' type: object required: - status - schema_version title: CompanyStylebookResponse CompanyStylebookSwatch: properties: label: type: string title: Label hex: type: string title: Hex type: object required: - label - hex title: CompanyStylebookSwatch CompanyStylebookUpdateRequest: properties: payload: $ref: '#/components/schemas/CompanyStylebookPayload-Input' type: object required: - payload title: CompanyStylebookUpdateRequest CompanyUrlPreflightRequest: properties: company_url: type: string title: Company Url type: object required: - company_url title: CompanyUrlPreflightRequest CompetitiveIntelligenceAction: properties: action: anyOf: - type: string - type: 'null' title: Action priority: anyOf: - type: string - type: 'null' title: Priority timeframe: anyOf: - type: string - type: 'null' title: Timeframe evidence_refs: anyOf: - items: type: string type: array - type: 'null' title: Evidence Refs expected_impact: anyOf: - type: string - type: 'null' title: Expected Impact type: object title: CompetitiveIntelligenceAction CompetitiveIntelligenceEvidence: properties: evidence_id: anyOf: - type: string - type: 'null' title: Evidence Id signal_type: anyOf: - type: string - type: 'null' title: Signal Type summary: anyOf: - type: string - type: 'null' title: Summary source_table: anyOf: - type: string - type: 'null' title: Source Table source_urls: anyOf: - items: type: string type: array - type: 'null' title: Source Urls type: object title: CompetitiveIntelligenceEvidence CompetitiveIntelligenceRecord: properties: id: anyOf: - type: string - type: 'null' title: Id company_profile_id: anyOf: - type: string - type: 'null' title: Company Profile Id company_profile_name: anyOf: - type: string - type: 'null' title: Company Profile Name snapshot_date: anyOf: - type: string format: date - type: 'null' title: Snapshot Date analysis: anyOf: - type: string - type: 'null' title: Analysis judgement: anyOf: - type: string - type: 'null' title: Judgement actions: anyOf: - items: $ref: '#/components/schemas/CompetitiveIntelligenceAction' type: array - type: 'null' title: Actions evidence: anyOf: - items: $ref: '#/components/schemas/CompetitiveIntelligenceEvidence' type: array - type: 'null' title: Evidence confidence_score: anyOf: - type: number - type: 'null' title: Confidence Score model_name: anyOf: - type: string - type: 'null' title: Model Name created_date: anyOf: - type: string format: date-time - type: 'null' title: Created Date updated_date: anyOf: - type: string format: date-time - type: 'null' title: Updated Date type: object title: CompetitiveIntelligenceRecord CompetitorAdListResponse: properties: ads: items: $ref: '#/components/schemas/CompetitorAdResponse' type: array title: Ads total: type: integer title: Total page: type: integer title: Page limit: type: integer title: Limit total_pages: type: integer title: Total Pages filters_applied: additionalProperties: true type: object title: Filters Applied type: object required: - ads - total - page - limit - total_pages title: CompetitorAdListResponse description: Response for competitor ad list endpoint CompetitorAdResponse: properties: id: type: string format: uuid title: Id competitor_id: type: string format: uuid title: Competitor Id ad_type: type: string title: Ad Type source: type: string title: Source ad_creative_id: anyOf: - type: string - type: 'null' title: Ad Creative Id signal_kind: anyOf: - type: string - type: 'null' title: Signal Kind signal_key: anyOf: - type: string - type: 'null' title: Signal Key detected_at: type: string format: date-time title: Detected At posted_at: anyOf: - type: string format: date-time - type: 'null' title: Posted At is_active: type: boolean title: Is Active default: true confidence_score: anyOf: - type: number - type: 'null' title: Confidence Score headline: anyOf: - type: string - type: 'null' title: Headline description: anyOf: - type: string - type: 'null' title: Description cta_text: anyOf: - type: string - type: 'null' title: Cta Text ad_format: anyOf: - type: string - type: 'null' title: Ad Format target_demographics: anyOf: - additionalProperties: true type: object - type: 'null' title: Target Demographics target_interests: anyOf: - items: type: string type: array - type: 'null' title: Target Interests starts_at: anyOf: - type: string format: date-time - type: 'null' title: Starts At ends_at: anyOf: - type: string format: date-time - type: 'null' title: Ends At first_shown: anyOf: - type: string format: date-time - type: 'null' title: First Shown last_shown: anyOf: - type: string format: date-time - type: 'null' title: Last Shown duration_days: anyOf: - type: integer - type: 'null' title: Duration Days width: anyOf: - type: integer - type: 'null' title: Width height: anyOf: - type: integer - type: 'null' title: Height creative_type: anyOf: - type: string - type: 'null' title: Creative Type ad_creative_urls: anyOf: - items: type: string type: array - type: 'null' title: Ad Creative Urls cached_url: anyOf: - type: string - type: 'null' title: Cached Url video_url: anyOf: - type: string - type: 'null' title: Video Url thumbnail_url: anyOf: - type: string - type: 'null' title: Thumbnail Url matched_product_offering_ids: anyOf: - items: type: string format: uuid type: array - type: 'null' title: Matched Product Offering Ids competition_type: anyOf: - type: string - type: 'null' title: Competition Type competition_reasons: anyOf: - items: type: string type: array - type: 'null' title: Competition Reasons analysis_metadata: anyOf: - additionalProperties: true type: object - type: 'null' title: Analysis Metadata ai_analysis: anyOf: - additionalProperties: true type: object - type: 'null' title: Ai Analysis matched_offerings: anyOf: - items: additionalProperties: true type: object type: array - type: 'null' title: Matched Offerings type: object required: - id - competitor_id - ad_type - source - detected_at title: CompetitorAdResponse description: Response schema for competitor ads with signed URL support CompetitorDetailsResponse: properties: competitor: $ref: '#/components/schemas/CompetitorInfo' campaigns: items: $ref: '#/components/schemas/CampaignInfo' type: array title: Campaigns last_scan: anyOf: - additionalProperties: true type: object - type: 'null' title: Last Scan strategy_summary: anyOf: - additionalProperties: true type: object - type: 'null' title: Strategy Summary swot: anyOf: - additionalProperties: true type: object - type: 'null' title: Swot marketing_profile: anyOf: - $ref: '#/components/schemas/MarketingProfileResponse' - type: 'null' type: object required: - competitor - campaigns title: CompetitorDetailsResponse description: Detailed competitor information with campaigns. CompetitorInfo: properties: id: type: string format: uuid title: Id name: type: string title: Name domain: type: string title: Domain logo_url: anyOf: - type: string - type: 'null' title: Logo Url industry: anyOf: - type: string - type: 'null' title: Industry description: anyOf: - type: string - type: 'null' title: Description categories: anyOf: - items: type: string type: array - type: 'null' title: Categories subcategories: anyOf: - items: type: string type: array - type: 'null' title: Subcategories business_characteristics: anyOf: - items: type: string type: array - type: 'null' title: Business Characteristics target_market: anyOf: - items: type: string type: array - type: 'null' title: Target Market status: type: string title: Status last_scanned_at: anyOf: - type: string format: date-time - type: 'null' title: Last Scanned At active_campaigns_count: type: integer title: Active Campaigns Count default: 0 is_self: type: boolean title: Is Self default: false company_size: anyOf: - type: string - type: 'null' title: Company Size operating_regions: anyOf: - items: type: string type: array - type: 'null' title: Operating Regions match_score: anyOf: - type: integer - type: 'null' title: Match Score match_percentage: anyOf: - type: integer - type: 'null' title: Match Percentage match_breakdown: anyOf: - additionalProperties: true type: object - type: 'null' title: Match Breakdown audience_overlap_score: anyOf: - type: integer - type: 'null' title: Audience Overlap Score offer_overlap_score: anyOf: - type: integer - type: 'null' title: Offer Overlap Score positioning_overlap_score: anyOf: - type: integer - type: 'null' title: Positioning Overlap Score scoring_metadata: anyOf: - additionalProperties: true type: object - type: 'null' title: Scoring Metadata discovery_metadata: anyOf: - additionalProperties: true type: object - type: 'null' title: Discovery Metadata website_url: anyOf: - type: string - type: 'null' title: Website Url contact_page_url: anyOf: - type: string - type: 'null' title: Contact Page Url facebook_url: anyOf: - type: string - type: 'null' title: Facebook Url instagram_handle: anyOf: - type: string - type: 'null' title: Instagram Handle linkedin_url: anyOf: - type: string - type: 'null' title: Linkedin Url twitter_handle: anyOf: - type: string - type: 'null' title: Twitter Handle tiktok_url: anyOf: - type: string - type: 'null' title: Tiktok Url youtube_url: anyOf: - type: string - type: 'null' title: Youtube Url is_scanning: type: boolean title: Is Scanning default: false last_scan_started_at: anyOf: - type: string format: date-time - type: 'null' title: Last Scan Started At last_scan_completed_at: anyOf: - type: string format: date-time - type: 'null' title: Last Scan Completed At setup_pending: type: boolean title: Setup Pending default: false type: object required: - id - name - domain - status title: CompetitorInfo description: Basic competitor information. CompetitorInsightsResponse: properties: competitor_id: type: string format: uuid title: Competitor Id competitor_name: type: string title: Competitor Name headline: type: string title: Headline subline: type: string title: Subline summary: type: string title: Summary key_takeaways: items: type: string type: array title: Key Takeaways supporting_evidence: items: type: string type: array title: Supporting Evidence generated_at: type: string title: Generated At expires_at: type: string title: Expires At is_cached: type: boolean title: Is Cached model_name: anyOf: - type: string - type: 'null' title: Model Name prompt_version: anyOf: - type: string - type: 'null' title: Prompt Version type: object required: - competitor_id - competitor_name - headline - subline - summary - generated_at - expires_at - is_cached title: CompetitorInsightsResponse CompetitorLiveStatus: properties: id: type: string format: uuid title: Id active_campaigns_count: type: integer title: Active Campaigns Count default: 0 is_scanning: type: boolean title: Is Scanning default: false last_scanned_at: anyOf: - type: string format: date-time - type: 'null' title: Last Scanned At last_scan_started_at: anyOf: - type: string format: date-time - type: 'null' title: Last Scan Started At last_scan_completed_at: anyOf: - type: string format: date-time - type: 'null' title: Last Scan Completed At setup_pending: type: boolean title: Setup Pending default: false type: object required: - id title: CompetitorLiveStatus description: Lightweight persisted live state for competitors. CompetitorRegenerateRequest: properties: workflow_id: type: string format: uuid title: Workflow Id scope_key: anyOf: - type: string - type: 'null' title: Scope Key type: object required: - workflow_id title: CompetitorRegenerateRequest CompetitorSetupRequest: properties: competitor_urls: items: type: string maxLength: 2083 minLength: 1 format: uri type: array maxItems: 10 title: Competitor Urls description: List of competitor website URLs (max 10) type: object required: - competitor_urls title: CompetitorSetupRequest description: Request to set up competitor tracking. ConfirmCompetitorsRequest: properties: workflow_id: type: string format: uuid title: Workflow Id selected_competitors: items: additionalProperties: true type: object type: array title: Selected Competitors type: object required: - workflow_id - selected_competitors title: ConfirmCompetitorsRequest ContactSubmissionCreate: properties: first_name: type: string maxLength: 255 minLength: 1 title: First Name last_name: type: string maxLength: 255 minLength: 1 title: Last Name email: type: string maxLength: 512 title: Email company: type: string maxLength: 512 minLength: 2 title: Company title: type: string maxLength: 512 minLength: 2 title: Title industry: anyOf: - type: string maxLength: 512 - type: 'null' title: Industry phone: type: string maxLength: 64 title: Phone message: anyOf: - type: string maxLength: 5000 - type: 'null' title: Message submission_type: $ref: '#/components/schemas/SubmissionType' recaptcha_token: anyOf: - type: string minLength: 1 - type: 'null' title: Recaptcha Token type: object required: - first_name - last_name - email - company - title - phone - submission_type title: ContactSubmissionCreate description: Request schema for creating a contact submission. ContentEditResponse: properties: edited_image_urls: items: type: string type: array title: Edited Image Urls default: [] original_image_url: type: string title: Original Image Url variations: anyOf: - items: $ref: '#/components/schemas/ImageVariation' type: array - type: 'null' title: Variations type: object required: - original_image_url title: ContentEditResponse description: Response model for edited image content ConversationAttachmentResponse: properties: handle: type: string title: Handle name: type: string title: Name media_type: type: string title: Media Type size_bytes: type: integer title: Size Bytes type: object required: - handle - name - media_type - size_bytes title: ConversationAttachmentResponse ConversationAttachmentsResponse: properties: files: items: $ref: '#/components/schemas/ConversationAttachmentResponse' type: array title: Files type: object required: - files title: ConversationAttachmentsResponse CreateCreatorListRequest: properties: name: type: string maxLength: 255 minLength: 1 title: Name description: anyOf: - type: string - type: 'null' title: Description list_type: type: string title: List Type default: manual campaign_id: anyOf: - type: string - type: 'null' title: Campaign Id campaign_type: anyOf: - type: string - type: 'null' title: Campaign Type metadata_json: additionalProperties: true type: object title: Metadata Json type: object required: - name title: CreateCreatorListRequest CreateOrganizationInvitesRequest: properties: emails: items: type: string format: email type: array title: Emails role: $ref: '#/components/schemas/OrganizationRoleEnum' default: member company_profile_access: anyOf: - items: $ref: '#/components/schemas/OrganizationInviteProfileAccessRequest' type: array - type: 'null' title: Company Profile Access expires_in_days: anyOf: - type: integer - type: 'null' title: Expires In Days type: object required: - emails title: CreateOrganizationInvitesRequest description: Request payload for creating email-based invites. CreateOrganizationInvitesResponse: properties: invites: items: $ref: '#/components/schemas/OrganizationInviteResponse' type: array title: Invites failed: items: $ref: '#/components/schemas/OrganizationInviteFailure' type: array title: Failed default: [] type: object required: - invites title: CreateOrganizationInvitesResponse description: Response payload for invite creation. CreatePostRequest: properties: instagram_account_id: type: string title: Instagram Account Id image_url: type: string title: Image Url caption: type: string title: Caption hashtags: anyOf: - items: type: string type: array - type: 'null' title: Hashtags type: object required: - instagram_account_id - image_url - caption title: CreatePostRequest description: Request model for creating an Instagram post. CreateSubscriptionRequest: properties: payment_method_id: type: string title: Payment Method Id plan_id: type: string title: Plan Id default: silver billing_interval: anyOf: - type: string - type: 'null' title: Billing Interval type: object required: - payment_method_id title: CreateSubscriptionRequest description: Request model for creating a subscription. CreativeIdeasResponse: properties: creative_ideas: items: type: string type: array title: Creative Ideas type: object required: - creative_ideas title: CreativeIdeasResponse description: Response model for the generate-ideas endpoint CreditBalanceResponse: properties: balance: type: number title: Balance currency: type: string title: Currency default: USD last_updated: anyOf: - type: string format: date-time - type: 'null' title: Last Updated type: object required: - balance - last_updated title: CreditBalanceResponse description: Current credit balance response. CreditCaptureRequest: properties: hold_id: type: string title: Hold Id campaign_id: type: string title: Campaign Id final_charge: anyOf: - type: number - type: 'null' title: Final Charge description: Final charge if different from hold type: object required: - hold_id - campaign_id title: CreditCaptureRequest description: Request to capture a credit hold. CreditHoldRequest: properties: organization_id: type: string title: Organization Id amount: type: number title: Amount description: type: string title: Description platform_type: anyOf: - type: string - type: 'null' title: Platform Type description: 'Platform type: google_search, google_display, etc' type: object required: - organization_id - amount - description title: CreditHoldRequest description: Request to create a credit hold. CreditHoldResponse: properties: hold_id: type: string title: Hold Id amount: type: number title: Amount expires_at: type: string format: date-time title: Expires At status: type: string title: Status default: success type: object required: - hold_id - amount - expires_at title: CreditHoldResponse description: Response from credit hold creation. CreditPurchaseRequest: properties: organization_id: type: string title: Organization Id amount: type: number title: Amount type: object required: - organization_id - amount title: CreditPurchaseRequest description: Request to purchase credits. CreditPurchaseResponse: properties: client_secret: type: string title: Client Secret payment_intent_id: type: string title: Payment Intent Id amount: type: number title: Amount currency: type: string title: Currency default: USD type: object required: - client_secret - payment_intent_id - amount title: CreditPurchaseResponse description: Response with Stripe payment intent details. CreditReleaseRequest: properties: hold_id: type: string title: Hold Id reason: type: string title: Reason type: object required: - hold_id - reason title: CreditReleaseRequest description: Request to release a credit hold. CrmApproverGroupResponse: properties: group_id: type: string title: Group Id name: type: string title: Name description: anyOf: - type: string - type: 'null' title: Description members: items: $ref: '#/components/schemas/CrmApproverMember' type: array title: Members type: object required: - group_id - name title: CrmApproverGroupResponse CrmApproverMember: properties: user_id: type: string title: User Id email: anyOf: - type: string - type: 'null' title: Email name: anyOf: - type: string - type: 'null' title: Name type: object required: - user_id title: CrmApproverMember CrmAudienceAddRequest: properties: person_refs: items: type: string type: array maxItems: 500 minItems: 1 title: Person Refs group_id: anyOf: - type: string - type: 'null' title: Group Id new_group_name: anyOf: - type: string maxLength: 255 - type: 'null' title: New Group Name type: object required: - person_refs title: CrmAudienceAddRequest description: 'Body for POST /api/crm/audiences/add. Either `group_id` (existing group) or `new_group_name` (create one) must be set.' CrmAudienceAddResponse: properties: group: $ref: '#/components/schemas/CrmAudienceSummary' added: type: integer title: Added default: 0 skipped_email_less: items: type: string type: array title: Skipped Email Less skipped_existing: type: integer title: Skipped Existing default: 0 type: object required: - group title: CrmAudienceAddResponse CrmAudienceListResponse: properties: audiences: items: $ref: '#/components/schemas/CrmAudienceSummary' type: array title: Audiences type: object title: CrmAudienceListResponse CrmAudienceSummary: properties: id: type: string title: Id name: type: string title: Name number_of_members: type: integer title: Number Of Members default: 0 creation_date: anyOf: - type: string - type: 'null' title: Creation Date type: object required: - id - name title: CrmAudienceSummary CrmMarkContactedRequest: properties: note: anyOf: - type: string maxLength: 2000 - type: 'null' title: Note channel: anyOf: - type: string maxLength: 32 - type: 'null' title: Channel type: object title: CrmMarkContactedRequest description: 'Body for ``POST /api/crm/people/{person_ref}/contacted``. Both fields are optional — an empty body logs a manual touch with no note. ``channel`` defaults to ``manual`` (I reached out myself, off-platform).' CrmPeopleFilters: properties: source_counts: additionalProperties: type: integer type: object title: Source Counts stage_counts: additionalProperties: type: integer type: object title: Stage Counts hubspot_counts: additionalProperties: type: integer type: object title: Hubspot Counts type: object title: CrmPeopleFilters CrmPeopleListResponse: properties: access: additionalProperties: true type: object title: Access people: items: additionalProperties: true type: object type: array title: People pagination: $ref: '#/components/schemas/CrmPeoplePagination' filters: $ref: '#/components/schemas/CrmPeopleFilters' summary: additionalProperties: true type: object title: Summary type: object required: - access title: CrmPeopleListResponse CrmPeoplePagination: properties: limit: type: integer title: Limit default: 25 offset: type: integer title: Offset default: 0 total: type: integer title: Total default: 0 page: type: integer title: Page default: 1 total_pages: type: integer title: Total Pages default: 1 has_next: type: boolean title: Has Next default: false has_previous: type: boolean title: Has Previous default: false type: object title: CrmPeoplePagination CrmPersonDetailResponse: properties: access: additionalProperties: true type: object title: Access person: additionalProperties: true type: object title: Person sources: items: additionalProperties: true type: object type: array title: Sources timeline: items: additionalProperties: true type: object type: array title: Timeline engagement: additionalProperties: true type: object title: Engagement type: object required: - access title: CrmPersonDetailResponse CrmSetStageRequest: properties: stage: type: string enum: - prospect - engaged - replied - qualified - customer - archived title: Stage type: object required: - stage title: CrmSetStageRequest description: Body for ``PUT /api/crm/people/{person_ref}/stage`` — a manual override. CrmSettingsResponse: properties: company_profile_id: type: string title: Company Profile Id crm_sync_requires_approval: type: boolean title: Crm Sync Requires Approval default: false default_audience_group_id: anyOf: - type: string - type: 'null' title: Default Audience Group Id type: object required: - company_profile_id title: CrmSettingsResponse CrmSettingsUpdateRequest: properties: crm_sync_requires_approval: anyOf: - type: boolean - type: 'null' title: Crm Sync Requires Approval default_audience_group_id: anyOf: - type: string - type: 'null' title: Default Audience Group Id type: object title: CrmSettingsUpdateRequest CrmSplitSourceRequest: properties: source_ref: type: string maxLength: 255 minLength: 1 title: Source Ref type: object required: - source_ref title: CrmSplitSourceRequest description: 'Body for ``POST /api/crm/people/{person_ref}/split``. ``source_ref`` is the contributing ``{source}:{id}`` to peel out of the merged person into its own standalone record (a persistent do-not-merge override).' CrmSyncRequest: properties: person_refs: items: type: string type: array maxItems: 200 minItems: 1 title: Person Refs fields_overrides: anyOf: - additionalProperties: true type: object - type: 'null' title: Fields Overrides note: anyOf: - type: string maxLength: 5000 - type: 'null' title: Note mode: type: string title: Mode default: contact type: object required: - person_refs title: CrmSyncRequest description: 'Body for POST /api/crm/sync/hubspot. `person_refs` are the synthetic `{source}:{id}` keys from the People projection. `fields_overrides` lets the client patch the diff before staging (e.g. an email typed into the email-less notice). `mode` switches identity handling.' CrmSyncResponse: properties: status: type: string title: Status change_request_id: anyOf: - type: string - type: 'null' title: Change Request Id results: items: $ref: '#/components/schemas/CrmSyncResultItem' type: array title: Results type: object required: - status title: CrmSyncResponse description: "Response for POST /api/crm/sync/hubspot.\n\n`status` is the overall request outcome:\n - \"synced\" \ \ — direct path, all upserts succeeded\n - \"partial\" — direct path, some upserts failed\n -\ \ \"failed\" — direct path, all upserts failed\n - \"pending_approval\" — governed path, ChangeRequest\ \ created" CrmSyncResultItem: properties: person_ref: type: string title: Person Ref status: type: string title: Status email: anyOf: - type: string - type: 'null' title: Email identity_source: anyOf: - type: string - type: 'null' title: Identity Source hubspot_record_id: anyOf: - type: string - type: 'null' title: Hubspot Record Id hubspot_url: anyOf: - type: string - type: 'null' title: Hubspot Url change_request_id: anyOf: - type: string - type: 'null' title: Change Request Id diff: anyOf: - additionalProperties: true type: object - type: 'null' title: Diff error: anyOf: - type: string - type: 'null' title: Error type: object required: - person_ref - status title: CrmSyncResultItem description: Per-person outcome of a sync request (direct path) or staged op (governed). CrossChannelMetricsResponse: properties: metric_date: type: string format: date title: Metric Date total_revenue_cents: type: integer title: Total Revenue Cents total_ad_spend_cents: type: integer title: Total Ad Spend Cents blended_roas: type: number title: Blended Roas total_transactions: type: integer title: Total Transactions total_conversions: type: integer title: Total Conversions type: object required: - metric_date - total_revenue_cents - total_ad_spend_cents - blended_roas - total_transactions - total_conversions title: CrossChannelMetricsResponse description: Response model for cross-channel metrics. CustomerSummaryResponse: properties: customer_key: type: string title: Customer Key email: anyOf: - type: string - type: 'null' title: Email first_name: anyOf: - type: string - type: 'null' title: First Name last_name: anyOf: - type: string - type: 'null' title: Last Name acquisition_date: anyOf: - type: string format: date - type: 'null' title: Acquisition Date total_orders: type: integer title: Total Orders total_spent_cents: type: integer title: Total Spent Cents ltv_cents: type: integer title: Ltv Cents rfm_segment: anyOf: - type: string - type: 'null' title: Rfm Segment days_since_last_order: anyOf: - type: integer - type: 'null' title: Days Since Last Order warehouse_customer_key: anyOf: - type: string - type: 'null' title: Warehouse Customer Key type: object required: - customer_key - email - first_name - last_name - acquisition_date - total_orders - total_spent_cents - ltv_cents - rfm_segment - days_since_last_order title: CustomerSummaryResponse description: Response model for customer summary. DailyReportBudgetScenarioResponse: properties: name: anyOf: - type: string - type: 'null' title: Name summary: anyOf: - type: string - type: 'null' title: Summary allocations: items: $ref: '#/components/schemas/DailyReportMmmAllocationResponse' type: array title: Allocations total_display: anyOf: - type: string - type: 'null' title: Total Display basis_note: anyOf: - type: string - type: 'null' title: Basis Note type: object title: DailyReportBudgetScenarioResponse DailyReportChannelMetricResponse: properties: channel_key: type: string title: Channel Key channel_display_name: type: string title: Channel Display Name spend_cents: anyOf: - type: integer - type: 'null' title: Spend Cents roas: anyOf: - type: number - type: 'null' title: Roas cpa: anyOf: - type: number - type: 'null' title: Cpa conversions: anyOf: - type: number - type: 'null' title: Conversions impressions: anyOf: - type: integer - type: 'null' title: Impressions data_confidence: type: string enum: - measured - estimated - unavailable title: Data Confidence default: unavailable type: object required: - channel_key - channel_display_name title: DailyReportChannelMetricResponse DailyReportChannelMetricsResponse: properties: availability: type: string enum: - connected - no_accounts - stale title: Availability default: no_accounts as_of: anyOf: - type: string format: date-time - type: 'null' title: As Of message: anyOf: - type: string - type: 'null' title: Message currency: anyOf: - type: string - type: 'null' title: Currency channels: items: $ref: '#/components/schemas/DailyReportChannelMetricResponse' type: array title: Channels type: object title: DailyReportChannelMetricsResponse description: Channel performance — honest about availability; never fabricated. DailyReportCreativeResponse: properties: selection_id: type: string title: Selection Id approval_id: anyOf: - type: string - type: 'null' title: Approval Id platform: anyOf: - type: string - type: 'null' title: Platform platform_display_name: anyOf: - type: string - type: 'null' title: Platform Display Name headline: anyOf: - type: string - type: 'null' title: Headline body: anyOf: - type: string - type: 'null' title: Body image_url: anyOf: - type: string - type: 'null' title: Image Url video_url: anyOf: - type: string - type: 'null' title: Video Url media_type: anyOf: - type: string - type: 'null' title: Media Type surface: type: string enum: - ads - social title: Surface default: ads status: anyOf: - type: string - type: 'null' title: Status pending: type: boolean title: Pending default: false bundle_title: anyOf: - type: string - type: 'null' title: Bundle Title bundle_rationale: anyOf: - type: string - type: 'null' title: Bundle Rationale bundle_expected: anyOf: - type: string - type: 'null' title: Bundle Expected bundle_confidence: anyOf: - type: string - type: 'null' title: Bundle Confidence type: object required: - selection_id title: DailyReportCreativeResponse description: 'One reviewable creative with a stable ``selection_id`` the approval decision endpoint already consumes (``selected_creative_ids``).' DailyReportEntityResponse: properties: kind: type: string enum: - signal - competitor - creative - optimization - channel_metric - insight title: Kind default: insight title: type: string title: Title description: anyOf: - type: string - type: 'null' title: Description priority: anyOf: - type: string - type: 'null' title: Priority ui_tone: type: string enum: - alert - ready - live - pending - neutral title: Ui Tone default: neutral data_confidence: type: string enum: - measured - estimated - unavailable title: Data Confidence default: estimated evidence: items: $ref: '#/components/schemas/DailyReportEvidenceResponse' type: array title: Evidence metadata: additionalProperties: true type: object title: Metadata type: object required: - title title: DailyReportEntityResponse description: 'A typed, presentation-ready item the AI team authored for one section. Copy fields (``title``, ``description``) are clean owner-facing prose written by the AI; ``data_confidence`` lets the team label or omit anything the source data does not support rather than fabricate it.' DailyReportEvidenceResponse: properties: label: type: string title: Label value: anyOf: - type: string - type: 'null' title: Value source: anyOf: - type: string - type: 'null' title: Source type: object required: - label title: DailyReportEvidenceResponse description: One labeled supporting fact for a daily-report entity. DailyReportMarketingMixResponse: properties: readiness_tier: anyOf: - type: string - type: 'null' title: Readiness Tier confidence: anyOf: - type: string - type: 'null' title: Confidence budget_scenario: anyOf: - $ref: '#/components/schemas/DailyReportBudgetScenarioResponse' - type: 'null' data_gaps: items: type: string type: array title: Data Gaps planning_assumptions: items: type: string type: array title: Planning Assumptions type: object title: DailyReportMarketingMixResponse description: 'Budget / marketing-mix planning detail — honest about whether it is a measured allocation or an assumption-based scaffold.' DailyReportMmmAllocationResponse: properties: channel_key: type: string title: Channel Key channel_display: type: string title: Channel Display current_share: anyOf: - type: number - type: 'null' title: Current Share recommended_share: anyOf: - type: number - type: 'null' title: Recommended Share current_display: anyOf: - type: string - type: 'null' title: Current Display recommended_display: anyOf: - type: string - type: 'null' title: Recommended Display type: object required: - channel_key - channel_display title: DailyReportMmmAllocationResponse description: One channel's assumption-only budget share (current vs recommended). DailyReportSectionResponse: properties: section_key: type: string title: Section Key agent_id: type: string title: Agent Id agent_display_name: type: string title: Agent Display Name eyebrow: anyOf: - type: string - type: 'null' title: Eyebrow headline: type: string title: Headline summary: anyOf: - type: string - type: 'null' title: Summary status_label: anyOf: - type: string - type: 'null' title: Status Label status_tone: anyOf: - type: string - type: 'null' title: Status Tone entities: items: $ref: '#/components/schemas/DailyReportEntityResponse' type: array title: Entities type: object required: - section_key - agent_id - agent_display_name - headline title: DailyReportSectionResponse description: One agent's section of the daily report (AI-authored copy + typed items). DataSourceAccountInfo: properties: id: type: string title: Id description: Platform-specific account ID name: anyOf: - type: string - type: 'null' title: Name description: Account/business name email: anyOf: - type: string - type: 'null' title: Email description: Account email currency: anyOf: - type: string - type: 'null' title: Currency description: Default currency (e.g., USD) country: anyOf: - type: string - type: 'null' title: Country description: Country code (e.g., US) timezone: anyOf: - type: string - type: 'null' title: Timezone description: Account timezone type: object required: - id title: DataSourceAccountInfo description: 'Standard account information model. Used by: GET /{platform}/account or embedded in other responses' DataSourceAccountResponse: properties: connected: type: boolean title: Connected description: Whether the platform is connected account: anyOf: - $ref: '#/components/schemas/DataSourceAccountInfo' - type: 'null' description: Account details if connected type: object required: - connected title: DataSourceAccountResponse description: 'Response for account information endpoint. Used by: GET /{platform}/account' DataSourceAuthResponse: properties: auth_url: type: string title: Auth Url description: OAuth authorization URL to redirect user to type: object required: - auth_url title: DataSourceAuthResponse description: 'Standard response for OAuth authorization URL endpoint. Used by: GET /{platform}/auth' DataSourceDisconnectResponse: properties: success: type: boolean title: Success description: Whether disconnect was successful message: type: string title: Message description: Result message type: object required: - success - message title: DataSourceDisconnectResponse description: 'Standard response for disconnect endpoint. Used by: DELETE /{platform}/disconnect or POST /{platform}/disconnect' example: message: Shopify account disconnected successfully success: true DataSourceLocation: properties: id: type: string title: Id description: Location ID name: type: string title: Name description: Location name address: anyOf: - additionalProperties: true type: object - type: 'null' title: Address description: Location address status: type: string title: Status description: Location status default: ACTIVE currency: type: string title: Currency description: Location currency default: USD timezone: anyOf: - type: string - type: 'null' title: Timezone description: Location timezone type: object required: - id - name title: DataSourceLocation description: 'Location model for platforms with multiple locations. Used by: Square, Shopify (locations)' DataSourceLocationsResponse: properties: accounts: items: $ref: '#/components/schemas/DataSourceLocation' type: array title: Accounts description: List of locations/accounts type: object title: DataSourceLocationsResponse description: 'Response for locations/accounts list endpoint. Used by: GET /{platform}/accounts or GET /{platform}/locations' DataSourceOrdersResponse: properties: orders: items: additionalProperties: true type: object type: array title: Orders description: List of orders has_more: type: boolean title: Has More description: Whether more orders are available default: false cursor: anyOf: - type: string - type: 'null' title: Cursor description: Cursor for pagination type: object title: DataSourceOrdersResponse description: 'Response for orders list endpoint. Used by: GET /shopify/orders' DataSourceTransactionsResponse: properties: transactions: items: additionalProperties: true type: object type: array title: Transactions description: List of transactions has_more: type: boolean title: Has More description: Whether more transactions are available default: false cursor: anyOf: - type: string - type: 'null' title: Cursor description: Cursor for pagination type: object title: DataSourceTransactionsResponse description: 'Response for transactions list endpoint. Used by: GET /stripe/transactions, GET /square/payments' DaypartingHealthResponse: properties: ad_id: type: string title: Ad Id total_rules: type: integer title: Total Rules healthy_rules: items: type: string type: array title: Healthy Rules unhealthy_rules: items: additionalProperties: true type: object type: array title: Unhealthy Rules missing_rules: items: additionalProperties: true type: object type: array title: Missing Rules health_score: type: number title: Health Score type: object required: - ad_id - total_rules - healthy_rules - unhealthy_rules - missing_rules - health_score title: DaypartingHealthResponse DaypartingSlot: properties: day: type: string title: Day description: Day of week (MONDAY, TUESDAY, etc.) start_hour: type: integer maximum: 23.0 minimum: 0.0 title: Start Hour start_minute: type: integer maximum: 59.0 minimum: 0.0 title: Start Minute end_hour: type: integer maximum: 23.0 minimum: 0.0 title: End Hour end_minute: type: integer maximum: 59.0 minimum: 0.0 title: End Minute bid_modifier: anyOf: - type: number maximum: 10.0 minimum: 0.1 - type: 'null' title: Bid Modifier default: 1.0 type: object required: - day - start_hour - start_minute - end_hour - end_minute title: DaypartingSlot DeckExport: properties: pptx: anyOf: - type: boolean - type: 'null' title: Pptx default: false pdf: anyOf: - type: boolean - type: 'null' title: Pdf default: false type: object title: DeckExport DeckFileDescriptor: properties: format: type: string title: Format filename: anyOf: - type: string - type: 'null' title: Filename gcs_url: anyOf: - type: string - type: 'null' title: Gcs Url content_type: anyOf: - type: string - type: 'null' title: Content Type signed_url: anyOf: - type: string - type: 'null' title: Signed Url type: object required: - format title: DeckFileDescriptor DeckSection: properties: name: type: string title: Name target_slides: type: integer minimum: 1.0 title: Target Slides description: Target slides in this section must_include: anyOf: - type: boolean - type: 'null' title: Must Include default: false type: object required: - name - target_slides title: DeckSection DeckStatusResponse: properties: success: type: boolean title: Success status: type: string title: Status ready: type: boolean title: Ready doc_id: type: string title: Doc Id doc_url: anyOf: - type: string - type: 'null' title: Doc Url error: anyOf: - type: string - type: 'null' title: Error provider_response: anyOf: - additionalProperties: true type: object - type: 'null' title: Provider Response file_urls: anyOf: - additionalProperties: true type: object - type: 'null' title: File Urls files: anyOf: - items: $ref: '#/components/schemas/DeckFileDescriptor' type: array - type: 'null' title: Files type: object required: - success - status - ready - doc_id title: DeckStatusResponse DeckStyle: properties: palette: anyOf: - items: type: string type: array - type: 'null' title: Palette fonts: anyOf: - items: type: string type: array - type: 'null' title: Fonts logo_url: anyOf: - type: string - type: 'null' title: Logo Url tone: anyOf: - type: string - type: 'null' title: Tone density: anyOf: - type: string - type: 'null' title: Density icon_style: anyOf: - type: string - type: 'null' title: Icon Style type: object title: DeckStyle DeleteFileResponse: properties: id: type: string title: Id filename: type: string title: Filename message: type: string title: Message type: object required: - id - filename - message title: DeleteFileResponse DeletePostRequest: properties: post_id: type: string title: Post Id auth_method: anyOf: - type: string - type: 'null' title: Auth Method description: 'Bound auth method: instagram or facebook' type: object required: - post_id title: DeletePostRequest description: Request model for deleting an Instagram post. DeletePostResponseModel: properties: success: type: boolean title: Success type: object required: - success title: DeletePostResponseModel description: Response model for Instagram post deletion. DemoSchedulingConfirmation: properties: scheduled: type: boolean title: Scheduled type: object required: - scheduled title: DemoSchedulingConfirmation DirectorInsightEvidenceResponse: properties: evidence_id: type: string title: Evidence Id domain: anyOf: - type: string - type: 'null' title: Domain source_agent: anyOf: - type: string - type: 'null' title: Source Agent signal_type: anyOf: - type: string - type: 'null' title: Signal Type snippet: anyOf: - type: string - type: 'null' title: Snippet confidence: anyOf: - type: string - type: 'null' title: Confidence observed_at: anyOf: - type: string format: date-time - type: 'null' title: Observed At freshness: additionalProperties: true type: object title: Freshness limitations: items: type: string type: array title: Limitations source_urls: items: type: string type: array title: Source Urls type: object required: - evidence_id title: DirectorInsightEvidenceResponse DirectorInsightMetricResponse: properties: metric_id: type: string title: Metric Id evidence_id: type: string title: Evidence Id label: type: string title: Label value: type: number maximum: 1000000000000000.0 minimum: -1000000000000000.0 title: Value display_value: type: string title: Display Value unit: anyOf: - type: string - type: 'null' title: Unit currency: anyOf: - type: string - type: 'null' title: Currency scope: anyOf: - type: string - type: 'null' title: Scope window: anyOf: - type: string - type: 'null' title: Window observed_at: anyOf: - type: string format: date-time - type: 'null' title: Observed At role: anyOf: - type: string enum: - decision - context - type: 'null' title: Role comparison_status: anyOf: - type: string enum: - absolute - comparative - type: 'null' title: Comparison Status publisher: anyOf: - type: string - type: 'null' title: Publisher source_title: anyOf: - type: string - type: 'null' title: Source Title source_url: anyOf: - type: string - type: 'null' title: Source Url published_date: anyOf: - type: string format: date - type: 'null' title: Published Date estimate: anyOf: - type: boolean - type: 'null' title: Estimate type: object required: - metric_id - evidence_id - label - value - display_value title: DirectorInsightMetricResponse DirectorInsightPackageResponse: properties: contract_version: type: string const: director_insight_package_v1 title: Contract Version generated_at: anyOf: - type: string format: date-time - type: 'null' title: Generated At headline: type: string title: Headline executive_summary: type: string title: Executive Summary executive_summary_evidence_ids: items: type: string type: array title: Executive Summary Evidence Ids executive_summary_metric_ids: items: type: string type: array title: Executive Summary Metric Ids key_metrics: items: $ref: '#/components/schemas/DirectorInsightMetricResponse' type: array title: Key Metrics quantification_status: anyOf: - type: string enum: - quantified - qualitative - qualitative_no_decision_grade_metrics - type: 'null' title: Quantification Status quantification_note: anyOf: - type: string - type: 'null' title: Quantification Note source_coverage: items: $ref: '#/components/schemas/DirectorInsightSourceCoverageResponse' type: array title: Source Coverage recommended_actions: items: $ref: '#/components/schemas/DirectorInsightRecommendedActionResponse' type: array title: Recommended Actions insights: items: $ref: '#/components/schemas/DirectorInsightResponse' type: array title: Insights limitations: items: type: string type: array title: Limitations citations: items: type: string type: array title: Citations type: object required: - contract_version - headline - executive_summary title: DirectorInsightPackageResponse DirectorInsightRecommendedActionResponse: properties: insight_id: type: string title: Insight Id title: type: string title: Title action: type: string title: Action action_type: anyOf: - type: string enum: - act_now - validate_next - monitor - type: 'null' title: Action Type priority: type: string title: Priority priority_rationale: anyOf: - type: string - type: 'null' title: Priority Rationale why_now: anyOf: - type: string - type: 'null' title: Why Now measurement_plan: type: string title: Measurement Plan expected_kpi_impact: anyOf: - type: string - type: 'null' title: Expected Kpi Impact evidence_ids: items: type: string type: array title: Evidence Ids type: object required: - insight_id - title - action - priority - measurement_plan title: DirectorInsightRecommendedActionResponse DirectorInsightResponse: properties: id: type: string title: Id title: type: string title: Title summary: type: string title: Summary why_now: anyOf: - type: string - type: 'null' title: Why Now recommended_action: type: string title: Recommended Action action_type: anyOf: - type: string enum: - act_now - validate_next - monitor - type: 'null' title: Action Type measurement_plan: type: string title: Measurement Plan expected_kpi_impact: anyOf: - type: string - type: 'null' title: Expected Kpi Impact priority: type: string title: Priority priority_rationale: anyOf: - type: string - type: 'null' title: Priority Rationale priority_evidence_ids: items: type: string type: array title: Priority Evidence Ids confidence: anyOf: - type: number - type: string enum: - high - medium - low - type: 'null' title: Confidence confidence_label: anyOf: - type: string enum: - high - medium - low - type: 'null' title: Confidence Label confidence_rationale: anyOf: - type: string - type: 'null' title: Confidence Rationale source_domains: items: type: string type: array title: Source Domains association_summary: anyOf: - type: string - type: 'null' title: Association Summary action_evidence_ids: items: type: string type: array title: Action Evidence Ids supporting_points: items: type: string type: array title: Supporting Points supporting_point_evidence: items: $ref: '#/components/schemas/DirectorInsightSupportingPointResponse' type: array title: Supporting Point Evidence metric_ids: items: type: string type: array title: Metric Ids key_metrics: items: $ref: '#/components/schemas/DirectorInsightMetricResponse' type: array title: Key Metrics quantification_status: anyOf: - type: string enum: - quantified - qualitative - qualitative_no_decision_grade_metrics - type: 'null' title: Quantification Status quantification_note: anyOf: - type: string - type: 'null' title: Quantification Note evidence: items: $ref: '#/components/schemas/DirectorInsightEvidenceResponse' type: array title: Evidence citations: items: type: string type: array title: Citations type: object required: - id - title - summary - recommended_action - measurement_plan - priority title: DirectorInsightResponse DirectorInsightSourceCoverageResponse: properties: domain: type: string title: Domain evidence_count: type: integer title: Evidence Count default: 0 latest_observed_at: anyOf: - type: string format: date-time - type: 'null' title: Latest Observed At type: object required: - domain title: DirectorInsightSourceCoverageResponse DirectorInsightSupportingPointResponse: properties: text: type: string title: Text evidence_ids: items: type: string type: array title: Evidence Ids type: object required: - text title: DirectorInsightSupportingPointResponse DocumentJobDetailResponse: properties: id: type: string title: Id doc_type: type: string title: Doc Type provider: type: string title: Provider provider_generation_id: type: string title: Provider Generation Id provider_status: anyOf: - type: string - type: 'null' title: Provider Status provider_payload: anyOf: - additionalProperties: true type: object - type: 'null' title: Provider Payload inputs: additionalProperties: true type: object title: Inputs files: additionalProperties: true type: object title: Files metadata: additionalProperties: true type: object title: Metadata created_at: anyOf: - type: string - type: 'null' title: Created At ready_at: anyOf: - type: string - type: 'null' title: Ready At type: object required: - id - doc_type - provider - provider_generation_id - provider_status - provider_payload - inputs - files - metadata - created_at - ready_at title: DocumentJobDetailResponse DocumentJobListItem: properties: id: type: string title: Id doc_type: type: string title: Doc Type title: anyOf: - type: string - type: 'null' title: Title scope: anyOf: - type: string - type: 'null' title: Scope preset: anyOf: - type: string - type: 'null' title: Preset status: anyOf: - type: string - type: 'null' title: Status provider_status: anyOf: - type: string - type: 'null' title: Provider Status user_email: anyOf: - type: string - type: 'null' title: User Email created_at: anyOf: - type: string - type: 'null' title: Created At ready_at: anyOf: - type: string - type: 'null' title: Ready At available_formats: additionalProperties: type: boolean type: object title: Available Formats type: object required: - id - doc_type - available_formats title: DocumentJobListItem DocumentJobsResponse: properties: items: items: $ref: '#/components/schemas/DocumentJobListItem' type: array title: Items total: type: integer title: Total type: object required: - items - total title: DocumentJobsResponse DraftCreatorOutreachMessageRequest: properties: channel: type: string enum: - email - platform_dm title: Channel creator_name: type: string maxLength: 255 minLength: 1 title: Creator Name creator_handle: anyOf: - type: string maxLength: 255 - type: 'null' title: Creator Handle platform: anyOf: - type: string maxLength: 64 - type: 'null' title: Platform account_label: anyOf: - type: string maxLength: 120 - type: 'null' title: Account Label account_value: anyOf: - type: string maxLength: 255 - type: 'null' title: Account Value account_url: anyOf: - type: string maxLength: 500 - type: 'null' title: Account Url creator_bio: anyOf: - type: string maxLength: 4000 - type: 'null' title: Creator Bio creator_category: anyOf: - type: string maxLength: 255 - type: 'null' title: Creator Category creator_location: anyOf: - type: string maxLength: 255 - type: 'null' title: Creator Location creator_audience: anyOf: - type: string maxLength: 2000 - type: 'null' title: Creator Audience followers: anyOf: - type: string maxLength: 120 - type: 'null' title: Followers engagement: anyOf: - type: string maxLength: 255 - type: 'null' title: Engagement verified: anyOf: - type: boolean - type: 'null' title: Verified product_offering_id: anyOf: - type: string maxLength: 100 - type: 'null' title: Product Offering Id campaign_theme: anyOf: - additionalProperties: true type: object - type: 'null' title: Campaign Theme campaign_idea: anyOf: - additionalProperties: true type: object - type: 'null' title: Campaign Idea instruction: anyOf: - type: string maxLength: 2000 - type: 'null' title: Instruction current_subject: anyOf: - type: string maxLength: 255 - type: 'null' title: Current Subject current_message: anyOf: - type: string maxLength: 4000 - type: 'null' title: Current Message type: object required: - channel - creator_name title: DraftCreatorOutreachMessageRequest EarnedMediaContact: properties: name: type: string maxLength: 220 minLength: 1 title: Name title: anyOf: - type: string maxLength: 220 - type: 'null' title: Title email: anyOf: - type: string maxLength: 320 - type: 'null' title: Email phone: anyOf: - type: string maxLength: 80 - type: 'null' title: Phone additionalProperties: false type: object required: - name title: EarnedMediaContact EarnedMediaCoverageUrlRequest: properties: url: type: string maxLength: 2000 minLength: 8 title: Url additionalProperties: false type: object required: - url title: EarnedMediaCoverageUrlRequest description: One page a person already knows about. EarnedMediaDraftRewriteRequest: properties: base_version: type: integer minimum: 1.0 title: Base Version instruction: type: string maxLength: 2500 minLength: 3 title: Instruction scope: type: string enum: - full - section - selection title: Scope default: full selected_text: anyOf: - type: string maxLength: 12000 - type: 'null' title: Selected Text section: anyOf: - type: string maxLength: 320 - type: 'null' title: Section additional_evidence_ids: items: type: string maxLength: 200 minLength: 1 type: array maxItems: 40 title: Additional Evidence Ids additionalProperties: false type: object required: - base_version - instruction title: EarnedMediaDraftRewriteRequest EarnedMediaDraftSaveRequest: properties: base_version: type: integer minimum: 1.0 title: Base Version headline: type: string maxLength: 320 minLength: 1 title: Headline dek: anyOf: - type: string maxLength: 1200 - type: 'null' title: Dek body_markdown: type: string maxLength: 80000 minLength: 1 title: Body Markdown locked_fields: additionalProperties: true type: object title: Locked Fields change_summary: anyOf: - type: string maxLength: 1000 - type: 'null' title: Change Summary additionalProperties: false type: object required: - base_version - headline - body_markdown title: EarnedMediaDraftSaveRequest EarnedMediaGenerateRequest: properties: draft_count: type: integer enum: - 1 - 2 title: Draft Count default: 2 instruction: anyOf: - type: string maxLength: 2500 - type: 'null' title: Instruction additionalProperties: false type: object title: EarnedMediaGenerateRequest EarnedMediaPressAsset: properties: label: type: string maxLength: 220 minLength: 1 title: Label url: type: string maxLength: 2000 minLength: 8 title: Url additionalProperties: false type: object required: - label - url title: EarnedMediaPressAsset EarnedMediaPressCoverageItem: properties: id: type: string maxLength: 80 minLength: 1 title: Id url: type: string maxLength: 2000 minLength: 8 title: Url title: type: string maxLength: 320 minLength: 1 title: Title outlet: type: string maxLength: 220 title: Outlet default: '' summary: type: string maxLength: 600 title: Summary default: '' published_on: type: string maxLength: 40 title: Published On default: '' source_category: type: string maxLength: 64 title: Source Category default: unknown independence: type: string maxLength: 32 title: Independence default: unknown review_status: type: string enum: - suggested - verified - approved title: Review Status default: suggested discovered_at: type: string maxLength: 40 title: Discovered At default: '' added_by: type: string maxLength: 16 title: Added By default: '' additionalProperties: false type: object required: - id - url - title title: EarnedMediaPressCoverageItem description: A page that already exists about this brand. EarnedMediaPressQuote: properties: speaker_name: type: string maxLength: 220 minLength: 1 title: Speaker Name speaker_title: anyOf: - type: string maxLength: 220 - type: 'null' title: Speaker Title quote: type: string maxLength: 2000 minLength: 20 title: Quote approved_for_publication: type: boolean title: Approved For Publication default: true source_label: anyOf: - type: string maxLength: 220 - type: 'null' title: Source Label additionalProperties: false type: object required: - speaker_name - quote title: EarnedMediaPressQuote description: A quote explicitly cleared by the brand for external publication. EarnedMediaPressRoom: properties: approved_for_publication: type: boolean title: Approved For Publication default: false announcement_date: anyOf: - type: string format: date - type: 'null' title: Announcement Date dateline_city: anyOf: - type: string maxLength: 220 - type: 'null' title: Dateline City verified_facts: items: type: string maxLength: 1200 minLength: 3 type: array maxItems: 20 title: Verified Facts quotes: items: $ref: '#/components/schemas/EarnedMediaPressQuote' type: array maxItems: 8 title: Quotes boilerplate: anyOf: - type: string maxLength: 2500 - type: 'null' title: Boilerplate media_contact: anyOf: - $ref: '#/components/schemas/EarnedMediaContact' - type: 'null' assets: items: $ref: '#/components/schemas/EarnedMediaPressAsset' type: array maxItems: 12 title: Assets verification_note: anyOf: - type: string maxLength: 500 - type: 'null' title: Verification Note additionalProperties: false type: object title: EarnedMediaPressRoom description: Brand-approved facts and assets kept out of public web search. EarnedMediaPressRoomAssetItem: properties: id: type: string maxLength: 80 minLength: 1 title: Id label: type: string maxLength: 220 minLength: 1 title: Label url: type: string maxLength: 2000 minLength: 8 title: Url review_status: type: string enum: - suggested - verified - approved title: Review Status default: suggested source: anyOf: - $ref: '#/components/schemas/EarnedMediaPressRoomSource' - type: 'null' additionalProperties: false type: object required: - id - label - url title: EarnedMediaPressRoomAssetItem EarnedMediaPressRoomContactItem: properties: name: type: string maxLength: 220 minLength: 1 title: Name title: anyOf: - type: string maxLength: 220 - type: 'null' title: Title email: anyOf: - type: string maxLength: 320 - type: 'null' title: Email phone: anyOf: - type: string maxLength: 80 - type: 'null' title: Phone review_status: type: string enum: - suggested - verified - approved title: Review Status default: suggested source: anyOf: - $ref: '#/components/schemas/EarnedMediaPressRoomSource' - type: 'null' additionalProperties: false type: object required: - name title: EarnedMediaPressRoomContactItem EarnedMediaPressRoomDateItem: properties: value: type: string format: date title: Value review_status: type: string enum: - suggested - verified - approved title: Review Status default: suggested source: anyOf: - $ref: '#/components/schemas/EarnedMediaPressRoomSource' - type: 'null' additionalProperties: false type: object required: - value title: EarnedMediaPressRoomDateItem EarnedMediaPressRoomFactItem: properties: id: type: string maxLength: 80 minLength: 1 title: Id text: type: string maxLength: 1200 minLength: 3 title: Text review_status: type: string enum: - suggested - verified - approved title: Review Status default: suggested source: anyOf: - $ref: '#/components/schemas/EarnedMediaPressRoomSource' - type: 'null' additionalProperties: false type: object required: - id - text title: EarnedMediaPressRoomFactItem EarnedMediaPressRoomGenerateRequest: properties: refresh: type: boolean title: Refresh default: false additionalProperties: false type: object title: EarnedMediaPressRoomGenerateRequest EarnedMediaPressRoomProfileContent: properties: facts: items: $ref: '#/components/schemas/EarnedMediaPressRoomFactItem' type: array maxItems: 20 title: Facts quotes: items: $ref: '#/components/schemas/EarnedMediaPressRoomQuoteItem' type: array maxItems: 8 title: Quotes coverage: items: $ref: '#/components/schemas/EarnedMediaPressCoverageItem' type: array maxItems: 24 title: Coverage boilerplate: anyOf: - $ref: '#/components/schemas/EarnedMediaPressRoomTextItem' - type: 'null' media_contact: anyOf: - $ref: '#/components/schemas/EarnedMediaPressRoomContactItem' - type: 'null' assets: items: $ref: '#/components/schemas/EarnedMediaPressRoomAssetItem' type: array maxItems: 12 title: Assets announcement_date: anyOf: - $ref: '#/components/schemas/EarnedMediaPressRoomDateItem' - type: 'null' dateline_city: anyOf: - $ref: '#/components/schemas/EarnedMediaPressRoomTextItem' - type: 'null' verification_note: anyOf: - type: string maxLength: 500 - type: 'null' title: Verification Note additionalProperties: false type: object title: EarnedMediaPressRoomProfileContent description: Editable profile-level facts; only approved entries enter generated copy. EarnedMediaPressRoomQuoteItem: properties: id: type: string maxLength: 80 minLength: 1 title: Id speaker_name: type: string maxLength: 220 minLength: 1 title: Speaker Name speaker_title: anyOf: - type: string maxLength: 220 - type: 'null' title: Speaker Title quote: type: string maxLength: 2000 minLength: 20 title: Quote review_status: type: string enum: - suggested - verified - approved title: Review Status default: suggested source: anyOf: - $ref: '#/components/schemas/EarnedMediaPressRoomSource' - type: 'null' additionalProperties: false type: object required: - id - speaker_name - quote title: EarnedMediaPressRoomQuoteItem EarnedMediaPressRoomSaveRequest: properties: content: $ref: '#/components/schemas/EarnedMediaPressRoomProfileContent' base_updated_at: anyOf: - type: string format: date-time - type: 'null' title: Base Updated At additionalProperties: false type: object required: - content title: EarnedMediaPressRoomSaveRequest EarnedMediaPressRoomSource: properties: label: type: string maxLength: 220 minLength: 1 title: Label reference: type: string maxLength: 300 minLength: 1 title: Reference url: anyOf: - type: string maxLength: 2000 minLength: 8 - type: 'null' title: Url additionalProperties: false type: object required: - label - reference title: EarnedMediaPressRoomSource EarnedMediaPressRoomTextItem: properties: text: type: string maxLength: 2500 minLength: 1 title: Text review_status: type: string enum: - suggested - verified - approved title: Review Status default: suggested source: anyOf: - $ref: '#/components/schemas/EarnedMediaPressRoomSource' - type: 'null' additionalProperties: false type: object required: - text title: EarnedMediaPressRoomTextItem EarnedMediaProjectCreateRequest: properties: title: type: string maxLength: 220 minLength: 3 title: Title story_format: type: string enum: - press_release - bylined_article - journalist_pitch - local_story title: Story Format default: bylined_article objective: anyOf: - type: string maxLength: 2000 - type: 'null' title: Objective audience: anyOf: - type: string maxLength: 220 - type: 'null' title: Audience market: anyOf: - type: string maxLength: 220 - type: 'null' title: Market primary_angle: anyOf: - type: string maxLength: 2500 - type: 'null' title: Primary Angle source_context: $ref: '#/components/schemas/EarnedMediaSourceContext' additionalProperties: false type: object required: - title title: EarnedMediaProjectCreateRequest EarnedMediaProjectUpdateRequest: properties: title: anyOf: - type: string maxLength: 220 minLength: 3 - type: 'null' title: Title story_format: anyOf: - type: string enum: - press_release - bylined_article - journalist_pitch - local_story - type: 'null' title: Story Format objective: anyOf: - type: string maxLength: 2000 - type: 'null' title: Objective audience: anyOf: - type: string maxLength: 220 - type: 'null' title: Audience market: anyOf: - type: string maxLength: 220 - type: 'null' title: Market primary_angle: anyOf: - type: string maxLength: 2500 - type: 'null' title: Primary Angle source_context: anyOf: - $ref: '#/components/schemas/EarnedMediaSourceContext' - type: 'null' additionalProperties: false type: object title: EarnedMediaProjectUpdateRequest EarnedMediaRefreshResearchRequest: properties: instruction: anyOf: - type: string maxLength: 2500 - type: 'null' title: Instruction operation: type: string enum: - research_refresh - outlet_discovery title: Operation default: research_refresh outlet_focus: anyOf: - type: string enum: - general - trade - byline - type: 'null' title: Outlet Focus additionalProperties: false type: object title: EarnedMediaRefreshResearchRequest EarnedMediaSelectedProduct: properties: id: type: string format: uuid title: Id name: type: string maxLength: 220 minLength: 1 title: Name type: object required: - id - name title: EarnedMediaSelectedProduct description: Server-verified display snapshot for a selected product. EarnedMediaSourceContext: properties: article_scope: type: string enum: - company - single_product - product_portfolio title: Article Scope default: company product_ids: items: type: string format: uuid type: array maxItems: 8 title: Product Ids selected_products: items: $ref: '#/components/schemas/EarnedMediaSelectedProduct' type: array maxItems: 8 title: Selected Products press_room: anyOf: - $ref: '#/components/schemas/EarnedMediaPressRoom' - type: 'null' additionalProperties: true type: object title: EarnedMediaSourceContext description: Typed article grounding while retaining existing workspace context keys. EarnedMediaTargetUpdateRequest: properties: status: anyOf: - type: string enum: - recommended - shortlisted - dismissed - type: 'null' title: Status outreach_status: anyOf: - type: string enum: - not_started - pitch_ready - contacted - follow_up_due - replied - interview - published - not_pursuing - type: 'null' title: Outreach Status last_contacted_at: anyOf: - type: string format: date-time - type: 'null' title: Last Contacted At next_follow_up_at: anyOf: - type: string format: date-time - type: 'null' title: Next Follow Up At coverage_url: anyOf: - type: string maxLength: 2000 - type: 'null' title: Coverage Url notes: anyOf: - type: string maxLength: 2000 - type: 'null' title: Notes additionalProperties: false type: object title: EarnedMediaTargetUpdateRequest EarnedMediaVersionRestoreRequest: properties: base_version: type: integer minimum: 1.0 title: Base Version additionalProperties: false type: object required: - base_version title: EarnedMediaVersionRestoreRequest EditImageJobRequest: properties: image_url: type: string title: Image Url edit_prompt: type: string title: Edit Prompt num_variations: type: integer maximum: 3.0 minimum: 1.0 title: Num Variations default: 3 product_image_url: anyOf: - type: string - type: 'null' title: Product Image Url logo_image_url: anyOf: - type: string - type: 'null' title: Logo Image Url campaign_id: anyOf: - type: string - type: 'null' title: Campaign Id campaign_type: anyOf: - type: string - type: 'null' title: Campaign Type ad_id: anyOf: - type: string - type: 'null' title: Ad Id idea_number: anyOf: - type: integer - type: 'null' title: Idea Number use_company_style: type: boolean title: Use Company Style default: false type: object required: - image_url - edit_prompt title: EditImageJobRequest description: Request body for starting an async campaign image edit job EmailCampaignCreate: properties: name: anyOf: - type: string - type: 'null' title: Name subject_line: anyOf: - type: string - type: 'null' title: Subject Line content: anyOf: - type: string - type: 'null' title: Content preview_text: anyOf: - type: string - type: 'null' title: Preview Text call_to_action: anyOf: - type: string - type: 'null' title: Call To Action target_audience: anyOf: - type: string - type: 'null' title: Target Audience key_selling_points: anyOf: - type: string - type: 'null' title: Key Selling Points from_name: anyOf: - type: string - type: 'null' title: From Name reply_to: anyOf: - type: string - type: 'null' title: Reply To product_offering_id: anyOf: - type: string format: uuid - type: 'null' title: Product Offering Id workflow_status: anyOf: - $ref: '#/components/schemas/WorkflowStatus' - type: 'null' default: draft scheduled_send_time: anyOf: - type: string format: date-time - type: 'null' title: Scheduled Send Time sent_at: anyOf: - type: string format: date-time - type: 'null' title: Sent At personalization_level: anyOf: - type: string - type: 'null' title: Personalization Level default: medium merge_variables: anyOf: - additionalProperties: true type: object - type: 'null' title: Merge Variables dynamic_blocks: anyOf: - additionalProperties: true type: object - type: 'null' title: Dynamic Blocks ab_test_config: anyOf: - additionalProperties: true type: object - type: 'null' title: Ab Test Config performance_metrics: anyOf: - additionalProperties: true type: object - type: 'null' title: Performance Metrics optimization_config: anyOf: - additionalProperties: true type: object - type: 'null' title: Optimization Config company_id: anyOf: - type: string format: uuid - type: 'null' title: Company Id consumer_group_ids: anyOf: - items: type: string format: uuid type: array - type: 'null' title: Consumer Group Ids campaign_id: type: string title: Campaign Id idea_number: type: integer title: Idea Number variation: type: integer title: Variation default: 0 type: object required: - campaign_id - idea_number title: EmailCampaignCreate EmailCampaignImageCreate: properties: image_type: type: string title: Image Type image_url: type: string title: Image Url original_prompt: anyOf: - type: string - type: 'null' title: Original Prompt enhanced_prompt: anyOf: - type: string - type: 'null' title: Enhanced Prompt width: anyOf: - type: integer - type: 'null' title: Width height: anyOf: - type: integer - type: 'null' title: Height type: object required: - image_type - image_url title: EmailCampaignImageCreate EmailCampaignImageResponse: properties: image_type: type: string title: Image Type image_url: type: string title: Image Url original_prompt: anyOf: - type: string - type: 'null' title: Original Prompt enhanced_prompt: anyOf: - type: string - type: 'null' title: Enhanced Prompt width: anyOf: - type: integer - type: 'null' title: Width height: anyOf: - type: integer - type: 'null' title: Height id: anyOf: - type: string - type: 'null' title: Id email_campaign_id: type: string format: uuid title: Email Campaign Id creation_date: anyOf: - type: string - type: 'null' title: Creation Date type: object required: - image_type - image_url - id - email_campaign_id - creation_date title: EmailCampaignImageResponse EmailCampaignResponse: properties: name: anyOf: - type: string - type: 'null' title: Name subject_line: anyOf: - type: string - type: 'null' title: Subject Line content: anyOf: - type: string - type: 'null' title: Content preview_text: anyOf: - type: string - type: 'null' title: Preview Text call_to_action: anyOf: - type: string - type: 'null' title: Call To Action target_audience: anyOf: - type: string - type: 'null' title: Target Audience key_selling_points: anyOf: - type: string - type: 'null' title: Key Selling Points from_name: anyOf: - type: string - type: 'null' title: From Name reply_to: anyOf: - type: string - type: 'null' title: Reply To product_offering_id: anyOf: - type: string format: uuid - type: 'null' title: Product Offering Id workflow_status: anyOf: - $ref: '#/components/schemas/WorkflowStatus' - type: 'null' default: draft scheduled_send_time: anyOf: - type: string - type: 'null' title: Scheduled Send Time sent_at: anyOf: - type: string - type: 'null' title: Sent At personalization_level: anyOf: - type: string - type: 'null' title: Personalization Level default: medium merge_variables: anyOf: - additionalProperties: true type: object - type: 'null' title: Merge Variables dynamic_blocks: anyOf: - additionalProperties: true type: object - type: 'null' title: Dynamic Blocks ab_test_config: anyOf: - additionalProperties: true type: object - type: 'null' title: Ab Test Config performance_metrics: anyOf: - additionalProperties: true type: object - type: 'null' title: Performance Metrics optimization_config: anyOf: - additionalProperties: true type: object - type: 'null' title: Optimization Config company_id: anyOf: - type: string format: uuid - type: 'null' title: Company Id consumer_group_ids: anyOf: - items: type: string format: uuid type: array - type: 'null' title: Consumer Group Ids id: anyOf: - type: string - type: 'null' title: Id company_profile_id: anyOf: - type: string - type: 'null' title: Company Profile Id campaign_id: type: string title: Campaign Id idea_number: type: integer title: Idea Number variation: type: integer title: Variation total_recipients: type: integer title: Total Recipients default: 0 emails_sent: type: integer title: Emails Sent default: 0 emails_failed: type: integer title: Emails Failed default: 0 creation_date: anyOf: - type: string - type: 'null' title: Creation Date last_modified: anyOf: - type: string - type: 'null' title: Last Modified images: items: $ref: '#/components/schemas/EmailCampaignImageResponse' type: array title: Images default: [] type: object required: - id - company_profile_id - campaign_id - idea_number - variation - creation_date - last_modified title: EmailCampaignResponse EvidenceLineageClass: type: string enum: - user_authored - first_party_observed - imported - system_derived - unknown title: EvidenceLineageClass description: 'How a workspace field entered the evidence plane. Lineage is descriptive metadata, not a truth ranking. In particular, ``system_derived`` facts still require support from their underlying evidence and ``user_authored`` facts are authoritative only as statements of user intent.' ExperimentPackageCreateRequest: properties: opportunity_id: type: string maxLength: 64 minLength: 1 title: Opportunity Id budget_cap: anyOf: - type: number maximum: 1000000.0 minimum: 50.0 - type: 'null' title: Budget Cap duration_days: anyOf: - type: integer maximum: 30.0 minimum: 7.0 - type: 'null' title: Duration Days variant_count: anyOf: - type: integer maximum: 3.0 minimum: 1.0 - type: 'null' title: Variant Count gross_margin: anyOf: - type: number maximum: 0.95 minimum: 0.1 - type: 'null' title: Gross Margin variant_states: items: $ref: '#/components/schemas/FirstPartyExperimentVariantState' type: array maxItems: 10 title: Variant States removed_variant_ids: items: type: string type: array maxItems: 10 title: Removed Variant Ids variant_assets: items: $ref: '#/components/schemas/FirstPartyExperimentVariantAsset' type: array maxItems: 10 title: Variant Assets regenerate: type: boolean title: Regenerate default: false upload_id: type: string maxLength: 64 minLength: 1 title: Upload Id type: object required: - opportunity_id - upload_id title: ExperimentPackageCreateRequest description: Persist a test package from a tuned preview. ExperimentReadoutRequest: properties: post_upload_id: type: string maxLength: 64 minLength: 1 title: Post Upload Id type: object required: - post_upload_id title: ExperimentReadoutRequest description: Pair a post-test sales upload to a package for the lift readout. ExternalAdMetadata: properties: platform: type: string title: Platform native_type: type: string title: Native Type performance_tier: type: string title: Performance Tier performance_reason: type: string title: Performance Reason attribution_scope: type: string title: Attribution Scope currency_code: anyOf: - type: string - type: 'null' title: Currency Code metrics: additionalProperties: true type: object title: Metrics benchmark: additionalProperties: true type: object title: Benchmark usage_count: type: integer title: Usage Count current_usage_count: type: integer title: Current Usage Count default: 0 historical_usage_count: type: integer title: Historical Usage Count default: 0 usages: items: $ref: '#/components/schemas/ExternalAdUsageMetadata' type: array title: Usages analysis: additionalProperties: true type: object title: Analysis type: object required: - platform - native_type - performance_tier - performance_reason - attribution_scope - usage_count title: ExternalAdMetadata ExternalAdUsageMetadata: properties: observation_id: type: string title: Observation Id platform: type: string title: Platform native_type: type: string title: Native Type account_id: type: string title: Account Id campaign_id: type: string title: Campaign Id campaign_name: type: string title: Campaign Name currency_code: anyOf: - type: string - type: 'null' title: Currency Code ad_group_id: anyOf: - type: string - type: 'null' title: Ad Group Id ad_id: anyOf: - type: string - type: 'null' title: Ad Id creative_id: anyOf: - type: string - type: 'null' title: Creative Id creative_name: anyOf: - type: string - type: 'null' title: Creative Name status: anyOf: - type: string - type: 'null' title: Status inventory_state: type: string title: Inventory State default: current media_role: anyOf: - type: string - type: 'null' title: Media Role provider_asset_id: anyOf: - type: string - type: 'null' title: Provider Asset Id source_url: anyOf: - type: string - type: 'null' title: Source Url thumbnail_url: anyOf: - type: string - type: 'null' title: Thumbnail Url performance_tier: type: string title: Performance Tier performance_reason: type: string title: Performance Reason attribution_scope: type: string title: Attribution Scope metrics: additionalProperties: true type: object title: Metrics benchmark: additionalProperties: true type: object title: Benchmark metric_window: additionalProperties: true type: object title: Metric Window analysis: additionalProperties: true type: object title: Analysis type: object required: - observation_id - platform - native_type - account_id - campaign_id - campaign_name - performance_tier - performance_reason - attribution_scope title: ExternalAdUsageMetadata ExternalCampaignPatchRequest: properties: name: anyOf: - type: string maxLength: 128 minLength: 1 - type: 'null' title: Name status: anyOf: - type: string enum: - ACTIVE - PAUSED - type: 'null' title: Status daily_budget: anyOf: - type: number maximum: 1000000.0 exclusiveMinimum: 0.0 - type: string - type: 'null' title: Daily Budget start_date: anyOf: - type: string - type: 'null' title: Start Date end_date: anyOf: - type: string - type: 'null' title: End Date dayparting_config: anyOf: - additionalProperties: true type: object - type: 'null' title: Dayparting Config headline: anyOf: - type: string - type: 'null' title: Headline long_headline: anyOf: - type: string - type: 'null' title: Long Headline long_headlines: anyOf: - items: type: string type: array - type: 'null' title: Long Headlines headlines: anyOf: - items: type: string type: array - type: 'null' title: Headlines description: anyOf: - type: string - type: 'null' title: Description descriptions: anyOf: - items: type: string type: array - type: 'null' title: Descriptions primary_text: anyOf: - type: string - type: 'null' title: Primary Text business_name: anyOf: - type: string - type: 'null' title: Business Name call_to_action: anyOf: - type: string - type: 'null' title: Call To Action final_url: anyOf: - type: string - type: 'null' title: Final Url destination_url: anyOf: - type: string - type: 'null' title: Destination Url ad_name: anyOf: - type: string - type: 'null' title: Ad Name ad_text: anyOf: - type: string - type: 'null' title: Ad Text display_name: anyOf: - type: string - type: 'null' title: Display Name landing_page_url: anyOf: - type: string - type: 'null' title: Landing Page Url keywords: anyOf: - items: {} type: array - type: 'null' title: Keywords negative_keywords: anyOf: - items: {} type: array - type: 'null' title: Negative Keywords max_cpc: anyOf: - type: number maximum: 1000000.0 exclusiveMinimum: 0.0 - type: string - type: 'null' title: Max Cpc media: anyOf: - items: additionalProperties: true type: object type: array - type: 'null' title: Media search_themes: anyOf: - items: type: string type: array - type: 'null' title: Search Themes targeting_optimization_mode: anyOf: - type: string enum: - AUTOMATIC - MANUAL - type: 'null' title: Targeting Optimization Mode suggestion_audience_enabled: anyOf: - type: boolean - type: 'null' title: Suggestion Audience Enabled targeting_spec: anyOf: - additionalProperties: true type: object - type: 'null' title: Targeting Spec advantage_audience_enabled: anyOf: - type: boolean - type: 'null' title: Advantage Audience Enabled advantage_creative_enabled: anyOf: - type: boolean - type: 'null' title: Advantage Creative Enabled meta_lead_form_config: anyOf: - additionalProperties: true type: object - type: 'null' title: Meta Lead Form Config resource_selection: anyOf: - $ref: '#/components/schemas/ExternalCampaignResourceSelection' - type: 'null' expected_observed_at: anyOf: - type: string format: date-time - type: 'null' title: Expected Observed At additionalProperties: false type: object title: ExternalCampaignPatchRequest description: Sparse portable fields; native provider payloads are never replayed. ExternalCampaignResourceSelection: properties: ad_group_id: anyOf: - type: string - type: 'null' title: Ad Group Id ad_id: anyOf: - type: string - type: 'null' title: Ad Id ad_set_id: anyOf: - type: string - type: 'null' title: Ad Set Id asset_group_id: anyOf: - type: string - type: 'null' title: Asset Group Id creative_id: anyOf: - type: string - type: 'null' title: Creative Id additionalProperties: false type: object title: ExternalCampaignResourceSelection description: Explicit provider resource targets for multi-entity campaign edits. ExternalCampaignSyncRequest: properties: platforms: items: type: string enum: - google - meta - tiktok - linkedin type: array minItems: 1 title: Platforms limit: type: integer maximum: 200.0 minimum: 1.0 title: Limit default: 200 metrics_lookback_days: type: integer maximum: 90.0 minimum: 1.0 title: Metrics Lookback Days default: 30 dry_run: type: boolean title: Dry Run default: false exhaustive: type: boolean title: Exhaustive default: false additionalProperties: false type: object title: ExternalCampaignSyncRequest description: Authenticated sync settings; profile scope only comes from auth context. ExternalCampaignSyncResponse: properties: company_profile_id: type: string format: uuid title: Company Profile Id metrics_lookback_days: type: integer title: Metrics Lookback Days dry_run: type: boolean title: Dry Run exhaustive: type: boolean title: Exhaustive results: items: $ref: '#/components/schemas/ExternalCampaignSyncResult' type: array title: Results type: object required: - company_profile_id - metrics_lookback_days - dry_run - exhaustive - results title: ExternalCampaignSyncResponse ExternalCampaignSyncResult: properties: platform: type: string title: Platform fetched: type: integer title: Fetched created: type: integer title: Created updated: type: integer title: Updated unchanged: type: integer title: Unchanged metric_facts: type: integer title: Metric Facts retired: type: integer title: Retired enumeration_complete: type: boolean title: Enumeration Complete enumeration_mode: type: string title: Enumeration Mode requested_limit: anyOf: - type: integer - type: 'null' title: Requested Limit type: object required: - platform - fetched - created - updated - unchanged - metric_facts - retired - enumeration_complete - enumeration_mode - requested_limit title: ExternalCampaignSyncResult FacebookPostCampaignRequest: properties: campaign_id: type: string title: Campaign Id description: ID of campaign to publish idea_number: type: integer title: Idea Number description: Idea number for campaign row page_id: type: string title: Page Id description: Facebook page ID to publish to page_name: anyOf: - type: string - type: 'null' title: Page Name description: Facebook page name for posting identity display variation: type: integer title: Variation description: Variation number (default 0) default: 0 type: object required: - campaign_id - idea_number - page_id title: FacebookPostCampaignRequest FacebookSocialActivateRequest: properties: page_id: type: string title: Page Id description: Facebook Page ID to use for social publishing type: object required: - page_id title: FacebookSocialActivateRequest FeedbackArtifactResponse: properties: id: anyOf: - type: string - type: 'null' title: Id feedback_id: type: string title: Feedback Id artifact_type: anyOf: - type: string - type: 'null' gcs_url: type: string title: Gcs Url content_type: type: string title: Content Type byte_size: type: integer title: Byte Size sha256: type: string title: Sha256 redaction_version: anyOf: - type: string - type: 'null' title: Redaction Version artifact_metadata: anyOf: - additionalProperties: true type: object - type: 'null' title: Artifact Metadata created_at: type: string title: Created At type: object required: - id - feedback_id - artifact_type - gcs_url - content_type - byte_size - sha256 - created_at title: FeedbackArtifactResponse description: Response schema for metadata about a stored feedback artifact. FeedbackBugReportResponse: properties: id: anyOf: - type: string - type: 'null' title: Id user_id: anyOf: - type: string - type: 'null' title: User Id organization_id: anyOf: - type: string - type: 'null' title: Organization Id company_profile_id: anyOf: - type: string - type: 'null' title: Company Profile Id feedback_type: anyOf: - type: string - type: 'null' message: type: string title: Message page_url: anyOf: - type: string - type: 'null' title: Page Url page_route: anyOf: - type: string - type: 'null' title: Page Route component_name: anyOf: - type: string - type: 'null' title: Component Name screenshot_url: anyOf: - type: string - type: 'null' title: Screenshot Url browser_info: anyOf: - additionalProperties: true type: object - type: 'null' title: Browser Info status: anyOf: - type: string - type: 'null' severity: anyOf: - type: string - type: 'null' title: Severity report_source: anyOf: - type: string - type: 'null' title: Report Source client_report_id: anyOf: - type: string - type: 'null' title: Client Report Id frontend_release: anyOf: - type: string - type: 'null' title: Frontend Release diagnostics_schema_version: anyOf: - type: string - type: 'null' title: Diagnostics Schema Version redaction_version: anyOf: - type: string - type: 'null' title: Redaction Version diagnostics_summary: anyOf: - additionalProperties: true type: object - type: 'null' title: Diagnostics Summary request_ids: anyOf: - items: type: string type: array - type: 'null' title: Request Ids console_error_count: type: integer title: Console Error Count default: 0 http_error_count: type: integer title: Http Error Count default: 0 created_at: anyOf: - type: string - type: 'null' title: Created At updated_at: anyOf: - type: string - type: 'null' title: Updated At artifacts: items: $ref: '#/components/schemas/FeedbackArtifactResponse' type: array title: Artifacts type: object required: - id - feedback_type - message - status - created_at title: FeedbackBugReportResponse description: Response schema for rich bug reports. FeedbackCreate: properties: feedback_type: $ref: '#/components/schemas/FeedbackType' description: 'Type of feedback: bug, feature, or general' message: type: string maxLength: 5000 minLength: 1 title: Message description: The feedback message content page_url: anyOf: - type: string maxLength: 2048 - type: 'null' title: Page Url description: Full URL where feedback was submitted page_route: anyOf: - type: string maxLength: 512 - type: 'null' title: Page Route description: React route path where feedback was submitted component_name: anyOf: - type: string maxLength: 256 - type: 'null' title: Component Name description: Name of the component where feedback was triggered screenshot_url: anyOf: - type: string maxLength: 2048 - type: 'null' title: Screenshot Url description: URL of the uploaded screenshot browser_info: anyOf: - additionalProperties: true type: object - type: 'null' title: Browser Info description: Browser and device metadata type: object required: - feedback_type - message title: FeedbackCreate description: Request schema for creating new feedback. FeedbackListResponse: properties: items: items: $ref: '#/components/schemas/FeedbackResponse' type: array title: Items total: type: integer title: Total page: type: integer title: Page page_size: type: integer title: Page Size has_more: type: boolean title: Has More type: object required: - items - total - page - page_size - has_more title: FeedbackListResponse description: Response schema for listing feedback. FeedbackResponse: properties: id: anyOf: - type: string - type: 'null' title: Id user_id: anyOf: - type: string - type: 'null' title: User Id organization_id: anyOf: - type: string - type: 'null' title: Organization Id company_profile_id: anyOf: - type: string - type: 'null' title: Company Profile Id feedback_type: anyOf: - type: string - type: 'null' message: type: string title: Message page_url: anyOf: - type: string - type: 'null' title: Page Url page_route: anyOf: - type: string - type: 'null' title: Page Route component_name: anyOf: - type: string - type: 'null' title: Component Name screenshot_url: anyOf: - type: string - type: 'null' title: Screenshot Url browser_info: anyOf: - additionalProperties: true type: object - type: 'null' title: Browser Info status: anyOf: - type: string - type: 'null' severity: anyOf: - type: string - type: 'null' title: Severity report_source: anyOf: - type: string - type: 'null' title: Report Source client_report_id: anyOf: - type: string - type: 'null' title: Client Report Id frontend_release: anyOf: - type: string - type: 'null' title: Frontend Release diagnostics_schema_version: anyOf: - type: string - type: 'null' title: Diagnostics Schema Version redaction_version: anyOf: - type: string - type: 'null' title: Redaction Version diagnostics_summary: anyOf: - additionalProperties: true type: object - type: 'null' title: Diagnostics Summary request_ids: anyOf: - items: type: string type: array - type: 'null' title: Request Ids console_error_count: type: integer title: Console Error Count default: 0 http_error_count: type: integer title: Http Error Count default: 0 created_at: anyOf: - type: string - type: 'null' title: Created At updated_at: anyOf: - type: string - type: 'null' title: Updated At type: object required: - id - feedback_type - message - status - created_at title: FeedbackResponse description: Response schema for feedback data. FeedbackType: type: string enum: - bug - feature - general - churn title: FeedbackType description: Type of feedback submitted by the user. FinalizeRegistrationRequest: properties: selected_plan: anyOf: - type: string - type: 'null' title: Selected Plan billing_interval: anyOf: - type: string - type: 'null' title: Billing Interval type: object title: FinalizeRegistrationRequest description: Finalize registration by marking status complete and recording selected plan. FinalizeSocialVideoCampaignItem: properties: campaign_id: type: string title: Campaign Id description: Draft social campaign ID to finalize platform: anyOf: - type: string - type: 'null' title: Platform description: Platform key (instagram, facebook, linkedin) post_type: anyOf: - type: string - type: 'null' title: Post Type description: Social post type media_type: anyOf: - type: string - type: 'null' title: Media Type description: Media type for this finalize item default: video video_duration: anyOf: - type: integer - type: 'null' title: Video Duration description: Requested video duration for this social draft video_quality: anyOf: - type: string - type: 'null' title: Video Quality description: Requested video quality for this social draft ugc_style_enabled: anyOf: - type: boolean - type: 'null' title: Ugc Style Enabled description: Whether this social draft campaign should use creator-led UGC-style video guidance use_fast_model: anyOf: - type: boolean - type: 'null' title: Use Fast Model description: Whether this social draft campaign should use the Gemini fast video model (lite + 1080p) draft_ads: anyOf: - items: additionalProperties: true type: object type: array - type: 'null' title: Draft Ads description: Client-provided social draft ads modified_prompts: anyOf: - additionalProperties: $ref: '#/components/schemas/StructuredVideoPromptModel' type: object - type: 'null' title: Modified Prompts description: Optional map of draft_ad_id to edited structured video prompt type: object required: - campaign_id title: FinalizeSocialVideoCampaignItem FinalizeSocialVideosRequest: properties: video_campaigns: items: $ref: '#/components/schemas/FinalizeSocialVideoCampaignItem' type: array title: Video Campaigns description: Draft social video campaigns to finalize deferred_platform_configs: anyOf: - items: additionalProperties: true type: object type: array - type: 'null' title: Deferred Platform Configs description: Deferred non-video platform configs to generate after video finalize provided_media_assets: anyOf: - items: additionalProperties: true type: object type: array - type: 'null' title: Provided Media Assets description: User-provided media assets to use for deferred social creative num_posts: anyOf: - type: integer - type: 'null' title: Num Posts description: Number of posts per deferred platform default: 3 reference_images: anyOf: - items: type: string type: array - type: 'null' title: Reference Images description: Reference image data URLs use_brand_style: anyOf: - type: boolean - type: 'null' title: Use Brand Style description: Apply brand style constraints default: false video_duration: anyOf: - type: integer - type: 'null' title: Video Duration description: Fallback video duration for social video finalize video_quality: anyOf: - type: string - type: 'null' title: Video Quality description: Default video quality for social videos default: 1080p ugc_style_enabled: anyOf: - type: boolean - type: 'null' title: Ugc Style Enabled description: Whether to steer generated social videos and seed images toward creator-led UGC style default: false use_fast_model: anyOf: - type: boolean - type: 'null' title: Use Fast Model description: Whether to use the Gemini fast video model (lite + 1080p) for finalized social videos default: false batch_campaign_id: anyOf: - type: string - type: 'null' title: Batch Campaign Id description: Optional batch campaign id user_prompt: anyOf: - type: string - type: 'null' title: User Prompt description: Original user prompt/product description target_audience: anyOf: - type: string - additionalProperties: true type: object - items: {} type: array - type: 'null' title: Target Audience description: Target audience description product_offering_id: anyOf: - type: string format: uuid - type: 'null' title: Product Offering Id description: Product offering ID product_description: anyOf: - type: string - type: 'null' title: Product Description description: 'Deprecated: use user_prompt' target_audience_json: anyOf: - additionalProperties: true type: object - items: {} type: array - type: 'null' title: Target Audience Json description: 'Deprecated: derive from target_audience' type: object title: FinalizeSocialVideosRequest FinalizeVideoCampaignItem: properties: campaign_id: type: string title: Campaign Id description: Draft campaign ID to finalize platform: anyOf: - type: string - type: 'null' title: Platform description: Target platform for this draft campaign video_length: anyOf: - type: integer - type: 'null' title: Video Length description: Video duration is fixed at 10 seconds for this draft campaign video_quality: anyOf: - type: string - type: 'null' title: Video Quality description: Requested video quality for this draft campaign ugc_style_enabled: anyOf: - type: boolean - type: 'null' title: Ugc Style Enabled description: Whether this draft campaign should use creator-led UGC-style video guidance use_fast_model: anyOf: - type: boolean - type: 'null' title: Use Fast Model description: Whether this draft campaign should use the Gemini fast video model (lite + 1080p) draft_ads: anyOf: - items: additionalProperties: true type: object type: array - type: 'null' title: Draft Ads description: Client-provided draft ads for this campaign modified_prompts: anyOf: - additionalProperties: $ref: '#/components/schemas/StructuredVideoPromptModel' type: object - type: 'null' title: Modified Prompts description: Optional map of ad_id to edited structured video prompt type: object required: - campaign_id title: FinalizeVideoCampaignItem FinalizeVideoRequest: properties: modified_prompts: anyOf: - additionalProperties: $ref: '#/components/schemas/StructuredVideoPromptModel' type: object - type: 'null' title: Modified Prompts description: Optional map of ad_id to edited structured video prompt draft_ads: anyOf: - items: additionalProperties: true type: object type: array - type: 'null' title: Draft Ads description: Optional client-provided draft ads (images/prompts) user_prompt: anyOf: - type: string - type: 'null' title: User Prompt description: Original user prompt/product description target_audience: anyOf: - type: string - additionalProperties: true type: object - items: {} type: array - type: 'null' title: Target Audience description: Target audience description locations: anyOf: - items: additionalProperties: true type: object type: array - type: 'null' title: Locations description: Structured target locations product_offering_id: anyOf: - type: string format: uuid - type: 'null' title: Product Offering Id description: Product offering ID country: anyOf: - type: string - type: 'null' title: Country description: Country for geo targeting state_province: anyOf: - type: string - type: 'null' title: State Province description: State/Province for geo targeting city: anyOf: - type: string - type: 'null' title: City description: City for geo targeting campaign_goals: anyOf: - items: type: string type: array - type: 'null' title: Campaign Goals description: Optional campaign goals key_selling_points: anyOf: - type: string - type: 'null' title: Key Selling Points description: Optional key selling points bid_strategy: anyOf: - type: string - type: 'null' title: Bid Strategy description: Optional bidding strategy budget_range: anyOf: - type: string - type: 'null' title: Budget Range description: Optional budget range budget_allocation: anyOf: - additionalProperties: true type: object - type: 'null' title: Budget Allocation budget_constraints: anyOf: - additionalProperties: true type: object - type: 'null' title: Budget Constraints campaign_timing: anyOf: - additionalProperties: true type: object - type: 'null' title: Campaign Timing dayparting_enabled: anyOf: - type: boolean - type: 'null' title: Dayparting Enabled default: false dayparting_config: anyOf: - additionalProperties: true type: object - type: 'null' title: Dayparting Config target_platforms: anyOf: - items: type: string type: array - type: 'null' title: Target Platforms description: Requested platforms for this finalize action lead_form_enabled: anyOf: - type: boolean - type: 'null' title: Lead Form Enabled description: Enable lead forms where supported lead_forms_by_ad_type: anyOf: - additionalProperties: true type: object - type: 'null' title: Lead Forms By Ad Type description: Lead form settings keyed by ad type video_length: anyOf: - type: integer - type: 'null' title: Video Length description: Video duration is fixed at 10 seconds video_quality: anyOf: - type: string - type: 'null' title: Video Quality description: Requested video quality for this finalize action default: 1080p provided_media_assets: anyOf: - items: additionalProperties: true type: object type: array - type: 'null' title: Provided Media Assets description: User-provided media assets to use instead of generating primary video/image creative ugc_style_enabled: anyOf: - type: boolean - type: 'null' title: Ugc Style Enabled description: Whether to steer the generated video and seed image toward creator-led UGC style default: false use_fast_model: anyOf: - type: boolean - type: 'null' title: Use Fast Model description: Whether to use the Gemini fast video model (lite + 1080p) for video generation default: false product_description: anyOf: - type: string - type: 'null' title: Product Description description: 'Deprecated: use user_prompt' target_locations: anyOf: - items: additionalProperties: true type: object type: array - type: 'null' title: Target Locations description: 'Deprecated: use locations' target_audience_json: anyOf: - additionalProperties: true type: object - items: {} type: array - type: 'null' title: Target Audience Json description: 'Deprecated: derive from target_audience' type: object title: FinalizeVideoRequest FinalizeVideosRequest: properties: video_campaigns: items: $ref: '#/components/schemas/FinalizeVideoCampaignItem' type: array title: Video Campaigns description: Draft video campaigns to finalize non_video_platforms: anyOf: - items: type: string type: array - type: 'null' title: Non Video Platforms description: Non-video platforms to generate after video finalize target_platforms: anyOf: - items: type: string type: array - type: 'null' title: Target Platforms description: Original requested platforms (used to derive non-video) platform_sub_formats: anyOf: - additionalProperties: true type: object - type: 'null' title: Platform Sub Formats description: Platform-specific creative mode selections from the original request num_ads: anyOf: - type: integer - type: 'null' title: Num Ads description: Number of ads per non-video platform num_images_per_ad: anyOf: - type: integer - type: 'null' title: Num Images Per Ad description: Images per non-video ad reference_images: anyOf: - items: type: string type: array - type: 'null' title: Reference Images description: Reference image data URLs provided_media_assets: anyOf: - items: additionalProperties: true type: object type: array - type: 'null' title: Provided Media Assets description: User-provided media assets to use instead of generating primary video/image creative lead_form_enabled: anyOf: - type: boolean - type: 'null' title: Lead Form Enabled description: Enable lead forms where supported lead_forms_by_ad_type: anyOf: - additionalProperties: true type: object - type: 'null' title: Lead Forms By Ad Type description: Lead form settings keyed by ad type max_cpc: anyOf: - type: number - type: 'null' title: Max Cpc description: Max CPC for manual bidding objective: anyOf: - type: string - type: 'null' title: Objective description: Campaign objective ad_format: anyOf: - type: string - type: 'null' title: Ad Format description: Ad format video_length: anyOf: - type: integer - type: 'null' title: Video Length description: Video duration is fixed at 10 seconds for video platforms video_lengths: anyOf: - additionalProperties: type: integer type: object - type: 'null' title: Video Lengths description: Optional map of platform ids to video duration; values are normalized to 10 seconds video_quality: anyOf: - type: string - type: 'null' title: Video Quality description: Default video quality for video platforms default: 1080p video_qualities: anyOf: - additionalProperties: type: string type: object - type: 'null' title: Video Qualities description: Optional map of platform ids to requested video quality ugc_style_enabled: anyOf: - type: boolean - type: 'null' title: Ugc Style Enabled description: Whether to steer generated videos and seed images toward creator-led UGC style default: false use_fast_model: anyOf: - type: boolean - type: 'null' title: Use Fast Model description: Whether to use the Gemini fast video model (lite + 1080p) for finalized videos default: false user_prompt: anyOf: - type: string - type: 'null' title: User Prompt description: Original user prompt/product description target_audience: anyOf: - type: string - additionalProperties: true type: object - items: {} type: array - type: 'null' title: Target Audience description: Target audience description locations: anyOf: - items: additionalProperties: true type: object type: array - type: 'null' title: Locations description: Structured target locations product_offering_id: anyOf: - type: string format: uuid - type: 'null' title: Product Offering Id description: Product offering ID country: anyOf: - type: string - type: 'null' title: Country description: Country for geo targeting state_province: anyOf: - type: string - type: 'null' title: State Province description: State/Province for geo targeting city: anyOf: - type: string - type: 'null' title: City description: City for geo targeting campaign_goals: anyOf: - items: type: string type: array - type: 'null' title: Campaign Goals description: Optional campaign goals key_selling_points: anyOf: - type: string - type: 'null' title: Key Selling Points description: Optional key selling points bid_strategy: anyOf: - type: string - type: 'null' title: Bid Strategy description: Optional bidding strategy budget_range: anyOf: - type: string - type: 'null' title: Budget Range description: Optional budget range budget_allocation: anyOf: - additionalProperties: true type: object - type: 'null' title: Budget Allocation budget_constraints: anyOf: - additionalProperties: true type: object - type: 'null' title: Budget Constraints campaign_timing: anyOf: - additionalProperties: true type: object - type: 'null' title: Campaign Timing dayparting_enabled: anyOf: - type: boolean - type: 'null' title: Dayparting Enabled default: false dayparting_config: anyOf: - additionalProperties: true type: object - type: 'null' title: Dayparting Config product_description: anyOf: - type: string - type: 'null' title: Product Description description: 'Deprecated: use user_prompt' target_locations: anyOf: - items: additionalProperties: true type: object type: array - type: 'null' title: Target Locations description: 'Deprecated: use locations' target_audience_json: anyOf: - additionalProperties: true type: object - items: {} type: array - type: 'null' title: Target Audience Json description: 'Deprecated: derive from target_audience' type: object title: FinalizeVideosRequest FirstPartyBuyerTargetRequest: properties: unit_per_store_per_week: anyOf: - type: number maximum: 100000.0 exclusiveMinimum: 0.0 - type: 'null' title: Unit Per Store Per Week source: anyOf: - type: string maxLength: 240 minLength: 2 - type: 'null' title: Source as_of: anyOf: - type: string maxLength: 32 - type: 'null' title: As Of type: object title: FirstPartyBuyerTargetRequest description: 'The velocity a retail buyer actually expects, as stated by the marketer. This is the one number on the sales surface that no file contains and no model can infer. A buyer''s hurdle rate is a commercial term one retailer imposed on one brand in one review cycle, so it arrives by being typed, and every figure downstream of it is only as good as its provenance. `source` is therefore REQUIRED and not defaulted. A target with no stated origin is indistinguishable, three months later, from a number somebody guessed, and it drives the gap and the size of the prize on a screen a marketer quotes to that same buyer. Send `unit_per_store_per_week: null` to clear the target and fall back to the modelled percentile.' FirstPartyCoveragePolicyRequest: properties: minimum_weeks: type: number maximum: 52.0 minimum: 0.5 title: Minimum Weeks default: 5.0 reorder_trigger_weeks: type: number maximum: 52.0 minimum: 0.5 title: Reorder Trigger Weeks default: 6.0 target_weeks: type: number maximum: 104.0 minimum: 0.5 title: Target Weeks default: 8.0 run_rate_window_weeks: type: integer maximum: 13.0 minimum: 1.0 title: Run Rate Window Weeks default: 4 consumption_upload_id: anyOf: - type: string maxLength: 64 - type: 'null' title: Consumption Upload Id inventory_upload_id: anyOf: - type: string maxLength: 64 - type: 'null' title: Inventory Upload Id shipment_upload_id: anyOf: - type: string maxLength: 64 - type: 'null' title: Shipment Upload Id retailer_account: anyOf: - type: string maxLength: 240 - type: 'null' title: Retailer Account shipment_customer: anyOf: - type: string maxLength: 240 - type: 'null' title: Shipment Customer type: object title: FirstPartyCoveragePolicyRequest description: Retail coverage thresholds applied to a POS + inventory workspace. FirstPartyExperimentPackageRequest: properties: opportunity_id: type: string maxLength: 64 minLength: 1 title: Opportunity Id budget_cap: anyOf: - type: number maximum: 1000000.0 minimum: 50.0 - type: 'null' title: Budget Cap duration_days: anyOf: - type: integer maximum: 30.0 minimum: 7.0 - type: 'null' title: Duration Days variant_count: anyOf: - type: integer maximum: 3.0 minimum: 1.0 - type: 'null' title: Variant Count gross_margin: anyOf: - type: number maximum: 0.95 minimum: 0.1 - type: 'null' title: Gross Margin variant_states: items: $ref: '#/components/schemas/FirstPartyExperimentVariantState' type: array maxItems: 10 title: Variant States removed_variant_ids: items: type: string type: array maxItems: 10 title: Removed Variant Ids variant_assets: items: $ref: '#/components/schemas/FirstPartyExperimentVariantAsset' type: array maxItems: 10 title: Variant Assets regenerate: type: boolean title: Regenerate default: false type: object required: - opportunity_id title: FirstPartyExperimentPackageRequest description: Full desired state for a stateless experiment-package recompute. FirstPartyExperimentVariantAsset: properties: id: type: string maxLength: 64 minLength: 1 title: Id image_url: type: string maxLength: 2048 minLength: 1 title: Image Url media_type: type: string maxLength: 24 title: Media Type default: image asset_source: type: string maxLength: 24 title: Asset Source default: generated width: anyOf: - type: integer maximum: 20000.0 minimum: 1.0 - type: 'null' title: Width height: anyOf: - type: integer maximum: 20000.0 minimum: 1.0 - type: 'null' title: Height type: object required: - id - image_url title: FirstPartyExperimentVariantAsset description: 'Client-chosen creative image for one preview variant. Sent as a DELTA keyed by the stable variant id: the server rebuilds the plan from the stored upload on every recompute/persist, so the chosen (generated, uploaded, or edited) image must be merged back onto the matching variant.' FirstPartyExperimentVariantState: properties: id: type: string maxLength: 64 minLength: 1 title: Id locked: type: boolean title: Locked default: false alternate_index: type: integer maximum: 100.0 minimum: 0.0 title: Alternate Index default: 0 type: object required: - id title: FirstPartyExperimentVariantState description: Client-held state for one preview variant. FirstPartySkuBreakdownItem: properties: label: type: string title: Label total_revenue: anyOf: - type: number - type: 'null' title: Total Revenue sold_units: anyOf: - type: number - type: 'null' title: Sold Units transactions: anyOf: - type: number - type: 'null' title: Transactions shipped_units: anyOf: - type: number - type: 'null' title: Shipped Units open_order_units: anyOf: - type: number - type: 'null' title: Open Order Units other_order_units: anyOf: - type: number - type: 'null' title: Other Order Units on_hand_units: anyOf: - type: number - type: 'null' title: On Hand Units share_pct: anyOf: - type: number - type: 'null' title: Share Pct type: object required: - label title: FirstPartySkuBreakdownItem FirstPartySkuDetailResponse: properties: upload_id: type: string title: Upload Id sku_key: type: string title: Sku Key sku: anyOf: - type: string - type: 'null' title: Sku product_name: type: string title: Product Name offering_id: anyOf: - type: string - type: 'null' title: Offering Id offering_name: anyOf: - type: string - type: 'null' title: Offering Name source_types: items: type: string type: array title: Source Types available_metrics: items: type: string type: array title: Available Metrics total_revenue: anyOf: - type: number - type: 'null' title: Total Revenue sold_units: anyOf: - type: number - type: 'null' title: Sold Units units_per_store_week: anyOf: - type: number - type: 'null' title: Units Per Store Week shipped_units: anyOf: - type: number - type: 'null' title: Shipped Units open_order_units: anyOf: - type: number - type: 'null' title: Open Order Units on_hand_units: anyOf: - type: number - type: 'null' title: On Hand Units latest_period: anyOf: - type: string format: date - type: 'null' title: Latest Period revenue_share_pct: anyOf: - type: number - type: 'null' title: Revenue Share Pct units_share_pct: anyOf: - type: number - type: 'null' title: Units Share Pct pos: anyOf: - $ref: '#/components/schemas/FirstPartySkuPosDetail' - type: 'null' shipments: anyOf: - $ref: '#/components/schemas/FirstPartySkuShipmentDetail' - type: 'null' inventory: anyOf: - $ref: '#/components/schemas/FirstPartySkuInventoryDetail' - type: 'null' linked_sources: items: type: string type: array title: Linked Sources evidence: additionalProperties: true type: object title: Evidence legacy_data_unavailable: type: boolean title: Legacy Data Unavailable default: false legacy_reason: anyOf: - type: string - type: 'null' title: Legacy Reason type: object required: - upload_id - sku_key - product_name title: FirstPartySkuDetailResponse description: Evidence-labelled SKU 360 view assembled from eligible profile uploads. FirstPartySkuInventoryDetail: properties: on_hand_units: anyOf: - type: number - type: 'null' title: On Hand Units weeks_of_supply: anyOf: - type: number - type: 'null' title: Weeks Of Supply as_of_start: anyOf: - type: string format: date - type: 'null' title: As Of Start as_of_end: anyOf: - type: string format: date - type: 'null' title: As Of End as_of_date: anyOf: - type: string format: date - type: 'null' title: As Of Date reorder_trigger_weeks: anyOf: - type: number - type: 'null' title: Reorder Trigger Weeks target_weeks: anyOf: - type: number - type: 'null' title: Target Weeks status: anyOf: - type: string enum: - inventory_needed - run_rate_needed - below_minimum - reorder_now - covered - above_target - type: 'null' title: Status coverage_policy_source: type: string enum: - configured - default_reference title: Coverage Policy Source top_retailers: items: $ref: '#/components/schemas/FirstPartySkuBreakdownItem' type: array title: Top Retailers type: object required: - coverage_policy_source title: FirstPartySkuInventoryDetail FirstPartySkuListItem: properties: sku_key: type: string title: Sku Key sku: anyOf: - type: string - type: 'null' title: Sku product_name: type: string title: Product Name offering_id: anyOf: - type: string - type: 'null' title: Offering Id offering_name: anyOf: - type: string - type: 'null' title: Offering Name source_types: items: type: string type: array title: Source Types available_metrics: items: type: string type: array title: Available Metrics total_revenue: anyOf: - type: number - type: 'null' title: Total Revenue sold_units: anyOf: - type: number - type: 'null' title: Sold Units units_per_store_week: anyOf: - type: number - type: 'null' title: Units Per Store Week shipped_units: anyOf: - type: number - type: 'null' title: Shipped Units open_order_units: anyOf: - type: number - type: 'null' title: Open Order Units on_hand_units: anyOf: - type: number - type: 'null' title: On Hand Units latest_period: anyOf: - type: string format: date - type: 'null' title: Latest Period revenue_share_pct: anyOf: - type: number - type: 'null' title: Revenue Share Pct units_share_pct: anyOf: - type: number - type: 'null' title: Units Share Pct type: object required: - sku_key - product_name title: FirstPartySkuListItem description: Compact SKU 360 row returned by the paginated workspace endpoint. FirstPartySkuListResponse: properties: upload_id: type: string title: Upload Id dataset_category: type: string title: Dataset Category page: type: integer title: Page page_size: type: integer title: Page Size total: type: integer title: Total items: items: $ref: '#/components/schemas/FirstPartySkuListItem' type: array title: Items legacy_data_unavailable: type: boolean title: Legacy Data Unavailable default: false legacy_reason: anyOf: - type: string - type: 'null' title: Legacy Reason type: object required: - upload_id - dataset_category - page - page_size - total title: FirstPartySkuListResponse description: Paginated SKU 360 directory for one workspace context. FirstPartySkuPosDetail: properties: total_revenue: anyOf: - type: number - type: 'null' title: Total Revenue sold_units: anyOf: - type: number - type: 'null' title: Sold Units transactions: anyOf: - type: number - type: 'null' title: Transactions average_units_per_week: anyOf: - type: number - type: 'null' title: Average Units Per Week units_per_store_week: anyOf: - type: number - type: 'null' title: Units Per Store Week revenue_share_pct: anyOf: - type: number - type: 'null' title: Revenue Share Pct units_share_pct: anyOf: - type: number - type: 'null' title: Units Share Pct weekly_trend: items: $ref: '#/components/schemas/FirstPartySkuTrendPoint' type: array title: Weekly Trend top_markets: items: $ref: '#/components/schemas/FirstPartySkuBreakdownItem' type: array title: Top Markets top_stores: items: $ref: '#/components/schemas/FirstPartySkuBreakdownItem' type: array title: Top Stores type: object title: FirstPartySkuPosDetail FirstPartySkuShipmentDetail: properties: shipped_units: anyOf: - type: number - type: 'null' title: Shipped Units open_order_units: anyOf: - type: number - type: 'null' title: Open Order Units other_order_units: anyOf: - type: number - type: 'null' title: Other Order Units grain: type: string title: Grain period_flow: items: $ref: '#/components/schemas/FirstPartySkuShipmentPoint' type: array title: Period Flow top_customers: items: $ref: '#/components/schemas/FirstPartySkuBreakdownItem' type: array title: Top Customers type: object required: - grain title: FirstPartySkuShipmentDetail FirstPartySkuShipmentPoint: properties: period_start: type: string format: date title: Period Start period_end: anyOf: - type: string format: date - type: 'null' title: Period End period_grain: type: string title: Period Grain period_label: type: string title: Period Label shipped_units: anyOf: - type: number - type: 'null' title: Shipped Units open_order_units: anyOf: - type: number - type: 'null' title: Open Order Units other_order_units: anyOf: - type: number - type: 'null' title: Other Order Units type: object required: - period_start - period_grain - period_label title: FirstPartySkuShipmentPoint FirstPartySkuTrendPoint: properties: period_start: type: string format: date title: Period Start period_end: anyOf: - type: string format: date - type: 'null' title: Period End period_grain: type: string title: Period Grain period_label: type: string title: Period Label revenue: anyOf: - type: number - type: 'null' title: Revenue sold_units: anyOf: - type: number - type: 'null' title: Sold Units transactions: anyOf: - type: number - type: 'null' title: Transactions type: object required: - period_start - period_grain - period_label title: FirstPartySkuTrendPoint GalleryCreateResponse: properties: success: type: boolean title: Success images: items: $ref: '#/components/schemas/GalleryImageResponse' type: array title: Images total: type: integer title: Total ai_policy_eval: anyOf: - additionalProperties: true type: object - type: 'null' title: Ai Policy Eval type: object required: - success - images - total title: GalleryCreateResponse description: Response for gallery image creation endpoints GalleryImageResponse: properties: id: anyOf: - type: string - type: 'null' title: Id company_profile_id: anyOf: - type: string - type: 'null' title: Company Profile Id media_url: type: string title: Media Url thumbnail_url: anyOf: - type: string - type: 'null' title: Thumbnail Url media_type: type: string title: Media Type file_format: anyOf: - type: string - type: 'null' title: File Format category: type: string title: Category subcategory: anyOf: - type: string - type: 'null' title: Subcategory source_type: type: string title: Source Type source_campaign_id: anyOf: - type: string - type: 'null' title: Source Campaign Id source_campaign_type: anyOf: - type: string - type: 'null' title: Source Campaign Type title: anyOf: - type: string - type: 'null' title: Title description: anyOf: - type: string - type: 'null' title: Description tags: anyOf: - items: type: string type: array - type: 'null' title: Tags width: anyOf: - type: integer - type: 'null' title: Width height: anyOf: - type: integer - type: 'null' title: Height duration: anyOf: - type: integer - type: 'null' title: Duration file_size: anyOf: - type: integer - type: 'null' title: File Size generation_prompt: anyOf: - type: string - type: 'null' title: Generation Prompt generation_model: anyOf: - type: string - type: 'null' title: Generation Model edit_history: anyOf: - items: additionalProperties: true type: object type: array - type: 'null' title: Edit History is_visible: type: boolean title: Is Visible default: true is_favorite: type: boolean title: Is Favorite default: false created_at: anyOf: - type: string format: date-time - type: 'null' title: Created At updated_at: anyOf: - type: string format: date-time - type: 'null' title: Updated At external_ad_metadata: anyOf: - $ref: '#/components/schemas/ExternalAdMetadata' - type: 'null' type: object required: - id - company_profile_id - media_url - media_type - category - source_type title: GalleryImageResponse description: Response schema for gallery images with signed URL support GalleryListResponse: properties: images: items: $ref: '#/components/schemas/GalleryImageResponse' type: array title: Images total: type: integer title: Total page: type: integer title: Page limit: type: integer title: Limit total_pages: type: integer title: Total Pages category_stats: additionalProperties: additionalProperties: type: integer type: object type: object title: Category Stats type: object required: - images - total - page - limit - total_pages title: GalleryListResponse description: Response for gallery list endpoint GalleryUploadResponse: properties: success: type: boolean title: Success uploaded_images: items: $ref: '#/components/schemas/GalleryImageResponse' type: array title: Uploaded Images total: type: integer title: Total type: object required: - success - uploaded_images - total title: GalleryUploadResponse description: Response for gallery upload endpoints GenerateAdVariationRequest: properties: campaign_id: type: string title: Campaign Id variation_count: type: integer title: Variation Count description: Number of variations to generate default: 1 generate_new_images: type: boolean title: Generate New Images description: Whether to generate new images for the variation default: true type: object required: - campaign_id title: GenerateAdVariationRequest GenerateDeckRequest: properties: company_profile_id: type: string format: uuid title: Company Profile Id product_offering_ids: anyOf: - items: type: string format: uuid type: array - type: 'null' title: Product Offering Ids title: type: string title: Title audience: anyOf: - type: string - type: 'null' title: Audience goal: anyOf: - type: string - type: 'null' title: Goal slides_total: type: integer maximum: 50.0 minimum: 1.0 title: Slides Total sections: items: $ref: '#/components/schemas/DeckSection' type: array title: Sections style: anyOf: - $ref: '#/components/schemas/DeckStyle' - type: 'null' sample_reference_url: anyOf: - type: string - type: 'null' title: Sample Reference Url export: anyOf: - $ref: '#/components/schemas/DeckExport' - type: 'null' notes: anyOf: - type: string - type: 'null' title: Notes attachments: anyOf: - items: additionalProperties: true type: object type: array - type: 'null' title: Attachments type: object required: - company_profile_id - title - slides_total - sections title: GenerateDeckRequest GenerateGTMRequest: properties: company_profile_id: type: string format: uuid title: Company Profile Id product_offering_ids: anyOf: - items: type: string format: uuid type: array - type: 'null' title: Product Offering Ids audience: anyOf: - type: string - type: 'null' title: Audience goal: anyOf: - type: string - type: 'null' title: Goal tone: anyOf: - type: string - type: 'null' title: Tone default: professional expected_length: anyOf: - type: string - type: 'null' title: Expected Length default: standard notes: anyOf: - type: string - type: 'null' title: Notes title: anyOf: - type: string - type: 'null' title: Title attachments: anyOf: - items: additionalProperties: true type: object type: array - type: 'null' title: Attachments type: object required: - company_profile_id title: GenerateGTMRequest GenerateInviteTokenResponse: properties: invite_token: type: string title: Invite Token type: object required: - invite_token title: GenerateInviteTokenResponse description: Response model for invite token generation. GenerateVariationRequest: properties: post_id: type: integer title: Post Id description: ID of the original post variation_prompt: anyOf: - type: string - type: 'null' title: Variation Prompt description: Optional prompt for variation type: object required: - post_id title: GenerateVariationRequest description: Request model for generating post variations. GoogleAccountsResponseModel: properties: accounts: items: additionalProperties: anyOf: - type: string - type: integer type: object type: array title: Accounts activation_state: anyOf: - type: string - type: 'null' title: Activation State active_account: anyOf: - additionalProperties: true type: object - type: 'null' title: Active Account type: object required: - accounts title: GoogleAccountsResponseModel GoogleActivateAccountRequest: properties: account_id: type: string title: Account Id description: Google Ads account ID to activate for future launches type: object required: - account_id title: GoogleActivateAccountRequest GoogleAdCampaignRequest: properties: account_id: type: string title: Account Id name: type: string title: Name budget_amount_micros: type: integer title: Budget Amount Micros start_date: type: string title: Start Date end_date: anyOf: - type: string - type: 'null' title: End Date type: object required: - account_id - name - budget_amount_micros - start_date title: GoogleAdCampaignRequest GoogleAdGroupRequest: properties: account_id: type: string title: Account Id campaign_id: type: string title: Campaign Id name: type: string title: Name type: object required: - account_id - campaign_id - name title: GoogleAdGroupRequest GoogleAnalyticsChannelInputResponse: properties: company_profile_id: type: string title: Company Profile Id metric_date: type: string format: date title: Metric Date channel_key: type: string title: Channel Key normalized_channel: anyOf: - type: string - type: 'null' title: Normalized Channel source_platform: anyOf: - type: string - type: 'null' title: Source Platform source: anyOf: - type: string - type: 'null' title: Source medium: anyOf: - type: string - type: 'null' title: Medium campaign_name: anyOf: - type: string - type: 'null' title: Campaign Name ga4_sessions: type: integer title: Ga4 Sessions ga4_engaged_sessions: type: integer title: Ga4 Engaged Sessions ga4_active_users: type: integer title: Ga4 Active Users ga4_key_events: type: number title: Ga4 Key Events ga4_transactions: type: integer title: Ga4 Transactions ga4_purchase_revenue_cents: type: integer title: Ga4 Purchase Revenue Cents observed_spend_cents: anyOf: - type: integer - type: 'null' title: Observed Spend Cents observed_revenue_cents: anyOf: - type: integer - type: 'null' title: Observed Revenue Cents data_quality_score: anyOf: - type: number - type: 'null' title: Data Quality Score type: object required: - company_profile_id - metric_date - channel_key - normalized_channel - source_platform - source - medium - campaign_name - ga4_sessions - ga4_engaged_sessions - ga4_active_users - ga4_key_events - ga4_transactions - ga4_purchase_revenue_cents - observed_spend_cents - observed_revenue_cents - data_quality_score title: GoogleAnalyticsChannelInputResponse description: GA4 daily channel input row from the Gold MMM feature table. GoogleAnalyticsPropertiesResponse: properties: connected: type: boolean title: Connected properties: items: $ref: '#/components/schemas/GoogleAnalyticsProperty' type: array title: Properties selected_property_resource_name: anyOf: - type: string - type: 'null' title: Selected Property Resource Name type: object required: - connected title: GoogleAnalyticsPropertiesResponse GoogleAnalyticsProperty: properties: account_id: anyOf: - type: string - type: 'null' title: Account Id description: Google Analytics account ID account_name: anyOf: - type: string - type: 'null' title: Account Name description: Google Analytics account display name property_id: type: string title: Property Id description: GA4 numeric property ID property_resource_name: type: string title: Property Resource Name description: 'GA4 property resource name: properties/{id}' property_name: type: string title: Property Name description: GA4 property display name property_type: anyOf: - type: string - type: 'null' title: Property Type description: GA4 property type type: object required: - property_id - property_resource_name - property_name title: GoogleAnalyticsProperty GoogleAnalyticsPropertySelectRequest: properties: property_resource_name: type: string title: Property Resource Name description: GA4 property resource name, e.g. properties/123456 type: object required: - property_resource_name title: GoogleAnalyticsPropertySelectRequest GoogleAnalyticsPropertySelectResponse: properties: success: type: boolean title: Success property: $ref: '#/components/schemas/GoogleAnalyticsProperty' initial_sync: type: string title: Initial Sync type: object required: - success - property - initial_sync title: GoogleAnalyticsPropertySelectResponse GoogleAnalyticsStatusResponseModel: properties: connected: type: boolean title: Connected description: Whether the platform is connected healthy: type: boolean title: Healthy description: Whether the token is healthy (passed API check) default: false health_message: anyOf: - type: string - type: 'null' title: Health Message description: Health check result message account_id: anyOf: - type: string - type: 'null' title: Account Id description: Platform-specific account identifier account_name: anyOf: - type: string - type: 'null' title: Account Name description: Display name for the account token_expires_soon: type: boolean title: Token Expires Soon description: Whether token expires within buffer period default: false last_health_check: anyOf: - type: string - type: 'null' title: Last Health Check description: ISO timestamp of last health check selected_property_id: anyOf: - type: string - type: 'null' title: Selected Property Id description: Selected GA4 property ID selected_property_name: anyOf: - type: string - type: 'null' title: Selected Property Name description: Selected GA4 property name selected_property_resource_name: anyOf: - type: string - type: 'null' title: Selected Property Resource Name description: Selected GA4 property resource name property_count: type: integer title: Property Count description: Number of accessible GA4 properties default: 0 property_selection_required: type: boolean title: Property Selection Required description: Whether the user must select a GA4 property default: false granted_scopes: items: type: string type: array title: Granted Scopes description: Granted Google OAuth scopes missing_scopes: items: type: string type: array title: Missing Scopes description: Configured scopes not granted by Google refresh_token_expires_at: anyOf: - type: string - type: 'null' title: Refresh Token Expires At description: Refresh token expiry if Google returned time-bound access reconnect_required: type: boolean title: Reconnect Required description: Whether the user must reconnect Google Analytics default: false type: object required: - connected title: GoogleAnalyticsStatusResponseModel example: account_id: shop_12345 account_name: My Store connected: true health_message: Token is valid healthy: true last_health_check: '2024-01-15T10:30:00Z' token_expires_soon: false GoogleAuthResponseModel: properties: auth_url: type: string title: Auth Url type: object required: - auth_url title: GoogleAuthResponseModel GoogleCampaignActionRequest: properties: platform_type: type: string title: Platform Type description: 'Type of ad platform: google_display or google_search' ad_id: type: string title: Ad Id description: Normalized platform ad ID to act on google_account_id: type: string title: Google Account Id description: Google Ads account ID action: type: string title: Action description: 'Action to perform: pause or delete' type: object required: - platform_type - ad_id - google_account_id - action title: GoogleCampaignActionRequest description: Request model for pausing/deleting a Google campaign. GoogleCreateAdFromCampaignRequest: properties: campaign_id: type: string title: Campaign Id description: ID of the campaign to create ad from idea_number: type: integer title: Idea Number description: Idea number within the campaign google_account_id: type: string title: Google Account Id description: Google Ads account ID to create the ad in variation: type: integer title: Variation description: Variation number (0 for original, 1+ for variations) default: 0 type: object required: - campaign_id - idea_number - google_account_id title: GoogleCreateAdFromCampaignRequest GoogleLaunchAdCampaignRequest: properties: platform_type: type: string title: Platform Type description: 'Type of ad platform: google_display or google_search' ad_id: type: string title: Ad Id description: Normalized platform ad ID to launch google_account_id: anyOf: - type: string - type: 'null' title: Google Account Id description: Legacy Google Ads account ID; launches use the active account bid_only: anyOf: - type: boolean - type: 'null' title: Bid Only description: Whether to use 'Observation' (True) or 'Targeting' (False) for audiences default: true youtube_logo_image_url: anyOf: - type: string - type: 'null' title: Youtube Logo Image Url description: Optional square logo GCS URL for YouTube/Google Video google_lead_form_config: anyOf: - additionalProperties: true type: object - type: 'null' title: Google Lead Form Config description: Google Lead Form configuration type: object required: - platform_type - ad_id title: GoogleLaunchAdCampaignRequest description: Request model for launching an online ad campaign to Google Ads. GoogleSearchAdRequest: properties: product_description: type: string title: Product Description description: Description of the product or service target_audience: type: string title: Target Audience description: Target audience description company_profile_id: type: string format: uuid title: Company Profile Id description: Company profile ID (required) campaign_goals: anyOf: - items: type: string type: array - type: 'null' title: Campaign Goals description: List of campaign goals key_selling_points: type: string title: Key Selling Points description: Key selling points default: '' num_ads: type: integer maximum: 10.0 minimum: 1.0 title: Num Ads description: Number of ad variations to generate default: 3 bid_strategy: type: string title: Bid Strategy description: Bidding strategy default: maximize_conversions budget_range: type: string title: Budget Range description: Budget range (low, medium, high, custom) default: medium country: anyOf: - type: string - type: 'null' title: Country description: Target country state_province: anyOf: - type: string - type: 'null' title: State Province description: Target state/province city: anyOf: - type: string - type: 'null' title: City description: Target city locations: anyOf: - items: $ref: '#/components/schemas/LocationItem' type: array - type: 'null' title: Locations description: List of locations to target (countries/regions/states/cities/postal codes/proximities). This does not split budget per location; all locations share the campaign budget. reference_images: anyOf: - items: type: string type: array maxItems: 3 - type: 'null' title: Reference Images description: List of reference image base64 data URLs (max 3) lead_form_enabled: anyOf: - type: boolean - type: 'null' title: Lead Form Enabled description: Whether to use lead form extension where supported default: false max_cpc: anyOf: - type: number minimum: 0.01 - type: 'null' title: Max Cpc description: Maximum cost per click in dollars (e.g., 1.50 for $1.50). Required when bid_strategy is 'MANUAL_CPC' experiment_package_id: anyOf: - type: string maxLength: 64 - type: 'null' title: Experiment Package Id description: Test package id; created campaigns are stamped with this linkage launch_strategy_mode: anyOf: - type: string pattern: ^(test_learn_pilot|direct_campaign)$ - type: 'null' title: Launch Strategy Mode description: test_learn_pilot or direct_campaign dayparting_enabled: anyOf: - type: boolean - type: 'null' title: Dayparting Enabled description: Whether dayparting/ad scheduling is enabled for this campaign default: false dayparting_config: anyOf: - additionalProperties: true type: object - type: 'null' title: Dayparting Config description: Dayparting configuration including schedule, timezone, and platform-specific settings google_lead_form_config: anyOf: - additionalProperties: true type: object - type: 'null' title: Google Lead Form Config description: Google Search Lead Form configuration type: object required: - product_description - target_audience - company_profile_id title: GoogleSearchAdRequest description: Request model for Google Search ads GoogleSyncAdCampaignRequest: properties: platform_type: type: string title: Platform Type description: google_search, google_display, or google_video ad_id: type: string title: Ad Id description: ID of the specific ad to sync google_account_id: anyOf: - type: string - type: 'null' title: Google Account Id description: Google Ads account ID (optional override) force_sync_fields: anyOf: - items: type: string type: array - type: 'null' title: Force Sync Fields description: Optional fields to reconcile remotely even when the local diff is empty. pending_update: anyOf: - additionalProperties: true type: object - type: 'null' title: Pending Update description: Pending Pomo edit payload to apply only after remote sync succeeds. type: object required: - platform_type - ad_id title: GoogleSyncAdCampaignRequest description: Request model for syncing an online ad campaign to Google Ads. GoogleSyncPreviewRequest: properties: platform_type: type: string title: Platform Type description: google_search, google_display, or google_video ad_id: type: string title: Ad Id description: ID of the specific ad to sync google_account_id: anyOf: - type: string - type: 'null' title: Google Account Id description: Google Ads account ID (optional override) force_sync_fields: anyOf: - items: type: string type: array - type: 'null' title: Force Sync Fields description: Optional fields to reconcile remotely even when the local diff is empty. pending_update: anyOf: - additionalProperties: true type: object - type: 'null' title: Pending Update description: Pending Pomo edit payload to preview without saving it. type: object required: - platform_type - ad_id title: GoogleSyncPreviewRequest description: Request model for previewing a sync and billing impact. GoogleVideoAdRequest: properties: product_description: type: string title: Product Description description: Description of the product or service target_audience: type: string title: Target Audience description: Target audience description campaign_goals: anyOf: - items: type: string type: array - type: 'null' title: Campaign Goals key_selling_points: type: string title: Key Selling Points default: '' num_ads: type: integer maximum: 10.0 minimum: 1.0 title: Num Ads default: 3 video_length: type: integer maximum: 10.0 minimum: 10.0 title: Video Length description: Video duration is fixed at 10 seconds default: 10 bid_strategy: type: string title: Bid Strategy default: automatic budget_range: type: string title: Budget Range default: medium country: anyOf: - type: string - type: 'null' title: Country state_province: anyOf: - type: string - type: 'null' title: State Province city: anyOf: - type: string - type: 'null' title: City locations: anyOf: - items: additionalProperties: true type: object type: array - type: 'null' title: Locations reference_images: anyOf: - items: type: string type: array maxItems: 3 - type: 'null' title: Reference Images type: object required: - product_description - target_audience title: GoogleVideoAdRequest HTTPValidationError: properties: detail: items: $ref: '#/components/schemas/ValidationError' type: array title: Detail type: object title: HTTPValidationError HtmlPreviewResponse: properties: html: type: string title: Html type: object required: - html title: HtmlPreviewResponse HubSpotAuthResponse: properties: auth_url: type: string title: Auth Url type: object required: - auth_url title: HubSpotAuthResponse description: Response model for the HubSpot auth URL. HubSpotHealthResponse: properties: status: type: string title: Status type: object required: - status title: HubSpotHealthResponse description: Response model for the HubSpot connection health status. HubSpotStatusResponse: properties: connected: type: boolean title: Connected account_id: anyOf: - type: string - type: 'null' title: Account Id account_name: anyOf: - type: string - type: 'null' title: Account Name portal_id: anyOf: - type: string - type: 'null' title: Portal Id type: object required: - connected title: HubSpotStatusResponse description: Response model for the HubSpot connection status. ImageGenerationResponse: properties: image_urls: items: type: string type: array title: Image Urls prompt: type: string title: Prompt enhanced_prompt: anyOf: - type: string - type: 'null' title: Enhanced Prompt ai_policy_eval: anyOf: - additionalProperties: true type: object - type: 'null' title: Ai Policy Eval created_at: anyOf: - type: string - type: 'null' title: Created At type: object required: - image_urls - prompt - created_at title: ImageGenerationResponse description: Response model for generated images ImageSelectionRequest: properties: campaign_id: anyOf: - type: string format: uuid - type: string title: Campaign Id description: Campaign ID (can be UUID database ID or string campaign_id) campaign_type: type: string title: Campaign Type description: Type of campaign (e.g., google_display, meta_feed, social_post) selected_image_url: type: string title: Selected Image Url description: URL of the selected image variation selection_mode: type: string enum: - replace - add - add_and_set_primary title: Selection Mode description: 'How to apply the selected image: replace current, add to list, or add and set as primary' default: replace variation_index: anyOf: - type: integer - type: 'null' title: Variation Index description: Index of the selected variation (0-based) total_variations: anyOf: - type: integer - type: 'null' title: Total Variations description: Total number of variations that were presented selection_metadata: anyOf: - additionalProperties: true type: object - type: 'null' title: Selection Metadata description: Additional metadata about the selection ad_id: anyOf: - type: string - type: 'null' title: Ad Id description: Specific ad ID for ad campaigns (when updating a specific ad variation) type: object required: - campaign_id - campaign_type - selected_image_url title: ImageSelectionRequest description: Request schema for selecting an image variation for a campaign ImageSelectionResponse: properties: success: type: boolean title: Success campaign_id: anyOf: - type: string format: uuid - type: string title: Campaign Id campaign_type: type: string title: Campaign Type selected_image_url: type: string title: Selected Image Url message: type: string title: Message type: object required: - success - campaign_id - campaign_type - selected_image_url - message title: ImageSelectionResponse description: Response schema for image selection ImageVariation: properties: url: type: string title: Url index: type: integer title: Index metadata: anyOf: - additionalProperties: true type: object - type: 'null' title: Metadata type: object required: - url - index title: ImageVariation description: Information about an image variation InfluencerCampaignActiveResponse: properties: campaign: anyOf: - $ref: '#/components/schemas/InfluencerCampaignPlanResponse' - type: 'null' campaigns: items: $ref: '#/components/schemas/InfluencerCampaignPlanResponse' type: array title: Campaigns saved_curated_lists: items: $ref: '#/components/schemas/InfluencerCampaignCuratedListResponse' type: array title: Saved Curated Lists type: object title: InfluencerCampaignActiveResponse InfluencerCampaignArchiveResponse: properties: archived: type: boolean title: Archived campaign: $ref: '#/components/schemas/InfluencerCampaignPlanResponse' type: object required: - archived - campaign title: InfluencerCampaignArchiveResponse InfluencerCampaignCollectionAddCreatorsRequest: properties: creator_ids: items: type: string format: uuid type: array maxItems: 50 minItems: 1 title: Creator Ids refresh_ai: type: boolean title: Refresh Ai default: false type: object required: - creator_ids title: InfluencerCampaignCollectionAddCreatorsRequest InfluencerCampaignCollectionAddCreatorsResponse: properties: campaign: $ref: '#/components/schemas/InfluencerCampaignPlanResponse' added: type: integer title: Added unchanged: type: integer title: Unchanged source_creator_list_id: type: string title: Source Creator List Id plan_updated: type: boolean title: Plan Updated updated_plan_sections: items: type: string type: array title: Updated Plan Sections type: object required: - campaign - added - unchanged - source_creator_list_id - plan_updated title: InfluencerCampaignCollectionAddCreatorsResponse InfluencerCampaignCollectionUpdateRequest: properties: name: anyOf: - type: string maxLength: 255 minLength: 1 - type: 'null' title: Name description: anyOf: - type: string maxLength: 4000 - type: 'null' title: Description is_pinned: anyOf: - type: boolean - type: 'null' title: Is Pinned type: object title: InfluencerCampaignCollectionUpdateRequest InfluencerCampaignCreatorResponse: properties: id: type: string title: Id curated_list_id: type: string title: Curated List Id position: type: integer title: Position creator_id: anyOf: - type: string - type: 'null' title: Creator Id creator_account_id: anyOf: - type: string - type: 'null' title: Creator Account Id company_profile_creator_id: anyOf: - type: string - type: 'null' title: Company Profile Creator Id source_list_membership_id: anyOf: - type: string - type: 'null' title: Source List Membership Id role: type: string title: Role slate_status: type: string title: Slate Status target_market: anyOf: - type: string - type: 'null' title: Target Market platform: type: string title: Platform inventory_account_id: anyOf: - type: string - type: 'null' title: Inventory Account Id platform_account_id: anyOf: - type: string - type: 'null' title: Platform Account Id handle: anyOf: - type: string - type: 'null' title: Handle display_name: anyOf: - type: string - type: 'null' title: Display Name profile_url: anyOf: - type: string - type: 'null' title: Profile Url avatar_url: anyOf: - type: string - type: 'null' title: Avatar Url follower_count: anyOf: - type: integer - type: 'null' title: Follower Count avg_views: anyOf: - type: number - type: 'null' title: Avg Views engagement_rate: anyOf: - type: number - type: 'null' title: Engagement Rate estimated_price_min: anyOf: - type: number - type: 'null' title: Estimated Price Min estimated_price_max: anyOf: - type: number - type: 'null' title: Estimated Price Max reply_risk: anyOf: - type: string - type: 'null' title: Reply Risk fit_summary: anyOf: - type: string - type: 'null' title: Fit Summary phase: anyOf: - type: string - type: 'null' title: Phase contact_day_offset: anyOf: - type: integer - type: 'null' title: Contact Day Offset post_day_offset: anyOf: - type: integer - type: 'null' title: Post Day Offset budget_weight: anyOf: - type: number - type: 'null' title: Budget Weight allocated_budget_min: anyOf: - type: number - type: 'null' title: Allocated Budget Min allocated_budget_max: anyOf: - type: number - type: 'null' title: Allocated Budget Max budget_fit_status: anyOf: - type: string - type: 'null' title: Budget Fit Status deliverables: items: additionalProperties: true type: object type: array title: Deliverables brand_fit_score: anyOf: - type: number - type: 'null' title: Brand Fit Score brand_fit_reasons: items: type: string type: array title: Brand Fit Reasons selection_rationale: anyOf: - type: string - type: 'null' title: Selection Rationale orchestra_slot_key: anyOf: - type: string - type: 'null' title: Orchestra Slot Key canonical_creator: anyOf: - additionalProperties: true type: object - type: 'null' title: Canonical Creator accounts: items: additionalProperties: true type: object type: array title: Accounts contacts: additionalProperties: true type: object title: Contacts metrics: additionalProperties: true type: object title: Metrics source_payload: additionalProperties: true type: object title: Source Payload created_at: anyOf: - type: string - type: 'null' title: Created At updated_at: anyOf: - type: string - type: 'null' title: Updated At type: object required: - id - curated_list_id - position - role - slate_status - platform title: InfluencerCampaignCreatorResponse InfluencerCampaignCuratedListMutationResponse: properties: curated_list: $ref: '#/components/schemas/InfluencerCampaignCuratedListResponse' type: object required: - curated_list title: InfluencerCampaignCuratedListMutationResponse InfluencerCampaignCuratedListResponse: properties: id: type: string title: Id campaign_id: type: string title: Campaign Id title: type: string title: Title persona: type: string title: Persona query: type: string title: Query rationale: anyOf: - type: string - type: 'null' title: Rationale position: type: integer title: Position weight: type: number title: Weight total_creator_count: type: integer title: Total Creator Count platforms: items: type: string type: array title: Platforms target_markets: items: additionalProperties: true type: object type: array title: Target Markets role_mix: items: additionalProperties: true type: object type: array title: Role Mix size_mix: items: additionalProperties: true type: object type: array title: Size Mix orchestra_timeline: items: additionalProperties: true type: object type: array title: Orchestra Timeline budget_allocation: additionalProperties: true type: object title: Budget Allocation deliverables: additionalProperties: true type: object title: Deliverables brand_context_snapshot: additionalProperties: true type: object title: Brand Context Snapshot planning_assumptions: additionalProperties: true type: object title: Planning Assumptions leadership_report: additionalProperties: true type: object title: Leadership Report generation_version: type: integer title: Generation Version source_creator_list_id: anyOf: - type: string - type: 'null' title: Source Creator List Id planning_status: type: string title: Planning Status default: ready roster_revision: type: integer title: Roster Revision default: 1 roster_hash: anyOf: - type: string - type: 'null' title: Roster Hash is_saved: type: boolean title: Is Saved saved_at: anyOf: - type: string - type: 'null' title: Saved At saved_by_user_id: anyOf: - type: string - type: 'null' title: Saved By User Id snapshot: additionalProperties: true type: object title: Snapshot creators: items: $ref: '#/components/schemas/InfluencerCampaignCreatorResponse' type: array title: Creators created_at: anyOf: - type: string - type: 'null' title: Created At updated_at: anyOf: - type: string - type: 'null' title: Updated At type: object required: - id - campaign_id - title - persona - query - position - weight - total_creator_count - generation_version - is_saved title: InfluencerCampaignCuratedListResponse InfluencerCampaignCuratedListSaveResponse: properties: curated_list: $ref: '#/components/schemas/InfluencerCampaignCuratedListResponse' type: object required: - curated_list title: InfluencerCampaignCuratedListSaveResponse InfluencerCampaignCuratedListSummaryResponse: properties: id: type: string title: Id campaign_id: type: string title: Campaign Id title: type: string title: Title persona: type: string title: Persona position: type: integer title: Position total_creator_count: type: integer title: Total Creator Count platforms: items: type: string type: array title: Platforms generation_version: type: integer title: Generation Version source_creator_list_id: anyOf: - type: string - type: 'null' title: Source Creator List Id planning_status: type: string title: Planning Status default: ready roster_revision: type: integer title: Roster Revision default: 1 roster_hash: anyOf: - type: string - type: 'null' title: Roster Hash is_saved: type: boolean title: Is Saved saved_at: anyOf: - type: string - type: 'null' title: Saved At created_at: anyOf: - type: string - type: 'null' title: Created At updated_at: anyOf: - type: string - type: 'null' title: Updated At type: object required: - id - campaign_id - title - persona - position - total_creator_count - generation_version - is_saved title: InfluencerCampaignCuratedListSummaryResponse InfluencerCampaignDeleteResponse: properties: deleted: type: boolean title: Deleted campaign: $ref: '#/components/schemas/InfluencerCampaignPlanResponse' type: object required: - deleted - campaign title: InfluencerCampaignDeleteResponse InfluencerCampaignFromCreatorListRequest: properties: objective: anyOf: - type: string enum: - distribution - brand_recall - sales - launch - category_launch - type: 'null' title: Objective default: launch objectives: items: type: string enum: - distribution - brand_recall - sales - launch - category_launch type: array maxItems: 5 title: Objectives campaign_name: anyOf: - type: string maxLength: 180 - type: 'null' title: Campaign Name campaign_goal: anyOf: - type: string maxLength: 700 - type: 'null' title: Campaign Goal budget_min: anyOf: - type: number minimum: 0.0 - type: 'null' title: Budget Min budget_max: anyOf: - type: number minimum: 0.0 - type: 'null' title: Budget Max budget_currency: type: string enum: - USD - INR title: Budget Currency default: USD budget_usd: anyOf: - type: number minimum: 0.0 - type: 'null' title: Budget Usd target_markets: anyOf: - items: $ref: '#/components/schemas/InfluencerCampaignTargetMarket' type: array maxItems: 8 - type: 'null' title: Target Markets platforms: anyOf: - items: type: string enum: - INST - YT - TT type: array maxItems: 3 - type: 'null' title: Platforms posting_time_mode: type: string enum: - pomo_optimizes - manual title: Posting Time Mode default: pomo_optimizes posting_time: anyOf: - type: string maxLength: 120 - type: 'null' title: Posting Time launch_start: anyOf: - type: string format: date - type: 'null' title: Launch Start launch_end: anyOf: - type: string format: date - type: 'null' title: Launch End refresh_ai: type: boolean title: Refresh Ai default: true settings: additionalProperties: true type: object title: Settings type: object title: InfluencerCampaignFromCreatorListRequest InfluencerCampaignPlanResponse: properties: id: type: string title: Id organization_id: type: string title: Organization Id company_profile_id: type: string title: Company Profile Id created_by_user_id: anyOf: - type: string - type: 'null' title: Created By User Id updated_by_user_id: anyOf: - type: string - type: 'null' title: Updated By User Id objective: type: string title: Objective objectives: items: type: string type: array title: Objectives budget_min: anyOf: - type: number - type: 'null' title: Budget Min budget_max: anyOf: - type: number - type: 'null' title: Budget Max budget_currency: type: string title: Budget Currency default: USD budget_usd: anyOf: - type: number - type: 'null' title: Budget Usd target_markets: items: additionalProperties: true type: object type: array title: Target Markets platforms: items: type: string type: array title: Platforms posting_time_mode: type: string title: Posting Time Mode posting_time: anyOf: - type: string - type: 'null' title: Posting Time launch_start: anyOf: - type: string - type: 'null' title: Launch Start launch_end: anyOf: - type: string - type: 'null' title: Launch End status: type: string title: Status generation_version: type: integer title: Generation Version plan_origin: type: string title: Plan Origin default: campaign_workflow source_creator_list_id: anyOf: - type: string - type: 'null' title: Source Creator List Id planning_status: type: string title: Planning Status default: ready roster_revision: type: integer title: Roster Revision default: 1 roster_hash: anyOf: - type: string - type: 'null' title: Roster Hash recommended_budget_usd: anyOf: - type: number - type: 'null' title: Recommended Budget Usd collection_name: anyOf: - type: string - type: 'null' title: Collection Name collection_description: anyOf: - type: string - type: 'null' title: Collection Description is_pinned: type: boolean title: Is Pinned default: false pinned_by_user_id: anyOf: - type: string - type: 'null' title: Pinned By User Id pinned_at: anyOf: - type: string - type: 'null' title: Pinned At archived_by_user_id: anyOf: - type: string - type: 'null' title: Archived By User Id archived_at: anyOf: - type: string - type: 'null' title: Archived At deleted_by_user_id: anyOf: - type: string - type: 'null' title: Deleted By User Id deleted_at: anyOf: - type: string - type: 'null' title: Deleted At strategy_summary: additionalProperties: true type: object title: Strategy Summary settings: additionalProperties: true type: object title: Settings curated_lists: items: $ref: '#/components/schemas/InfluencerCampaignCuratedListResponse' type: array title: Curated Lists created_at: anyOf: - type: string - type: 'null' title: Created At updated_at: anyOf: - type: string - type: 'null' title: Updated At type: object required: - id - organization_id - company_profile_id - objective - posting_time_mode - status - generation_version title: InfluencerCampaignPlanResponse InfluencerCampaignReplaceCreatorRequest: properties: candidate: additionalProperties: true type: object title: Candidate allow_over_budget: type: boolean title: Allow Over Budget default: false type: object required: - candidate title: InfluencerCampaignReplaceCreatorRequest InfluencerCampaignReplaceCreatorResponse: properties: curated_list: $ref: '#/components/schemas/InfluencerCampaignCuratedListResponse' replaced_creator: $ref: '#/components/schemas/InfluencerCampaignCreatorResponse' budget_warning: anyOf: - type: string - type: 'null' title: Budget Warning type: object required: - curated_list - replaced_creator title: InfluencerCampaignReplaceCreatorResponse InfluencerCampaignReplacementCandidatesRequest: properties: query: type: string maxLength: 500 title: Query default: '' limit: type: integer maximum: 20.0 minimum: 1.0 title: Limit default: 8 creator_type_includes: items: type: string type: array maxItems: 12 title: Creator Type Includes creator_type_excludes: items: type: string type: array maxItems: 12 title: Creator Type Excludes min_followers: anyOf: - type: integer minimum: 0.0 - type: 'null' title: Min Followers max_followers: anyOf: - type: integer minimum: 0.0 - type: 'null' title: Max Followers location_filters: items: type: string type: array maxItems: 12 title: Location Filters type: object title: InfluencerCampaignReplacementCandidatesRequest InfluencerCampaignReplacementCandidatesResponse: properties: current_creator: $ref: '#/components/schemas/InfluencerCampaignCreatorResponse' candidates: items: additionalProperties: true type: object type: array title: Candidates applied_query: type: string title: Applied Query can_override_budget: type: boolean title: Can Override Budget default: false type: object required: - current_creator - applied_query title: InfluencerCampaignReplacementCandidatesResponse InfluencerCampaignReportBusinessInputs: properties: campaign_cost: anyOf: - type: number exclusiveMinimum: 0.0 - type: 'null' title: Campaign Cost selling_price: anyOf: - type: number exclusiveMinimum: 0.0 - type: 'null' title: Selling Price product_cost: anyOf: - type: number minimum: 0.0 - type: 'null' title: Product Cost other_cost_per_sale: anyOf: - type: number minimum: 0.0 - type: 'null' title: Other Cost Per Sale default: 0 profit_target_pct: type: number maximum: 1000.0 minimum: 0.0 title: Profit Target Pct default: 20 confirmed_creator_fees: additionalProperties: type: number type: object maxProperties: 30 title: Confirmed Creator Fees additional_context: anyOf: - type: string maxLength: 4000 - type: 'null' title: Additional Context type: object title: InfluencerCampaignReportBusinessInputs InfluencerCampaignReportUpdateRequest: properties: business_inputs: $ref: '#/components/schemas/InfluencerCampaignReportBusinessInputs' refresh_ai: type: boolean title: Refresh Ai default: true type: object required: - business_inputs title: InfluencerCampaignReportUpdateRequest InfluencerCampaignRoleEdit: properties: role: type: string maxLength: 64 minLength: 1 title: Role label: type: string maxLength: 80 minLength: 1 title: Label budget_share_pct: type: number maximum: 100.0 minimum: 0.0 title: Budget Share Pct contact_day_offset: type: integer maximum: 365.0 minimum: -365.0 title: Contact Day Offset post_day_offset: type: integer maximum: 365.0 minimum: -365.0 title: Post Day Offset type: object required: - role - label - budget_share_pct - contact_day_offset - post_day_offset title: InfluencerCampaignRoleEdit InfluencerCampaignRoleEditsRequest: properties: roles: items: $ref: '#/components/schemas/InfluencerCampaignRoleEdit' type: array maxItems: 8 minItems: 1 title: Roles type: object required: - roles title: InfluencerCampaignRoleEditsRequest InfluencerCampaignSourceListSyncRequest: properties: refresh_ai: type: boolean title: Refresh Ai default: true type: object title: InfluencerCampaignSourceListSyncRequest InfluencerCampaignSummaryPageResponse: properties: campaigns: items: $ref: '#/components/schemas/InfluencerCampaignSummaryResponse' type: array title: Campaigns count: type: integer title: Count limit: type: integer title: Limit offset: type: integer title: Offset has_more: type: boolean title: Has More type: object required: - count - limit - offset - has_more title: InfluencerCampaignSummaryPageResponse InfluencerCampaignSummaryResponse: properties: id: type: string title: Id organization_id: type: string title: Organization Id company_profile_id: type: string title: Company Profile Id objective: type: string title: Objective objectives: items: type: string type: array title: Objectives budget_min: anyOf: - type: number - type: 'null' title: Budget Min budget_max: anyOf: - type: number - type: 'null' title: Budget Max budget_currency: type: string title: Budget Currency default: USD budget_usd: anyOf: - type: number - type: 'null' title: Budget Usd target_markets: items: additionalProperties: true type: object type: array title: Target Markets platforms: items: type: string type: array title: Platforms posting_time_mode: type: string title: Posting Time Mode posting_time: anyOf: - type: string - type: 'null' title: Posting Time launch_start: anyOf: - type: string - type: 'null' title: Launch Start launch_end: anyOf: - type: string - type: 'null' title: Launch End status: type: string title: Status generation_version: type: integer title: Generation Version plan_origin: type: string title: Plan Origin default: campaign_workflow source_creator_list_id: anyOf: - type: string - type: 'null' title: Source Creator List Id planning_status: type: string title: Planning Status default: ready roster_revision: type: integer title: Roster Revision default: 1 roster_hash: anyOf: - type: string - type: 'null' title: Roster Hash recommended_budget_usd: anyOf: - type: number - type: 'null' title: Recommended Budget Usd collection_name: anyOf: - type: string - type: 'null' title: Collection Name collection_description: anyOf: - type: string - type: 'null' title: Collection Description is_pinned: type: boolean title: Is Pinned default: false pinned_by_user_id: anyOf: - type: string - type: 'null' title: Pinned By User Id pinned_at: anyOf: - type: string - type: 'null' title: Pinned At archived_by_user_id: anyOf: - type: string - type: 'null' title: Archived By User Id archived_at: anyOf: - type: string - type: 'null' title: Archived At deleted_by_user_id: anyOf: - type: string - type: 'null' title: Deleted By User Id deleted_at: anyOf: - type: string - type: 'null' title: Deleted At settings: additionalProperties: true type: object title: Settings curated_lists: items: $ref: '#/components/schemas/InfluencerCampaignCuratedListSummaryResponse' type: array title: Curated Lists created_at: anyOf: - type: string - type: 'null' title: Created At updated_at: anyOf: - type: string - type: 'null' title: Updated At type: object required: - id - organization_id - company_profile_id - objective - posting_time_mode - status - generation_version title: InfluencerCampaignSummaryResponse InfluencerCampaignTargetMarket: properties: country_code: type: string maxLength: 16 minLength: 2 title: Country Code country_name: anyOf: - type: string maxLength: 120 - type: 'null' title: Country Name weight: type: integer maximum: 100.0 minimum: 0.0 title: Weight type: object required: - country_code - weight title: InfluencerCampaignTargetMarket InfluencerCampaignUpsertRequest: properties: objective: anyOf: - type: string enum: - distribution - brand_recall - sales - launch - category_launch - type: 'null' title: Objective objectives: items: type: string enum: - distribution - brand_recall - sales - launch - category_launch type: array maxItems: 5 title: Objectives budget_min: anyOf: - type: number minimum: 0.0 - type: 'null' title: Budget Min budget_max: anyOf: - type: number minimum: 1.0 - type: 'null' title: Budget Max budget_currency: type: string enum: - USD - INR title: Budget Currency default: USD budget_usd: anyOf: - type: number minimum: 1.0 - type: 'null' title: Budget Usd target_markets: items: $ref: '#/components/schemas/InfluencerCampaignTargetMarket' type: array maxItems: 8 minItems: 1 title: Target Markets platforms: items: type: string enum: - INST - YT - TT type: array maxItems: 3 minItems: 1 title: Platforms posting_time_mode: type: string enum: - pomo_optimizes - manual title: Posting Time Mode default: pomo_optimizes posting_time: anyOf: - type: string maxLength: 120 - type: 'null' title: Posting Time creator_type_includes: items: type: string enum: - individual - celebrity - brand - publisher - community - unknown type: array maxItems: 6 title: Creator Type Includes creator_type_excludes: items: type: string enum: - individual - celebrity - brand - publisher - community - unknown type: array maxItems: 6 title: Creator Type Excludes launch_start: anyOf: - type: string format: date - type: 'null' title: Launch Start launch_end: anyOf: - type: string format: date - type: 'null' title: Launch End settings: additionalProperties: true type: object title: Settings refresh_cohort: type: boolean title: Refresh Cohort default: true type: object required: - target_markets - platforms title: InfluencerCampaignUpsertRequest InfluencerDeliverablePricingEstimate: properties: deliverable_type: type: string title: Deliverable Type deliverable_label: type: string title: Deliverable Label deliverable_description: type: string title: Deliverable Description pricing_basis: type: string title: Pricing Basis confidence: type: string enum: - low - medium - high title: Confidence expected_views: anyOf: - type: integer minimum: 0.0 - type: 'null' title: Expected Views expected_views_min: anyOf: - type: integer minimum: 0.0 - type: 'null' title: Expected Views Min expected_views_max: anyOf: - type: integer minimum: 0.0 - type: 'null' title: Expected Views Max expected_views_source: anyOf: - type: string enum: - recent_media_direct_views - provider_avg_video_views - avg_interactions_fallback - followers_fallback - type: 'null' title: Expected Views Source expected_views_confidence: anyOf: - type: string enum: - low - medium - high - type: 'null' title: Expected Views Confidence expected_views_basis: anyOf: - type: string - type: 'null' title: Expected Views Basis cpm_min_usd: anyOf: - type: number minimum: 0.0 - type: 'null' title: Cpm Min Usd cpm_max_usd: anyOf: - type: number minimum: 0.0 - type: 'null' title: Cpm Max Usd cpm_suggested_usd: anyOf: - type: number minimum: 0.0 - type: 'null' title: Cpm Suggested Usd canonical_range: $ref: '#/components/schemas/InfluencerPricingRange' local_range: anyOf: - $ref: '#/components/schemas/InfluencerPricingRange' - type: 'null' display_ranges: items: $ref: '#/components/schemas/InfluencerPricingRange' type: array title: Display Ranges factors: items: type: string type: array title: Factors assumptions: items: type: string type: array title: Assumptions missing_data: items: type: string type: array title: Missing Data caveats: items: type: string type: array title: Caveats type: object required: - deliverable_type - deliverable_label - deliverable_description - pricing_basis - confidence - canonical_range - display_ranges title: InfluencerDeliverablePricingEstimate description: Structured price estimate for one deliverable type. InfluencerInventoryBudgetMatch: properties: matched: type: boolean title: Matched budget_type: type: string title: Budget Type min_budget_usd: anyOf: - type: number - type: 'null' title: Min Budget Usd max_budget_usd: anyOf: - type: number - type: 'null' title: Max Budget Usd matched_deliverable: type: string title: Matched Deliverable suggested_amount: type: number title: Suggested Amount type: object required: - matched - budget_type - matched_deliverable - suggested_amount title: InfluencerInventoryBudgetMatch InfluencerInventoryCreatorIngestRequest: properties: inventory_account_id: anyOf: - type: string maxLength: 255 - type: 'null' title: Inventory Account Id platform: type: string enum: - INST - YT - TT - instagram - youtube - tiktok title: Platform platform_account_id: anyOf: - type: string maxLength: 255 - type: 'null' title: Platform Account Id handle: anyOf: - type: string maxLength: 255 - type: 'null' title: Handle display_name: anyOf: - type: string maxLength: 255 - type: 'null' title: Display Name profile_url: anyOf: - type: string maxLength: 1000 - type: 'null' title: Profile Url avatar_url: anyOf: - type: string maxLength: 2000 - type: 'null' title: Avatar Url snippet: anyOf: - type: string maxLength: 4000 - type: 'null' title: Snippet creator_type: anyOf: - type: string maxLength: 80 - type: 'null' title: Creator Type primary_niche: anyOf: - type: string maxLength: 255 - type: 'null' title: Primary Niche profile_description: anyOf: - type: string maxLength: 4000 - type: 'null' title: Profile Description followers: anyOf: - type: integer minimum: 0.0 - type: 'null' title: Followers avg_er: anyOf: - type: number minimum: 0.0 - type: 'null' title: Avg Er verified: anyOf: - type: boolean - type: 'null' title: Verified account_country: anyOf: - type: string maxLength: 120 - type: 'null' title: Account Country audience_top_country_code: anyOf: - type: string maxLength: 16 - type: 'null' title: Audience Top Country Code quality_score: anyOf: - type: number - type: 'null' title: Quality Score pct_fake_followers: anyOf: - type: number - type: 'null' title: Pct Fake Followers provider_profile: additionalProperties: true type: object title: Provider Profile discovery_snapshot: anyOf: - $ref: '#/components/schemas/InfluencerInventorySearchResult-Input' - type: 'null' bio_summary: anyOf: - type: string maxLength: 220 - type: 'null' title: Bio Summary public_contacts: items: $ref: '#/components/schemas/InfluencerPublicContact' type: array title: Public Contacts suggested_outreach_messages: anyOf: - $ref: '#/components/schemas/InfluencerSuggestedOutreachMessages' - type: 'null' suggested_dm_message: anyOf: - type: string maxLength: 500 - type: 'null' title: Suggested Dm Message type: object required: - platform title: InfluencerInventoryCreatorIngestRequest InfluencerInventoryCuratedList: properties: id: type: string title: Id title: type: string title: Title persona: type: string title: Persona query: type: string title: Query rationale: anyOf: - type: string - type: 'null' title: Rationale brand_fit_summary: anyOf: - type: string - type: 'null' title: Brand Fit Summary brand_fit_points: items: type: string type: array maxItems: 3 title: Brand Fit Points platforms: items: type: string enum: - INST - YT - TT type: array title: Platforms total_returned: type: integer title: Total Returned results: items: $ref: '#/components/schemas/InfluencerInventorySearchResult-Output' type: array title: Results debug: additionalProperties: true type: object title: Debug type: object required: - id - title - persona - query - platforms - total_returned - results title: InfluencerInventoryCuratedList InfluencerInventoryCuratedListsRequest: properties: platforms: items: type: string enum: - INST - YT - TT type: array maxItems: 3 minItems: 1 title: Platforms list_count: type: integer maximum: 5.0 minimum: 4.0 title: List Count default: 5 creators_per_list: anyOf: - type: integer maximum: 50.0 minimum: 1.0 - type: 'null' title: Creators Per List force_refresh: type: boolean title: Force Refresh default: false list_index: anyOf: - type: integer maximum: 4.0 minimum: 0.0 - type: 'null' title: List Index creator_type_includes: items: type: string type: array maxItems: 6 title: Creator Type Includes creator_type_excludes: items: type: string type: array maxItems: 6 title: Creator Type Excludes type: object title: InfluencerInventoryCuratedListsRequest InfluencerInventoryCuratedListsResponse: properties: lists: items: $ref: '#/components/schemas/InfluencerInventoryCuratedList' type: array title: Lists debug: additionalProperties: true type: object title: Debug type: object required: - lists title: InfluencerInventoryCuratedListsResponse InfluencerInventoryQueryFilterAnalysisRequest: properties: query: type: string maxLength: 500 minLength: 2 title: Query type: object required: - query title: InfluencerInventoryQueryFilterAnalysisRequest InfluencerInventoryQueryFilterAnalysisResponse: properties: min_followers: anyOf: - type: integer - type: 'null' title: Min Followers max_followers: anyOf: - type: integer - type: 'null' title: Max Followers follower_size_label: anyOf: - type: string - type: 'null' title: Follower Size Label location_filters: items: type: string type: array title: Location Filters creator_type_includes: items: type: string type: array title: Creator Type Includes creator_type_excludes: items: type: string type: array title: Creator Type Excludes matched_signals: items: type: string type: array title: Matched Signals source: type: string title: Source default: fallback type: object title: InfluencerInventoryQueryFilterAnalysisResponse InfluencerInventorySearchRequest: properties: query: type: string maxLength: 500 minLength: 2 title: Query limit: type: integer maximum: 50.0 minimum: 1.0 title: Limit default: 20 query_type: type: string enum: - hybrid - ann - FULL_TEXT title: Query Type default: hybrid platforms: items: type: string enum: - INST - YT - TT type: array title: Platforms creator_type: anyOf: - type: string maxLength: 80 - type: 'null' title: Creator Type creator_type_includes: items: type: string type: array maxItems: 6 title: Creator Type Includes creator_type_excludes: items: type: string type: array maxItems: 6 title: Creator Type Excludes min_followers: anyOf: - type: integer minimum: 0.0 - type: 'null' title: Min Followers max_followers: anyOf: - type: integer minimum: 0.0 - type: 'null' title: Max Followers location_filters: items: type: string type: array maxItems: 8 title: Location Filters type: object required: - query title: InfluencerInventorySearchRequest InfluencerInventorySearchResponse: properties: query: type: string title: Query query_type: type: string title: Query Type index_name: type: string title: Index Name total_returned: type: integer title: Total Returned results: items: $ref: '#/components/schemas/InfluencerInventorySearchResult-Output' type: array title: Results debug: additionalProperties: true type: object title: Debug type: object required: - query - query_type - index_name - total_returned - results title: InfluencerInventorySearchResponse InfluencerInventorySearchResult-Input: properties: vector_record_id: anyOf: - type: string - type: 'null' title: Vector Record Id inventory_account_id: anyOf: - type: string - type: 'null' title: Inventory Account Id platform: anyOf: - type: string - type: 'null' title: Platform platform_account_id: anyOf: - type: string - type: 'null' title: Platform Account Id handle: anyOf: - type: string - type: 'null' title: Handle display_name: anyOf: - type: string - type: 'null' title: Display Name profile_url: anyOf: - type: string - type: 'null' title: Profile Url avatar_url: anyOf: - type: string - type: 'null' title: Avatar Url document_type: anyOf: - type: string - type: 'null' title: Document Type document_version: anyOf: - type: string - type: 'null' title: Document Version score: anyOf: - type: number - type: 'null' title: Score snippet: anyOf: - type: string - type: 'null' title: Snippet chunk_text: anyOf: - type: string - type: 'null' title: Chunk Text creator_type: anyOf: - type: string - type: 'null' title: Creator Type primary_niche: anyOf: - type: string - type: 'null' title: Primary Niche profile_description: anyOf: - type: string - type: 'null' title: Profile Description secondary_niches: items: type: string type: array title: Secondary Niches keywords: items: type: string type: array title: Keywords industry_verticals: items: type: string type: array title: Industry Verticals brand_fit_categories: items: type: string type: array title: Brand Fit Categories content_pillars: items: additionalProperties: true type: object type: array title: Content Pillars collaboration_ideas: items: type: string type: array title: Collaboration Ideas risk_flags: items: additionalProperties: true type: object type: array title: Risk Flags pricing_estimates: items: additionalProperties: true type: object type: array title: Pricing Estimates budget_match: anyOf: - $ref: '#/components/schemas/InfluencerInventoryBudgetMatch' - type: 'null' provider_profile: additionalProperties: true type: object title: Provider Profile followers: anyOf: - type: integer - type: 'null' title: Followers avg_er: anyOf: - type: number - type: 'null' title: Avg Er verified: anyOf: - type: boolean - type: 'null' title: Verified account_country: anyOf: - type: string - type: 'null' title: Account Country audience_top_country_code: anyOf: - type: string - type: 'null' title: Audience Top Country Code quality_score: anyOf: - type: number - type: 'null' title: Quality Score pct_fake_followers: anyOf: - type: number - type: 'null' title: Pct Fake Followers bio_summary: anyOf: - type: string maxLength: 220 - type: 'null' title: Bio Summary public_contacts: items: $ref: '#/components/schemas/InfluencerPublicContact' type: array title: Public Contacts suggested_outreach_messages: anyOf: - $ref: '#/components/schemas/InfluencerSuggestedOutreachMessages' - type: 'null' type: object title: InfluencerInventorySearchResult InfluencerInventorySearchResult-Output: properties: vector_record_id: anyOf: - type: string - type: 'null' title: Vector Record Id inventory_account_id: anyOf: - type: string - type: 'null' title: Inventory Account Id platform: anyOf: - type: string - type: 'null' title: Platform platform_account_id: anyOf: - type: string - type: 'null' title: Platform Account Id handle: anyOf: - type: string - type: 'null' title: Handle display_name: anyOf: - type: string - type: 'null' title: Display Name profile_url: anyOf: - type: string - type: 'null' title: Profile Url avatar_url: anyOf: - type: string - type: 'null' title: Avatar Url document_type: anyOf: - type: string - type: 'null' title: Document Type document_version: anyOf: - type: string - type: 'null' title: Document Version score: anyOf: - type: number - type: 'null' title: Score snippet: anyOf: - type: string - type: 'null' title: Snippet chunk_text: anyOf: - type: string - type: 'null' title: Chunk Text creator_type: anyOf: - type: string - type: 'null' title: Creator Type primary_niche: anyOf: - type: string - type: 'null' title: Primary Niche profile_description: anyOf: - type: string - type: 'null' title: Profile Description secondary_niches: items: type: string type: array title: Secondary Niches keywords: items: type: string type: array title: Keywords industry_verticals: items: type: string type: array title: Industry Verticals brand_fit_categories: items: type: string type: array title: Brand Fit Categories content_pillars: items: additionalProperties: true type: object type: array title: Content Pillars collaboration_ideas: items: type: string type: array title: Collaboration Ideas risk_flags: items: additionalProperties: true type: object type: array title: Risk Flags pricing_estimates: items: additionalProperties: true type: object type: array title: Pricing Estimates budget_match: anyOf: - $ref: '#/components/schemas/InfluencerInventoryBudgetMatch' - type: 'null' provider_profile: additionalProperties: true type: object title: Provider Profile followers: anyOf: - type: integer - type: 'null' title: Followers avg_er: anyOf: - type: number - type: 'null' title: Avg Er verified: anyOf: - type: boolean - type: 'null' title: Verified account_country: anyOf: - type: string - type: 'null' title: Account Country audience_top_country_code: anyOf: - type: string - type: 'null' title: Audience Top Country Code quality_score: anyOf: - type: number - type: 'null' title: Quality Score pct_fake_followers: anyOf: - type: number - type: 'null' title: Pct Fake Followers bio_summary: anyOf: - type: string maxLength: 220 - type: 'null' title: Bio Summary public_contacts: items: $ref: '#/components/schemas/InfluencerPublicContact' type: array title: Public Contacts suggested_outreach_messages: anyOf: - $ref: '#/components/schemas/InfluencerSuggestedOutreachMessages' - type: 'null' type: object title: InfluencerInventorySearchResult InfluencerPricingEstimateRequest: properties: creator_id: anyOf: - type: string maxLength: 255 - type: 'null' title: Creator Id name: type: string maxLength: 255 minLength: 1 title: Name handle: anyOf: - type: string maxLength: 255 - type: 'null' title: Handle platform: type: string enum: - tiktok - instagram - youtube - unknown title: Platform default: unknown source: anyOf: - type: string maxLength: 120 - type: 'null' title: Source category: anyOf: - type: string maxLength: 255 - type: 'null' title: Category bio: anyOf: - type: string maxLength: 4000 - type: 'null' title: Bio audience: anyOf: - type: string maxLength: 2000 - type: 'null' title: Audience followers: anyOf: - type: string maxLength: 120 - type: 'null' title: Followers followers_value: anyOf: - type: integer minimum: 0.0 - type: 'null' title: Followers Value engagement: anyOf: - type: string maxLength: 255 - type: 'null' title: Engagement engagement_rate: anyOf: - type: string maxLength: 120 - type: 'null' title: Engagement Rate likes_value: anyOf: - type: integer minimum: 0.0 - type: 'null' title: Likes Value videos_value: anyOf: - type: integer minimum: 0.0 - type: 'null' title: Videos Value views_value: anyOf: - type: integer minimum: 0.0 - type: 'null' title: Views Value avg_video_views_value: anyOf: - type: integer minimum: 0.0 - type: 'null' title: Avg Video Views Value avg_interactions_value: anyOf: - type: integer minimum: 0.0 - type: 'null' title: Avg Interactions Value recent_media_view_counts: anyOf: - items: type: integer type: array - type: 'null' title: Recent Media View Counts verified: anyOf: - type: boolean - type: 'null' title: Verified private_account: anyOf: - type: boolean - type: 'null' title: Private Account location_label: anyOf: - type: string maxLength: 255 - type: 'null' title: Location Label country_code: anyOf: - type: string maxLength: 2 - type: 'null' title: Country Code country_name: anyOf: - type: string maxLength: 120 - type: 'null' title: Country Name subdivision_code: anyOf: - type: string maxLength: 24 - type: 'null' title: Subdivision Code subdivision_name: anyOf: - type: string maxLength: 120 - type: 'null' title: Subdivision Name type: object required: - name title: InfluencerPricingEstimateRequest description: Creator profile snapshot used to estimate a collaboration price range. InfluencerPricingEstimateResponse: properties: market_country_code: anyOf: - type: string - type: 'null' title: Market Country Code market_country_name: anyOf: - type: string - type: 'null' title: Market Country Name estimates: items: $ref: '#/components/schemas/InfluencerDeliverablePricingEstimate' type: array title: Estimates type: object required: - estimates title: InfluencerPricingEstimateResponse description: Structured influencer price estimates grouped by deliverable type. InfluencerPricingRange: properties: currency: type: string maxLength: 3 minLength: 3 title: Currency min_amount: type: number minimum: 0.0 title: Min Amount max_amount: type: number minimum: 0.0 title: Max Amount suggested_amount: type: number minimum: 0.0 title: Suggested Amount label: type: string title: Label is_local: type: boolean title: Is Local default: false exchange_rate_per_usd: anyOf: - type: number exclusiveMinimum: 0.0 - type: 'null' title: Exchange Rate Per Usd type: object required: - currency - min_amount - max_amount - suggested_amount - label title: InfluencerPricingRange description: Price range in one display currency. InfluencerPublicContact: properties: type: type: string enum: - email - phone - social - messaging - link_hub - website - contact_form - booking - address - company - other title: Type purpose: type: string enum: - creator - business - management - agency - press - general title: Purpose label: type: string maxLength: 120 minLength: 1 title: Label value: type: string maxLength: 2000 minLength: 1 title: Value type: object required: - type - purpose - label - value title: InfluencerPublicContact InfluencerRelatedAccountsDiscoveryInput: properties: profile_url: type: string maxLength: 1000 minLength: 1 title: Profile Url type: object required: - profile_url title: InfluencerRelatedAccountsDiscoveryInput InfluencerRelatedAccountsDiscoveryRequest: properties: result: $ref: '#/components/schemas/InfluencerRelatedAccountsDiscoveryInput' type: object required: - result title: InfluencerRelatedAccountsDiscoveryRequest InfluencerRelatedAccountsDiscoveryResponse: properties: profile_url: type: string title: Profile Url public_contacts: items: $ref: '#/components/schemas/InfluencerPublicContact' type: array title: Public Contacts contacts_json: additionalProperties: items: type: string type: array type: object title: Contacts Json debug: additionalProperties: true type: object title: Debug type: object required: - profile_url title: InfluencerRelatedAccountsDiscoveryResponse InfluencerSuggestedEmailMessage: properties: subject: type: string maxLength: 160 minLength: 1 title: Subject message: type: string maxLength: 800 minLength: 1 title: Message type: object required: - subject - message title: InfluencerSuggestedEmailMessage InfluencerSuggestedOutreachMessages: properties: email: $ref: '#/components/schemas/InfluencerSuggestedEmailMessage' platform_dm: $ref: '#/components/schemas/InfluencerSuggestedPlatformDmMessage' type: object required: - email - platform_dm title: InfluencerSuggestedOutreachMessages InfluencerSuggestedPlatformDmMessage: properties: message: type: string maxLength: 500 minLength: 1 title: Message type: object required: - message title: InfluencerSuggestedPlatformDmMessage InfluencerWebDiscoveryFiltersRequest: properties: platforms: items: type: string enum: - INST - YT - TT type: array maxItems: 3 minItems: 1 title: Platforms account_locations: items: type: string maxLength: 120 minLength: 1 type: array maxItems: 8 title: Account Locations min_followers: anyOf: - type: integer minimum: 0.0 - type: 'null' title: Min Followers max_followers: anyOf: - type: integer minimum: 0.0 - type: 'null' title: Max Followers languages: items: type: string maxLength: 120 minLength: 1 type: array maxItems: 8 title: Languages verified_only: type: boolean title: Verified Only default: false creator_type_includes: items: type: string type: array maxItems: 6 title: Creator Type Includes type: object title: InfluencerWebDiscoveryFiltersRequest InfluencerWebDiscoveryRequest: properties: query: type: string maxLength: 500 minLength: 2 title: Query filters: $ref: '#/components/schemas/InfluencerWebDiscoveryFiltersRequest' type: object required: - query title: InfluencerWebDiscoveryRequest InitialSyncStatusResponse: properties: status: type: string title: Status description: 'Current sync status: pending, running, completed, failed, skipped, not_started' run_id: anyOf: - type: string - type: 'null' title: Run Id description: Databricks job run ID triggered_at: anyOf: - type: string - type: 'null' title: Triggered At description: When the sync was triggered (ISO format) error: anyOf: - type: string - type: 'null' title: Error description: Error message if sync failed run_page_url: anyOf: - type: string - type: 'null' title: Run Page Url description: URL to view the Databricks job run type: object required: - status title: InitialSyncStatusResponse description: 'Standard response for initial data-source sync status. Used by: GET /{platform}/initial-sync-status' InstagramActivateIdentityRequest: properties: instagram_account_id: type: string title: Instagram Account Id description: Instagram account ID to use for social publishing auth_method: anyOf: - type: string - type: 'null' title: Auth Method description: 'Selected auth method: instagram or facebook' type: object required: - instagram_account_id title: InstagramActivateIdentityRequest InstagramAuthResponseModel: properties: auth_url: type: string title: Auth Url type: object required: - auth_url title: InstagramAuthResponseModel description: Response model for Instagram authorization URL. InstagramPostCampaignRequest: properties: campaign_id: type: string title: Campaign Id description: ID of the campaign to post idea_number: type: integer title: Idea Number description: Idea number within the campaign instagram_account_id: type: string title: Instagram Account Id description: Instagram business account ID to post to instagram_account_name: anyOf: - type: string - type: 'null' title: Instagram Account Name description: Instagram account display name instagram_username: anyOf: - type: string - type: 'null' title: Instagram Username description: Instagram username without @ auth_method: anyOf: - type: string - type: 'null' title: Auth Method description: 'Selected auth method: instagram or facebook' variation: type: integer title: Variation description: Variation number (0 for original, 1+ for variations) default: 0 type: object required: - campaign_id - idea_number - instagram_account_id title: InstagramPostCampaignRequest InvitationInfoResponse: properties: organization_name: type: string title: Organization Name organization_id: type: string format: uuid title: Organization Id invited_by: anyOf: - type: string - type: 'null' title: Invited By role: type: string title: Role valid: type: boolean title: Valid already_member: type: boolean title: Already Member invite_type: anyOf: - type: string - type: 'null' title: Invite Type invited_email: anyOf: - type: string - type: 'null' title: Invited Email email_matches: anyOf: - type: boolean - type: 'null' title: Email Matches expires_at: anyOf: - type: string - type: 'null' title: Expires At company_profile_access: anyOf: - items: $ref: '#/components/schemas/InvitationProfileAccess' type: array - type: 'null' title: Company Profile Access error_message: anyOf: - type: string - type: 'null' title: Error Message type: object required: - organization_name - organization_id - role - valid - already_member title: InvitationInfoResponse description: Response from invitation preview endpoint. InvitationProfileAccess: properties: company_profile_id: type: string format: uuid title: Company Profile Id company_profile_name: anyOf: - type: string - type: 'null' title: Company Profile Name role: type: string title: Role type: object required: - company_profile_id - role title: InvitationProfileAccess description: Profile access details attached to an invite. InviteDomainRestrictionRequest: properties: enabled: type: boolean title: Enabled allowed_domains: items: type: string type: array title: Allowed Domains default: [] type: object required: - enabled title: InviteDomainRestrictionRequest description: Request payload for invite domain restrictions. InviteDomainRestrictionResponse: properties: enabled: type: boolean title: Enabled allowed_domains: items: type: string type: array title: Allowed Domains default: [] non_matching_member_count: type: integer title: Non Matching Member Count default: 0 total_members: type: integer title: Total Members default: 0 type: object required: - enabled title: InviteDomainRestrictionResponse description: Response payload for invite domain restrictions. JobListItem: properties: job_id: type: string title: Job Id type: type: string title: Type status: type: string title: Status created_at: type: string format: date-time title: Created At completed_at: anyOf: - type: string format: date-time - type: 'null' title: Completed At type: object required: - job_id - type - status - created_at title: JobListItem description: Summary info for a job in a list example: completed_at: '2025-01-15T10:32:15Z' created_at: '2025-01-15T10:30:00Z' job_id: 987fcdeb-51a2-43f7-9876-543210987654 status: completed type: ad_creation JobListResponse: properties: jobs: items: $ref: '#/components/schemas/JobListItem' type: array title: Jobs description: List of jobs total: type: integer title: Total description: Total number of jobs matching filter type: object required: - jobs - total title: JobListResponse description: Response for listing jobs example: jobs: - completed_at: '2025-01-15T10:32:15Z' created_at: '2025-01-15T10:30:00Z' job_id: 987fcdeb-51a2-43f7-9876-543210987654 status: completed type: ad_creation - created_at: '2025-01-15T10:25:00Z' job_id: 123e4567-e89b-12d3-a456-426614174002 status: running type: pdf_processing total: 2 JobResponse: properties: job_id: type: string title: Job Id description: Unique job identifier status: type: string title: Status description: Initial job status (typically 'running') stream_url: type: string title: Stream Url description: SSE endpoint for real-time progress poll_url: type: string title: Poll Url description: HTTP endpoint for polling status type: object required: - job_id - status - stream_url - poll_url title: JobResponse description: Response after submitting a job example: job_id: 987fcdeb-51a2-43f7-9876-543210987654 poll_url: /api/chat/agentic/jobs/987fcdeb-51a2-43f7-9876-543210987654 status: running stream_url: /api/chat/agentic/jobs/987fcdeb-51a2-43f7-9876-543210987654/stream JobStatusResponse: properties: job_id: type: string title: Job Id description: Job identifier type: type: string title: Type description: Job type status: type: string title: Status description: 'Current status: pending, running, completed, failed, cancelled' result: anyOf: - additionalProperties: true type: object - type: 'null' title: Result description: Job result (only when completed) error: anyOf: - type: string - type: 'null' title: Error description: Error message (only when failed) progress: anyOf: - additionalProperties: true type: object - type: 'null' title: Progress description: Current progress data public_execution: anyOf: - $ref: '#/components/schemas/PublicExecutionSummary' - type: 'null' description: Bounded, engine-neutral execution summary. A higher revision replaces the complete previous snapshot. created_at: type: string format: date-time title: Created At description: Job creation timestamp started_at: anyOf: - type: string format: date-time - type: 'null' title: Started At description: Job start timestamp completed_at: anyOf: - type: string format: date-time - type: 'null' title: Completed At description: Job completion timestamp type: object required: - job_id - type - status - created_at title: JobStatusResponse description: Response for job status query example: created_at: '2025-01-15T10:30:00Z' job_id: 987fcdeb-51a2-43f7-9876-543210987654 progress: message: Generating ad creative... progress: 0.25 step: generate_creative started_at: '2025-01-15T10:30:01Z' status: running type: ad_creation JoinOrganizationRequest: properties: token: type: string title: Token tos_hash: anyOf: - type: string - type: 'null' title: Tos Hash tos_version: anyOf: - type: string - type: 'null' title: Tos Version type: object required: - token title: JoinOrganizationRequest description: Request model for joining an organization. JoinOrganizationResponse: properties: success: type: boolean title: Success message: type: string title: Message organization_id: anyOf: - type: string - type: 'null' title: Organization Id type: object required: - success - message - organization_id title: JoinOrganizationResponse description: Response model for organization join operation. KLCampaignPerformanceResponse: properties: campaign_id: type: string title: Campaign Id campaign_name: type: string title: Campaign Name status: anyOf: - type: string - type: 'null' title: Status send_time: anyOf: - type: string format: date-time - type: 'null' title: Send Time total_sent: type: integer title: Total Sent opens: type: integer title: Opens clicks: type: integer title: Clicks bounces: type: integer title: Bounces unsubscribes: type: integer title: Unsubscribes revenue_cents: type: integer title: Revenue Cents open_rate: type: number title: Open Rate click_rate: type: number title: Click Rate bounce_rate: type: number title: Bounce Rate unsub_rate: type: number title: Unsub Rate type: object required: - campaign_id - campaign_name - total_sent - opens - clicks - bounces - unsubscribes - revenue_cents - open_rate - click_rate - bounce_rate - unsub_rate title: KLCampaignPerformanceResponse description: Klaviyo campaign performance response. KLDailyEmailPerformanceResponse: properties: metric_date: type: string format: date title: Metric Date email_sends: type: integer title: Email Sends opens: type: integer title: Opens clicks: type: integer title: Clicks bounces: type: integer title: Bounces unsubscribes: type: integer title: Unsubscribes spam_complaints: type: integer title: Spam Complaints revenue_cents: type: integer title: Revenue Cents open_rate: type: number title: Open Rate click_rate: type: number title: Click Rate type: object required: - metric_date - email_sends - opens - clicks - bounces - unsubscribes - spam_complaints - revenue_cents - open_rate - click_rate title: KLDailyEmailPerformanceResponse description: Daily Klaviyo email performance response. KLFlowPerformanceResponse: properties: flow_id: type: string title: Flow Id flow_name: type: string title: Flow Name status: anyOf: - type: string - type: 'null' title: Status trigger_type: anyOf: - type: string - type: 'null' title: Trigger Type total_sent: type: integer title: Total Sent opens: type: integer title: Opens clicks: type: integer title: Clicks conversions: type: integer title: Conversions revenue_cents: type: integer title: Revenue Cents open_rate: type: number title: Open Rate click_rate: type: number title: Click Rate conversion_rate: type: number title: Conversion Rate type: object required: - flow_id - flow_name - total_sent - opens - clicks - conversions - revenue_cents - open_rate - click_rate - conversion_rate title: KLFlowPerformanceResponse description: Klaviyo flow performance response. KLListGrowthResponse: properties: list_id: type: string title: List Id list_name: type: string title: List Name metric_date: type: string format: date title: Metric Date profile_count: type: integer title: Profile Count new_subscribers: type: integer title: New Subscribers unsubscribes: type: integer title: Unsubscribes net_growth: type: integer title: Net Growth type: object required: - list_id - list_name - metric_date - profile_count - new_subscribers - unsubscribes - net_growth title: KLListGrowthResponse description: Klaviyo list growth response. KLRangeSummaryResponse: properties: total_sends: type: integer title: Total Sends total_opens: type: integer title: Total Opens total_clicks: type: integer title: Total Clicks avg_open_rate: type: number title: Avg Open Rate avg_click_rate: type: number title: Avg Click Rate total_revenue_cents: type: integer title: Total Revenue Cents active_campaigns: type: integer title: Active Campaigns active_flows: type: integer title: Active Flows total_subscribers: type: integer title: Total Subscribers type: object required: - total_sends - total_opens - total_clicks - avg_open_rate - avg_click_rate - total_revenue_cents - active_campaigns - active_flows - total_subscribers title: KLRangeSummaryResponse description: Klaviyo summary for a date range response. KLTransactionRowResponse: properties: kl_token: type: string title: Kl Token entity_type: type: string title: Entity Type event_id: type: string title: Event Id metric_name: anyOf: - type: string - type: 'null' title: Metric Name profile_id: anyOf: - type: string - type: 'null' title: Profile Id value_cents: type: integer title: Value Cents event_date: type: string title: Event Date type: object required: - kl_token - entity_type - event_id - value_cents - event_date title: KLTransactionRowResponse description: Single Klaviyo event from Silver tables. KeywordWithCpc: properties: keyword: type: string title: Keyword estimated_cpc: anyOf: - type: number - type: 'null' title: Estimated Cpc type: object required: - keyword title: KeywordWithCpc description: Model for keyword with CPC data KlaviyoAccountsResponse: properties: accounts: items: $ref: '#/components/schemas/KlaviyoList' type: array title: Accounts type: object required: - accounts title: KlaviyoAccountsResponse description: Response model for Klaviyo lists/segments. KlaviyoAuthResponse: properties: auth_url: type: string title: Auth Url type: object required: - auth_url title: KlaviyoAuthResponse description: Response model for Klaviyo auth URL. KlaviyoHealthResponse: properties: status: type: string title: Status type: object required: - status title: KlaviyoHealthResponse description: Response model for connection health status. KlaviyoList: properties: id: type: string title: Id name: type: string title: Name created: anyOf: - type: string - type: 'null' title: Created updated: anyOf: - type: string - type: 'null' title: Updated profile_count: anyOf: - type: integer - type: 'null' title: Profile Count list_type: type: string title: List Type default: list type: object required: - id - name title: KlaviyoList description: Klaviyo list/segment model. KlaviyoStatusResponse: properties: connected: type: boolean title: Connected account_id: anyOf: - type: string - type: 'null' title: Account Id account_name: anyOf: - type: string - type: 'null' title: Account Name lists_count: type: integer title: Lists Count default: 0 segments_count: type: integer title: Segments Count default: 0 type: object required: - connected title: KlaviyoStatusResponse description: Response model for Klaviyo connection status. KnowledgeBaseUploadResponse: properties: success: type: boolean title: Success files: items: $ref: '#/components/schemas/SharedFileItem' type: array title: Files message: type: string title: Message type: object required: - success - files - message title: KnowledgeBaseUploadResponse description: Response for knowledge base file upload LandingPagePreflightRequest: properties: url: type: string title: Url expected_urls: anyOf: - items: type: string type: array - type: 'null' title: Expected Urls use_firecrawl: type: boolean title: Use Firecrawl default: true type: object required: - url title: LandingPagePreflightRequest LinkedInActivateAccountRequest: properties: account_id: type: string title: Account Id organization_urn: type: string title: Organization Urn type: object required: - account_id - organization_urn title: LinkedInActivateAccountRequest LinkedInCampaignActionRequest: properties: platform_type: type: string title: Platform Type ad_id: type: string title: Ad Id ad_account_id: anyOf: - type: string - type: 'null' title: Ad Account Id action: type: string title: Action type: object required: - platform_type - ad_id - action title: LinkedInCampaignActionRequest LinkedInCampaignPostRequest: properties: campaign_id: type: string title: Campaign Id description: ID of the campaign post idea_number: type: integer title: Idea Number description: Idea number within the campaign variation: type: integer title: Variation description: Variation number (0 for original, 1+ for variations) default: 0 type: object required: - campaign_id - idea_number title: LinkedInCampaignPostRequest LinkedInCampaignResumeRequest: properties: platform_type: type: string title: Platform Type ad_id: type: string title: Ad Id ad_account_id: anyOf: - type: string - type: 'null' title: Ad Account Id type: object required: - platform_type - ad_id title: LinkedInCampaignResumeRequest LinkedInLaunchImageAdRequest: properties: ad_id: type: string title: Ad Id ad_account_id: anyOf: - type: string - type: 'null' title: Ad Account Id organization_urn: anyOf: - type: string - type: 'null' title: Organization Urn targeting_discrimination_notice_acknowledged: type: boolean title: Targeting Discrimination Notice Acknowledged default: false political_intent_confirmed: type: boolean title: Political Intent Confirmed default: false linkedin_lead_form_config: anyOf: - $ref: '#/components/schemas/LinkedInLeadFormConfig' - type: 'null' type: object required: - ad_id title: LinkedInLaunchImageAdRequest LinkedInLaunchVideoAdRequest: properties: ad_id: type: string title: Ad Id ad_account_id: anyOf: - type: string - type: 'null' title: Ad Account Id organization_urn: anyOf: - type: string - type: 'null' title: Organization Urn targeting_discrimination_notice_acknowledged: type: boolean title: Targeting Discrimination Notice Acknowledged default: false political_intent_confirmed: type: boolean title: Political Intent Confirmed default: false linkedin_lead_form_config: anyOf: - $ref: '#/components/schemas/LinkedInLeadFormConfig' - type: 'null' type: object required: - ad_id title: LinkedInLaunchVideoAdRequest LinkedInLeadFormConfig: properties: name: type: string maxLength: 256 title: Name headline: type: string maxLength: 60 title: Headline description: anyOf: - type: string maxLength: 160 - type: 'null' title: Description default: '' privacy_policy_url: type: string maxLength: 2000 title: Privacy Policy Url thank_you_message: type: string maxLength: 300 title: Thank You Message fields: items: type: string enum: - FIRST_NAME - LAST_NAME - EMAIL - WORK_EMAIL - PHONE_NUMBER - WORK_PHONE_NUMBER - JOB_TITLE - COMPANY_NAME - COMPANY_SIZE - INDUSTRY - CITY - STATE - COUNTRY type: array title: Fields type: object required: - name - headline - privacy_policy_url - thank_you_message - fields title: LinkedInLeadFormConfig LinkedInPostCampaignRequest: properties: campaign_id: type: string title: Campaign Id description: ID of the campaign to post idea_number: type: integer title: Idea Number description: Idea number within the campaign author_urn: anyOf: - type: string - type: 'null' title: Author Urn description: Selected LinkedIn author URN variation: type: integer title: Variation description: Variation number (0 for original, 1+ for variations) default: 0 type: object required: - campaign_id - idea_number title: LinkedInPostCampaignRequest LinkedInSyncAdCampaignRequest: properties: platform_type: type: string title: Platform Type ad_id: type: string title: Ad Id ad_account_id: anyOf: - type: string - type: 'null' title: Ad Account Id pending_update: anyOf: - additionalProperties: true type: object - type: 'null' title: Pending Update type: object required: - platform_type - ad_id title: LinkedInSyncAdCampaignRequest LinkedInSyncPreviewRequest: properties: platform_type: type: string title: Platform Type ad_id: type: string title: Ad Id ad_account_id: anyOf: - type: string - type: 'null' title: Ad Account Id pending_update: anyOf: - additionalProperties: true type: object - type: 'null' title: Pending Update type: object required: - platform_type - ad_id title: LinkedInSyncPreviewRequest LocationInfo: properties: country: type: string title: Country country_code: type: string title: Country Code state: anyOf: - type: string - type: 'null' title: State state_code: anyOf: - type: string - type: 'null' title: State Code city: anyOf: - type: string - type: 'null' title: City type: object required: - country - country_code title: LocationInfo LocationItem: properties: level: type: string enum: - country - region - state - province - city - postal_code - proximity title: Level description: Granularity level name: type: string title: Name description: Display name of the location, such as California, San Francisco, or 10001 + 10 mi country_code: anyOf: - type: string - type: 'null' title: Country Code description: ISO 3166-1 alpha-2 country code, such as US country_name: anyOf: - type: string - type: 'null' title: Country Name description: Display country name from reverse geocoding, if available code: anyOf: - type: string - type: 'null' title: Code description: Platform or ISO subdivision code if known, such as US-CA city: anyOf: - type: string - type: 'null' title: City description: Nearest city/town from reverse geocoding, if available region: anyOf: - type: string - type: 'null' title: Region description: Nearest state/region/province from reverse geocoding, if available region_code: anyOf: - type: string - type: 'null' title: Region Code description: State/region code from reverse geocoding, if available postal_code: anyOf: - type: string - type: 'null' title: Postal Code description: Postal or ZIP code for exact postal-code targeting included_postal_codes: anyOf: - items: type: string type: array - type: 'null' title: Included Postal Codes description: Postal/PIN codes represented by a proximity pin when available expanded_postal_codes: anyOf: - items: type: string type: array - type: 'null' title: Expanded Postal Codes description: Expanded postal/PIN codes for a radius, if available latitude: anyOf: - type: number maximum: 90.0 minimum: -90.0 - type: 'null' title: Latitude description: Latitude for map-pin or radius targeting longitude: anyOf: - type: number maximum: 180.0 minimum: -180.0 - type: 'null' title: Longitude description: Longitude for map-pin or radius targeting radius_miles: anyOf: - type: number maximum: 250.0 minimum: 1.0 - type: 'null' title: Radius Miles description: Radius in miles for proximity targeting radius_km: anyOf: - type: number maximum: 400.0 minimum: 1.0 - type: 'null' title: Radius Km description: Radius in kilometers for proximity targeting source: anyOf: - type: string - type: 'null' title: Source description: How the location was selected, such as zip, address, map_pin, city, or state platform_ids: anyOf: - additionalProperties: true type: object - type: 'null' title: Platform Ids description: Resolved platform-specific geo identifiers resolution_status: anyOf: - additionalProperties: true type: object - type: 'null' title: Resolution Status description: Per-platform resolution or support status type: object required: - level - name title: LocationItem description: Canonical location input for multi-geo campaigns with one shared budget. LuckyPickContext: properties: offering_id: anyOf: - type: string - type: 'null' title: Offering Id offering_name: anyOf: - type: string - type: 'null' title: Offering Name goal: anyOf: - type: string - type: 'null' title: Goal tone: anyOf: - type: string - type: 'null' title: Tone platform_pref: anyOf: - type: string - type: 'null' title: Platform Pref campaign_type: anyOf: - type: string - type: 'null' title: Campaign Type campaign_theme: anyOf: - type: string - type: 'null' title: Campaign Theme refinement: anyOf: - type: string - type: 'null' title: Refinement type: object title: LuckyPickContext description: Context for the lucky pick request. LuckyPickRequest: properties: kind: type: string enum: - audience - campaign_idea title: Kind description: Type of item to pick. candidates: items: {} type: array title: Candidates description: Candidates to choose from. context: anyOf: - $ref: '#/components/schemas/LuckyPickContext' - type: 'null' type: object required: - kind - candidates title: LuckyPickRequest description: Request body for the /feeling-lucky/pick endpoint. LuckyPickResponse: properties: choice: title: Choice reason: type: string title: Reason type: object required: - choice - reason title: LuckyPickResponse description: Response body for the /feeling-lucky/pick endpoint. MCPResponse: properties: success: type: boolean title: Success data: anyOf: - additionalProperties: true type: object - type: 'null' title: Data error: anyOf: - type: string - type: 'null' title: Error metadata: anyOf: - additionalProperties: true type: object - type: 'null' title: Metadata type: object required: - success title: MCPResponse description: Standard MCP response MarkReadResponse: properties: status: type: string title: Status type: object required: - status title: MarkReadResponse description: Response schema for mark-read endpoint. MarketIntelligenceResponse: properties: id: type: string format: uuid title: Id intelligence_type: type: string title: Intelligence Type title: type: string title: Title description: anyOf: - type: string - type: 'null' title: Description insights: anyOf: - additionalProperties: true type: object - type: 'null' title: Insights metrics: anyOf: - additionalProperties: true type: object - type: 'null' title: Metrics recommendations: anyOf: - additionalProperties: true type: object - type: 'null' title: Recommendations data_sources: anyOf: - additionalProperties: true type: object - type: 'null' title: Data Sources confidence_score: anyOf: - type: number - type: 'null' title: Confidence Score impact_level: anyOf: - type: string - type: 'null' title: Impact Level category: anyOf: - type: string - type: 'null' title: Category tags: anyOf: - items: type: string type: array - type: 'null' title: Tags is_active: type: boolean title: Is Active expires_at: anyOf: - type: string format: date-time - type: 'null' title: Expires 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 - intelligence_type - title - description - insights - metrics - recommendations - data_sources - confidence_score - impact_level - category - tags - is_active - expires_at - created_at - updated_at title: MarketIntelligenceResponse MarketIntelligenceUpdate: properties: is_active: anyOf: - type: boolean - type: 'null' title: Is Active expires_at: anyOf: - type: string format: date-time - type: 'null' title: Expires At type: object title: MarketIntelligenceUpdate MarketingProfileAxisResponse: properties: id: type: string title: Id label: type: string title: Label self_score: type: integer title: Self Score competitor_score: type: integer title: Competitor Score similarity: type: integer title: Similarity gap: type: integer title: Gap leader: type: string title: Leader type: object required: - id - label - self_score - competitor_score - similarity - gap - leader title: MarketingProfileAxisResponse description: Single radar axis for the persisted marketing profile. MarketingProfileGenerationRequest: properties: scope_key: anyOf: - type: string - type: 'null' title: Scope Key type: object title: MarketingProfileGenerationRequest MarketingProfileResponse: properties: algorithm_version: type: string title: Algorithm Version calculated_at: anyOf: - type: string - type: 'null' title: Calculated At source_updated_at: anyOf: - type: string - type: 'null' title: Source Updated At can_render: type: boolean title: Can Render profile_similarity: anyOf: - type: integer - type: 'null' title: Profile Similarity summary: anyOf: - type: string - type: 'null' title: Summary axes: items: $ref: '#/components/schemas/MarketingProfileAxisResponse' type: array title: Axes type: object required: - algorithm_version - can_render title: MarketingProfileResponse description: Persisted marketing-profile snapshot returned with competitor details. MemberStatusUpdateRequest: properties: status: type: string title: Status description: 'New status: ''active'' or ''suspended''' type: object required: - status title: MemberStatusUpdateRequest description: Request to update a member's status (suspend/activate). MentionTarget: properties: key: type: string title: Key description: Team ID (as string) or agent_key label: type: string title: Label description: Display name type: type: string title: Type description: '''team'' or ''agent''' role: anyOf: - type: string - type: 'null' title: Role description: Agent role (manager/strategist/specialist) team_id: anyOf: - type: string - type: 'null' title: Team Id description: Parent team ID (for agents) description: anyOf: - type: string - type: 'null' title: Description description: Brief agent description type: object required: - key - label - type title: MentionTarget MentionTargetsResponse: properties: teams: items: $ref: '#/components/schemas/MentionTarget' type: array title: Teams agents: items: $ref: '#/components/schemas/MentionTarget' type: array title: Agents type: object title: MentionTargetsResponse MessageFeedbackRequest: properties: feedback: anyOf: - type: string enum: - up - down - type: 'null' title: Feedback type: object title: MessageFeedbackRequest description: Request schema for updating message feedback. MetaAccountsResponseModel: properties: accounts: items: additionalProperties: true type: object type: array title: Accounts pages: anyOf: - items: additionalProperties: true type: object type: array - type: 'null' title: Pages selected_ad_account_id: anyOf: - type: string - type: 'null' title: Selected Ad Account Id activation_state: anyOf: - type: string - type: 'null' title: Activation State active_account: anyOf: - additionalProperties: true type: object - type: 'null' title: Active Account type: object required: - accounts title: MetaAccountsResponseModel MetaAuthResponseModel: properties: auth_url: type: string title: Auth Url auth_type: type: string title: Auth Type type: object required: - auth_url - auth_type title: MetaAuthResponseModel MetaCampaignActionRequest: properties: platform_type: type: string title: Platform Type description: 'Type of ad platform: meta_feed or meta_stories_reels' ad_id: type: string title: Ad Id description: ID of the specific ad to act on ad_account_id: type: string title: Ad Account Id description: Meta Ad Account ID action: type: string title: Action description: 'Action to perform: pause or delete' type: object required: - platform_type - ad_id - ad_account_id - action title: MetaCampaignActionRequest description: Request model for pausing/deleting a Meta campaign. MetaCampaignResumeRequest: properties: platform_type: type: string title: Platform Type description: 'Type of ad platform: meta_feed or meta_stories_reels' ad_id: type: string title: Ad Id description: ID of the specific ad to act on (DB UUID or Meta ad id) ad_account_id: type: string title: Ad Account Id description: Meta Ad Account ID type: object required: - platform_type - ad_id - ad_account_id title: MetaCampaignResumeRequest description: Request model for resuming a Meta campaign (no action field). MetaFeedAdRequest: properties: product_description: type: string title: Product Description description: Description of the product or service target_audience: type: string title: Target Audience description: Target audience description company_profile_id: type: string format: uuid title: Company Profile Id description: Company profile ID (required) campaign_goals: anyOf: - items: type: string type: array - type: 'null' title: Campaign Goals description: List of campaign goals key_selling_points: type: string title: Key Selling Points description: Key selling points default: '' num_ads: type: integer maximum: 10.0 minimum: 1.0 title: Num Ads description: Number of ad variations to generate default: 3 bid_strategy: type: string title: Bid Strategy description: Bidding strategy default: maximize_conversions budget_range: type: string title: Budget Range description: Budget range (low, medium, high, custom) default: medium country: anyOf: - type: string - type: 'null' title: Country description: Target country state_province: anyOf: - type: string - type: 'null' title: State Province description: Target state/province city: anyOf: - type: string - type: 'null' title: City description: Target city locations: anyOf: - items: $ref: '#/components/schemas/LocationItem' type: array - type: 'null' title: Locations description: List of locations to target (countries/regions/states/cities/postal codes/proximities). This does not split budget per location; all locations share the campaign budget. reference_images: anyOf: - items: type: string type: array maxItems: 3 - type: 'null' title: Reference Images description: List of reference image base64 data URLs (max 3) lead_form_enabled: anyOf: - type: boolean - type: 'null' title: Lead Form Enabled description: Whether to use lead form extension where supported default: false max_cpc: anyOf: - type: number minimum: 0.01 - type: 'null' title: Max Cpc description: Maximum cost per click in dollars (e.g., 1.50 for $1.50). Required when bid_strategy is 'MANUAL_CPC' experiment_package_id: anyOf: - type: string maxLength: 64 - type: 'null' title: Experiment Package Id description: Test package id; created campaigns are stamped with this linkage launch_strategy_mode: anyOf: - type: string pattern: ^(test_learn_pilot|direct_campaign)$ - type: 'null' title: Launch Strategy Mode description: test_learn_pilot or direct_campaign dayparting_enabled: anyOf: - type: boolean - type: 'null' title: Dayparting Enabled description: Whether dayparting/ad scheduling is enabled for this campaign default: false dayparting_config: anyOf: - additionalProperties: true type: object - type: 'null' title: Dayparting Config description: Dayparting configuration including schedule, timezone, and platform-specific settings num_images_per_ad: type: integer maximum: 5.0 minimum: 1.0 title: Num Images Per Ad description: Images per ad. Meta Feed uses 1 image for Single Image and 1 thumbnail for Video. default: 1 placements: anyOf: - items: type: string type: array - type: 'null' title: Placements description: Ad placements ad_format: type: string title: Ad Format description: 'Meta Feed creative format: ''Video'' or ''Single Image''' default: Video video_length: type: integer maximum: 10.0 minimum: 10.0 title: Video Length description: Video duration is fixed at 10 seconds default: 10 type: object required: - product_description - target_audience - company_profile_id title: MetaFeedAdRequest description: Request model for Meta Feed ads MetaFeedCampaignUpdateRequest: properties: campaign_id: type: string title: Campaign Id ad_id: type: string title: Ad Id description: Normalized platform ad UUID name: anyOf: - type: string - type: 'null' title: Name headline: anyOf: - type: string - type: 'null' title: Headline long_headline: anyOf: - type: string - type: 'null' title: Long Headline description: anyOf: - type: string - type: 'null' title: Description ad_name: anyOf: - type: string - type: 'null' title: Ad Name call_to_action: anyOf: - type: string - type: 'null' title: Call To Action keywords: anyOf: - items: additionalProperties: true type: object type: array - items: $ref: '#/components/schemas/KeywordWithCpc' type: array - items: type: string type: array - type: 'null' title: Keywords negative_keywords: anyOf: - items: additionalProperties: true type: object type: array - items: $ref: '#/components/schemas/KeywordWithCpc' type: array - items: type: string type: array - type: 'null' title: Negative Keywords country: anyOf: - type: string - type: 'null' title: Country state_province: anyOf: - type: string - type: 'null' title: State Province city: anyOf: - type: string - type: 'null' title: City recommended_daily_budget: anyOf: - type: integer - type: 'null' title: Recommended Daily Budget total_budget: anyOf: - type: integer - type: 'null' title: Total Budget duration: anyOf: - type: integer - type: 'null' title: Duration target_platform: anyOf: - type: string - type: 'null' title: Target Platform start_date: anyOf: - type: string - type: 'null' title: Start Date end_date: anyOf: - type: string - type: 'null' title: End Date business_name: anyOf: - type: string - type: 'null' title: Business Name final_url: anyOf: - type: string - type: 'null' title: Final Url headlines: anyOf: - items: type: string type: array - type: 'null' title: Headlines descriptions: anyOf: - items: type: string type: array - type: 'null' title: Descriptions format_setting: anyOf: - type: string - type: 'null' title: Format Setting primary_text: anyOf: - type: string - type: 'null' title: Primary Text destination_url: anyOf: - type: string - type: 'null' title: Destination Url ad_format: anyOf: - type: string - type: 'null' title: Ad Format placements: anyOf: - items: type: string type: array - type: 'null' title: Placements introductory_text: anyOf: - type: string - type: 'null' title: Introductory Text alt_text: anyOf: - type: string - type: 'null' title: Alt Text aspect_ratio: anyOf: - type: string - type: 'null' title: Aspect Ratio thumbnail_url: anyOf: - type: string - type: 'null' title: Thumbnail Url linkedin_lead_form_config: anyOf: - additionalProperties: true type: object - type: 'null' title: Linkedin Lead Form Config google_lead_form_config: anyOf: - additionalProperties: true type: object - type: 'null' title: Google Lead Form Config meta_lead_form_config: anyOf: - additionalProperties: true type: object - type: 'null' title: Meta Lead Form Config asin: anyOf: - type: string - type: 'null' title: Asin sku: anyOf: - type: string - type: 'null' title: Sku targeting_type: anyOf: - type: string - type: 'null' title: Targeting Type bidding_strategy: anyOf: - type: string - type: 'null' title: Bidding Strategy default_bid: anyOf: - type: number - type: 'null' title: Default Bid brand_name: anyOf: - type: string - type: 'null' title: Brand Name landing_page_url: anyOf: - type: string - type: 'null' title: Landing Page Url showcase_products: anyOf: - items: type: string type: array - type: 'null' title: Showcase Products targeting_products: anyOf: - items: type: string type: array - type: 'null' title: Targeting Products audience_segments: anyOf: - items: type: string type: array - type: 'null' title: Audience Segments interests: anyOf: - items: type: string type: array - type: 'null' title: Interests lead_form_enabled: anyOf: - type: boolean - type: 'null' title: Lead Form Enabled bid_strategy: anyOf: - type: string - type: 'null' title: Bid Strategy max_cpc: anyOf: - type: number - type: 'null' title: Max Cpc ad_text: anyOf: - type: string - type: 'null' title: Ad Text display_name: anyOf: - type: string - type: 'null' title: Display Name objective_type: anyOf: - type: string - type: 'null' title: Objective Type video_length: anyOf: - type: integer - type: 'null' title: Video Length dayparting_config: anyOf: - additionalProperties: true type: object - type: string - type: 'null' title: Dayparting Config media_operations: anyOf: - items: $ref: '#/components/schemas/CampaignMediaOperation' type: array - type: 'null' title: Media Operations type: object required: - campaign_id - ad_id title: MetaFeedCampaignUpdateRequest MetaLaunchAdCampaignRequest: properties: platform_type: type: string title: Platform Type description: 'Type of ad platform: meta_feed or meta_stories_reels' ad_id: title: Ad Id description: ID of the specific ad to launch (UUID string) ad_account_id: anyOf: - type: string - type: 'null' title: Ad Account Id description: Legacy Meta Ad Account ID; launches use the active account page_id: anyOf: - type: string - type: 'null' title: Page Id description: Facebook Page ID instagram_account_id: anyOf: - type: string - type: 'null' title: Instagram Account Id description: Instagram Account ID placements: anyOf: - items: type: string type: array - type: 'null' title: Placements description: 'Placements override: instagram_stories, instagram_reels' meta_lead_form_config: anyOf: - additionalProperties: true type: object - type: 'null' title: Meta Lead Form Config description: Meta Instant Form configuration type: object required: - platform_type - ad_id title: MetaLaunchAdCampaignRequest description: Request model for launching a Meta ad campaign MetaSelectAdAccountRequest: properties: ad_account_id: type: string title: Ad Account Id description: Meta Ad Account ID page_id: anyOf: - type: string - type: 'null' title: Page Id description: Facebook Page ID to use as the ad identity instagram_account_id: anyOf: - type: string - type: 'null' title: Instagram Account Id description: Optional Instagram business account ID linked to the Page type: object required: - ad_account_id title: MetaSelectAdAccountRequest MetaStoriesReelsAdRequest: properties: product_description: type: string title: Product Description description: Description of the product or service target_audience: type: string title: Target Audience description: Target audience description company_profile_id: type: string format: uuid title: Company Profile Id description: Company profile ID (required) campaign_goals: anyOf: - items: type: string type: array - type: 'null' title: Campaign Goals description: List of campaign goals key_selling_points: type: string title: Key Selling Points description: Key selling points default: '' num_ads: type: integer maximum: 10.0 minimum: 1.0 title: Num Ads description: Number of ad variations to generate default: 3 bid_strategy: type: string title: Bid Strategy description: Bidding strategy default: maximize_conversions budget_range: type: string title: Budget Range description: Budget range (low, medium, high, custom) default: medium country: anyOf: - type: string - type: 'null' title: Country description: Target country state_province: anyOf: - type: string - type: 'null' title: State Province description: Target state/province city: anyOf: - type: string - type: 'null' title: City description: Target city locations: anyOf: - items: $ref: '#/components/schemas/LocationItem' type: array - type: 'null' title: Locations description: List of locations to target (countries/regions/states/cities/postal codes/proximities). This does not split budget per location; all locations share the campaign budget. reference_images: anyOf: - items: type: string type: array maxItems: 3 - type: 'null' title: Reference Images description: List of reference image base64 data URLs (max 3) lead_form_enabled: anyOf: - type: boolean - type: 'null' title: Lead Form Enabled description: Whether to use lead form extension where supported default: false max_cpc: anyOf: - type: number minimum: 0.01 - type: 'null' title: Max Cpc description: Maximum cost per click in dollars (e.g., 1.50 for $1.50). Required when bid_strategy is 'MANUAL_CPC' experiment_package_id: anyOf: - type: string maxLength: 64 - type: 'null' title: Experiment Package Id description: Test package id; created campaigns are stamped with this linkage launch_strategy_mode: anyOf: - type: string pattern: ^(test_learn_pilot|direct_campaign)$ - type: 'null' title: Launch Strategy Mode description: test_learn_pilot or direct_campaign dayparting_enabled: anyOf: - type: boolean - type: 'null' title: Dayparting Enabled description: Whether dayparting/ad scheduling is enabled for this campaign default: false dayparting_config: anyOf: - additionalProperties: true type: object - type: 'null' title: Dayparting Config description: Dayparting configuration including schedule, timezone, and platform-specific settings ad_format: type: string title: Ad Format description: 'Meta Stories & Reels creative format: ''Video'' or ''Single Image''' default: Video video_length: type: integer maximum: 10.0 minimum: 10.0 title: Video Length description: Video duration is fixed at 10 seconds default: 10 type: object required: - product_description - target_audience - company_profile_id title: MetaStoriesReelsAdRequest description: Request model for Meta Stories & Reels ads MetaStoriesReelsCampaignUpdateRequest: properties: campaign_id: type: string title: Campaign Id ad_id: type: string title: Ad Id description: Normalized platform ad UUID name: anyOf: - type: string - type: 'null' title: Name headline: anyOf: - type: string - type: 'null' title: Headline long_headline: anyOf: - type: string - type: 'null' title: Long Headline description: anyOf: - type: string - type: 'null' title: Description ad_name: anyOf: - type: string - type: 'null' title: Ad Name call_to_action: anyOf: - type: string - type: 'null' title: Call To Action keywords: anyOf: - items: additionalProperties: true type: object type: array - items: $ref: '#/components/schemas/KeywordWithCpc' type: array - items: type: string type: array - type: 'null' title: Keywords negative_keywords: anyOf: - items: additionalProperties: true type: object type: array - items: $ref: '#/components/schemas/KeywordWithCpc' type: array - items: type: string type: array - type: 'null' title: Negative Keywords country: anyOf: - type: string - type: 'null' title: Country state_province: anyOf: - type: string - type: 'null' title: State Province city: anyOf: - type: string - type: 'null' title: City recommended_daily_budget: anyOf: - type: integer - type: 'null' title: Recommended Daily Budget total_budget: anyOf: - type: integer - type: 'null' title: Total Budget duration: anyOf: - type: integer - type: 'null' title: Duration target_platform: anyOf: - type: string - type: 'null' title: Target Platform start_date: anyOf: - type: string - type: 'null' title: Start Date end_date: anyOf: - type: string - type: 'null' title: End Date business_name: anyOf: - type: string - type: 'null' title: Business Name final_url: anyOf: - type: string - type: 'null' title: Final Url headlines: anyOf: - items: type: string type: array - type: 'null' title: Headlines descriptions: anyOf: - items: type: string type: array - type: 'null' title: Descriptions format_setting: anyOf: - type: string - type: 'null' title: Format Setting primary_text: anyOf: - type: string - type: 'null' title: Primary Text destination_url: anyOf: - type: string - type: 'null' title: Destination Url ad_format: anyOf: - type: string - type: 'null' title: Ad Format placements: anyOf: - items: type: string type: array - type: 'null' title: Placements introductory_text: anyOf: - type: string - type: 'null' title: Introductory Text alt_text: anyOf: - type: string - type: 'null' title: Alt Text aspect_ratio: anyOf: - type: string - type: 'null' title: Aspect Ratio thumbnail_url: anyOf: - type: string - type: 'null' title: Thumbnail Url linkedin_lead_form_config: anyOf: - additionalProperties: true type: object - type: 'null' title: Linkedin Lead Form Config google_lead_form_config: anyOf: - additionalProperties: true type: object - type: 'null' title: Google Lead Form Config meta_lead_form_config: anyOf: - additionalProperties: true type: object - type: 'null' title: Meta Lead Form Config asin: anyOf: - type: string - type: 'null' title: Asin sku: anyOf: - type: string - type: 'null' title: Sku targeting_type: anyOf: - type: string - type: 'null' title: Targeting Type bidding_strategy: anyOf: - type: string - type: 'null' title: Bidding Strategy default_bid: anyOf: - type: number - type: 'null' title: Default Bid brand_name: anyOf: - type: string - type: 'null' title: Brand Name landing_page_url: anyOf: - type: string - type: 'null' title: Landing Page Url showcase_products: anyOf: - items: type: string type: array - type: 'null' title: Showcase Products targeting_products: anyOf: - items: type: string type: array - type: 'null' title: Targeting Products audience_segments: anyOf: - items: type: string type: array - type: 'null' title: Audience Segments interests: anyOf: - items: type: string type: array - type: 'null' title: Interests lead_form_enabled: anyOf: - type: boolean - type: 'null' title: Lead Form Enabled bid_strategy: anyOf: - type: string - type: 'null' title: Bid Strategy max_cpc: anyOf: - type: number - type: 'null' title: Max Cpc ad_text: anyOf: - type: string - type: 'null' title: Ad Text display_name: anyOf: - type: string - type: 'null' title: Display Name objective_type: anyOf: - type: string - type: 'null' title: Objective Type video_length: anyOf: - type: integer - type: 'null' title: Video Length dayparting_config: anyOf: - additionalProperties: true type: object - type: string - type: 'null' title: Dayparting Config media_operations: anyOf: - items: $ref: '#/components/schemas/CampaignMediaOperation' type: array - type: 'null' title: Media Operations type: object required: - campaign_id - ad_id title: MetaStoriesReelsCampaignUpdateRequest MetaSyncAdCampaignRequest: properties: platform_type: type: string title: Platform Type description: meta_feed or meta_stories_reels ad_id: type: string title: Ad Id description: ID of the specific ad to sync (UUID string) ad_account_id: anyOf: - type: string - type: 'null' title: Ad Account Id description: Meta Ad Account ID (optional override) force_sync_fields: anyOf: - items: type: string type: array - type: 'null' title: Force Sync Fields description: Optional field allowlist for pending edits that should be synced. pending_update: anyOf: - additionalProperties: true type: object - type: 'null' title: Pending Update description: Pending Pomo edit payload to apply only after remote sync succeeds. type: object required: - platform_type - ad_id title: MetaSyncAdCampaignRequest description: Request model for syncing an online ad campaign to Meta. MetaSyncPreviewRequest: properties: platform_type: type: string title: Platform Type description: meta_feed or meta_stories_reels ad_id: type: string title: Ad Id description: ID of the specific ad to sync (UUID string) ad_account_id: anyOf: - type: string - type: 'null' title: Ad Account Id description: Meta Ad Account ID (optional override) force_sync_fields: anyOf: - items: type: string type: array - type: 'null' title: Force Sync Fields description: Optional field allowlist for pending edits that should be previewed. pending_update: anyOf: - additionalProperties: true type: object - type: 'null' title: Pending Update description: Pending Pomo edit payload to preview without saving it. type: object required: - platform_type - ad_id title: MetaSyncPreviewRequest description: Request model for previewing a Meta sync and billing impact. OnboardingNarrativeRequest: properties: stage: type: string enum: - assessment - competitors - gaps - ads - insights title: Stage context: anyOf: - additionalProperties: true type: object - type: 'null' title: Context force_refresh: type: boolean title: Force Refresh default: false type: object required: - stage title: OnboardingNarrativeRequest OrganizationBillingMetadataResponse: properties: id: anyOf: - type: string - type: 'null' title: Id name: type: string title: Name country: anyOf: - type: string - type: 'null' title: Country gstin: anyOf: - type: string - type: 'null' title: Gstin gstin_company_name: anyOf: - type: string - type: 'null' title: Gstin Company Name stripe_tax_id: anyOf: - type: string - type: 'null' title: Stripe Tax Id type: object required: - id - name title: OrganizationBillingMetadataResponse description: Recovery-safe organization billing fields required by checkout flows. OrganizationInviteActionResponse: properties: success: type: boolean title: Success message: type: string title: Message type: object required: - success - message title: OrganizationInviteActionResponse description: Response for invite resend/revoke actions. OrganizationInviteFailure: properties: email: type: string format: email title: Email reason: type: string title: Reason type: object required: - email - reason title: OrganizationInviteFailure description: Error details for failed invite operations. OrganizationInviteInfoResponse: properties: id: anyOf: - type: string - type: 'null' title: Id name: type: string title: Name member_count: type: integer title: Member Count valid: type: boolean title: Valid type: object required: - id - name - member_count - valid title: OrganizationInviteInfoResponse description: Response model for organization invitation preview (public endpoint). OrganizationInviteLinkRequest: properties: role: $ref: '#/components/schemas/OrganizationRoleEnum' default: member company_profile_access: anyOf: - items: $ref: '#/components/schemas/OrganizationInviteProfileAccessRequest' type: array - type: 'null' title: Company Profile Access expires_in_days: anyOf: - type: integer - type: 'null' title: Expires In Days type: object title: OrganizationInviteLinkRequest description: Request payload for creating an open invite link. OrganizationInviteLinkResponse: properties: invite: $ref: '#/components/schemas/OrganizationInviteResponse' type: object required: - invite title: OrganizationInviteLinkResponse description: Response payload for open invite link creation. OrganizationInviteListResponse: properties: invites: items: $ref: '#/components/schemas/OrganizationInviteResponse' type: array title: Invites type: object required: - invites title: OrganizationInviteListResponse description: Response payload for listing invites. OrganizationInviteProfileAccessRequest: properties: company_profile_id: type: string format: uuid title: Company Profile Id role: $ref: '#/components/schemas/ProjectRoleEnum' type: object required: - company_profile_id - role title: OrganizationInviteProfileAccessRequest description: Request payload for default company profile access on invite acceptance. OrganizationInviteProfileAccessResponse: properties: company_profile_id: type: string format: uuid title: Company Profile Id company_profile_name: anyOf: - type: string - type: 'null' title: Company Profile Name role: type: string title: Role type: object required: - company_profile_id - role title: OrganizationInviteProfileAccessResponse description: Response model for invite profile access summary. OrganizationInviteResponse: properties: id: anyOf: - type: string - type: 'null' title: Id email: anyOf: - type: string format: email - type: 'null' title: Email role: type: string title: Role status: type: string title: Status invite_type: type: string title: Invite Type invited_by: anyOf: - type: string - type: 'null' title: Invited By created_at: type: string title: Created At expires_at: anyOf: - type: string - type: 'null' title: Expires At last_sent_at: anyOf: - type: string - type: 'null' title: Last Sent At accepted_at: anyOf: - type: string - type: 'null' title: Accepted At invite_url: anyOf: - type: string - type: 'null' title: Invite Url use_count: type: integer title: Use Count default: 0 last_used_at: anyOf: - type: string - type: 'null' title: Last Used At company_profile_access: items: $ref: '#/components/schemas/OrganizationInviteProfileAccessResponse' type: array title: Company Profile Access default: [] type: object required: - id - role - status - invite_type - created_at title: OrganizationInviteResponse description: Response model for a single organization invite. OrganizationListItemResponse: properties: id: anyOf: - type: string - type: 'null' title: Id name: type: string title: Name member_count: type: integer title: Member Count user_role: anyOf: - type: string - type: 'null' title: User Role is_owner: type: boolean title: Is Owner subscription_active: type: boolean title: Subscription Active default: false subscription_status: anyOf: - type: string - type: 'null' title: Subscription Status subscription_plan: anyOf: - type: string - type: 'null' title: Subscription Plan subscription_last_reconciled_at: anyOf: - type: string - type: 'null' title: Subscription Last Reconciled At created_at: type: string title: Created At updated_at: type: string title: Updated At type: object required: - id - name - member_count - is_owner - created_at - updated_at title: OrganizationListItemResponse description: Response model for organization list item (lightweight, no full member list). OrganizationMemberResponse: properties: id: anyOf: - type: string - type: 'null' title: Id user_id: anyOf: - type: string - type: 'null' title: User Id name: type: string title: Name email: type: string title: Email role: anyOf: - type: string - type: 'null' title: Role is_owner: type: boolean title: Is Owner joined_at: type: string title: Joined At type: object required: - id - user_id - name - email - is_owner - joined_at title: OrganizationMemberResponse description: Response model for organization member information. OrganizationResponse: properties: id: anyOf: - type: string - type: 'null' title: Id name: type: string title: Name invite_token: anyOf: - type: string - type: 'null' title: Invite Token members: items: $ref: '#/components/schemas/OrganizationMemberResponse' type: array title: Members member_count: type: integer title: Member Count created_at: type: string title: Created At updated_at: type: string title: Updated At type: object required: - id - name - invite_token - members - member_count - created_at - updated_at title: OrganizationResponse description: Response model for organization details with all members. OrganizationRoleEnum: type: string enum: - owner - admin - member title: OrganizationRoleEnum description: Organization-level role options. OrganizationRoleUpdateRequest: properties: role: $ref: '#/components/schemas/OrganizationRoleEnum' description: New role to assign type: object required: - role title: OrganizationRoleUpdateRequest description: Request to update a user's organization role. OverviewAdsCreativePreviewResponse: properties: evidence_id: type: string title: Evidence Id asset_library_id: type: string title: Asset Library Id media_type: type: string title: Media Type platform: type: string title: Platform campaign_name: anyOf: - type: string - type: 'null' title: Campaign Name performance_tier: type: string title: Performance Tier default: learning analyzed_at: anyOf: - type: string - type: 'null' title: Analyzed At type: object required: - evidence_id - asset_library_id - media_type - platform title: OverviewAdsCreativePreviewResponse description: Small, profile-scoped reference to an analyzed visual ad asset. OverviewAdsPerformanceChannelResponse: properties: platform: type: string title: Platform label: type: string title: Label running_campaigns: type: integer title: Running Campaigns default: 0 running_ads: anyOf: - type: integer - type: 'null' title: Running Ads delivery_verified: type: boolean title: Delivery Verified default: false spend_7d: anyOf: - type: number - type: 'null' title: Spend 7D spend_7d_by_currency: additionalProperties: type: number type: object title: Spend 7D By Currency ctr_7d: anyOf: - type: number - type: 'null' title: Ctr 7D conversions_7d: anyOf: - type: number - type: 'null' title: Conversions 7D high_ads: type: integer title: High Ads default: 0 typical_ads: type: integer title: Typical Ads default: 0 low_ads: type: integer title: Low Ads default: 0 learning_ads: type: integer title: Learning Ads default: 0 type: object required: - platform - label title: OverviewAdsPerformanceChannelResponse description: Truthful, bounded paid-media facts for one provider family. OverviewAdsPerformanceSummaryResponse: properties: report_id: type: string title: Report Id run_id: anyOf: - type: string format: uuid - type: 'null' title: Run Id generated_at: anyOf: - type: string format: date-time - type: 'null' title: Generated At report_date: anyOf: - type: string format: date - type: 'null' title: Report Date metric_mode: type: string title: Metric Mode default: production simulation: type: boolean title: Simulation default: false delivery_verified: type: boolean title: Delivery Verified default: false running_ads: anyOf: - type: integer - type: 'null' title: Running Ads spend_7d: anyOf: - type: number - type: 'null' title: Spend 7D spend_7d_by_currency: additionalProperties: type: number type: object title: Spend 7D By Currency ctr_7d: anyOf: - type: number - type: 'null' title: Ctr 7D conversions_7d: anyOf: - type: number - type: 'null' title: Conversions 7D high_ads: type: integer title: High Ads default: 0 typical_ads: type: integer title: Typical Ads default: 0 low_ads: type: integer title: Low Ads default: 0 learning_ads: type: integer title: Learning Ads default: 0 optimization_action_count: type: integer title: Optimization Action Count default: 0 creative_analyzed_count: type: integer title: Creative Analyzed Count default: 0 creative_remaining_count: type: integer title: Creative Remaining Count default: 0 creative_previews: items: $ref: '#/components/schemas/OverviewAdsCreativePreviewResponse' type: array title: Creative Previews channels: items: $ref: '#/components/schemas/OverviewAdsPerformanceChannelResponse' type: array title: Channels type: object required: - report_id title: OverviewAdsPerformanceSummaryResponse description: 'Compact projection of the deterministic Ads Audit report. Currency maps remain intact because totals in unlike currencies must never be combined into a fabricated spend number on Overview.' OverviewAiTeamOutputsResponse: properties: recommendations: items: $ref: '#/components/schemas/AgentTeamRecommendationResponse' type: array title: Recommendations latest_daily_summary: anyOf: - $ref: '#/components/schemas/AgentTeamDailySummaryResponse' - type: 'null' daily_report_projection: anyOf: - $ref: '#/components/schemas/OverviewDailyReportProjectionResponse' - type: 'null' type: object title: OverviewAiTeamOutputsResponse description: Small, already-sanitized payload used by Today's priorities on first paint. OverviewBootstrapResponse: properties: company_profile_id: type: string format: uuid title: Company Profile Id organization_id: anyOf: - type: string format: uuid - type: 'null' title: Organization Id generated_at: type: string format: date-time title: Generated At product_summary: additionalProperties: true type: object title: Product Summary trends_bundle: additionalProperties: true type: object title: Trends Bundle social_summary: anyOf: - $ref: '#/components/schemas/SocialListeningSummaryResponse' - type: 'null' active_team: anyOf: - $ref: '#/components/schemas/AgentTeamDetailResponse' - type: 'null' approvals: $ref: '#/components/schemas/AgentTeamApprovalListResponse' ai_team_outputs: $ref: '#/components/schemas/OverviewAiTeamOutputsResponse' aeo_readiness_summary: anyOf: - additionalProperties: true type: object - type: 'null' title: Aeo Readiness Summary market_intelligence: items: $ref: '#/components/schemas/MarketIntelligenceResponse' type: array title: Market Intelligence competitors: items: $ref: '#/components/schemas/CompetitorInfo' type: array title: Competitors competitor_cards: items: $ref: '#/components/schemas/OverviewCompetitorCardResponse' type: array title: Competitor Cards ad_spend_summary: anyOf: - $ref: '#/components/schemas/CompanyProfileDailySpendSummaryResponse' - type: 'null' mmm_spend_recommendation: anyOf: - $ref: '#/components/schemas/OverviewMmmSpendRecommendationResponse' - type: 'null' productivity_summary: $ref: '#/components/schemas/OverviewProductivitySummaryResponse' errors: additionalProperties: type: string type: object title: Errors type: object required: - company_profile_id - generated_at title: OverviewBootstrapResponse OverviewCompetitorCardResponse: properties: id: type: string title: Id title: type: string title: Title timestamp: type: string title: Timestamp timestampSource: anyOf: - type: string - type: 'null' title: Timestampsource competitorName: type: string title: Competitorname competitorDomain: anyOf: - type: string - type: 'null' title: Competitordomain headline: type: string title: Headline subline: type: string title: Subline heroInsight: type: string title: Heroinsight signals: items: $ref: '#/components/schemas/OverviewCompetitorCardSignalResponse' type: array title: Signals meta: items: type: string type: array title: Meta logoUrl: anyOf: - type: string - type: 'null' title: Logourl mediaUrl: anyOf: - type: string - type: 'null' title: Mediaurl mediaAlt: type: string title: Mediaalt placeholderLabel: type: string title: Placeholderlabel industry: anyOf: - type: string - type: 'null' title: Industry radarMetrics: anyOf: - items: $ref: '#/components/schemas/OverviewCompetitorRadarMetricResponse' type: array - type: 'null' title: Radarmetrics radarState: anyOf: - type: string - type: 'null' title: Radarstate radarProfileSimilarity: anyOf: - type: integer - type: 'null' title: Radarprofilesimilarity type: object required: - id - title - timestamp - competitorName - headline - subline - heroInsight - mediaAlt - placeholderLabel title: OverviewCompetitorCardResponse OverviewCompetitorCardSignalResponse: properties: id: type: string title: Id label: type: string title: Label value: type: string title: Value items: items: type: string type: array title: Items type: object required: - id - label - value title: OverviewCompetitorCardSignalResponse OverviewCompetitorRadarMetricResponse: properties: id: type: string title: Id label: type: string title: Label shortLabel: type: string title: Shortlabel selfScore: type: integer title: Selfscore competitorScore: type: integer title: Competitorscore similarity: type: integer title: Similarity type: object required: - id - label - shortLabel - selfScore - competitorScore - similarity title: OverviewCompetitorRadarMetricResponse OverviewDailyReportBudgetResponse: properties: readiness_tier: anyOf: - type: string - type: 'null' title: Readiness Tier summary: anyOf: - type: string - type: 'null' title: Summary total_label: anyOf: - type: string - type: 'null' title: Total Label type: object title: OverviewDailyReportBudgetResponse OverviewDailyReportProjectionResponse: properties: run_id: anyOf: - type: string format: uuid - type: 'null' title: Run Id headline: anyOf: - type: string - type: 'null' title: Headline executive_summary: anyOf: - type: string - type: 'null' title: Executive Summary director_insight_package: anyOf: - $ref: '#/components/schemas/DirectorInsightPackageResponse' - type: 'null' sections: items: $ref: '#/components/schemas/OverviewDailyReportSectionResponse' type: array title: Sections budget: anyOf: - $ref: '#/components/schemas/OverviewDailyReportBudgetResponse' - type: 'null' ads_performance: anyOf: - $ref: '#/components/schemas/OverviewAdsPerformanceSummaryResponse' - type: 'null' type: object title: OverviewDailyReportProjectionResponse description: Small latest-run projection shared with the Marketing Director report. OverviewDailyReportSectionResponse: properties: agent_id: type: string title: Agent Id label: type: string title: Label summary: anyOf: - type: string - type: 'null' title: Summary action_count: type: integer title: Action Count default: 0 primary_action_title: anyOf: - type: string - type: 'null' title: Primary Action Title type: object required: - agent_id - label title: OverviewDailyReportSectionResponse description: A compact, exact projection of one authored daily-report section. OverviewMmmSpendRecommendationPlatformResponse: properties: key: type: string title: Key label: type: string title: Label current_spend: type: number title: Current Spend default: 0.0 recommended_spend: type: number title: Recommended Spend default: 0.0 current_spend_pct: type: number title: Current Spend Pct default: 0.0 recommended_spend_pct: type: number title: Recommended Spend Pct default: 0.0 change_spend: type: number title: Change Spend default: 0.0 rationale: anyOf: - type: string - type: 'null' title: Rationale type: object required: - key - label title: OverviewMmmSpendRecommendationPlatformResponse OverviewMmmSpendRecommendationResponse: properties: report_id: type: string title: Report Id generated_at: anyOf: - type: string format: date-time - type: 'null' title: Generated At model_type: anyOf: - type: string - type: 'null' title: Model Type confidence_level: anyOf: - type: string - type: 'null' title: Confidence Level source_label: type: string title: Source Label default: MMM total_current_spend: type: number title: Total Current Spend default: 0.0 total_recommended_spend: type: number title: Total Recommended Spend default: 0.0 platforms: items: $ref: '#/components/schemas/OverviewMmmSpendRecommendationPlatformResponse' type: array title: Platforms type: object required: - report_id title: OverviewMmmSpendRecommendationResponse OverviewProductivityBreakdownItem: properties: key: type: string title: Key label: type: string title: Label count: type: integer title: Count default: 0 minutes_each: type: integer title: Minutes Each default: 0 total_minutes: type: integer title: Total Minutes default: 0 contributes_to: items: type: string type: array title: Contributes To type: object required: - key - label title: OverviewProductivityBreakdownItem OverviewProductivitySummaryResponse: properties: data_state: type: string enum: - ready - empty - unavailable title: Data State default: empty window_days: type: integer title: Window Days default: 30 window_start: type: string format: date-time title: Window Start generated_at: type: string format: date-time title: Generated At time_saved_minutes: type: integer title: Time Saved Minutes default: 0 time_saved_label: type: string title: Time Saved Label default: 0 min signals_surfaced: type: integer title: Signals Surfaced default: 0 marketing_outputs: type: integer title: Marketing Outputs default: 0 basis_label: type: string title: Basis Label default: No qualifying activity in the last 30 days yet. breakdown: items: $ref: '#/components/schemas/OverviewProductivityBreakdownItem' type: array title: Breakdown type: object required: - window_start - generated_at title: OverviewProductivitySummaryResponse PDPExperienceTier: type: string enum: - premium - standard - value - luxury title: PDPExperienceTier description: Available experience tiers for PDP generation. PDPGenerationRequest: properties: tier: $ref: '#/components/schemas/PDPExperienceTier' description: Experience tier that determines aesthetic and layout density. tone: type: string minLength: 2 title: Tone description: Copywriting tone (e.g., 'Bold & Confident', 'Friendly and Warm'). selected_images: items: type: string maxLength: 2083 minLength: 1 format: uri type: array maxItems: 5 title: Selected Images description: Ordered list of up to five image URLs to embed in the PDP. include_marketplace: anyOf: - type: boolean - type: 'null' title: Include Marketplace description: Override to force marketplace variant generation. additional_context: anyOf: - type: string - type: 'null' title: Additional Context description: Optional extra instructions or nuances about the PDP. target_audience_segments: anyOf: - items: type: string type: array - type: 'null' title: Target Audience Segments description: Optional list of audience segments to tailor messaging (from cached target audience). type: object required: - tier - tone title: PDPGenerationRequest description: Request payload for PDP generation. PDPGenerationResponse: properties: success: type: boolean title: Success description: Indicates whether generation succeeded. default: true tier: $ref: '#/components/schemas/PDPExperienceTier' description: Tier used during generation. tone: type: string title: Tone description: Tone used during generation. include_marketplace: type: boolean title: Include Marketplace description: Whether a marketplace variant was requested. default: false record_id: anyOf: - type: string format: uuid - type: 'null' title: Record Id description: Identifier of the persisted PDP record, if stored. used_images: items: type: string maxLength: 2083 minLength: 1 format: uri type: array title: Used Images description: Image URLs that were passed to the generator. modern_page: $ref: '#/components/schemas/PDPVariantResponse' description: Modern website PDP variant. marketplace_page: anyOf: - $ref: '#/components/schemas/PDPVariantResponse' - type: 'null' description: Marketplace-style PDP variant, if generated. marketplace_generated: type: boolean title: Marketplace Generated description: True when a marketplace variant was produced. default: false warnings: items: type: string type: array title: Warnings description: Non-blocking warnings encountered during generation. type: object required: - tier - tone - modern_page title: PDPGenerationResponse description: Response payload returned after PDP generation. PDPHistoryItem: properties: id: anyOf: - type: string - type: 'null' title: Id description: Record identifier for the stored PDP. tier: $ref: '#/components/schemas/PDPExperienceTier' description: Experience tier used for the generation. tone: type: string title: Tone description: Tone used for the copy. include_marketplace: type: boolean title: Include Marketplace description: Whether a marketplace variant was requested. marketplace_generated: type: boolean title: Marketplace Generated description: True if a marketplace variant was produced. created_at: type: string format: date-time title: Created At description: Timestamp when the PDP was generated. used_images: items: type: string maxLength: 2083 minLength: 1 format: uri type: array title: Used Images description: Images that informed the generation. type: object required: - id - tier - tone - include_marketplace - marketplace_generated - created_at title: PDPHistoryItem description: Summary of a previously generated PDP. PDPSectionSummary: properties: heading: type: string title: Heading description: Human-friendly heading for the section. intent: anyOf: - type: string - type: 'null' title: Intent description: Goal or purpose of the section (e.g., 'Social proof', 'Feature showcase'). type: object required: - heading title: PDPSectionSummary description: Summary of a key section returned by the generator. PDPVariantResponse: properties: variant: $ref: '#/components/schemas/PDPVariantType' description: Variant type (modern or marketplace). html: type: string title: Html description: Full HTML document with inline CSS for the PDP. seo_title: anyOf: - type: string - type: 'null' title: Seo Title description: Suggested SEO page title. seo_description: anyOf: - type: string - type: 'null' title: Seo Description description: Suggested meta description. primary_cta: anyOf: - type: string - type: 'null' title: Primary Cta description: Recommended primary call-to-action copy. highlights: items: type: string type: array title: Highlights description: Key highlight bullets to reuse elsewhere. sections: items: $ref: '#/components/schemas/PDPSectionSummary' type: array title: Sections description: High-level outline of the sections included in the HTML. diagnostics: anyOf: - {} - type: 'null' title: Diagnostics description: Optional raw diagnostic information from the generator. type: object required: - variant - html title: PDPVariantResponse description: Single PDP variant response. PDPVariantType: type: string enum: - modern - marketplace title: PDPVariantType description: Supported PDP layout variants. PageContext: properties: source: type: string title: Source description: Current Pomo page key where Markee was opened (e.g., product-detail) route: anyOf: - type: string maxLength: 2048 - type: 'null' title: Route description: Markee v2-only browser pathname; excluded from the v1 payload entity_id: anyOf: - type: string - type: 'null' title: Entity Id description: Optional entity identifier (not exposed to users) entity_name: anyOf: - type: string - type: 'null' title: Entity Name description: Human-readable entity name tab: anyOf: - type: string - type: 'null' title: Tab description: Active tab/section when chat opened content: anyOf: - type: string - type: 'null' title: Content description: Optional page content summary for additional grounding extra: anyOf: - additionalProperties: true type: object - type: 'null' title: Extra description: Structured page-specific context for grounding type: object required: - source title: PageContext description: Lightweight page context sent from the UI to help Markee ground responses. PaymentHistoryItemResponse: properties: id: type: string title: Id invoice_id: anyOf: - type: string - type: 'null' title: Invoice Id invoice_number: anyOf: - type: string - type: 'null' title: Invoice Number amount: type: number title: Amount currency: type: string title: Currency status: type: string title: Status description: anyOf: - type: string - type: 'null' title: Description paid_at: anyOf: - type: string - type: 'null' title: Paid At refunded: type: boolean title: Refunded default: false refund_amount: anyOf: - type: number - type: 'null' title: Refund Amount type: object required: - id - amount - currency - status title: PaymentHistoryItemResponse description: Response model for a payment history entry. PaymentHistoryListResponse: properties: status: type: string title: Status payment_history: items: $ref: '#/components/schemas/PaymentHistoryItemResponse' type: array title: Payment History type: object required: - status - payment_history title: PaymentHistoryListResponse description: Response model for payment history. PersonaResponseData: properties: persona_id: type: string format: uuid title: Persona Id persona_name: type: string title: Persona Name interest_level: type: number title: Interest Level purchase_likelihood: type: number title: Purchase Likelihood price_sensitivity: type: string title: Price Sensitivity initial_reaction: type: string title: Initial Reaction perceived_benefits: items: type: string type: array title: Perceived Benefits concerns: items: type: string type: array title: Concerns feature_requests: items: type: string type: array title: Feature Requests would_recommend: type: boolean title: Would Recommend recommendation_reason: type: string title: Recommendation Reason type: object required: - persona_id - persona_name - interest_level - purchase_likelihood - price_sensitivity - initial_reaction - perceived_benefits - concerns - feature_requests - would_recommend - recommendation_reason title: PersonaResponseData PersonaSetCreate: properties: name: type: string title: Name description: anyOf: - type: string - type: 'null' title: Description location: anyOf: - $ref: '#/components/schemas/LocationInfo' - type: 'null' type: object required: - name title: PersonaSetCreate PersonaSetResponse: properties: id: type: string format: uuid title: Id name: type: string title: Name description: anyOf: - type: string - type: 'null' title: Description location: anyOf: - additionalProperties: true type: object - type: 'null' title: Location company_profile_id: type: string format: uuid title: Company Profile Id is_active: type: boolean title: Is Active persona_count: type: integer title: Persona Count created_at: type: string format: date-time title: Created At updated_at: type: string format: date-time title: Updated At type: object required: - id - name - description - location - company_profile_id - is_active - persona_count - created_at - updated_at title: PersonaSetResponse PersonaSetUpdate: properties: name: anyOf: - type: string - type: 'null' title: Name description: anyOf: - type: string - type: 'null' title: Description is_active: anyOf: - type: boolean - type: 'null' title: Is Active type: object title: PersonaSetUpdate PersonalizationValidateRequest: properties: template: type: string title: Template consumer_group_id: anyOf: - type: integer - type: 'null' title: Consumer Group Id type: object required: - template title: PersonalizationValidateRequest description: Request to validate personalization template PlanChangeValidationResponse: properties: is_valid: type: boolean title: Is Valid is_upgrade: type: boolean title: Is Upgrade is_downgrade: type: boolean title: Is Downgrade current_plan: type: string title: Current Plan target_plan: type: string title: Target Plan billing_currency: anyOf: - type: string - type: 'null' title: Billing Currency billing_interval: anyOf: - type: string - type: 'null' title: Billing Interval errors: items: type: string type: array title: Errors default: [] current_usage: additionalProperties: type: integer type: object title: Current Usage default: {} target_limits: additionalProperties: anyOf: - type: integer - type: 'null' type: object title: Target Limits default: {} proration_amount: anyOf: - type: number - type: 'null' title: Proration Amount blocking_items: anyOf: - additionalProperties: items: type: string type: array type: object - type: 'null' title: Blocking Items payment_method: anyOf: - additionalProperties: true type: object - type: 'null' title: Payment Method type: object required: - is_valid - is_upgrade - is_downgrade - current_plan - target_plan title: PlanChangeValidationResponse description: Response model for plan change validation. PlatformDaypartingConfig: properties: enabled: type: boolean title: Enabled timezone: type: string title: Timezone schedule: items: $ref: '#/components/schemas/DaypartingSlot' type: array title: Schedule bid_adjustments: anyOf: - additionalProperties: type: number type: object - type: 'null' title: Bid Adjustments type: object required: - enabled - timezone - schedule title: PlatformDaypartingConfig PlatformIntegrationRequest: properties: platform: type: string pattern: ^(google|meta|amazon)$ title: Platform credentials: additionalProperties: true type: object title: Credentials description: Platform-specific credentials account_ids: anyOf: - items: type: string type: array - type: 'null' title: Account Ids description: List of account IDs to sync sync_frequency: anyOf: - type: string pattern: ^(hourly|daily|weekly)$ - type: 'null' title: Sync Frequency default: daily is_active: anyOf: - type: boolean - type: 'null' title: Is Active description: Whether the integration is active default: true type: object required: - platform - credentials title: PlatformIntegrationRequest description: Request schema for setting up platform integration PostMetricsRequest: properties: post_id: type: string title: Post Id metrics: anyOf: - items: type: string type: array - type: 'null' title: Metrics type: object required: - post_id title: PostMetricsRequest description: Request model for getting Instagram post metrics. PostModel: properties: id: type: string format: uuid title: Id campaign_id: type: string title: Campaign Id idea_number: type: integer title: Idea Number platform: type: string title: Platform variation: type: integer title: Variation default: 0 post_id: anyOf: - type: string - type: 'null' title: Post Id post_url: anyOf: - type: string - type: 'null' title: Post Url posted_at: type: string format: date-time title: Posted At status: type: string title: Status post_metadata: anyOf: - additionalProperties: true type: object - type: 'null' title: Post Metadata type: object required: - id - campaign_id - idea_number - platform - posted_at - status title: PostModel PostResponseModel: properties: id: type: string title: Id type: object required: - id title: PostResponseModel description: Response model for created Instagram post. PresenceListResponse: properties: presence: items: $ref: '#/components/schemas/PresenceRow' type: array title: Presence total: type: integer title: Total type: object required: - presence - total title: PresenceListResponse PresencePingIn: properties: session_id: type: string maxLength: 96 minLength: 1 title: Session Id tab_id: type: string maxLength: 96 minLength: 1 title: Tab Id device_id: anyOf: - type: string maxLength: 96 - type: 'null' title: Device Id route_path: anyOf: - type: string maxLength: 512 - type: 'null' title: Route Path route_template: anyOf: - type: string maxLength: 255 - type: 'null' title: Route Template app_area: anyOf: - type: string maxLength: 96 - type: 'null' title: App Area subview_type: anyOf: - type: string maxLength: 64 - type: 'null' title: Subview Type subview_key: anyOf: - type: string maxLength: 128 - type: 'null' title: Subview Key subview_label: anyOf: - type: string maxLength: 160 - type: 'null' title: Subview Label is_visible: type: boolean title: Is Visible default: true last_interaction_at: anyOf: - type: string format: date-time - type: 'null' title: Last Interaction At last_visible_at: anyOf: - type: string format: date-time - type: 'null' title: Last Visible At metadata: additionalProperties: true type: object title: Metadata type: object required: - session_id - tab_id title: PresencePingIn PresencePingResponse: properties: status: type: string title: Status last_ping_at: type: string format: date-time title: Last Ping At type: object required: - status - last_ping_at title: PresencePingResponse PresenceRow: properties: user_id: type: string title: User Id organization_id: anyOf: - type: string - type: 'null' title: Organization Id company_profile_id: anyOf: - type: string - type: 'null' title: Company Profile Id session_id: type: string title: Session Id tab_id: type: string title: Tab Id device_id: anyOf: - type: string - type: 'null' title: Device Id route_path: anyOf: - type: string - type: 'null' title: Route Path route_template: anyOf: - type: string - type: 'null' title: Route Template app_area: anyOf: - type: string - type: 'null' title: App Area subview_type: anyOf: - type: string - type: 'null' title: Subview Type subview_key: anyOf: - type: string - type: 'null' title: Subview Key subview_label: anyOf: - type: string - type: 'null' title: Subview Label is_visible: type: boolean title: Is Visible activity_status: type: string title: Activity Status last_interaction_at: anyOf: - type: string format: date-time - type: 'null' title: Last Interaction At last_visible_at: anyOf: - type: string format: date-time - type: 'null' title: Last Visible At last_ping_at: type: string format: date-time title: Last Ping At type: object required: - user_id - session_id - tab_id - is_visible - activity_status - last_ping_at title: PresenceRow PresentationDailyReportResponse: properties: version: type: integer title: Version default: 1 run_id: anyOf: - type: string - type: 'null' title: Run Id generated_at: anyOf: - type: string format: date-time - type: 'null' title: Generated At model: anyOf: - type: string - type: 'null' title: Model headline: anyOf: - type: string - type: 'null' title: Headline executive_summary: anyOf: - type: string - type: 'null' title: Executive Summary sections: items: $ref: '#/components/schemas/DailyReportSectionResponse' type: array title: Sections creative_review: items: $ref: '#/components/schemas/DailyReportCreativeResponse' type: array title: Creative Review channel_metrics: anyOf: - $ref: '#/components/schemas/DailyReportChannelMetricsResponse' - type: 'null' marketing_mix: anyOf: - $ref: '#/components/schemas/DailyReportMarketingMixResponse' - type: 'null' director_insight_package: anyOf: - $ref: '#/components/schemas/DirectorInsightPackageResponse' - type: 'null' ads_performance_report: anyOf: - additionalProperties: true type: object - type: 'null' title: Ads Performance Report run_guidance: anyOf: - $ref: '#/components/schemas/AgentTeamRunGuidanceResponse' - type: 'null' type: object title: PresentationDailyReportResponse description: 'AI-authored, presentation-ready daily report rendered faithfully by the UI. Cached on ``AgentTeamRun.stats_json`` at run completion. Absent for older runs, in which case the frontend falls back to the count-based summary.' PreviewRequest: properties: campaign_id: type: integer title: Campaign Id sample_size: type: integer maximum: 20.0 minimum: 1.0 title: Sample Size default: 5 type: object required: - campaign_id title: PreviewRequest description: Request for email preview ProductEventIn: properties: event_name: type: string maxLength: 96 minLength: 1 title: Event Name page_view_id: anyOf: - type: string maxLength: 96 - type: 'null' title: Page View Id route_path: anyOf: - type: string maxLength: 512 - type: 'null' title: Route Path route_template: anyOf: - type: string maxLength: 255 - type: 'null' title: Route Template app_area: anyOf: - type: string maxLength: 96 - type: 'null' title: App Area component_id: anyOf: - type: string maxLength: 128 - type: 'null' title: Component Id action_id: anyOf: - type: string maxLength: 128 - type: 'null' title: Action Id object_type: anyOf: - type: string maxLength: 64 - type: 'null' title: Object Type object_id: anyOf: - type: string maxLength: 128 - type: 'null' title: Object Id subview_type: anyOf: - type: string maxLength: 64 - type: 'null' title: Subview Type subview_key: anyOf: - type: string maxLength: 128 - type: 'null' title: Subview Key subview_label: anyOf: - type: string maxLength: 160 - type: 'null' title: Subview Label duration_ms: anyOf: - type: integer minimum: 0.0 - type: 'null' title: Duration Ms metadata: additionalProperties: true type: object title: Metadata client_timestamp: type: string format: date-time title: Client Timestamp type: object required: - event_name - client_timestamp title: ProductEventIn ProductEventRow: properties: id: type: string title: Id user_id: type: string title: User Id organization_id: anyOf: - type: string - type: 'null' title: Organization Id company_profile_id: anyOf: - type: string - type: 'null' title: Company Profile Id session_id: type: string title: Session Id tab_id: type: string title: Tab Id device_id: anyOf: - type: string - type: 'null' title: Device Id page_view_id: anyOf: - type: string - type: 'null' title: Page View Id event_name: type: string title: Event Name route_path: anyOf: - type: string - type: 'null' title: Route Path route_template: anyOf: - type: string - type: 'null' title: Route Template app_area: anyOf: - type: string - type: 'null' title: App Area component_id: anyOf: - type: string - type: 'null' title: Component Id action_id: anyOf: - type: string - type: 'null' title: Action Id object_type: anyOf: - type: string - type: 'null' title: Object Type object_id: anyOf: - type: string - type: 'null' title: Object Id subview_type: anyOf: - type: string - type: 'null' title: Subview Type subview_key: anyOf: - type: string - type: 'null' title: Subview Key subview_label: anyOf: - type: string - type: 'null' title: Subview Label duration_ms: anyOf: - type: integer - type: 'null' title: Duration Ms metadata: additionalProperties: true type: object title: Metadata client_timestamp: type: string format: date-time title: Client Timestamp server_timestamp: type: string format: date-time title: Server Timestamp type: object required: - id - user_id - session_id - tab_id - event_name - client_timestamp - server_timestamp title: ProductEventRow ProductEventTimelineResponse: properties: events: items: $ref: '#/components/schemas/ProductEventRow' type: array title: Events total: type: integer title: Total type: object required: - events - total title: ProductEventTimelineResponse ProductEventsBatchIn: properties: session_id: type: string maxLength: 96 minLength: 1 title: Session Id tab_id: type: string maxLength: 96 minLength: 1 title: Tab Id device_id: anyOf: - type: string maxLength: 96 - type: 'null' title: Device Id events: items: $ref: '#/components/schemas/ProductEventIn' type: array maxItems: 100 minItems: 1 title: Events type: object required: - session_id - tab_id - events title: ProductEventsBatchIn ProductEventsBatchResponse: properties: accepted: type: integer title: Accepted type: object required: - accepted title: ProductEventsBatchResponse ProductIdea: properties: name: type: string title: Name tagline: type: string title: Tagline description: type: string title: Description target_audience: type: string title: Target Audience key_features: items: type: string type: array title: Key Features unique_value_proposition: type: string title: Unique Value Proposition market_opportunity: type: string title: Market Opportunity competitive_advantage: type: string title: Competitive Advantage price_range: type: string title: Price Range potential_challenges: items: type: string type: array title: Potential Challenges success_metrics: items: type: string type: array title: Success Metrics type: object required: - name - tagline - description - target_audience - key_features - unique_value_proposition - market_opportunity - competitive_advantage - price_range - potential_challenges - success_metrics title: ProductIdea ProductIdeaBrainstormRequest: properties: product_offering_id: anyOf: - type: string format: uuid - type: 'null' title: Product Offering Id company_profile_id: anyOf: - type: string format: uuid - type: 'null' title: Company Profile Id user_input: type: string title: User Input session_title: anyOf: - type: string - type: 'null' title: Session Title type: object required: - user_input title: ProductIdeaBrainstormRequest ProductIdeaResponse: properties: id: type: string format: uuid title: Id product_offering_id: anyOf: - type: string format: uuid - type: 'null' title: Product Offering Id session_title: anyOf: - type: string - type: 'null' title: Session Title user_input: type: string title: User Input product_ideas: items: $ref: '#/components/schemas/ProductIdea' type: array title: Product Ideas context_data: anyOf: - additionalProperties: true type: object - type: 'null' title: Context Data created_at: type: string format: date-time title: Created At type: object required: - id - session_title - user_input - product_ideas - context_data - created_at title: ProductIdeaResponse ProductLaunchTestRequest: properties: launch_session_id: type: string format: uuid title: Launch Session Id product_idea_index: type: integer title: Product Idea Index target_audience_groups: anyOf: - items: type: string type: array - type: 'null' title: Target Audience Groups persona_set_id: anyOf: - type: string format: uuid - type: 'null' title: Persona Set Id type: object required: - launch_session_id - product_idea_index title: ProductLaunchTestRequest ProductLaunchTestResult: properties: id: type: string format: uuid title: Id launch_session_id: type: string format: uuid title: Launch Session Id product_name: type: string title: Product Name product_description: type: string title: Product Description total_personas_tested: type: integer title: Total Personas Tested overall_interest_score: type: number title: Overall Interest Score purchase_intent_score: type: number title: Purchase Intent Score market_fit_score: type: number title: Market Fit Score sentiment_analysis: additionalProperties: true type: object title: Sentiment Analysis key_insights: items: type: string type: array title: Key Insights recommendations: items: type: string type: array title: Recommendations persona_responses: items: $ref: '#/components/schemas/PersonaResponseData' type: array title: Persona Responses test_status: type: string title: Test Status started_at: type: string format: date-time title: Started At completed_at: anyOf: - type: string format: date-time - type: 'null' title: Completed At pagination: anyOf: - additionalProperties: true type: object - type: 'null' title: Pagination type: object required: - id - launch_session_id - product_name - product_description - total_personas_tested - overall_interest_score - purchase_intent_score - market_fit_score - sentiment_analysis - key_insights - recommendations - persona_responses - test_status - started_at - completed_at title: ProductLaunchTestResult ProductOfferingAugmentItem: properties: source: type: string enum: - inventory - custom title: Source inventory_offering_id: anyOf: - type: string - type: 'null' title: Inventory Offering Id custom_offering: anyOf: - $ref: '#/components/schemas/SKU' - type: 'null' notes: anyOf: - type: string - type: 'null' title: Notes type: object required: - source title: ProductOfferingAugmentItem ProductOfferingAugmentRequest: properties: company_profile_id: type: string format: uuid title: Company Profile Id items: items: $ref: '#/components/schemas/ProductOfferingAugmentItem' type: array title: Items type: object required: - company_profile_id - items title: ProductOfferingAugmentRequest ProductOfferingCurrentPriceUpdateRequest: properties: price: type: string maxLength: 255 minLength: 1 title: Price unit: anyOf: - type: string maxLength: 120 - type: 'null' title: Unit type: object required: - price title: ProductOfferingCurrentPriceUpdateRequest ProductOfferingDeleteImageRequest: properties: image_url: type: string maxLength: 4000 minLength: 1 title: Image Url type: object required: - image_url title: ProductOfferingDeleteImageRequest ProductOfferingExtractUrlRequest: properties: company_profile_id: type: string format: uuid title: Company Profile Id page_url: type: string maxLength: 2083 minLength: 1 format: uri title: Page Url workflow_id: anyOf: - type: string format: uuid - type: 'null' title: Workflow Id force_recrawl: anyOf: - type: boolean - type: 'null' title: Force Recrawl default: false type: object required: - company_profile_id - page_url title: ProductOfferingExtractUrlRequest ProductOfferingRewriteRequest: properties: field: type: string enum: - description - key_features title: Field instructions: anyOf: - type: string maxLength: 1500 - type: 'null' title: Instructions type: object required: - field title: ProductOfferingRewriteRequest ProductOfferingUpdateRequest: properties: name: anyOf: - type: string - type: 'null' title: Name description: anyOf: - type: string - type: 'null' title: Description category: anyOf: - type: string - type: 'null' title: Category primary_category: anyOf: - type: string - type: 'null' title: Primary Category subcategories: anyOf: - items: type: string type: array - type: 'null' title: Subcategories tags: anyOf: - items: type: string type: array - type: 'null' title: Tags key_features: anyOf: - items: type: string type: array - type: 'null' title: Key Features source_urls: anyOf: - items: type: string type: array - type: 'null' title: Source Urls status: anyOf: - type: string enum: - active - inactive - draft - type: 'null' title: Status type: object title: ProductOfferingUpdateRequest ProductOfferingUploadImagesResponse: properties: success: type: boolean title: Success uploaded_images: items: $ref: '#/components/schemas/GalleryImageResponse' type: array title: Uploaded Images total: type: integer title: Total default: 0 offering: additionalProperties: true type: object title: Offering type: object required: - success - offering title: ProductOfferingUploadImagesResponse ProductRefreshApplyRequest: properties: source_urls: items: type: string type: array title: Source Urls refresh_urls: items: type: string type: array title: Refresh Urls selected_fields: items: type: string enum: - name - description - primary_category - subcategories - tags - key_features - price_list - images - pricing_analysis - feature_comparison - swot_analysis type: array title: Selected Fields preview_patch: additionalProperties: true type: object title: Preview Patch type: object title: ProductRefreshApplyRequest ProductRefreshPreviewRequest: properties: source_urls: items: type: string type: array title: Source Urls refresh_urls: items: type: string type: array title: Refresh Urls type: object title: ProductRefreshPreviewRequest ProfileContentEditApplyRequest: properties: prompt: type: string maxLength: 2500 title: Prompt default: '' groups: items: $ref: '#/components/schemas/ProfileContentEditEntityChange-Input' type: array title: Groups operations: items: $ref: '#/components/schemas/ProfileContentEditOperation' type: array title: Operations selected_changes: items: $ref: '#/components/schemas/ProfileContentEditSelectedChange' type: array title: Selected Changes selected_operations: items: $ref: '#/components/schemas/ProfileContentEditSelectedOperation' type: array title: Selected Operations type: object title: ProfileContentEditApplyRequest ProfileContentEditApplyResponse: properties: status: type: string const: applied title: Status applied_changes: type: integer title: Applied Changes applied_groups: items: $ref: '#/components/schemas/ProfileContentEditEntityChange-Output' type: array title: Applied Groups applied_operations: items: $ref: '#/components/schemas/ProfileContentEditOperation' type: array title: Applied Operations type: object required: - status - applied_changes title: ProfileContentEditApplyResponse ProfileContentEditDocumentPreviewRequest: properties: prompt: type: string maxLength: 2500 title: Prompt default: '' document_file_ids: items: type: string format: uuid type: array maxItems: 5 minItems: 1 title: Document File Ids targets: $ref: '#/components/schemas/ProfileContentEditTargets' type: object required: - document_file_ids title: ProfileContentEditDocumentPreviewRequest ProfileContentEditEntityChange-Input: properties: entity_type: type: string enum: - company_profile - company_marketing_strategy - product_offering - product_competitive_analysis - product_marketing_strategy title: Entity Type entity_id: type: string title: Entity Id entity_name: type: string title: Entity Name entity_label: type: string title: Entity Label selected_by_default: type: boolean title: Selected By Default default: true changes: items: $ref: '#/components/schemas/ProfileContentEditFieldChange' type: array title: Changes type: object required: - entity_type - entity_id - entity_name - entity_label title: ProfileContentEditEntityChange ProfileContentEditEntityChange-Output: properties: entity_type: type: string enum: - company_profile - company_marketing_strategy - product_offering - product_competitive_analysis - product_marketing_strategy title: Entity Type entity_id: type: string title: Entity Id entity_name: type: string title: Entity Name entity_label: type: string title: Entity Label selected_by_default: type: boolean title: Selected By Default default: true changes: items: $ref: '#/components/schemas/ProfileContentEditFieldChange' type: array title: Changes type: object required: - entity_type - entity_id - entity_name - entity_label title: ProfileContentEditEntityChange ProfileContentEditEvidence: properties: document_file_id: type: string title: Document File Id default: '' filename: type: string title: Filename default: '' excerpt: type: string title: Excerpt default: '' location: type: string title: Location default: '' type: object title: ProfileContentEditEvidence ProfileContentEditFieldChange: properties: field_key: type: string title: Field Key field_label: type: string title: Field Label before: type: string title: Before after: type: string title: After before_value: title: Before Value after_value: title: After Value confidence: type: string enum: - low - medium - high title: Confidence default: medium rationale: type: string title: Rationale default: '' evidence: items: $ref: '#/components/schemas/ProfileContentEditEvidence' type: array title: Evidence selected_by_default: type: boolean title: Selected By Default default: true type: object required: - field_key - field_label - before - after title: ProfileContentEditFieldChange ProfileContentEditOperation: properties: operation_type: type: string enum: - archive_product_offering - create_product_offering title: Operation Type entity_type: type: string const: product_offering title: Entity Type default: product_offering entity_id: type: string title: Entity Id entity_name: type: string title: Entity Name entity_label: type: string title: Entity Label default: Product offering operation_label: type: string title: Operation Label before: type: string title: Before after: type: string title: After after_value: title: After Value confidence: type: string enum: - low - medium - high title: Confidence default: medium rationale: type: string title: Rationale default: '' evidence: items: $ref: '#/components/schemas/ProfileContentEditEvidence' type: array title: Evidence selected_by_default: type: boolean title: Selected By Default default: true type: object required: - operation_type - entity_id - entity_name - operation_label - before - after title: ProfileContentEditOperation ProfileContentEditPreviewRequest: properties: prompt: type: string maxLength: 2500 minLength: 3 title: Prompt targets: $ref: '#/components/schemas/ProfileContentEditTargets' type: object required: - prompt title: ProfileContentEditPreviewRequest ProfileContentEditPreviewResponse: properties: status: type: string enum: - ready - unchanged title: Status summary: type: string title: Summary groups: items: $ref: '#/components/schemas/ProfileContentEditEntityChange-Output' type: array title: Groups operations: items: $ref: '#/components/schemas/ProfileContentEditOperation' type: array title: Operations total_changes: type: integer title: Total Changes default: 0 type: object required: - status - summary title: ProfileContentEditPreviewResponse ProfileContentEditSelectedChange: properties: entity_type: type: string enum: - company_profile - company_marketing_strategy - product_offering - product_competitive_analysis - product_marketing_strategy title: Entity Type entity_id: type: string title: Entity Id field_key: type: string title: Field Key type: object required: - entity_type - entity_id - field_key title: ProfileContentEditSelectedChange ProfileContentEditSelectedOperation: properties: operation_type: type: string enum: - archive_product_offering - create_product_offering title: Operation Type entity_type: type: string const: product_offering title: Entity Type default: product_offering entity_id: type: string title: Entity Id type: object required: - operation_type - entity_id title: ProfileContentEditSelectedOperation ProfileContentEditTargets: properties: company_profile: type: boolean title: Company Profile default: true product_offering_ids: items: type: string format: uuid type: array title: Product Offering Ids include_all_product_offerings: type: boolean title: Include All Product Offerings default: false type: object title: ProfileContentEditTargets ProgrammaticCampaignGenerationItem: properties: idea_id: type: string minLength: 1 title: Idea Id social_or_ads: anyOf: - type: string enum: - social - ads - type: 'null' title: Social Or Ads platforms: anyOf: - items: type: string type: array - type: 'null' title: Platforms type: object required: - idea_id title: ProgrammaticCampaignGenerationItem ProgrammaticCampaignGenerationRequest: properties: items: items: $ref: '#/components/schemas/ProgrammaticCampaignGenerationItem' type: array maxItems: 10 minItems: 1 title: Items type: object required: - items title: ProgrammaticCampaignGenerationRequest ProgrammaticCampaignGenerationResponse: properties: organization_id: type: string title: Organization Id company_profile_id: type: string title: Company Profile Id request_id: anyOf: - type: string - type: 'null' title: Request Id results: items: $ref: '#/components/schemas/ProgrammaticCampaignGenerationResult' type: array title: Results type: object required: - organization_id - company_profile_id - results title: ProgrammaticCampaignGenerationResponse ProgrammaticCampaignGenerationResult: properties: campaign_idea_id: type: string title: Campaign Idea Id campaign_type: type: string title: Campaign Type platforms: items: type: string type: array title: Platforms status: type: string title: Status output: anyOf: - additionalProperties: true type: object - type: 'null' title: Output error: anyOf: - type: string - type: 'null' title: Error type: object required: - campaign_idea_id - campaign_type - platforms - status title: ProgrammaticCampaignGenerationResult ProgrammaticCampaignIdeasRequest: properties: campaign_goal: type: string maxLength: 2000 minLength: 1 title: Campaign Goal target_audience: type: string maxLength: 2000 minLength: 1 title: Target Audience num_ideas: type: integer maximum: 30.0 minimum: 1.0 title: Num Ideas platform: type: string enum: - meta - google - tiktok - linkedin title: Platform social_or_ads: type: string enum: - social - ads title: Social Or Ads default: social type: object required: - campaign_goal - target_audience - num_ideas - platform title: ProgrammaticCampaignIdeasRequest ProgrammaticCampaignIdeasResponse: properties: campaign_goal: type: string title: Campaign Goal target_audience_input: type: string title: Target Audience Input target_audiences: items: additionalProperties: true type: object type: array title: Target Audiences campaign_ideas: items: additionalProperties: true type: object type: array title: Campaign Ideas platform: type: string enum: - meta - google - tiktok - linkedin title: Platform social_or_ads: type: string enum: - social - ads title: Social Or Ads num_ideas: type: integer title: Num Ideas organization_id: type: string title: Organization Id company_profile_id: type: string title: Company Profile Id request_id: anyOf: - type: string - type: 'null' title: Request Id type: object required: - campaign_goal - target_audience_input - target_audiences - campaign_ideas - platform - social_or_ads - num_ideas - organization_id - company_profile_id title: ProgrammaticCampaignIdeasResponse ProjectRoleEnum: type: string enum: - admin - contributor - observer title: ProjectRoleEnum description: Project-level role options (for company profiles). PublicDispositionKind: type: string enum: - answered - partial - needs_input - declined - no_answer - cancelled - failed title: PublicDispositionKind description: 'Closed customer meaning for one terminal assistant execution. Runtime lifecycle and internal stop causes remain separate. Unknown internal outcomes must be projected to ``FAILED`` with an ``unknown_terminal_outcome`` reason before crossing this public boundary.' PublicExecutionStep: properties: step_id: anyOf: - type: string maxLength: 128 pattern: ^[a-z][a-z0-9]*(?:[._-][a-z0-9]+)*$ - type: 'null' title: Step Id description: Optional stable machine identity for reconciling one public step across live snapshot revisions. It is not user-visible. category: type: string maxLength: 64 minLength: 1 pattern: ^[a-z][a-z0-9]*(?:[._-][a-z0-9]+)*$ title: Category code: type: string maxLength: 128 minLength: 1 pattern: ^[a-z][a-z0-9]*(?:[._-][a-z0-9]+)*$ title: Code state: type: string maxLength: 64 minLength: 1 pattern: ^[a-z][a-z0-9]*(?:[._-][a-z0-9]+)*$ title: State terminal: type: boolean title: Terminal title: type: string maxLength: 160 minLength: 1 title: Title detail: anyOf: - type: string maxLength: 500 minLength: 1 - type: 'null' title: Detail duration_ms: anyOf: - type: integer maximum: 9007199254740991.0 minimum: 0.0 - type: 'null' title: Duration Ms cost_micros: anyOf: - type: integer minimum: 0.0 - type: 'null' title: Cost Micros input_tokens: anyOf: - type: integer minimum: 0.0 - type: 'null' title: Input Tokens output_tokens: anyOf: - type: integer minimum: 0.0 - type: 'null' title: Output Tokens cached_input_tokens: anyOf: - type: integer minimum: 0.0 - type: 'null' title: Cached Input Tokens result_count: anyOf: - type: integer maximum: 1000000.0 minimum: 0.0 - type: 'null' title: Result Count total_count: anyOf: - type: integer maximum: 1000000.0 minimum: 0.0 - type: 'null' title: Total Count result_state: anyOf: - type: string maxLength: 64 minLength: 1 pattern: ^[a-z][a-z0-9]*(?:[._-][a-z0-9]+)*$ - type: 'null' title: Result State type: object required: - category - code - state - terminal - title title: PublicExecutionStep description: 'One bounded, presentation-ready item in a public execution snapshot. The optional result fields are public operational facts, never model reasoning or raw tool arguments. They let clients explain what a step accomplished without parsing display copy.' PublicExecutionSummary: properties: api_version: type: string maxLength: 64 pattern: ^pomo\.agent\.execution/v[1-9][0-9]*$ title: Api Version default: pomo.agent.execution/v1 execution_id: type: string format: uuid title: Execution Id revision: type: integer minimum: 0.0 title: Revision default: 0 state: type: string maxLength: 64 minLength: 1 pattern: ^[a-z][a-z0-9]*(?:[._-][a-z0-9]+)*$ title: State terminal: type: boolean title: Terminal outcome: anyOf: - type: string maxLength: 64 minLength: 1 pattern: ^[a-z][a-z0-9]*(?:[._-][a-z0-9]+)*$ - type: 'null' title: Outcome disposition: anyOf: - $ref: '#/components/schemas/PublicTerminalDisposition' - type: 'null' progress: anyOf: - type: number maximum: 1.0 minimum: 0.0 - type: 'null' title: Progress summary: anyOf: - type: string maxLength: 2000 minLength: 1 - type: 'null' title: Summary started_at: anyOf: - type: string format: date-time - type: 'null' title: Started At completed_at: anyOf: - type: string format: date-time - type: 'null' title: Completed At duration_ms: anyOf: - type: integer maximum: 9007199254740991.0 minimum: 0.0 - type: 'null' title: Duration Ms cost_micros: anyOf: - type: integer minimum: 0.0 - type: 'null' title: Cost Micros total_step_count: type: integer maximum: 1000000.0 minimum: 0.0 title: Total Step Count default: 0 omitted_step_count: type: integer maximum: 1000000.0 minimum: 0.0 title: Omitted Step Count default: 0 steps: items: $ref: '#/components/schemas/PublicExecutionStep' type: array maxItems: 40 title: Steps default: [] type: object required: - execution_id - state - terminal title: PublicExecutionSummary description: A complete public snapshot of one assistant execution. PublicTerminalDisposition: properties: schema_version: type: string const: pomo.public-disposition/v1 title: Schema Version default: pomo.public-disposition/v1 kind: $ref: '#/components/schemas/PublicDispositionKind' reason: anyOf: - type: string maxLength: 128 minLength: 1 pattern: ^[a-z][a-z0-9]*(?:[._-][a-z0-9]+)*$ - type: 'null' title: Reason type: object required: - kind title: PublicTerminalDisposition description: Versioned, server-authored customer meaning for a terminal result. QBCustomerSummaryResponse: properties: customer_id: type: string title: Customer Id customer_name: anyOf: - type: string - type: 'null' title: Customer Name total_invoiced_cents: type: integer title: Total Invoiced Cents total_received_cents: type: integer title: Total Received Cents outstanding_balance_cents: type: integer title: Outstanding Balance Cents invoice_count: type: integer title: Invoice Count first_transaction_date: anyOf: - type: string format: date - type: 'null' title: First Transaction Date last_transaction_date: anyOf: - type: string format: date - type: 'null' title: Last Transaction Date type: object required: - customer_id - customer_name - total_invoiced_cents - total_received_cents - outstanding_balance_cents - invoice_count - first_transaction_date - last_transaction_date title: QBCustomerSummaryResponse description: Customer sales summary response. QBDailyFinancialsFullResponse: properties: metric_date: type: string format: date title: Metric Date invoice_total_cents: type: integer title: Invoice Total Cents sales_receipt_total_cents: type: integer title: Sales Receipt Total Cents gross_sales_cents: type: integer title: Gross Sales Cents payment_total_cents: type: integer title: Payment Total Cents deposit_total_cents: type: integer title: Deposit Total Cents credit_memo_total_cents: type: integer title: Credit Memo Total Cents refund_total_cents: type: integer title: Refund Total Cents net_sales_cents: type: integer title: Net Sales Cents bill_total_cents: type: integer title: Bill Total Cents purchase_total_cents: type: integer title: Purchase Total Cents total_expenses_cents: type: integer title: Total Expenses Cents net_cash_flow_cents: type: integer title: Net Cash Flow Cents invoice_count: type: integer title: Invoice Count sales_receipt_count: type: integer title: Sales Receipt Count payment_count: type: integer title: Payment Count deposit_count: type: integer title: Deposit Count credit_memo_count: type: integer title: Credit Memo Count refund_count: type: integer title: Refund Count bill_count: type: integer title: Bill Count purchase_count: type: integer title: Purchase Count type: object required: - metric_date - invoice_total_cents - sales_receipt_total_cents - gross_sales_cents - payment_total_cents - deposit_total_cents - credit_memo_total_cents - refund_total_cents - net_sales_cents - bill_total_cents - purchase_total_cents - total_expenses_cents - net_cash_flow_cents - invoice_count - sales_receipt_count - payment_count - deposit_count - credit_memo_count - refund_count - bill_count - purchase_count title: QBDailyFinancialsFullResponse description: Full daily QuickBooks financials with all entity-level columns. QBDailyFinancialsResponse: properties: metric_date: type: string format: date title: Metric Date gross_sales_cents: type: integer title: Gross Sales Cents net_sales_cents: type: integer title: Net Sales Cents total_expenses_cents: type: integer title: Total Expenses Cents net_cash_flow_cents: type: integer title: Net Cash Flow Cents invoice_count: type: integer title: Invoice Count bill_count: type: integer title: Bill Count type: object required: - metric_date - gross_sales_cents - net_sales_cents - total_expenses_cents - net_cash_flow_cents - invoice_count - bill_count title: QBDailyFinancialsResponse description: Daily QuickBooks financial metrics response. QBDailyMarketingByCategoryResponse: properties: metric_date: type: string format: date title: Metric Date marketing_category: type: string title: Marketing Category entity_type: type: string title: Entity Type expense_count: type: integer title: Expense Count total_marketing_cents: type: integer title: Total Marketing Cents split_count: type: integer title: Split Count type: object required: - metric_date - marketing_category - entity_type - expense_count - total_marketing_cents - split_count title: QBDailyMarketingByCategoryResponse description: Daily marketing spend by category response. QBDailyMarketingSpendResponse: properties: metric_date: type: string format: date title: Metric Date total_marketing_cents: type: integer title: Total Marketing Cents type: object required: - metric_date - total_marketing_cents title: QBDailyMarketingSpendResponse description: Daily marketing spend total response. QBMarketingAnnotationResponse: properties: qb_token: type: string title: Qb Token entity_type: type: string enum: - bill - purchase title: Entity Type qb_is_marketing_expense: type: boolean title: Qb Is Marketing Expense default: false qb_marketing_category: anyOf: - type: string - type: 'null' title: Qb Marketing Category qb_marketing_category_confidence: anyOf: - type: number - type: 'null' title: Qb Marketing Category Confidence qb_marketing_reason: anyOf: - type: string - type: 'null' title: Qb Marketing Reason qb_marketing_source: anyOf: - type: string - type: 'null' title: Qb Marketing Source qb_has_splits: type: boolean title: Qb Has Splits default: false type: object required: - qb_token - entity_type title: QBMarketingAnnotationResponse description: Lightweight response for annotation writes (no transaction data needed). QBMarketingByCategoryResponse: properties: year_month: type: string title: Year Month marketing_category: type: string title: Marketing Category entity_type: type: string title: Entity Type expense_count: type: integer title: Expense Count total_marketing_cents: type: integer title: Total Marketing Cents split_count: type: integer title: Split Count type: object required: - year_month - marketing_category - entity_type - expense_count - total_marketing_cents - split_count title: QBMarketingByCategoryResponse description: Monthly marketing spend by category response. QBMonthlyFinancialsResponse: properties: year_month: type: string title: Year Month total_transaction_count: type: integer title: Total Transaction Count gross_sales_cents: type: integer title: Gross Sales Cents payments_received_cents: type: integer title: Payments Received Cents total_adjustments_cents: type: integer title: Total Adjustments Cents net_sales_cents: type: integer title: Net Sales Cents total_expenses_cents: type: integer title: Total Expenses Cents net_cash_flow_cents: type: integer title: Net Cash Flow Cents gross_sales_mom_pct: anyOf: - type: number - type: 'null' title: Gross Sales Mom Pct expenses_mom_pct: anyOf: - type: number - type: 'null' title: Expenses Mom Pct type: object required: - year_month - total_transaction_count - gross_sales_cents - payments_received_cents - total_adjustments_cents - net_sales_cents - total_expenses_cents - net_cash_flow_cents - gross_sales_mom_pct - expenses_mom_pct title: QBMonthlyFinancialsResponse description: Monthly QuickBooks financials with MoM trends response. QBRangeSummaryResponse: properties: total_gross_sales_cents: type: integer title: Total Gross Sales Cents total_net_sales_cents: type: integer title: Total Net Sales Cents total_expenses_cents: type: integer title: Total Expenses Cents total_net_cash_flow_cents: type: integer title: Total Net Cash Flow Cents total_invoices: type: integer title: Total Invoices total_bills: type: integer title: Total Bills total_payments: type: integer title: Total Payments avg_daily_sales_cents: type: integer title: Avg Daily Sales Cents avg_daily_expenses_cents: type: integer title: Avg Daily Expenses Cents total_deposit_cents: type: integer title: Total Deposit Cents total_refund_cents: type: integer title: Total Refund Cents total_marketing_cents: type: integer title: Total Marketing Cents type: object required: - total_gross_sales_cents - total_net_sales_cents - total_expenses_cents - total_net_cash_flow_cents - total_invoices - total_bills - total_payments - avg_daily_sales_cents - avg_daily_expenses_cents - total_deposit_cents - total_refund_cents - total_marketing_cents title: QBRangeSummaryResponse description: QuickBooks summary for a date range response. QBSalesByProductResponse: properties: item_ref_id: type: string title: Item Ref Id item_ref_name: anyOf: - type: string - type: 'null' title: Item Ref Name quantity_sold: type: number title: Quantity Sold total_revenue_cents: type: integer title: Total Revenue Cents avg_unit_price_cents: type: integer title: Avg Unit Price Cents first_sale_date: anyOf: - type: string format: date - type: 'null' title: First Sale Date last_sale_date: anyOf: - type: string format: date - type: 'null' title: Last Sale Date invoice_count: type: integer title: Invoice Count type: object required: - item_ref_id - item_ref_name - quantity_sold - total_revenue_cents - avg_unit_price_cents - first_sale_date - last_sale_date - invoice_count title: QBSalesByProductResponse description: Product-level sales summary response. QBTransactionResponse: properties: entity_type: type: string title: Entity Type qb_token: type: string title: Qb Token qb_id: type: string title: Qb Id txn_date: type: string format: date title: Txn Date doc_number: anyOf: - type: string - type: 'null' title: Doc Number customer_name: anyOf: - type: string - type: 'null' title: Customer Name vendor_name: anyOf: - type: string - type: 'null' title: Vendor Name account_name: anyOf: - type: string - type: 'null' title: Account Name total_cents: type: integer title: Total Cents balance_cents: anyOf: - type: integer - type: 'null' title: Balance Cents is_marketing: anyOf: - type: boolean - type: 'null' title: Is Marketing marketing_category: anyOf: - type: string - type: 'null' title: Marketing Category marketing_confidence: anyOf: - type: number - type: 'null' title: Marketing Confidence marketing_source: anyOf: - type: string - type: 'null' title: Marketing Source has_splits: type: boolean title: Has Splits default: false type: object required: - entity_type - qb_token - qb_id - txn_date - total_cents title: QBTransactionResponse description: Single QuickBooks transaction from Silver tables. QBVendorSummaryResponse: properties: vendor_id: type: string title: Vendor Id vendor_name: anyOf: - type: string - type: 'null' title: Vendor Name total_expenses_cents: type: integer title: Total Expenses Cents outstanding_balance_cents: type: integer title: Outstanding Balance Cents bill_count: type: integer title: Bill Count purchase_count: type: integer title: Purchase Count first_transaction_date: anyOf: - type: string format: date - type: 'null' title: First Transaction Date last_transaction_date: anyOf: - type: string format: date - type: 'null' title: Last Transaction Date type: object required: - vendor_id - vendor_name - total_expenses_cents - outstanding_balance_cents - bill_count - purchase_count - first_transaction_date - last_transaction_date title: QBVendorSummaryResponse description: Vendor expense summary response. QuickBooksAuditEventRow: properties: id: type: string title: Id timestamp: type: string format: date-time title: Timestamp actor_user_id: anyOf: - type: string - type: 'null' title: Actor User Id actor_user_email: anyOf: - type: string - type: 'null' title: Actor User Email action: type: string title: Action metadata: anyOf: - additionalProperties: true type: object - type: 'null' title: Metadata type: object required: - id - timestamp - action title: QuickBooksAuditEventRow QuickBooksAuditResponse: properties: events: items: $ref: '#/components/schemas/QuickBooksAuditEventRow' type: array title: Events type: object required: - events title: QuickBooksAuditResponse QuickBooksExpenseAnnotateRequest: properties: qb_is_marketing_expense: type: boolean title: Qb Is Marketing Expense description: Whether this transaction is marketing spend qb_marketing_category: anyOf: - type: string - type: 'null' title: Qb Marketing Category description: Marketing category (required when qb_is_marketing_expense=true) qb_marketing_reason: anyOf: - type: string - type: 'null' title: Qb Marketing Reason description: User-provided annotation reason type: object required: - qb_is_marketing_expense title: QuickBooksExpenseAnnotateRequest QuickBooksExpenseBulkAnnotateRequest: properties: qb_tokens: items: type: string type: array title: Qb Tokens qb_is_marketing_expense: type: boolean title: Qb Is Marketing Expense qb_marketing_category: anyOf: - type: string - type: 'null' title: Qb Marketing Category qb_marketing_reason: anyOf: - type: string - type: 'null' title: Qb Marketing Reason type: object required: - qb_tokens - qb_is_marketing_expense title: QuickBooksExpenseBulkAnnotateRequest QuickBooksExpenseBulkAnnotateResponse: properties: updated: type: integer title: Updated default: 0 type: object title: QuickBooksExpenseBulkAnnotateResponse QuickBooksExpenseSplitRow: properties: id: type: string title: Id qb_is_marketing_expense: type: boolean title: Qb Is Marketing Expense qb_marketing_category: anyOf: - type: string - type: 'null' title: Qb Marketing Category amount: type: number title: Amount note: anyOf: - type: string - type: 'null' title: Note type: object required: - id - qb_is_marketing_expense - amount title: QuickBooksExpenseSplitRow QuickBooksExpenseSplitUpsert: properties: qb_is_marketing_expense: type: boolean title: Qb Is Marketing Expense default: true qb_marketing_category: anyOf: - type: string - type: 'null' title: Qb Marketing Category amount: type: number title: Amount note: anyOf: - type: string - type: 'null' title: Note type: object required: - amount title: QuickBooksExpenseSplitUpsert QuickBooksExpenseSplitsResponse: properties: qb_token: type: string title: Qb Token entity_type: type: string enum: - bill - purchase title: Entity Type splits: items: $ref: '#/components/schemas/QuickBooksExpenseSplitRow' type: array title: Splits type: object required: - qb_token - entity_type - splits title: QuickBooksExpenseSplitsResponse QuickBooksExpenseSplitsUpdateRequest: properties: splits: items: $ref: '#/components/schemas/QuickBooksExpenseSplitUpsert' type: array title: Splits expense_total_amt: anyOf: - type: number - type: 'null' title: Expense Total Amt description: Parent expense total in dollars (for server-side validation) type: object required: - splits title: QuickBooksExpenseSplitsUpdateRequest QuickBooksMappingCreateRequest: properties: match_field: type: string enum: - vendor - account title: Match Field match_text: type: string title: Match Text qb_is_marketing_expense: type: boolean title: Qb Is Marketing Expense default: true qb_marketing_category: anyOf: - type: string - type: 'null' title: Qb Marketing Category type: object required: - match_field - match_text title: QuickBooksMappingCreateRequest QuickBooksMappingRow: properties: id: type: string title: Id match_field: type: string enum: - vendor - account title: Match Field match_text: type: string title: Match Text qb_is_marketing_expense: type: boolean title: Qb Is Marketing Expense qb_marketing_category: anyOf: - type: string - type: 'null' title: Qb Marketing Category created_at: anyOf: - type: string format: date-time - type: 'null' title: Created At updated_at: anyOf: - type: string format: date-time - type: 'null' title: Updated At type: object required: - id - match_field - match_text - qb_is_marketing_expense title: QuickBooksMappingRow QuickBooksMappingUpdateRequest: properties: match_field: anyOf: - type: string enum: - vendor - account - type: 'null' title: Match Field match_text: anyOf: - type: string - type: 'null' title: Match Text qb_is_marketing_expense: anyOf: - type: boolean - type: 'null' title: Qb Is Marketing Expense qb_marketing_category: anyOf: - type: string - type: 'null' title: Qb Marketing Category type: object title: QuickBooksMappingUpdateRequest QuickBooksReviewQueueRow: properties: entity_type: type: string enum: - bill - purchase title: Entity Type qb_token: type: string title: Qb Token qb_id: type: string title: Qb Id qb_txn_date: anyOf: - type: string format: date - type: 'null' title: Qb Txn Date qb_vendor_name: anyOf: - type: string - type: 'null' title: Qb Vendor Name qb_account_name: anyOf: - type: string - type: 'null' title: Qb Account Name qb_total_amt: anyOf: - type: number - type: 'null' title: Qb Total Amt qb_is_marketing_expense: type: boolean title: Qb Is Marketing Expense default: false qb_marketing_category: anyOf: - type: string - type: 'null' title: Qb Marketing Category qb_marketing_category_confidence: anyOf: - type: number - type: 'null' title: Qb Marketing Category Confidence qb_marketing_source: anyOf: - type: string - type: 'null' title: Qb Marketing Source qb_has_splits: type: boolean title: Qb Has Splits default: false flags: items: type: string enum: - uncategorized - low_confidence - large_amount - unmapped_vendor type: array title: Flags type: object required: - entity_type - qb_token - qb_id title: QuickBooksReviewQueueRow QuickBooksStatusResponseModel: properties: connected: type: boolean title: Connected description: Whether the platform is connected healthy: type: boolean title: Healthy description: Whether the token is healthy (passed API check) default: false health_message: anyOf: - type: string - type: 'null' title: Health Message description: Health check result message account_id: anyOf: - type: string - type: 'null' title: Account Id description: Platform-specific account identifier account_name: anyOf: - type: string - type: 'null' title: Account Name description: Display name for the account token_expires_soon: type: boolean title: Token Expires Soon description: Whether token expires within buffer period default: false last_health_check: anyOf: - type: string - type: 'null' title: Last Health Check description: ISO timestamp of last health check realm_id: anyOf: - type: string - type: 'null' title: Realm Id description: QuickBooks company realm ID company_name: anyOf: - type: string - type: 'null' title: Company Name description: Company name from QBO CompanyInfo type: object required: - connected title: QuickBooksStatusResponseModel description: Connection status with optional health check. example: account_id: shop_12345 account_name: My Store connected: true health_message: Token is valid healthy: true last_health_check: '2024-01-15T10:30:00Z' token_expires_soon: false ReferencedDocument: properties: document_id: type: string title: Document Id description: Source document ID (CompanyAnalysisFile) filename: type: string title: Filename description: Original filename file_type: anyOf: - type: string - type: 'null' title: File Type description: MIME type of the file type: type: string title: Type description: 'Content type: ''document'' or ''image''' default: document type: object required: - document_id - filename title: ReferencedDocument description: 'Document referenced in a chat response. Tracks which company documents were used to generate the response, allowing the UI to display file references.' example: document_id: 123e4567-e89b-12d3-a456-426614174010 file_type: application/pdf filename: pitch_deck.pdf type: document RefreshAnalyticsRequest: properties: platforms: anyOf: - items: type: string type: array - type: 'null' title: Platforms description: Platforms to refresh. If None, refresh all. campaign_ids: anyOf: - items: type: string type: array - type: 'null' title: Campaign Ids description: Specific campaign IDs to refresh force: type: boolean title: Force description: Force refresh even if recently synced default: false type: object title: RefreshAnalyticsRequest description: Request schema for refreshing analytics RegistrationFormData: properties: name: type: string title: Name company: type: string title: Company title: type: string title: Title company_link: type: string title: Company Link selected_plan: type: string title: Selected Plan default: gold billing_interval: anyOf: - type: string - type: 'null' title: Billing Interval tos_hash: type: string title: Tos Hash tos_version: anyOf: - type: string - type: 'null' title: Tos Version recaptcha_token: anyOf: - type: string - type: 'null' title: Recaptcha Token type: object required: - name - company - title - company_link - tos_hash title: RegistrationFormData description: 'Registration form data for NEW users creating their own organization. For accepting invitations, use AcceptInvitationRequest instead.' RegistrationResponse: properties: success: type: boolean title: Success message: type: string title: Message user_id: anyOf: - type: string format: uuid - type: 'null' title: User Id organization_id: anyOf: - type: string format: uuid - type: 'null' title: Organization Id organization_name: anyOf: - type: string - type: 'null' title: Organization Name on_waitlist: anyOf: - type: boolean - type: 'null' title: On Waitlist default: false waitlist_position: anyOf: - type: integer - type: 'null' title: Waitlist Position type: object required: - success - message title: RegistrationResponse description: Response from registration endpoint (new users creating their own organization). RegistrationTouchRequest: properties: event_name: type: string title: Event Name path: anyOf: - type: string - type: 'null' title: Path phase: anyOf: - type: string - type: 'null' title: Phase metadata: anyOf: - additionalProperties: true type: object - type: 'null' title: Metadata type: object required: - event_name title: RegistrationTouchRequest description: Record a pre-registration page or lifecycle event after Clerk auth. RegistrationTouchResponse: properties: success: type: boolean title: Success registration_lead_id: type: string format: uuid title: Registration Lead Id registration_event_id: type: string format: uuid title: Registration Event Id current_phase: type: string title: Current Phase type: object required: - success - registration_lead_id - registration_event_id - current_phase title: RegistrationTouchResponse description: Response after recording a registration funnel event. ReleaseAnnouncementClaimRequest: properties: spotlight_release_id: type: string maxLength: 128 minLength: 1 title: Spotlight Release Id description: Stable ID of the release shown as the digest spotlight release_ids: items: type: string type: array maxItems: 50 minItems: 1 title: Release Ids description: Stable IDs covered by the announcement digest additionalProperties: false type: object required: - spotlight_release_id - release_ids title: ReleaseAnnouncementClaimRequest description: Claim one release-announcement spotlight and its visible digest. ReleaseAnnouncementClaimResponse: properties: claimed: type: boolean title: Claimed spotlight_release_id: type: string title: Spotlight Release Id covered_release_ids: items: type: string type: array title: Covered Release Ids claimed_at: type: string format: date-time title: Claimed At type: object required: - claimed - spotlight_release_id - covered_release_ids - claimed_at title: ReleaseAnnouncementClaimResponse description: Result of atomically claiming a release-announcement spotlight. ReplaceImageRequest: properties: url: type: string title: Url image_data: type: string title: Image Data content_type: anyOf: - type: string - type: 'null' title: Content Type type: object required: - url - image_data title: ReplaceImageRequest description: Request model for replacing an image. ResolvedCitationResponse: properties: ordinal: type: integer maximum: 8.0 minimum: 1.0 title: Ordinal claim_keys: items: type: string type: array maxItems: 20 minItems: 1 title: Claim Keys source_id: type: string pattern: ^web_[0-9a-f]{32}$ title: Source Id title: type: string maxLength: 1000 minLength: 1 title: Title publisher: type: string maxLength: 253 minLength: 1 title: Publisher url: type: string maxLength: 4096 minLength: 8 title: Url source_excerpt: type: string maxLength: 1000 minLength: 1 title: Source Excerpt published_at: anyOf: - type: string format: date-time - type: 'null' title: Published At last_updated_at: anyOf: - type: string format: date-time - type: 'null' title: Last Updated At observed_at: type: string format: date-time title: Observed At evidence_level: type: string enum: - search_excerpt - inspected_page title: Evidence Level type: object required: - ordinal - claim_keys - source_id - title - publisher - url - source_excerpt - observed_at - evidence_level title: ResolvedCitationResponse description: Safe public projection of one server-resolved citation. ResolvedWorkspaceAttributionResponse: properties: ordinal: type: integer maximum: 8.0 minimum: 1.0 title: Ordinal source_label: type: string maxLength: 200 minLength: 1 title: Source Label resource_kind: type: string maxLength: 100 pattern: ^[A-Z][A-Za-z0-9]*$ title: Resource Kind resource_name: type: string maxLength: 500 minLength: 1 title: Resource Name field_label: type: string maxLength: 500 minLength: 1 title: Field Label lineage_class: $ref: '#/components/schemas/EvidenceLineageClass' observed_at: anyOf: - type: string format: date-time - type: 'null' title: Observed At generated_at: anyOf: - type: string format: date-time - type: 'null' title: Generated At type: object required: - ordinal - source_label - resource_kind - resource_name - field_label - lineage_class title: ResolvedWorkspaceAttributionResponse description: Public source label with all private evidence locators removed. ResourceListRequest: properties: resource_type: type: string title: Resource Type description: Type of resource to list organization_id: anyOf: - type: string - type: 'null' title: Organization Id description: Organization context company_profile_id: anyOf: - type: string - type: 'null' title: Company Profile Id description: Company profile context params: anyOf: - additionalProperties: true type: object - type: 'null' title: Params description: Filtering parameters type: object required: - resource_type title: ResourceListRequest description: Request to list resources ResourceReadRequest: properties: resource_type: type: string title: Resource Type description: Type of resource (e.g., 'company-profile') resource_id: type: string title: Resource Id description: UUID of the resource organization_id: anyOf: - type: string - type: 'null' title: Organization Id description: Organization context company_profile_id: anyOf: - type: string - type: 'null' title: Company Profile Id description: Company profile context params: anyOf: - additionalProperties: true type: object - type: 'null' title: Params description: Additional parameters type: object required: - resource_type - resource_id title: ResourceReadRequest description: Request to read a specific resource RevenueByChannelResponse: properties: metric_date: type: string format: date title: Metric Date source_vendor: type: string title: Source Vendor source_channel: type: string title: Source Channel gross_revenue_cents: type: integer title: Gross Revenue Cents discount_cents: type: integer title: Discount Cents refund_cents: type: integer title: Refund Cents net_revenue_cents: type: integer title: Net Revenue Cents transaction_count: type: integer title: Transaction Count avg_order_value_cents: type: integer title: Avg Order Value Cents type: object required: - metric_date - source_vendor - source_channel - gross_revenue_cents - discount_cents - refund_cents - net_revenue_cents - transaction_count - avg_order_value_cents title: RevenueByChannelResponse description: Response model for revenue by channel. RevenueSummaryResponse: properties: total_net_revenue_cents: type: integer title: Total Net Revenue Cents total_gross_revenue_cents: type: integer title: Total Gross Revenue Cents total_discount_cents: type: integer title: Total Discount Cents total_refund_cents: type: integer title: Total Refund Cents total_transactions: type: integer title: Total Transactions total_orders: type: integer title: Total Orders avg_order_value_cents: type: integer title: Avg Order Value Cents start_date: type: string title: Start Date end_date: type: string title: End Date type: object required: - total_net_revenue_cents - total_gross_revenue_cents - total_discount_cents - total_refund_cents - total_transactions - total_orders - avg_order_value_cents - start_date - end_date title: RevenueSummaryResponse description: Response model for revenue summary. RuntimeKey: type: string enum: - legacy - markee_v2 title: RuntimeKey description: 'Canonical Markee engine versions. The serialized values predate the v1/v2 product vocabulary and remain stable so existing conversation rows and in-flight jobs stay readable. Callers must use the versioned enum members rather than repeating those persistence literals.' SEOAnalysisCreate: properties: company_profile_id: type: string format: uuid title: Company Profile Id primary_url: type: string title: Primary Url workflow_id: anyOf: - type: string format: uuid - type: 'null' title: Workflow Id type: object required: - company_profile_id - primary_url title: SEOAnalysisCreate description: 'Request schema for creating a new SEO analysis. Follows pattern from campaigns/email.py EmailCampaignCreate' SEOAnalysisListResponse: properties: id: anyOf: - type: string - type: 'null' title: Id company_profile_id: anyOf: - type: string - type: 'null' title: Company Profile Id primary_url: type: string title: Primary Url domain: type: string title: Domain status: type: string title: Status overall_score: anyOf: - type: number - type: 'null' title: Overall Score previous_score: anyOf: - type: number - type: 'null' title: Previous Score score_change: anyOf: - type: number - type: 'null' title: Score Change critical_issues_count: anyOf: - type: integer - type: 'null' title: Critical Issues Count default: 0 important_issues_count: anyOf: - type: integer - type: 'null' title: Important Issues Count default: 0 created_at: anyOf: - type: string - type: 'null' title: Created At completed_at: anyOf: - type: string - type: 'null' title: Completed At type: object required: - id - company_profile_id - primary_url - domain - status - created_at title: SEOAnalysisListResponse description: 'Lightweight schema for listing SEO analyses. Contains only key fields for display in lists/tables. Follows pattern from consumer.py ConsumerGroupListResponse' SEOAnalysisResponse: properties: id: anyOf: - type: string - type: 'null' title: Id company_profile_id: anyOf: - type: string - type: 'null' title: Company Profile Id user_id: anyOf: - type: string - type: 'null' title: User Id workflow_id: anyOf: - type: string format: uuid - type: 'null' title: Workflow Id primary_url: type: string title: Primary Url domain: type: string title: Domain status: type: string title: Status error_message: anyOf: - type: string - type: 'null' title: Error Message overall_score: anyOf: - type: number maximum: 100.0 minimum: 0.0 - type: 'null' title: Overall Score description: Overall SEO score (0-100) previous_score: anyOf: - type: number maximum: 100.0 minimum: 0.0 - type: 'null' title: Previous Score description: Previous overall score (0-100) score_change: anyOf: - type: number maximum: 100.0 minimum: -100.0 - type: 'null' title: Score Change description: Score change from previous analysis technical_seo_score: anyOf: - type: number maximum: 100.0 minimum: 0.0 - type: 'null' title: Technical Seo Score description: Technical SEO score (0-100) on_page_seo_score: anyOf: - type: number maximum: 100.0 minimum: 0.0 - type: 'null' title: On Page Seo Score description: On-page SEO score (0-100) performance_score: anyOf: - type: number maximum: 100.0 minimum: 0.0 - type: 'null' title: Performance Score description: Performance score (0-100) structured_data_score: anyOf: - type: number maximum: 100.0 minimum: 0.0 - type: 'null' title: Structured Data Score description: Structured data score (0-100) image_optimization_score: anyOf: - type: number maximum: 100.0 minimum: 0.0 - type: 'null' title: Image Optimization Score description: Image optimization score (0-100) social_meta_score: anyOf: - type: number maximum: 100.0 minimum: 0.0 - type: 'null' title: Social Meta Score description: Social meta tags score (0-100) core_web_vitals: anyOf: - additionalProperties: true type: object - type: 'null' title: Core Web Vitals technical_seo_data: anyOf: - additionalProperties: true type: object - type: 'null' title: Technical Seo Data on_page_seo_data: anyOf: - additionalProperties: true type: object - type: 'null' title: On Page Seo Data image_optimization_data: anyOf: - additionalProperties: true type: object - type: 'null' title: Image Optimization Data structured_data_analysis: anyOf: - additionalProperties: true type: object - type: 'null' title: Structured Data Analysis social_meta_data: anyOf: - additionalProperties: true type: object - type: 'null' title: Social Meta Data analysis_scope: anyOf: - additionalProperties: true type: object - type: 'null' title: Analysis Scope pages_analyzed: anyOf: - type: integer - type: 'null' title: Pages Analyzed default: 0 pages_with_issues: anyOf: - type: integer - type: 'null' title: Pages With Issues default: 0 critical_issues_count: anyOf: - type: integer - type: 'null' title: Critical Issues Count default: 0 important_issues_count: anyOf: - type: integer - type: 'null' title: Important Issues Count default: 0 nice_to_have_count: anyOf: - type: integer - type: 'null' title: Nice To Have Count default: 0 competitive_position: anyOf: - additionalProperties: true type: object - type: 'null' title: Competitive Position started_at: anyOf: - type: string - type: 'null' title: Started At completed_at: anyOf: - type: string - type: 'null' title: Completed At created_at: anyOf: - type: string - type: 'null' title: Created At updated_at: anyOf: - type: string - type: 'null' title: Updated At type: object required: - id - company_profile_id - user_id - primary_url - domain - status - created_at title: SEOAnalysisResponse description: 'Response schema for SEO analysis. Includes all analysis data, scores, and metadata. Follows pattern from campaigns/email.py EmailCampaignResponse' SEOPageResponse: properties: id: anyOf: - type: string - type: 'null' title: Id analysis_id: type: string format: uuid title: Analysis Id crawl_inventory_id: anyOf: - type: string format: uuid - type: 'null' title: Crawl Inventory Id url: type: string title: Url url_hash: type: string title: Url Hash page_type: anyOf: - type: string - type: 'null' title: Page Type screenshot_url: anyOf: - type: string - type: 'null' title: Screenshot Url title: anyOf: - type: string - type: 'null' title: Title title_length: anyOf: - type: integer - type: 'null' title: Title Length title_issues: anyOf: - items: type: string type: array - type: 'null' title: Title Issues default: [] meta_description: anyOf: - type: string - type: 'null' title: Meta Description meta_description_length: anyOf: - type: integer - type: 'null' title: Meta Description Length meta_description_issues: anyOf: - items: type: string type: array - type: 'null' title: Meta Description Issues default: [] headings: anyOf: - additionalProperties: true type: object - type: 'null' title: Headings heading_issues: anyOf: - items: type: string type: array - type: 'null' title: Heading Issues default: [] word_count: anyOf: - type: integer - type: 'null' title: Word Count internal_links_count: anyOf: - type: integer - type: 'null' title: Internal Links Count default: 0 external_links_count: anyOf: - type: integer - type: 'null' title: External Links Count default: 0 broken_links_count: anyOf: - type: integer - type: 'null' title: Broken Links Count default: 0 images_count: anyOf: - type: integer - type: 'null' title: Images Count default: 0 images_without_alt: anyOf: - type: integer - type: 'null' title: Images Without Alt default: 0 has_schema_markup: type: boolean title: Has Schema Markup default: false schema_types: anyOf: - items: type: string type: array - type: 'null' title: Schema Types default: [] has_open_graph: type: boolean title: Has Open Graph default: false has_twitter_card: type: boolean title: Has Twitter Card default: false load_time_ms: anyOf: - type: integer - type: 'null' title: Load Time Ms outbound_links: anyOf: - items: additionalProperties: true type: object type: array - type: 'null' title: Outbound Links internal_links: anyOf: - items: additionalProperties: true type: object type: array - type: 'null' title: Internal Links broken_links: anyOf: - items: additionalProperties: true type: object type: array - type: 'null' title: Broken Links http_status_code: anyOf: - type: integer - type: 'null' title: Http Status Code redirect_chain: anyOf: - items: additionalProperties: true type: object type: array - type: 'null' title: Redirect Chain is_indexable: type: boolean title: Is Indexable default: true canonical_url: anyOf: - type: string - type: 'null' title: Canonical Url robots_meta: anyOf: - additionalProperties: true type: object - type: 'null' title: Robots Meta paragraph_count: anyOf: - type: integer - type: 'null' title: Paragraph Count videos_count: anyOf: - type: integer - type: 'null' title: Videos Count lists_count: anyOf: - type: integer - type: 'null' title: Lists Count tables_count: anyOf: - type: integer - type: 'null' title: Tables Count accessibility_score: anyOf: - type: number maximum: 100.0 minimum: 0.0 - type: 'null' title: Accessibility Score description: Accessibility score (0-100) semantic_html_score: anyOf: - type: number maximum: 100.0 minimum: 0.0 - type: 'null' title: Semantic Html Score description: Semantic HTML usage score (0-100) ai_content_score: anyOf: - type: number maximum: 100.0 minimum: 0.0 - type: 'null' title: Ai Content Score description: AI-generated content likelihood (0-100) duplicate_content_score: anyOf: - type: number maximum: 100.0 minimum: 0.0 - type: 'null' title: Duplicate Content Score description: Duplicate content detection (0-100) target_keywords: anyOf: - items: type: string type: array - type: 'null' title: Target Keywords keyword_density: anyOf: - additionalProperties: type: number type: object - type: 'null' title: Keyword Density keyword_placement: anyOf: - additionalProperties: true type: object - type: 'null' title: Keyword Placement readability_score: anyOf: - type: number maximum: 100.0 minimum: 0.0 - type: 'null' title: Readability Score description: Flesch Reading Ease (0-100) readability_grade: anyOf: - type: number maximum: 20.0 minimum: 0.0 - type: 'null' title: Readability Grade description: Flesch-Kincaid Grade Level (0-20) content_originality_score: anyOf: - type: number maximum: 100.0 minimum: 0.0 - type: 'null' title: Content Originality Score description: Content uniqueness (0-100) eeat_score: anyOf: - type: number maximum: 100.0 minimum: 0.0 - type: 'null' title: Eeat Score description: E-E-A-T signal score (0-100) has_author: type: boolean title: Has Author default: false has_credentials: type: boolean title: Has Credentials default: false last_updated: anyOf: - type: string format: date-time - type: 'null' title: Last Updated critical_issues: anyOf: - items: type: string type: array - type: 'null' title: Critical Issues default: [] important_issues: anyOf: - items: type: string type: array - type: 'null' title: Important Issues default: [] created_at: anyOf: - type: string - type: 'null' title: Created At type: object required: - id - analysis_id - url - url_hash - created_at title: SEOPageResponse description: 'Response schema for individual page SEO analysis. Contains detailed SEO metrics for a single page.' SEORecommendationResponse: properties: id: anyOf: - type: string - type: 'null' title: Id analysis_id: type: string format: uuid title: Analysis Id category: type: string title: Category priority: type: string title: Priority title: type: string title: Title description: type: string title: Description impact: anyOf: - type: string - type: 'null' title: Impact effort: anyOf: - type: string - type: 'null' title: Effort how_to_fix: anyOf: - type: string - type: 'null' title: How To Fix example: anyOf: - type: string - type: 'null' title: Example pages_affected: anyOf: - type: integer - type: 'null' title: Pages Affected default: 0 affected_urls: anyOf: - items: type: string type: array - type: 'null' title: Affected Urls default: [] potential_score_improvement: anyOf: - type: integer - type: 'null' title: Potential Score Improvement estimated_fix_time_hours: anyOf: - type: number - type: 'null' title: Estimated Fix Time Hours is_dismissed: type: boolean title: Is Dismissed default: false is_completed: type: boolean title: Is Completed default: false completed_at: anyOf: - type: string - type: 'null' title: Completed At user_notes: anyOf: - type: string - type: 'null' title: User Notes created_at: anyOf: - type: string - type: 'null' title: Created At updated_at: anyOf: - type: string - type: 'null' title: Updated At type: object required: - id - analysis_id - category - priority - title - description - created_at title: SEORecommendationResponse description: 'Response schema for SEO recommendation. Contains all recommendation data including user actions.' SEORecommendationUpdate: properties: is_dismissed: anyOf: - type: boolean - type: 'null' title: Is Dismissed is_completed: anyOf: - type: boolean - type: 'null' title: Is Completed user_notes: anyOf: - type: string maxLength: 1000 - type: 'null' title: User Notes type: object title: SEORecommendationUpdate description: 'Schema for updating SEO recommendation user actions. Allows marking recommendations as dismissed or completed.' SHCustomerOverviewResponse: properties: year_month: type: string title: Year Month total_customers: type: integer title: Total Customers new_customers: type: integer title: New Customers returning_customers: type: integer title: Returning Customers avg_orders_per_customer: type: number title: Avg Orders Per Customer avg_lifetime_value_cents: type: integer title: Avg Lifetime Value Cents marketing_opted_in: type: integer title: Marketing Opted In type: object required: - year_month - total_customers - new_customers - returning_customers - avg_orders_per_customer - avg_lifetime_value_cents - marketing_opted_in title: SHCustomerOverviewResponse description: Monthly Shopify customer overview response. SHDailySalesResponse: properties: metric_date: type: string format: date title: Metric Date order_count: type: integer title: Order Count gross_sales_cents: type: integer title: Gross Sales Cents net_sales_cents: type: integer title: Net Sales Cents total_discount_cents: type: integer title: Total Discount Cents total_tax_cents: type: integer title: Total Tax Cents avg_order_value_cents: type: integer title: Avg Order Value Cents unique_customers: type: integer title: Unique Customers type: object required: - metric_date - order_count - gross_sales_cents - net_sales_cents - total_discount_cents - total_tax_cents - avg_order_value_cents - unique_customers title: SHDailySalesResponse description: Daily Shopify sales metrics response. SHFulfillmentStatusResponse: properties: metric_date: type: string format: date title: Metric Date pending_count: type: integer title: Pending Count fulfilled_count: type: integer title: Fulfilled Count partial_count: type: integer title: Partial Count unfulfilled_count: type: integer title: Unfulfilled Count fulfillment_rate: type: number title: Fulfillment Rate type: object required: - metric_date - pending_count - fulfilled_count - partial_count - unfulfilled_count - fulfillment_rate title: SHFulfillmentStatusResponse description: Daily Shopify fulfillment status response. SHProductCatalogResponse: properties: product_id: type: string title: Product Id product_name: type: string title: Product Name product_type: anyOf: - type: string - type: 'null' title: Product Type vendor: anyOf: - type: string - type: 'null' title: Vendor status: type: string title: Status variant_count: type: integer title: Variant Count total_inventory: anyOf: - type: integer - type: 'null' title: Total Inventory shopify_product_gid: anyOf: - type: string - type: 'null' title: Shopify Product Gid type: object required: - product_id - product_name - status - variant_count title: SHProductCatalogResponse description: Shopify product catalog entry. SHRangeSummaryResponse: properties: total_orders: type: integer title: Total Orders total_gross_sales_cents: type: integer title: Total Gross Sales Cents total_net_revenue_cents: type: integer title: Total Net Revenue Cents avg_order_value_cents: type: integer title: Avg Order Value Cents total_unique_customers: type: integer title: Total Unique Customers total_products: type: integer title: Total Products total_inventory: type: integer title: Total Inventory fulfillment_rate: type: number title: Fulfillment Rate type: object required: - total_orders - total_gross_sales_cents - total_net_revenue_cents - avg_order_value_cents - total_unique_customers - total_products - total_inventory - fulfillment_rate title: SHRangeSummaryResponse description: Shopify summary for a date range response. SHTransactionResponse: properties: sh_token: type: string title: Sh Token order_id: type: string title: Order Id customer_id: anyOf: - type: string - type: 'null' title: Customer Id financial_status: type: string title: Financial Status fulfillment_status: anyOf: - type: string - type: 'null' title: Fulfillment Status total_price_cents: type: integer title: Total Price Cents order_date: type: string format: date title: Order Date shopify_order_gid: anyOf: - type: string - type: 'null' title: Shopify Order Gid shopify_customer_gid: anyOf: - type: string - type: 'null' title: Shopify Customer Gid type: object required: - sh_token - order_id - financial_status - total_price_cents - order_date title: SHTransactionResponse description: Single Shopify order from Silver tables. SKU: properties: name: type: string title: Name description: type: string title: Description target_audience: anyOf: - items: type: string type: array - type: 'null' title: Target Audience default: [] key_features: anyOf: - items: type: string type: array - type: 'null' title: Key Features default: [] sku_urls: anyOf: - items: type: string type: array - type: 'null' title: Sku Urls default: [] images: anyOf: - items: additionalProperties: true type: object type: array - type: 'null' title: Images default: [] primary_category: anyOf: - type: string - type: 'null' title: Primary Category default: '' subcategories: anyOf: - items: type: string type: array - type: 'null' title: Subcategories default: [] tags: anyOf: - items: type: string type: array - type: 'null' title: Tags default: [] attributes: anyOf: - additionalProperties: true type: object - type: 'null' title: Attributes default: {} source_urls: anyOf: - items: type: string type: array - type: 'null' title: Source Urls default: [] business_characteristics: anyOf: - items: type: string type: array - type: 'null' title: Business Characteristics default: [] offering_type: anyOf: - type: string - type: 'null' title: Offering Type default: primary price_list: anyOf: - items: {} type: array - type: 'null' title: Price List default: [] type: object required: - name - description title: SKU SQDailySalesByLocationResponse: properties: metric_date: type: string format: date title: Metric Date location_id: type: string title: Location Id location_name: anyOf: - type: string - type: 'null' title: Location Name order_count: type: integer title: Order Count gross_sales_cents: type: integer title: Gross Sales Cents net_sales_cents: type: integer title: Net Sales Cents payment_count: type: integer title: Payment Count total_collected_cents: type: integer title: Total Collected Cents refund_count: type: integer title: Refund Count total_refunded_cents: type: integer title: Total Refunded Cents unique_customers: type: integer title: Unique Customers type: object required: - metric_date - location_id - order_count - gross_sales_cents - net_sales_cents - payment_count - total_collected_cents - refund_count - total_refunded_cents - unique_customers title: SQDailySalesByLocationResponse description: Daily Square sales by location response. SQDailySalesResponse: properties: metric_date: type: string format: date title: Metric Date order_count: type: integer title: Order Count completed_order_count: type: integer title: Completed Order Count canceled_order_count: type: integer title: Canceled Order Count gross_sales_cents: type: integer title: Gross Sales Cents total_discount_cents: type: integer title: Total Discount Cents total_tax_cents: type: integer title: Total Tax Cents total_tip_cents: type: integer title: Total Tip Cents net_sales_cents: type: integer title: Net Sales Cents payment_count: type: integer title: Payment Count total_collected_cents: type: integer title: Total Collected Cents refund_count: type: integer title: Refund Count total_refunded_cents: type: integer title: Total Refunded Cents net_revenue_cents: type: integer title: Net Revenue Cents avg_order_value_cents: type: integer title: Avg Order Value Cents unique_customers: type: integer title: Unique Customers type: object required: - metric_date - order_count - completed_order_count - canceled_order_count - gross_sales_cents - total_discount_cents - total_tax_cents - total_tip_cents - net_sales_cents - payment_count - total_collected_cents - refund_count - total_refunded_cents - net_revenue_cents - avg_order_value_cents - unique_customers title: SQDailySalesResponse description: Daily Square sales metrics response. SQLocationSalesResponse: properties: year_month: type: string title: Year Month location_id: type: string title: Location Id location_name: anyOf: - type: string - type: 'null' title: Location Name order_count: type: integer title: Order Count unique_customers: type: integer title: Unique Customers gross_sales_cents: type: integer title: Gross Sales Cents net_sales_cents: type: integer title: Net Sales Cents avg_order_value_cents: type: integer title: Avg Order Value Cents type: object required: - year_month - location_id - order_count - unique_customers - gross_sales_cents - net_sales_cents - avg_order_value_cents title: SQLocationSalesResponse description: Monthly location-level Square sales response. SQProductSalesResponse: properties: year_month: type: string title: Year Month catalog_object_id: anyOf: - type: string - type: 'null' title: Catalog Object Id product_name: anyOf: - type: string - type: 'null' title: Product Name variation_name: anyOf: - type: string - type: 'null' title: Variation Name units_sold: type: number title: Units Sold order_count: type: integer title: Order Count gross_revenue_cents: type: integer title: Gross Revenue Cents discount_cents: type: integer title: Discount Cents net_revenue_cents: type: integer title: Net Revenue Cents avg_unit_price_cents: type: integer title: Avg Unit Price Cents type: object required: - year_month - units_sold - order_count - gross_revenue_cents - discount_cents - net_revenue_cents - avg_unit_price_cents title: SQProductSalesResponse description: Product-level Square sales response. SQRangeSummaryResponse: properties: total_gross_sales_cents: type: integer title: Total Gross Sales Cents total_net_revenue_cents: type: integer title: Total Net Revenue Cents total_orders: type: integer title: Total Orders total_refunds: type: integer title: Total Refunds avg_order_value_cents: type: integer title: Avg Order Value Cents total_unique_customers: type: integer title: Total Unique Customers total_collected_cents: type: integer title: Total Collected Cents total_refunded_cents: type: integer title: Total Refunded Cents type: object required: - total_gross_sales_cents - total_net_revenue_cents - total_orders - total_refunds - avg_order_value_cents - total_unique_customers - total_collected_cents - total_refunded_cents title: SQRangeSummaryResponse description: Square summary for a date range response. SQTransactionResponse: properties: sq_token: type: string title: Sq Token entity_type: type: string title: Entity Type transaction_id: type: string title: Transaction Id location_id: anyOf: - type: string - type: 'null' title: Location Id order_id: anyOf: - type: string - type: 'null' title: Order Id customer_id: anyOf: - type: string - type: 'null' title: Customer Id amount_cents: type: integer title: Amount Cents status: type: string title: Status source_type: anyOf: - type: string - type: 'null' title: Source Type transaction_date: type: string format: date title: Transaction Date type: object required: - sq_token - entity_type - transaction_id - amount_cents - status - transaction_date title: SQTransactionResponse description: Single Square transaction from Silver tables. SaveCreatorOutreachDraftRequest: properties: channel: type: string maxLength: 64 minLength: 1 title: Channel target_label: anyOf: - type: string maxLength: 120 - type: 'null' title: Target Label target_value: type: string maxLength: 500 minLength: 1 title: Target Value subject: anyOf: - type: string maxLength: 255 - type: 'null' title: Subject message: type: string maxLength: 4000 minLength: 1 title: Message last_prompt: anyOf: - type: string maxLength: 2000 - type: 'null' title: Last Prompt type: object required: - channel - target_value - message title: SaveCreatorOutreachDraftRequest ScanResponse: properties: competitor_id: type: string format: uuid title: Competitor Id competitor_name: type: string title: Competitor Name scanned_at: type: string title: Scanned At campaigns_found: items: additionalProperties: true type: object type: array title: Campaigns Found errors: items: type: string type: array title: Errors type: object required: - competitor_id - competitor_name - scanned_at - campaigns_found - errors title: ScanResponse description: Response from competitor scan. ScoreBreakdownResponse: properties: category: type: string title: Category score: anyOf: - type: number - type: 'null' title: Score max_score: type: number title: Max Score percentage: type: number title: Percentage checks: items: $ref: '#/components/schemas/ScoreCheckResponse' type: array title: Checks warnings: items: type: string type: array title: Warnings default: [] errors: items: type: string type: array title: Errors default: [] type: object required: - category - max_score - percentage - checks title: ScoreBreakdownResponse description: Detailed breakdown of a score calculation for a specific category. ScoreCheckResponse: properties: name: type: string title: Name passed: type: boolean title: Passed points_awarded: type: number title: Points Awarded max_points: type: number title: Max Points reason: type: string title: Reason details: anyOf: - additionalProperties: true type: object - type: 'null' title: Details type: object required: - name - passed - points_awarded - max_points - reason title: ScoreCheckResponse description: Individual scoring check result for score breakdown. ScreenshotUploadResponse: properties: screenshot_url: type: string title: Screenshot Url description: URL of the uploaded screenshot type: object required: - screenshot_url title: ScreenshotUploadResponse description: Response schema for screenshot upload. SendCampaignRequest: properties: campaign_id: type: integer title: Campaign Id consumer_group_ids: items: type: integer type: array title: Consumer Group Ids scheduled_time: anyOf: - type: string format: date-time - type: 'null' title: Scheduled Time ab_test_config: anyOf: - $ref: '#/components/schemas/ABTestConfig' - type: 'null' type: object required: - campaign_id - consumer_group_ids title: SendCampaignRequest description: Request to send campaign SendOrganizationInviteEmailRequest: properties: email: type: string format: email title: Email type: object required: - email title: SendOrganizationInviteEmailRequest description: Request payload for sending an invite email to a prospective member. SendOrganizationInviteEmailResponse: properties: success: type: boolean title: Success message: type: string title: Message type: object required: - success - message title: SendOrganizationInviteEmailResponse description: Response returned after attempting to send an invite email. ShareFileResponse: properties: id: type: string title: Id filename: type: string title: Filename is_shared: type: boolean title: Is Shared message: type: string title: Message type: object required: - id - filename - is_shared - message title: ShareFileResponse SharedFileItem: properties: id: type: string title: Id filename: type: string title: Filename file_type: type: string title: File Type file_size: type: integer title: File Size file_url: type: string title: File Url summary_preview: anyOf: - type: string - type: 'null' title: Summary Preview created_at: type: string format: date-time title: Created At owner_email: anyOf: - type: string - type: 'null' title: Owner Email is_owner: type: boolean title: Is Owner default: false is_shared: type: boolean title: Is Shared default: true type: object required: - id - filename - file_type - file_size - file_url - created_at title: SharedFileItem description: Schema for a shared file in the knowledge base SharedFilesResponse: properties: files: items: $ref: '#/components/schemas/SharedFileItem' type: array title: Files total: type: integer title: Total page: type: integer title: Page total_pages: type: integer title: Total Pages type: object required: - files - total - page - total_pages title: SharedFilesResponse description: Response for shared files list endpoint ShopifyConnectStartRequestModel: properties: mode: type: string title: Mode description: '''connect'' binds to the current profile; ''create'' makes a new profile from the store' default: create type: object title: ShopifyConnectStartRequestModel description: Pomo-initiated on-ramp request. ShopifyInstallResolveRequestModel: properties: claim_handle: anyOf: - type: string - type: 'null' title: Claim Handle description: Optional legacy URL claim; when present it must match the httpOnly claim cookie intent_token: anyOf: - type: string - type: 'null' title: Intent Token description: Pomo on-ramp intent token chosen_organization_id: anyOf: - type: string - type: 'null' title: Chosen Organization Id description: Org selected for the multi-org case chosen_company_profile_id: anyOf: - type: string - type: 'null' title: Chosen Company Profile Id description: Existing matched profile selected to connect chosen_create_new: type: boolean title: Chosen Create New description: User opted to start a new brand profile instead of a match default: false type: object title: ShopifyInstallResolveRequestModel ShopifyShopResponseModel: properties: connected: type: boolean title: Connected description: Whether the platform is connected account: anyOf: - $ref: '#/components/schemas/DataSourceAccountInfo' - type: 'null' description: Account details if connected shop: anyOf: - additionalProperties: true type: object - type: 'null' title: Shop description: Shop details type: object required: - connected title: ShopifyShopResponseModel description: Response model for shop information. ShopifyStatusResponseModel: properties: connected: type: boolean title: Connected description: Whether the platform is connected healthy: type: boolean title: Healthy description: Whether the token is healthy (passed API check) default: false health_message: anyOf: - type: string - type: 'null' title: Health Message description: Health check result message account_id: anyOf: - type: string - type: 'null' title: Account Id description: Platform-specific account identifier account_name: anyOf: - type: string - type: 'null' title: Account Name description: Display name for the account token_expires_soon: type: boolean title: Token Expires Soon description: Whether token expires within buffer period default: false last_health_check: anyOf: - type: string - type: 'null' title: Last Health Check description: ISO timestamp of last health check shop_domain: anyOf: - type: string - type: 'null' title: Shop Domain description: Shopify store domain shop_name: anyOf: - type: string - type: 'null' title: Shop Name description: Shop name type: object required: - connected title: ShopifyStatusResponseModel description: Response model for connection status with health check. example: account_id: shop_12345 account_name: My Store connected: true health_message: Token is valid healthy: true last_health_check: '2024-01-15T10:30:00Z' token_expires_soon: false ShortenedURL: properties: long_url: type: string title: Long Url campaign_id: type: string title: Campaign Id short_code: type: string title: Short Code short_url: type: string title: Short Url type: object required: - long_url - campaign_id - short_code - short_url title: ShortenedURL description: Full shortened URL model ShortenedURLCreate: properties: long_url: type: string title: Long Url campaign_id: type: string title: Campaign Id type: object required: - long_url - campaign_id title: ShortenedURLCreate description: Schema for creating a shortened URL SignedUrlResponse: properties: signed_url: type: string title: Signed Url expires_in_seconds: type: integer title: Expires In Seconds type: object required: - signed_url - expires_in_seconds title: SignedUrlResponse SlackCampaignCardRequest: properties: channel_id: anyOf: - type: string maxLength: 64 - type: 'null' title: Channel Id thread_ts: anyOf: - type: string maxLength: 64 - type: 'null' title: Thread Ts dedupe_key: anyOf: - type: string maxLength: 191 - type: 'null' title: Dedupe Key campaign_info: additionalProperties: true type: object title: Campaign Info description: Generic campaign payload used to build Slack Block Kit cards. type: object title: SlackCampaignCardRequest SlackChannelResponse: properties: id: type: string title: Id name: type: string title: Name is_private: type: boolean title: Is Private default: false is_member: type: boolean title: Is Member default: false type: object required: - id - name title: SlackChannelResponse SlackChannelsListResponse: properties: channels: items: $ref: '#/components/schemas/SlackChannelResponse' type: array title: Channels type: object title: SlackChannelsListResponse SlackLinkRequest: properties: slack_user_id: type: string maxLength: 64 minLength: 2 title: Slack User Id slack_team_id: anyOf: - type: string maxLength: 64 - type: 'null' title: Slack Team Id slack_user_name: anyOf: - type: string maxLength: 255 - type: 'null' title: Slack User Name type: object required: - slack_user_id title: SlackLinkRequest SlackLinkResponse: properties: linked: type: boolean title: Linked slack_team_id: type: string title: Slack Team Id slack_user_id: type: string title: Slack User Id type: object required: - linked - slack_team_id - slack_user_id title: SlackLinkResponse SlackSettingsUpdateRequest: properties: default_channel_id: anyOf: - type: string maxLength: 64 - type: 'null' title: Default Channel Id allowlist_patterns: anyOf: - items: type: string type: array - type: 'null' title: Allowlist Patterns description: Optional Slack email allowlist patterns (e.g. *@machflow.ai, user@domain.com, @domain.com) type: object title: SlackSettingsUpdateRequest SlackStatusResponse: properties: connected: type: boolean title: Connected description: Whether the platform is connected healthy: type: boolean title: Healthy description: Whether the token is healthy (passed API check) default: false health_message: anyOf: - type: string - type: 'null' title: Health Message description: Health check result message account_id: anyOf: - type: string - type: 'null' title: Account Id description: Platform-specific account identifier account_name: anyOf: - type: string - type: 'null' title: Account Name description: Display name for the account token_expires_soon: type: boolean title: Token Expires Soon description: Whether token expires within buffer period default: false last_health_check: anyOf: - type: string - type: 'null' title: Last Health Check description: ISO timestamp of last health check team_id: anyOf: - type: string - type: 'null' title: Team Id team_name: anyOf: - type: string - type: 'null' title: Team Name workspace_url: anyOf: - type: string - type: 'null' title: Workspace Url bot_user_id: anyOf: - type: string - type: 'null' title: Bot User Id default_channel_id: anyOf: - type: string - type: 'null' title: Default Channel Id linked_slack_user_id: anyOf: - type: string - type: 'null' title: Linked Slack User Id linked_slack_user_name: anyOf: - type: string - type: 'null' title: Linked Slack User Name allowlist_patterns: items: type: string type: array title: Allowlist Patterns scopes: items: type: string type: array title: Scopes type: object required: - connected title: SlackStatusResponse example: account_id: shop_12345 account_name: My Store connected: true health_message: Token is valid healthy: true last_health_check: '2024-01-15T10:30:00Z' token_expires_soon: false SlackTestMessageRequest: properties: channel_id: anyOf: - type: string maxLength: 64 - type: 'null' title: Channel Id text: anyOf: - type: string maxLength: 2500 - type: 'null' title: Text description: Optional test message body type: object title: SlackTestMessageRequest SocialListeningSettingsResponse: properties: id: anyOf: - type: string - type: 'null' title: Id company_profile_id: type: string title: Company Profile Id lookback_days: type: integer title: Lookback Days allowed_lookback_days: items: type: integer type: array title: Allowed Lookback Days custom_query_terms: items: type: string type: array title: Custom Query Terms excluded_query_terms: items: type: string type: array title: Excluded Query Terms source_scope: items: type: string type: array title: Source Scope include_company_targets: type: boolean title: Include Company Targets default: true include_competitor_targets: type: boolean title: Include Competitor Targets default: true include_product_targets: type: boolean title: Include Product Targets default: true max_custom_query_terms: type: integer title: Max Custom Query Terms max_query_term_length: type: integer title: Max Query Term Length available_query_platforms: items: additionalProperties: type: string type: object type: array title: Available Query Platforms active_target_query_terms: items: additionalProperties: true type: object type: array title: Active Target Query Terms target_query_overrides: items: additionalProperties: true type: object type: array title: Target Query Overrides metadata_json: additionalProperties: true type: object title: Metadata Json updated_by_user_id: anyOf: - type: string - type: 'null' title: Updated By User Id created_at: anyOf: - type: string - type: 'null' title: Created At updated_at: anyOf: - type: string - type: 'null' title: Updated At type: object required: - company_profile_id - lookback_days - max_custom_query_terms - max_query_term_length title: SocialListeningSettingsResponse SocialListeningSettingsUpdateRequest: properties: lookback_days: anyOf: - type: integer - type: 'null' title: Lookback Days custom_query_terms: anyOf: - items: type: string type: array - type: 'null' title: Custom Query Terms target_query_overrides: anyOf: - items: additionalProperties: true type: object type: array - type: 'null' title: Target Query Overrides type: object title: SocialListeningSettingsUpdateRequest SocialListeningSummaryAnalysisItemResponse: properties: theme_key: anyOf: - type: string - type: 'null' title: Theme Key title: type: string title: Title analysis: type: string title: Analysis recommendation: type: string title: Recommendation drivers: items: type: string type: array title: Drivers citations: items: $ref: '#/components/schemas/SocialListeningSummaryCitationResponse' type: array title: Citations citation_mention_ids: items: type: string type: array title: Citation Mention Ids group_citation_ids: items: type: string type: array title: Group Citation Ids group_mention_ids: items: type: string type: array title: Group Mention Ids group_metrics: additionalProperties: true type: object title: Group Metrics theme_type: anyOf: - type: string - type: 'null' title: Theme Type priority: anyOf: - type: string - type: 'null' title: Priority sentiment_label: anyOf: - type: string - type: 'null' title: Sentiment Label type: object required: - title - analysis - recommendation title: SocialListeningSummaryAnalysisItemResponse SocialListeningSummaryCitationResponse: properties: citation_id: type: string title: Citation Id mention_id: anyOf: - type: string - type: 'null' title: Mention Id source: anyOf: - type: string - type: 'null' title: Source content_type: anyOf: - type: string - type: 'null' title: Content Type content_id: anyOf: - type: string - type: 'null' title: Content Id platform_post_id: anyOf: - type: string - type: 'null' title: Platform Post Id platform_comment_id: anyOf: - type: string - type: 'null' title: Platform Comment Id canonical_url: anyOf: - type: string - type: 'null' title: Canonical Url permalink: anyOf: - type: string - type: 'null' title: Permalink url: anyOf: - type: string - type: 'null' title: Url author: anyOf: - type: string - type: 'null' title: Author community_prefixed: anyOf: - type: string - type: 'null' title: Community Prefixed target_type: anyOf: - type: string - type: 'null' title: Target Type target_name: anyOf: - type: string - type: 'null' title: Target Name competitor_name: anyOf: - type: string - type: 'null' title: Competitor Name product_offering_name: anyOf: - type: string - type: 'null' title: Product Offering Name created_datetime: anyOf: - type: string - type: 'null' title: Created Datetime engagement_count: anyOf: - type: integer - type: 'null' title: Engagement Count type: object required: - citation_id title: SocialListeningSummaryCitationResponse SocialListeningSummaryResponse: properties: id: anyOf: - type: string - type: 'null' title: Id company_profile_id: anyOf: - type: string - type: 'null' title: Company Profile Id summary_markdown: type: string title: Summary Markdown analysis_items: items: $ref: '#/components/schemas/SocialListeningSummaryAnalysisItemResponse' type: array title: Analysis Items model_name: type: string title: Model Name mention_count: type: integer title: Mention Count lookback_days: type: integer title: Lookback Days latest_mention_created_at: anyOf: - type: string - type: 'null' title: Latest Mention Created At generated_at: anyOf: - type: string - type: 'null' title: Generated At created_at: anyOf: - type: string - type: 'null' title: Created At updated_at: anyOf: - type: string - type: 'null' title: Updated At is_cached: type: boolean title: Is Cached summary_metadata: additionalProperties: true type: object title: Summary Metadata type: object required: - summary_markdown - model_name - mention_count - lookback_days - is_cached title: SocialListeningSummaryResponse SocialPostCampaignCreate: properties: name: anyOf: - type: string - type: 'null' title: Name caption: anyOf: - type: string - type: 'null' title: Caption hashtags: anyOf: - type: string - type: 'null' title: Hashtags target_platform: anyOf: - type: string - type: 'null' title: Target Platform post_type: anyOf: - type: string - type: 'null' title: Post Type media_type: anyOf: - type: string - type: 'null' title: Media Type platform_config: anyOf: - additionalProperties: true type: object - type: 'null' title: Platform Config target_audience: anyOf: - additionalProperties: true type: object - type: 'null' title: Target Audience product_offering_id: anyOf: - type: string format: uuid - type: 'null' title: Product Offering Id platform: anyOf: - type: string - type: 'null' title: Platform post_id: anyOf: - type: string - type: 'null' title: Post Id post_url: anyOf: - type: string - type: 'null' title: Post Url posted_at: anyOf: - type: string format: date-time - type: 'null' title: Posted At scheduled_for: anyOf: - type: string format: date-time - type: 'null' title: Scheduled For status: anyOf: - type: string - type: 'null' title: Status post_metadata: anyOf: - additionalProperties: true type: object - type: 'null' title: Post Metadata auto_rating: anyOf: - additionalProperties: true type: object - type: 'null' title: Auto Rating campaign_id: type: string title: Campaign Id idea_number: type: integer title: Idea Number variation: type: integer title: Variation default: 0 type: object required: - campaign_id - idea_number title: SocialPostCampaignCreate SocialPostCampaignMediaResponse: properties: media_type: type: string title: Media Type media_url: type: string title: Media Url thumbnail_url: anyOf: - type: string - type: 'null' title: Thumbnail Url video_url: anyOf: - type: string - type: 'null' title: Video Url original_prompt: anyOf: - type: string - type: 'null' title: Original Prompt enhanced_prompt: anyOf: - type: string - type: 'null' title: Enhanced Prompt width: anyOf: - type: integer - type: 'null' title: Width height: anyOf: - type: integer - type: 'null' title: Height duration: anyOf: - type: integer - type: 'null' title: Duration file_size: anyOf: - type: integer - type: 'null' title: File Size media_metadata: anyOf: - additionalProperties: true type: object - type: 'null' title: Media Metadata position: anyOf: - type: integer - type: 'null' title: Position default: 0 id: anyOf: - type: string - type: 'null' title: Id social_post_campaign_id: type: string format: uuid title: Social Post Campaign Id creation_date: anyOf: - type: string - type: 'null' title: Creation Date type: object required: - media_type - media_url - id - social_post_campaign_id - creation_date title: SocialPostCampaignMediaResponse SocialPostCampaignResponse: properties: name: anyOf: - type: string - type: 'null' title: Name caption: anyOf: - type: string - type: 'null' title: Caption hashtags: anyOf: - type: string - type: 'null' title: Hashtags target_platform: anyOf: - type: string - type: 'null' title: Target Platform post_type: anyOf: - type: string - type: 'null' title: Post Type media_type: anyOf: - type: string - type: 'null' title: Media Type platform_config: anyOf: - additionalProperties: true type: object - type: 'null' title: Platform Config target_audience: anyOf: - additionalProperties: true type: object - type: 'null' title: Target Audience product_offering_id: anyOf: - type: string format: uuid - type: 'null' title: Product Offering Id platform: anyOf: - type: string - type: 'null' title: Platform post_id: anyOf: - type: string - type: 'null' title: Post Id post_url: anyOf: - type: string - type: 'null' title: Post Url posted_at: anyOf: - type: string - type: 'null' title: Posted At scheduled_for: anyOf: - type: string - type: 'null' title: Scheduled For status: anyOf: - type: string - type: 'null' title: Status post_metadata: anyOf: - additionalProperties: true type: object - type: 'null' title: Post Metadata auto_rating: anyOf: - additionalProperties: true type: object - type: 'null' title: Auto Rating id: anyOf: - type: string - type: 'null' title: Id company_profile_id: anyOf: - type: string - type: 'null' title: Company Profile Id campaign_id: type: string title: Campaign Id idea_number: type: integer title: Idea Number variation: type: integer title: Variation creation_date: anyOf: - type: string - type: 'null' title: Creation Date last_modified: anyOf: - type: string - type: 'null' title: Last Modified media: items: $ref: '#/components/schemas/SocialPostCampaignMediaResponse' type: array title: Media default: [] type: object required: - id - company_profile_id - campaign_id - idea_number - variation - creation_date - last_modified title: SocialPostCampaignResponse SocialPostRequest: properties: product_description: type: string title: Product Description description: Description of product/service target_audience: type: string title: Target Audience description: Target audience description platform: type: string title: Platform description: Social media platform (instagram, facebook, linkedin, x, tiktok_social) post_type: type: string title: Post Type description: Type of post (feed_post, story, reel, article, thread) media_type: type: string title: Media Type description: Type of media (image, video, text, carousel) default: image campaign_goals: anyOf: - items: type: string type: array - type: 'null' title: Campaign Goals description: Campaign goals key_selling_points: anyOf: - type: string - type: 'null' title: Key Selling Points description: Key selling points default: '' reference_images: anyOf: - items: type: string type: array - type: 'null' title: Reference Images description: Base64 encoded reference images use_brand_style: type: boolean title: Use Brand Style description: Maintain brand consistency default: false num_posts: type: integer maximum: 10.0 minimum: 1.0 title: Num Posts description: Number of posts to generate default: 1 num_media: type: integer maximum: 35.0 minimum: 0.0 title: Num Media description: Number of media items per post default: 1 video_duration: anyOf: - type: integer - type: 'null' title: Video Duration description: Video duration is fixed at 10 seconds platform_config: anyOf: - additionalProperties: true type: object - type: 'null' title: Platform Config description: Platform-specific configuration type: object required: - product_description - target_audience - platform - post_type title: SocialPostRequest description: Request model for generating social posts. SocialPostVariationRequest: properties: campaign_id: type: string title: Campaign Id description: ID of the campaign to create variations for idea_number: type: integer title: Idea Number description: Idea number within the campaign type: object required: - campaign_id - idea_number title: SocialPostVariationRequest SocialProspectingCandidateStatusUpdateRequest: properties: status: anyOf: - type: string pattern: ^(new|reviewed|saved|dismissed)$ - type: 'null' title: Status handoff_status: anyOf: - type: string pattern: ^(not_ready|ready|copied|exported|contacted|replied|converted|disqualified)$ - type: 'null' title: Handoff Status block_account: anyOf: - type: boolean - type: 'null' title: Block Account default: false feedback_reason: anyOf: - type: string maxLength: 500 - type: 'null' title: Feedback Reason handoff_note: anyOf: - type: string maxLength: 600 - type: 'null' title: Handoff Note type: object title: SocialProspectingCandidateStatusUpdateRequest SocialProspectingExportResponse: properties: candidates: items: additionalProperties: true type: object type: array title: Candidates total: type: integer title: Total default: 0 type: object title: SocialProspectingExportResponse SocialProspectingResponse: properties: access: additionalProperties: true type: object title: Access summary: additionalProperties: true type: object title: Summary candidates: items: additionalProperties: true type: object type: array title: Candidates pagination: additionalProperties: true type: object title: Pagination filters: additionalProperties: true type: object title: Filters type: object required: - access - summary title: SocialProspectingResponse SocialProspectingSettingsUpdateRequest: properties: enabled: anyOf: - type: boolean - type: 'null' title: Enabled platforms: anyOf: - items: type: string type: array - type: 'null' title: Platforms custom_keywords: anyOf: - items: type: string type: array - type: 'null' title: Custom Keywords source_keywords: anyOf: - additionalProperties: items: type: string type: array type: object - type: 'null' title: Source Keywords excluded_keywords: anyOf: - items: type: string type: array - type: 'null' title: Excluded Keywords target_moments: anyOf: - items: type: string type: array - type: 'null' title: Target Moments seed_lookback_days: anyOf: - type: integer - type: 'null' title: Seed Lookback Days incremental_lookback_days: anyOf: - type: integer - type: 'null' title: Incremental Lookback Days min_score: anyOf: - type: integer maximum: 95.0 minimum: 50.0 - type: 'null' title: Min Score max_mentions_per_run: anyOf: - type: integer maximum: 300.0 minimum: 20.0 - type: 'null' title: Max Mentions Per Run dm_tone: anyOf: - type: string - type: 'null' title: Dm Tone type: object title: SocialProspectingSettingsUpdateRequest SocialSchedulePostingIdentity: properties: instagram_account_id: anyOf: - type: string - type: 'null' title: Instagram Account Id instagram_auth_method: anyOf: - type: string - type: 'null' title: Instagram Auth Method instagram_account_name: anyOf: - type: string - type: 'null' title: Instagram Account Name instagram_username: anyOf: - type: string - type: 'null' title: Instagram Username facebook_page_id: anyOf: - type: string - type: 'null' title: Facebook Page Id facebook_page_name: anyOf: - type: string - type: 'null' title: Facebook Page Name type: object title: SocialSchedulePostingIdentity SocialScheduleUpsertRequest: properties: schedule_id: anyOf: - type: string - type: 'null' title: Schedule Id campaign_id: type: string title: Campaign Id idea_number: type: integer title: Idea Number variation: type: integer title: Variation default: 0 platform: anyOf: - type: string - type: 'null' title: Platform scheduled_local_date: type: string title: Scheduled Local Date scheduled_local_time: type: string title: Scheduled Local Time schedule_timezone: type: string title: Schedule Timezone default: UTC posting_identity: $ref: '#/components/schemas/SocialSchedulePostingIdentity' validate_only: type: boolean title: Validate Only default: false type: object required: - campaign_id - idea_number - scheduled_local_date - scheduled_local_time - posting_identity title: SocialScheduleUpsertRequest SquareStatusResponseModel: properties: connected: type: boolean title: Connected description: Whether the platform is connected healthy: type: boolean title: Healthy description: Whether the token is healthy (passed API check) default: false health_message: anyOf: - type: string - type: 'null' title: Health Message description: Health check result message account_id: anyOf: - type: string - type: 'null' title: Account Id description: Platform-specific account identifier account_name: anyOf: - type: string - type: 'null' title: Account Name description: Display name for the account token_expires_soon: type: boolean title: Token Expires Soon description: Whether token expires within buffer period default: false last_health_check: anyOf: - type: string - type: 'null' title: Last Health Check description: ISO timestamp of last health check merchant_id: anyOf: - type: string - type: 'null' title: Merchant Id description: Square merchant ID business_name: anyOf: - type: string - type: 'null' title: Business Name description: Business name primary_location_id: anyOf: - type: string - type: 'null' title: Primary Location Id description: Primary location ID locations_count: type: integer title: Locations Count description: Number of locations default: 0 granted_scopes: items: type: string type: array title: Granted Scopes description: Granted Square OAuth scopes has_write_access: type: boolean title: Has Write Access description: Whether the current integration includes Square write scopes default: false write_access_missing_scopes: items: type: string type: array title: Write Access Missing Scopes description: Missing standard Square write scopes required for sandbox seeding type: object required: - connected title: SquareStatusResponseModel description: Response model for Square connection status with health check. example: account_id: shop_12345 account_name: My Store connected: true health_message: Token is valid healthy: true last_health_check: '2024-01-15T10:30:00Z' token_expires_soon: false Step1ConfirmRequest: properties: company_url: type: string maxLength: 2083 minLength: 1 format: uri title: Company Url company_profile_id: type: string format: uuid title: Company Profile Id company_info: $ref: '#/components/schemas/CompanyInfo' type: object required: - company_url - company_profile_id - company_info title: Step1ConfirmRequest Step1ExtractRequest: properties: company_url: type: string maxLength: 2083 minLength: 1 format: uri title: Company Url company_profile_id: type: string format: uuid title: Company Profile Id type: object required: - company_url - company_profile_id title: Step1ExtractRequest Step2ConfirmRequest: properties: company_url: type: string maxLength: 2083 minLength: 1 format: uri title: Company Url company_profile_id: type: string format: uuid title: Company Profile Id skus: items: $ref: '#/components/schemas/SKU' type: array title: Skus force_competitor_refresh: anyOf: - type: boolean - type: 'null' title: Force Competitor Refresh default: false scope_key: anyOf: - type: string - type: 'null' title: Scope Key type: object required: - company_url - company_profile_id - skus title: Step2ConfirmRequest Step2DiscoverRequest: properties: company_url: type: string maxLength: 2083 minLength: 1 format: uri title: Company Url company_profile_id: type: string format: uuid title: Company Profile Id type: object required: - company_url - company_profile_id title: Step2DiscoverRequest StripeDailySalesResponse: properties: company_profile_id: type: string title: Company Profile Id metric_date: type: string format: date title: Metric Date charge_count: type: integer title: Charge Count gross_sales_cents: type: integer title: Gross Sales Cents refunded_charge_count: type: integer title: Refunded Charge Count total_refunded_cents: type: integer title: Total Refunded Cents net_revenue_cents: type: integer title: Net Revenue Cents unique_customers: type: integer title: Unique Customers type: object required: - company_profile_id - metric_date - charge_count - gross_sales_cents - refunded_charge_count - total_refunded_cents - net_revenue_cents - unique_customers title: StripeDailySalesResponse description: Daily Stripe sales metrics response. StripeRangeSummaryResponse: properties: total_gross_sales_cents: type: integer title: Total Gross Sales Cents total_refunded_cents: type: integer title: Total Refunded Cents total_net_revenue_cents: type: integer title: Total Net Revenue Cents total_charges: type: integer title: Total Charges total_refunded_charges: type: integer title: Total Refunded Charges avg_charge_value_cents: type: integer title: Avg Charge Value Cents total_unique_customers: type: integer title: Total Unique Customers type: object required: - total_gross_sales_cents - total_refunded_cents - total_net_revenue_cents - total_charges - total_refunded_charges - avg_charge_value_cents - total_unique_customers title: StripeRangeSummaryResponse description: Stripe summary for a date range response. StripeStatusResponseModel: properties: connected: type: boolean title: Connected description: Whether the platform is connected healthy: type: boolean title: Healthy description: Whether the token is healthy (passed API check) default: false health_message: anyOf: - type: string - type: 'null' title: Health Message description: Health check result message account_id: anyOf: - type: string - type: 'null' title: Account Id description: Platform-specific account identifier account_name: anyOf: - type: string - type: 'null' title: Account Name description: Display name for the account token_expires_soon: type: boolean title: Token Expires Soon description: Whether token expires within buffer period default: false last_health_check: anyOf: - type: string - type: 'null' title: Last Health Check description: ISO timestamp of last health check business_name: anyOf: - type: string - type: 'null' title: Business Name description: Business name livemode: anyOf: - type: boolean - type: 'null' title: Livemode description: Whether Stripe is in live mode charges_enabled: anyOf: - type: boolean - type: 'null' title: Charges Enabled description: Whether charges are enabled type: object required: - connected title: StripeStatusResponseModel description: Response model for connection status with health check. example: account_id: shop_12345 account_name: My Store connected: true health_message: Token is valid healthy: true last_health_check: '2024-01-15T10:30:00Z' token_expires_soon: false StructuredTimedBeatScriptModel: properties: total_runtime_seconds: type: number title: Total Runtime Seconds description: Total runtime for the video in seconds beats: items: $ref: '#/components/schemas/StructuredVideoBeatModel' type: array title: Beats description: Contiguous timestamped beats that cover the full runtime type: object required: - total_runtime_seconds title: StructuredTimedBeatScriptModel StructuredVideoBeatModel: properties: start_seconds: type: number title: Start Seconds description: Beat start time in seconds end_seconds: type: number title: End Seconds description: Beat end time in seconds visual_action: type: string title: Visual Action description: What happens visually during this beat spoken_audio: type: string title: Spoken Audio description: What is spoken during this beat, or an empty string when silent sound_effects: type: string title: Sound Effects description: Beat-specific sound effects or audio accents, or an empty string when none cta_delivery: type: string title: Cta Delivery description: How this beat advances or lands the CTA/value takeaway type: object required: - start_seconds - end_seconds - visual_action - spoken_audio - sound_effects - cta_delivery title: StructuredVideoBeatModel StructuredVideoPromptModel: properties: opening_frame_continuity: type: string title: Opening Frame Continuity description: How the shot starts from the first frame subject_product_invariants: type: string title: Subject Product Invariants description: Who and what must remain unchanged throughout the shot talent_presence: type: string title: Talent Presence description: Whether a person is visible on camera, how much of them is shown, and whether that visibility stays consistent spoken_audio_delivery: type: string title: Spoken Audio Delivery description: How spoken lines are delivered across the clip, such as on-camera speech, voiceover, off-camera speech, or fully silent timed_beat_script: $ref: '#/components/schemas/StructuredTimedBeatScriptModel' description: Timed beat script covering the full runtime camera_composition: type: string title: Camera Composition description: Shot type, framing, angle, lens feel, and movement context_environment: type: string title: Context Environment description: Where the action happens and what remains present in the scene style_lighting_ambience: type: string title: Style Lighting Ambience description: Visual tone, lighting, palette, and ambience global_audio_bed: type: string title: Global Audio Bed description: Continuous music, ambience, or room tone for the full clip constraints: type: string title: Constraints description: Continuity and brand-safety constraints for the video type: object required: - opening_frame_continuity - subject_product_invariants - talent_presence - spoken_audio_delivery - timed_beat_script - camera_composition - context_environment - style_lighting_ambience - global_audio_bed - constraints title: StructuredVideoPromptModel SubmissionType: type: string enum: - book_demo - contact title: SubmissionType description: Type of contact submission. SubscriptionResponse: properties: id: type: string title: Id plan_id: type: string title: Plan Id status: type: string title: Status current_period_start: anyOf: - type: string format: date-time - type: 'null' title: Current Period Start current_period_end: anyOf: - type: string format: date-time - type: 'null' title: Current Period End cancel_at_period_end: type: boolean title: Cancel At Period End trial_end: anyOf: - type: string format: date-time - type: 'null' title: Trial End created_at: type: string format: date-time title: Created At type: object required: - id - plan_id - status - cancel_at_period_end - created_at title: SubscriptionResponse description: Response model for subscription information. SubscriptionTier: properties: id: type: string title: Id name: type: string title: Name description: type: string title: Description price: type: number title: Price currency: type: string title: Currency default: USD features: items: type: string type: array title: Features stripe_price_id: type: string title: Stripe Price Id type: object required: - id - name - description - price - features - stripe_price_id title: SubscriptionTier description: Model representing a subscription tier. TargetAudienceRequest: properties: user_prompt: anyOf: - type: string - type: 'null' title: User Prompt description: Optional user prompt to guide target audience generation product_offering_id: anyOf: - type: string format: uuid - type: 'null' title: Product Offering Id description: Product offering ID (UUID). Omit/null for company-wide targeting product_offering_name: anyOf: - type: string - type: 'null' title: Product Offering Name description: Product offering name for reference pinned_audiences: anyOf: - items: additionalProperties: true type: object type: array - type: 'null' title: Pinned Audiences description: List of audience objects to keep; generator will refresh remaining slots locations: anyOf: - items: additionalProperties: true type: object type: array - type: 'null' title: Locations description: Structured campaign scope locations to use when generating local audiences target_locations: anyOf: - items: additionalProperties: true type: object type: array - type: 'null' title: Target Locations description: Deprecated alias for locations user_provided_locations: type: boolean title: User Provided Locations description: Whether the user explicitly selected campaign scope locations default: false type: object title: TargetAudienceRequest description: Request schema for target audience generation TestEmailRequest: properties: campaign_id: type: integer title: Campaign Id test_emails: items: type: string type: array maxItems: 10 minItems: 1 title: Test Emails type: object required: - campaign_id - test_emails title: TestEmailRequest description: Request to send test emails TikTokAccountsResponseModel: properties: accounts: items: additionalProperties: true type: object type: array title: Accounts activation_state: anyOf: - type: string - type: 'null' title: Activation State active_account: anyOf: - additionalProperties: true type: object - type: 'null' title: Active Account type: object required: - accounts title: TikTokAccountsResponseModel TikTokActivateAccountRequest: properties: advertiser_id: type: string title: Advertiser Id description: TikTok advertiser ID to activate for future launches type: object required: - advertiser_id title: TikTokActivateAccountRequest TikTokAdPauseRequest: properties: ad_id: type: string title: Ad Id description: The database UUID of the ad to pause advertiser_id: type: string title: Advertiser Id description: The TikTok advertiser ID type: object required: - ad_id - advertiser_id title: TikTokAdPauseRequest description: Request model for pausing a TikTok ad TikTokAdResumeRequest: properties: ad_id: type: string title: Ad Id description: The database UUID of the ad to resume advertiser_id: type: string title: Advertiser Id description: The TikTok advertiser ID type: object required: - ad_id - advertiser_id title: TikTokAdResumeRequest description: Request model for resuming a TikTok ad TikTokAdStatusResponse: properties: success: type: boolean title: Success message: type: string title: Message status: type: string title: Status description: The new status of the ad (active/paused) type: object required: - success - message - status title: TikTokAdStatusResponse description: Response model for ad status update operations TikTokAuthResponseModel: properties: auth_url: type: string title: Auth Url type: object required: - auth_url title: TikTokAuthResponseModel TikTokLaunchVideoAdRequest: properties: ad_id: type: string title: Ad Id advertiser_id: anyOf: - type: string - type: 'null' title: Advertiser Id ad_text_override: anyOf: - type: string maxLength: 100 - type: 'null' title: Ad Text Override description: 'Optional override for ad_text (TikTok requirement: max 100 chars)' display_name_override: anyOf: - type: string maxLength: 40 - type: 'null' title: Display Name Override description: 'Optional override for display_name (TikTok requirement: max 40 chars)' ad_name_override: anyOf: - type: string maxLength: 512 - type: 'null' title: Ad Name Override description: 'Optional override for ad_name (TikTok requirement: max 512 chars)' type: object required: - ad_id title: TikTokLaunchVideoAdRequest description: Request model for launching a TikTok video ad with optional text field overrides TikTokSocialPostCampaignRequest: properties: campaign_id: type: string title: Campaign Id idea_number: type: integer title: Idea Number variation: type: integer title: Variation default: 0 tiktok_account_id: anyOf: - type: string - type: 'null' title: Tiktok Account Id settings: $ref: '#/components/schemas/TikTokSocialPublishSettings' type: object required: - campaign_id - idea_number - settings title: TikTokSocialPostCampaignRequest TikTokSocialPublishSettings: properties: privacy_level: type: string title: Privacy Level description: TikTok privacy_level from creator_info.privacy_level_options allow_comment: type: boolean title: Allow Comment default: false allow_duet: type: boolean title: Allow Duet default: false allow_stitch: type: boolean title: Allow Stitch default: false commercial_content_disclosure: type: boolean title: Commercial Content Disclosure default: false brand_content_toggle: type: boolean title: Brand Content Toggle default: false brand_organic_toggle: type: boolean title: Brand Organic Toggle default: false is_aigc: type: boolean title: Is Aigc default: true video_cover_timestamp_ms: anyOf: - type: integer - type: 'null' title: Video Cover Timestamp Ms photo_cover_index: anyOf: - type: integer - type: 'null' title: Photo Cover Index default: 0 auto_add_music: anyOf: - type: boolean - type: 'null' title: Auto Add Music default: true type: object required: - privacy_level title: TikTokSocialPublishSettings TikTokSocialPublishSettingsRequest: properties: campaign_id: type: string title: Campaign Id idea_number: type: integer title: Idea Number variation: type: integer title: Variation default: 0 settings: $ref: '#/components/schemas/TikTokSocialPublishSettings' type: object required: - campaign_id - idea_number - settings title: TikTokSocialPublishSettingsRequest TikTokSyncAdRequest: properties: ad_id: type: string title: Ad Id description: Normalized platform ad UUID advertiser_id: anyOf: - type: string - type: 'null' title: Advertiser Id description: TikTok advertiser ID pending_update: anyOf: - additionalProperties: true type: object - type: 'null' title: Pending Update description: Pending Pomo edit payload to apply only after sync succeeds. type: object required: - ad_id title: TikTokSyncAdRequest description: Request model for syncing saved Pomo changes to a TikTok ad baseline. TikTokSyncPreviewRequest: properties: ad_id: type: string title: Ad Id description: Normalized platform ad UUID advertiser_id: anyOf: - type: string - type: 'null' title: Advertiser Id description: TikTok advertiser ID pending_update: anyOf: - additionalProperties: true type: object - type: 'null' title: Pending Update description: Pending Pomo edit payload to preview without saving it. type: object required: - ad_id title: TikTokSyncPreviewRequest description: Request model for previewing a TikTok normalized sync. TikTokVideoAdRequest: properties: product_description: type: string title: Product Description target_audience: type: string title: Target Audience campaign_goals: anyOf: - items: type: string type: array - type: 'null' title: Campaign Goals key_selling_points: type: string title: Key Selling Points default: '' num_ads: type: integer maximum: 10.0 minimum: 1.0 title: Num Ads default: 3 video_length: type: integer maximum: 10.0 minimum: 10.0 title: Video Length description: Video duration is fixed at 10 seconds default: 10 bid_strategy: type: string title: Bid Strategy default: automatic budget_range: type: string title: Budget Range default: medium country: anyOf: - type: string - type: 'null' title: Country state_province: anyOf: - type: string - type: 'null' title: State Province city: anyOf: - type: string - type: 'null' title: City reference_images: anyOf: - items: type: string type: array maxItems: 3 - type: 'null' title: Reference Images type: object required: - product_description - target_audience title: TikTokVideoAdRequest ToolExecuteRequest: properties: tool_name: type: string title: Tool Name description: Name of the tool to execute organization_id: type: string title: Organization Id description: Organization context (required) company_profile_id: type: string title: Company Profile Id description: Company profile context (required) arguments: additionalProperties: true type: object title: Arguments description: Tool arguments confirmation_token: anyOf: - type: string - type: 'null' title: Confirmation Token description: Confirmation token for write operations conversation_id: anyOf: - type: string - type: 'null' title: Conversation Id description: Conversation ID for async job notifications type: object required: - tool_name - organization_id - company_profile_id title: ToolExecuteRequest description: Request to execute a tool ToolResultUpdateRequest: properties: agent_job_id: anyOf: - type: string - type: 'null' title: Agent Job Id tool_name: anyOf: - type: string - type: 'null' title: Tool Name workflow_token: anyOf: - type: string - type: 'null' title: Workflow Token confirmation_token: anyOf: - type: string - type: 'null' title: Confirmation Token workflow_status: anyOf: - type: string const: discarded - type: 'null' title: Workflow Status message: anyOf: - type: string - type: 'null' title: Message document_job_id: anyOf: - type: string - type: 'null' title: Document Job Id title: anyOf: - type: string - type: 'null' title: Title document_content: anyOf: - type: string - type: 'null' title: Document Content pdp_record_id: anyOf: - type: string - type: 'null' title: Pdp Record Id product_offering_id: anyOf: - type: string - type: 'null' title: Product Offering Id product_name: anyOf: - type: string - type: 'null' title: Product Name pdp_summary: anyOf: - additionalProperties: true type: object - type: 'null' title: Pdp Summary type: object title: ToolResultUpdateRequest description: Request schema for patching a tool call result with async job output. TransactionHistoryResponse: properties: transactions: items: {} type: array title: Transactions total: type: integer title: Total limit: type: integer title: Limit offset: type: integer title: Offset type: object required: - transactions - total - limit - offset title: TransactionHistoryResponse description: Credit transaction history response. TransferOwnershipRequest: properties: new_owner_user_id: type: string format: uuid title: New Owner User Id description: User ID of the new owner confirmation: type: boolean title: Confirmation description: Confirmation flag (must be True) type: object required: - new_owner_user_id - confirmation title: TransferOwnershipRequest description: Request to transfer organization ownership. TrendData: properties: date: type: string title: Date impressions: type: integer title: Impressions clicks: type: integer title: Clicks conversions: type: integer title: Conversions type: object required: - date - impressions - clicks - conversions title: TrendData description: Daily trend data TrendSuppressionResponse: properties: id: type: string format: uuid title: Id organization_id: type: string format: uuid title: Organization Id company_profile_id: type: string format: uuid title: Company Profile Id acted_by_user_id: anyOf: - type: string format: uuid - type: 'null' title: Acted By User Id platform: type: string enum: - google - tiktok - youtube - yelp - amazon title: Platform source_record_id: type: string title: Source Record Id reason: type: string enum: - not_interested - irrelevant - duplicate title: Reason created_at: anyOf: - type: string - type: 'null' title: Created At updated_at: anyOf: - type: string - type: 'null' title: Updated At type: object required: - id - organization_id - company_profile_id - platform - source_record_id - reason title: TrendSuppressionResponse TrendSuppressionUpsertRequest: properties: platform: type: string enum: - google - tiktok - youtube - yelp - amazon title: Platform source_record_id: type: string minLength: 1 title: Source Record Id reason: type: string enum: - not_interested - irrelevant - duplicate title: Reason type: object required: - platform - source_record_id - reason title: TrendSuppressionUpsertRequest UpdateCreatorContactsRequest: properties: contacts_json: additionalProperties: true type: object title: Contacts Json type: object required: - contacts_json title: UpdateCreatorContactsRequest UpdateCreatorListMembershipRequest: properties: outreach_stage: anyOf: - type: string enum: - saved - outreached - replied - negotiating - confirmed - rejected - type: 'null' title: Outreach Stage priority: anyOf: - type: string - type: 'null' title: Priority notes: anyOf: - type: string - type: 'null' title: Notes position: anyOf: - type: integer - type: 'null' title: Position type: object title: UpdateCreatorListMembershipRequest UpdateCreatorListRequest: properties: name: anyOf: - type: string maxLength: 255 minLength: 1 - type: 'null' title: Name description: anyOf: - type: string - type: 'null' title: Description status: anyOf: - type: string - type: 'null' title: Status is_pinned: anyOf: - type: boolean - type: 'null' title: Is Pinned metadata_json: anyOf: - additionalProperties: true type: object - type: 'null' title: Metadata Json type: object title: UpdateCreatorListRequest UpdateCreatorLocationsRequest: properties: creator_locations_json: items: additionalProperties: true type: object type: array title: Creator Locations Json type: object title: UpdateCreatorLocationsRequest UpdateOutreachStageRequest: properties: outreach_stage: type: string enum: - saved - outreached - replied - negotiating - confirmed - rejected title: Outreach Stage type: object required: - outreach_stage title: UpdateOutreachStageRequest UpdatePostRequest: properties: caption: anyOf: - type: string - type: 'null' title: Caption hashtags: anyOf: - items: type: string type: array - type: 'null' title: Hashtags platform_config: anyOf: - additionalProperties: true type: object - type: 'null' title: Platform Config scheduled_for: anyOf: - type: string - type: 'null' title: Scheduled For type: object title: UpdatePostRequest description: Request model for updating a post. User: properties: email: type: string format: email title: Email id: anyOf: - type: string - type: 'null' title: Id google_id: anyOf: - type: string - type: 'null' title: Google Id name: anyOf: - type: string - type: 'null' title: Name status: anyOf: - type: string - type: 'null' title: Status default: active created_at: anyOf: - type: string format: date-time - type: 'null' title: Created At updated_at: anyOf: - type: string format: date-time - type: 'null' title: Updated At is_active: anyOf: - type: boolean - type: 'null' title: Is Active default: true company: anyOf: - type: string - type: 'null' title: Company auth_provider: anyOf: - type: string - type: 'null' title: Auth Provider registration_data: anyOf: - additionalProperties: true type: object - type: 'null' title: Registration Data type: object required: - email - id title: User UserPermissionSummary: properties: user_id: anyOf: - type: string - type: 'null' title: User Id user_name: anyOf: - type: string - type: 'null' title: User Name user_email: type: string title: User Email organization_role: anyOf: - type: string - type: 'null' title: Organization Role has_approval_access: type: boolean title: Has Approval Access default: false accessible_projects: items: additionalProperties: true type: object type: array title: Accessible Projects description: List of projects user has access to with their roles type: object required: - user_id - user_email title: UserPermissionSummary description: Summary of a user's permissions in the organization. UserPreferencesPartial: properties: preferences: additionalProperties: true type: object title: Preferences description: User preferences as key-value pairs type: object title: UserPreferencesPartial description: 'Response schema that returns only the preferences object without metadata. Useful for lightweight responses.' UserPreferencesResponse: properties: id: type: string format: uuid title: Id user_id: type: string format: uuid title: User Id preferences: additionalProperties: true type: object title: Preferences description: User preferences as key-value pairs created_at: type: string format: date-time title: Created At updated_at: type: string format: date-time title: Updated At type: object required: - id - user_id - created_at - updated_at title: UserPreferencesResponse description: 'Response schema for user preferences. Returns the complete preferences object with metadata.' UserPreferencesUpdate: properties: preferences: additionalProperties: true type: object title: Preferences description: Preferences to update (will be merged with existing preferences) type: object required: - preferences title: UserPreferencesUpdate description: "Schema for updating user preferences.\nAccepts a dictionary of preferences to merge with existing preferences.\n\ \nExample:\n{\n \"tutorial_completed\": true,\n \"daily_digest_theme\": \"dark\",\n \"onboarding_dismissed\": true\n\ }" UserUpdate: properties: email: anyOf: - type: string format: email - type: 'null' title: Email name: anyOf: - type: string - type: 'null' title: Name password: anyOf: - type: string - type: 'null' title: Password profile_completed: anyOf: - type: boolean - type: 'null' title: Profile Completed google_id: anyOf: - type: string - type: 'null' title: Google Id company: anyOf: - type: string - type: 'null' title: Company title: anyOf: - type: string - type: 'null' title: Title company_link: anyOf: - type: string - type: 'null' title: Company Link type: object title: UserUpdate description: Schema for user profile updates. Status changes require admin privileges. ValidatePlanChangeRequest: properties: organization_id: type: string title: Organization Id target_plan: type: string title: Target Plan billing_interval: anyOf: - type: string - type: 'null' title: Billing Interval type: object required: - organization_id - target_plan title: ValidatePlanChangeRequest description: Request model for validating a plan change. 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 VideoSelectionRequest: properties: campaign_id: anyOf: - type: string format: uuid - type: string title: Campaign Id description: Campaign ID (can be UUID database ID or string campaign_id) campaign_type: type: string title: Campaign Type description: Type of campaign (e.g., google_video, tiktok_video) selected_video_url: type: string title: Selected Video Url description: URL of the selected video asset variation_index: anyOf: - type: integer - type: 'null' title: Variation Index description: Index of the selected video (0-based) total_variations: anyOf: - type: integer - type: 'null' title: Total Variations description: Total number of videos that were presented selection_metadata: anyOf: - additionalProperties: true type: object - type: 'null' title: Selection Metadata description: Additional metadata about the selection ad_id: anyOf: - type: string - type: 'null' title: Ad Id description: Specific ad ID for ad campaigns type: object required: - campaign_id - campaign_type - selected_video_url title: VideoSelectionRequest description: Request schema for selecting or uploading a replacement video for a campaign. VideoSelectionResponse: properties: success: type: boolean title: Success campaign_id: anyOf: - type: string format: uuid - type: string title: Campaign Id campaign_type: type: string title: Campaign Type selected_video_url: type: string title: Selected Video Url selected_thumbnail_url: type: string title: Selected Thumbnail Url selected_companion_image_url: anyOf: - type: string - type: 'null' title: Selected Companion Image Url message: type: string title: Message type: object required: - success - campaign_id - campaign_type - selected_video_url - selected_thumbnail_url - message title: VideoSelectionResponse description: Response schema for video selection. WorkflowStatus: type: string enum: - draft - review - approved - scheduled - sending - sent - failed title: WorkflowStatus description: Email campaign workflow status values. WorkflowUpdateRequest: properties: campaign_id: type: integer title: Campaign Id new_status: type: string pattern: ^(draft|review|approved|scheduled|sending|sent|failed)$ title: New Status type: object required: - campaign_id - new_status title: WorkflowUpdateRequest description: Request to update workflow status routes__ai_personas__GeneratePersonasRequest: properties: product_offering_id: anyOf: - type: string format: uuid - type: 'null' title: Product Offering Id personas_per_group: type: integer maximum: 100.0 title: Personas Per Group description: Number of personas per target group default: 50 persona_set_id: anyOf: - type: string format: uuid - type: 'null' title: Persona Set Id location: anyOf: - additionalProperties: true type: object - type: 'null' title: Location type: object title: GeneratePersonasRequest routes__ai_testing__GeneratePersonasRequest: properties: location: anyOf: - $ref: '#/components/schemas/LocationInfo' - type: 'null' persona_set_name: anyOf: - type: string - type: 'null' title: Persona Set Name persona_set_description: anyOf: - type: string - type: 'null' title: Persona Set Description type: object title: GeneratePersonasRequest routes__external_platform__google_action__GoogleDisplayAdRequest: properties: account_id: type: string title: Account Id description: Google Ads account ID ad_group_id: type: string title: Ad Group Id description: Ad group ID to create the ad in headline: type: string title: Headline description: Headline text for the ad long_headline: anyOf: - type: string - type: 'null' title: Long Headline description: Long headline for responsive display ads (max 90 characters) description: type: string title: Description description: Description text for the ad business_name: type: string title: Business Name description: Business name for the ad image_url: type: string title: Image Url description: URL of an image to use for the ad final_url: type: string title: Final Url description: Landing page URL for the ad type: object required: - account_id - ad_group_id - headline - description - business_name - image_url - final_url title: GoogleDisplayAdRequest description: Request model for creating a Google Display ad. schemas__campaigns__ads__google__GoogleDisplayAdRequest: properties: product_description: type: string title: Product Description description: Description of the product or service target_audience: type: string title: Target Audience description: Target audience description company_profile_id: type: string format: uuid title: Company Profile Id description: Company profile ID (required) campaign_goals: anyOf: - items: type: string type: array - type: 'null' title: Campaign Goals description: List of campaign goals key_selling_points: type: string title: Key Selling Points description: Key selling points default: '' num_ads: type: integer maximum: 10.0 minimum: 1.0 title: Num Ads description: Number of ad variations to generate default: 3 bid_strategy: type: string title: Bid Strategy description: Bidding strategy default: maximize_conversions budget_range: type: string title: Budget Range description: Budget range (low, medium, high, custom) default: medium country: anyOf: - type: string - type: 'null' title: Country description: Target country state_province: anyOf: - type: string - type: 'null' title: State Province description: Target state/province city: anyOf: - type: string - type: 'null' title: City description: Target city locations: anyOf: - items: $ref: '#/components/schemas/LocationItem' type: array - type: 'null' title: Locations description: List of locations to target (countries/regions/states/cities/postal codes/proximities). This does not split budget per location; all locations share the campaign budget. reference_images: anyOf: - items: type: string type: array maxItems: 3 - type: 'null' title: Reference Images description: List of reference image base64 data URLs (max 3) lead_form_enabled: anyOf: - type: boolean - type: 'null' title: Lead Form Enabled description: Whether to use lead form extension where supported default: false max_cpc: anyOf: - type: number minimum: 0.01 - type: 'null' title: Max Cpc description: Maximum cost per click in dollars (e.g., 1.50 for $1.50). Required when bid_strategy is 'MANUAL_CPC' experiment_package_id: anyOf: - type: string maxLength: 64 - type: 'null' title: Experiment Package Id description: Test package id; created campaigns are stamped with this linkage launch_strategy_mode: anyOf: - type: string pattern: ^(test_learn_pilot|direct_campaign)$ - type: 'null' title: Launch Strategy Mode description: test_learn_pilot or direct_campaign dayparting_enabled: anyOf: - type: boolean - type: 'null' title: Dayparting Enabled description: Whether dayparting/ad scheduling is enabled for this campaign default: false dayparting_config: anyOf: - additionalProperties: true type: object - type: 'null' title: Dayparting Config description: Dayparting configuration including schedule, timezone, and platform-specific settings num_images_per_ad: type: integer maximum: 5.0 minimum: 1.0 title: Num Images Per Ad description: Number of images per ad default: 2 type: object required: - product_description - target_audience - company_profile_id title: GoogleDisplayAdRequest description: Request model for Google Display ads securitySchemes: HTTPBearer: type: http scheme: bearer