{"openapi":"3.0.0","paths":{"/":{"get":{"operationId":"AppController_root","parameters":[],"responses":{"200":{"description":""}}}},"/accounts":{"post":{"operationId":"AccountsController_create","parameters":[],"responses":{"201":{"description":""}}},"get":{"operationId":"AccountsController_findAll","parameters":[],"responses":{"200":{"description":""}}}},"/accounts/{id}":{"get":{"operationId":"AccountsController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}}},"patch":{"operationId":"AccountsController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}}},"delete":{"operationId":"AccountsController_delete","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}},"/auth/{providerType}/login":{"get":{"operationId":"AuthController_login","parameters":[{"name":"providerType","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}},"/auth/{providerType}/callback":{"get":{"operationId":"AuthController_callback","parameters":[{"name":"providerType","required":true,"in":"path","schema":{"type":"string"}},{"name":"code","required":true,"in":"query","schema":{"type":"string"}},{"name":"state","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}},"/auth/{providerType}/refresh/{accountId}":{"post":{"operationId":"AuthController_refreshToken","parameters":[{"name":"accountId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}}}},"/auth/{providerType}/deauthorize":{"get":{"operationId":"AuthController_getDeauthorizeInfo","parameters":[],"responses":{"200":{"description":""}}},"post":{"operationId":"AuthController_deauthorize","parameters":[],"responses":{"201":{"description":""}}}},"/providers/actions/catalog":{"get":{"operationId":"ProviderActionsController_listCatalog","summary":"List every provider with at least one action definition","description":"Returns provider metadata + action counts for the full registry.","parameters":[],"responses":{"200":{"description":""}},"tags":["provider-actions"],"security":[{"jwt":[]}]}},"/providers/{providerType}/actions":{"get":{"operationId":"ProviderActionsController_listActions","summary":"List actions exposed by a provider","description":"Returns action name, inputs, and scopes.","parameters":[{"name":"providerType","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["provider-actions"],"security":[{"jwt":[]}]}},"/providers/{providerType}/actions/{actionName}":{"post":{"operationId":"ProviderActionsController_execute","summary":"Execute a provider action standalone","description":"Plan-gated: monthly execution cap per tier.","parameters":[{"name":"providerType","required":true,"in":"path","schema":{"type":"string"}},{"name":"actionName","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"tags":["provider-actions"],"security":[{"jwt":[]}]}},"/connect/v1/billing/plan":{"get":{"operationId":"BillingController_getPlan","parameters":[],"responses":{"200":{"description":""}}}},"/connect/v1/billing/usage":{"get":{"operationId":"BillingController_getUsage","parameters":[],"responses":{"200":{"description":""}}}},"/connect/v1/billing/usage/history":{"get":{"operationId":"BillingController_getUsageHistory","parameters":[],"responses":{"200":{"description":""}}}},"/connect/v1/billing/checkout":{"post":{"operationId":"BillingController_createCheckout","parameters":[],"responses":{"201":{"description":""}}}},"/connect/v1/billing/portal":{"post":{"operationId":"BillingController_createPortalSession","parameters":[],"responses":{"201":{"description":""}}}},"/connect/v1/billing/subscription":{"delete":{"operationId":"BillingController_cancelSubscription","parameters":[],"responses":{"200":{"description":""}}}},"/connect/v1/billing/subscription/resume":{"post":{"operationId":"BillingController_resumeSubscription","parameters":[],"responses":{"201":{"description":""}}}},"/billing/webhook":{"post":{"operationId":"StripeWebhookController_handleWebhook","parameters":[{"name":"stripe-signature","required":true,"in":"header","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}},"/webhook/{providerType}":{"get":{"operationId":"WebhookController_verify","parameters":[{"name":"providerType","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}}},"post":{"operationId":"WebhookController_receive","parameters":[{"name":"providerType","required":true,"in":"path","schema":{"type":"string"}},{"name":"x-hub-signature-256","required":true,"in":"header","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}},"/leads":{"get":{"operationId":"LeadsController_findAll","parameters":[{"name":"accountId","required":true,"in":"query","schema":{"type":"string"}},{"name":"crmSyncStatus","required":true,"in":"query","schema":{"type":"string"}},{"name":"page","required":true,"in":"query","schema":{"type":"string"}},{"name":"limit","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}},"/leads/{id}":{"get":{"operationId":"LeadsController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}},"/leads/import/{accountId}":{"post":{"operationId":"LeadsController_startImport","parameters":[{"name":"accountId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}}}},"/leads/import/{accountId}/status":{"get":{"operationId":"LeadsController_getImportStatus","parameters":[{"name":"accountId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}},"/leads/{id}/retry-sync":{"post":{"operationId":"LeadsController_retrySync","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}}}},"/crm/push/{leadId}":{"post":{"operationId":"CrmController_pushLead","parameters":[{"name":"leadId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}}}},"/crm/push-batch/{accountId}":{"post":{"operationId":"CrmController_pushBatch","parameters":[{"name":"accountId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}}}},"/crm/{accountId}/test":{"post":{"operationId":"CrmController_testConnection","parameters":[{"name":"accountId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}}}},"/connect/v1/flows":{"get":{"operationId":"FlowsController_list","parameters":[],"responses":{"200":{"description":""}},"tags":["flows"],"security":[{"jwt":[]}]},"post":{"operationId":"FlowsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateFlowDto"}}}},"responses":{"201":{"description":""}},"tags":["flows"],"security":[{"jwt":[]}]}},"/connect/v1/flows/trigger-options":{"get":{"operationId":"FlowsController_getTriggerOptions","parameters":[],"responses":{"200":{"description":""}},"tags":["flows"],"security":[{"jwt":[]}]}},"/connect/v1/flows/action-options":{"get":{"operationId":"FlowsController_getActionOptions","parameters":[],"responses":{"200":{"description":""}},"tags":["flows"],"security":[{"jwt":[]}]}},"/connect/v1/flows/{id}":{"get":{"operationId":"FlowsController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["flows"],"security":[{"jwt":[]}]},"patch":{"operationId":"FlowsController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateFlowDto"}}}},"responses":{"200":{"description":""}},"tags":["flows"],"security":[{"jwt":[]}]},"delete":{"operationId":"FlowsController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["flows"],"security":[{"jwt":[]}]}},"/connect/v1/flows/{id}/toggle":{"patch":{"operationId":"FlowsController_toggle","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["flows"],"security":[{"jwt":[]}]}},"/connect/v1/flows/{id}/executions":{"get":{"operationId":"FlowsController_executions","summary":"List executions for a flow (paginated)","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"page","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["flows"],"security":[{"jwt":[]}]}},"/connect/v1/flows/{id}/executions/{executionId}/steps":{"get":{"operationId":"FlowsController_executionSteps","summary":"Inspect per-step output and errors for one execution","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"executionId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["flows"],"security":[{"jwt":[]}]}},"/connect/v1/flows/{id}/executions/{executionId}/replay":{"post":{"operationId":"FlowsController_replayExecution","summary":"Replay a past execution","description":"Runs the flow again with the trigger payload from the original execution.","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"executionId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"tags":["flows"],"security":[{"jwt":[]}]}},"/connect/v1/flows/{id}/test":{"post":{"operationId":"FlowsController_testFlow","summary":"Dry-run a flow with a body-provided trigger payload","description":"Bypasses the trigger router. Uses the same engine as a live trigger.","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"tags":["flows"],"security":[{"jwt":[]}]}},"/connect/v1/flows/{id}/publish":{"post":{"operationId":"FlowsController_publish","summary":"Publish a draft flow","description":"Snapshots steps into version history and marks the flow as published.","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"tags":["flows"],"security":[{"jwt":[]}]}},"/connect/v1/flows/{id}/versions":{"get":{"operationId":"FlowsController_versions","summary":"Get version history for a flow","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["flows"],"security":[{"jwt":[]}]}},"/connect/v1/flows/{id}/revert/{version}":{"post":{"operationId":"FlowsController_revert","summary":"Revert flow to a previous version","description":"Replaces current steps with the snapshot from the specified version.","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"version","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"tags":["flows"],"security":[{"jwt":[]}]}},"/connect/v1/flows/{id}/publish-as-template":{"post":{"operationId":"FlowsController_publishAsTemplate","summary":"Publish a flow as a reusable template","description":"Requires templates.publish. Creates an account-private template by default.","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"tags":["flows"],"security":[{"jwt":[]}]}},"/connect/v1/flow-templates":{"get":{"operationId":"FlowTemplatesController_list","summary":"List published flow templates","description":"Requires templates.view. Includes account-private templates.","parameters":[{"name":"category","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["flow-templates"],"security":[{"jwt":[]}]}},"/connect/v1/flow-templates/{slug}":{"get":{"operationId":"FlowTemplatesController_get","summary":"Get one template by slug","description":"Requires templates.view","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["flow-templates"],"security":[{"jwt":[]}]}},"/connect/v1/flow-templates/{slug}/clone":{"post":{"operationId":"FlowTemplatesController_clone","summary":"Clone a template into a new flow","description":"Requires templates.write. Plan-gated: monthly clone cap per tier.","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"tags":["flow-templates"],"security":[{"jwt":[]}]}},"/connect/v1/flows/{flowId}/triggers":{"get":{"operationId":"FlowTriggersController_list","summary":"List trigger subscriptions for a flow","description":"Requires triggers.view","parameters":[{"name":"flowId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["flow-triggers"],"security":[{"jwt":[]}]},"post":{"operationId":"FlowTriggersController_create","summary":"Subscribe a flow to a provider trigger","description":"Requires triggers.write. Plan-gated: active subscription cap per tier.","parameters":[{"name":"flowId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"tags":["flow-triggers"],"security":[{"jwt":[]}]}},"/connect/v1/flows/{flowId}/triggers/{subscriptionId}":{"delete":{"operationId":"FlowTriggersController_remove","summary":"Delete a trigger subscription","description":"Requires triggers.write","parameters":[{"name":"flowId","required":true,"in":"path","schema":{"type":"string"}},{"name":"subscriptionId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["flow-triggers"],"security":[{"jwt":[]}]}},"/connect/v1/flows/{flowId}/schedules":{"get":{"operationId":"FlowSchedulesController_list","summary":"List schedules for a flow","description":"Requires triggers.view","parameters":[{"name":"flowId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["flow-schedules"],"security":[{"jwt":[]}]},"post":{"operationId":"FlowSchedulesController_create","summary":"Create a schedule for a flow","description":"Requires triggers.write. Runs the flow on the given cron expression.","parameters":[{"name":"flowId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"tags":["flow-schedules"],"security":[{"jwt":[]}]}},"/connect/v1/flows/{flowId}/schedules/{scheduleId}":{"patch":{"operationId":"FlowSchedulesController_update","summary":"Update a schedule","description":"Requires triggers.write","parameters":[{"name":"flowId","required":true,"in":"path","schema":{"type":"string"}},{"name":"scheduleId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["flow-schedules"],"security":[{"jwt":[]}]},"delete":{"operationId":"FlowSchedulesController_remove","summary":"Delete a schedule","description":"Requires triggers.write","parameters":[{"name":"flowId","required":true,"in":"path","schema":{"type":"string"}},{"name":"scheduleId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["flow-schedules"],"security":[{"jwt":[]}]}},"/connect/v1/alerts":{"get":{"operationId":"AlertsController_list","summary":"List alert subscriptions","description":"Requires alerts.view","parameters":[],"responses":{"200":{"description":""}},"tags":["alerts"],"security":[{"jwt":[]}]},"post":{"operationId":"AlertsController_create","summary":"Create an alert subscription","description":"Requires alerts.write. Supports email, webhook, and slack channels.","parameters":[],"responses":{"201":{"description":""}},"tags":["alerts"],"security":[{"jwt":[]}]}},"/connect/v1/alerts/{subscriptionId}":{"patch":{"operationId":"AlertsController_update","summary":"Update an alert subscription","description":"Requires alerts.write","parameters":[{"name":"subscriptionId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["alerts"],"security":[{"jwt":[]}]},"delete":{"operationId":"AlertsController_remove","summary":"Delete an alert subscription","description":"Requires alerts.write","parameters":[{"name":"subscriptionId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["alerts"],"security":[{"jwt":[]}]}},"/connect/v1/task-history":{"get":{"operationId":"TaskHistoryController_list","summary":"List executions across every flow in the caller account","description":"Requires task_history.view. Supports status and flowId filters with pagination.","parameters":[{"name":"page","required":true,"in":"query","schema":{"type":"string"}},{"name":"status","required":true,"in":"query","schema":{"type":"string"}},{"name":"flowId","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["task-history"],"security":[{"jwt":[]}]}},"/connect/v1/tables":{"get":{"operationId":"TablesController_list","summary":"List tables in the caller account","parameters":[],"responses":{"200":{"description":""}},"tags":["tables"],"security":[{"jwt":[]}]},"post":{"operationId":"TablesController_create","summary":"Create a new table with a column schema","parameters":[],"responses":{"201":{"description":""}},"tags":["tables"],"security":[{"jwt":[]}]}},"/connect/v1/tables/{slug}":{"get":{"operationId":"TablesController_findOne","summary":"Get one table by slug","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["tables"],"security":[{"jwt":[]}]},"patch":{"operationId":"TablesController_update","summary":"Update table metadata or schema","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["tables"],"security":[{"jwt":[]}]},"delete":{"operationId":"TablesController_remove","summary":"Delete a table and all its rows","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["tables"],"security":[{"jwt":[]}]}},"/connect/v1/tables/{slug}/rows":{"get":{"operationId":"TablesController_listRows","summary":"List rows in a table (paginated)","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}},{"name":"page","required":true,"in":"query","schema":{"type":"string"}},{"name":"limit","required":true,"in":"query","schema":{"type":"string"}},{"name":"search","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["tables"],"security":[{"jwt":[]}]},"post":{"operationId":"TablesController_createRow","summary":"Create a row in a table","description":"Plan-gated: total row count cap per account.","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"tags":["tables"],"security":[{"jwt":[]}]}},"/connect/v1/tables/{slug}/rows/upsert":{"post":{"operationId":"TablesController_upsertRow","summary":"Upsert a row by external_key","description":"Creates a new row if no match, otherwise merges data into the existing row.","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"tags":["tables"],"security":[{"jwt":[]}]}},"/connect/v1/tables/{slug}/rows/lookup":{"get":{"operationId":"TablesController_lookupRow","summary":"Look up a single row by column value","description":"Returns the most recently updated matching row, or null.","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}},{"name":"column","required":true,"in":"query","schema":{"type":"string"}},{"name":"value","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["tables"],"security":[{"jwt":[]}]}},"/connect/v1/tables/{slug}/rows/{rowId}":{"patch":{"operationId":"TablesController_updateRow","summary":"Update a row (merges into existing data)","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}},{"name":"rowId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["tables"],"security":[{"jwt":[]}]},"delete":{"operationId":"TablesController_deleteRow","summary":"Delete a row","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}},{"name":"rowId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["tables"],"security":[{"jwt":[]}]}},"/connect/v1/tables/{slug}/import":{"post":{"operationId":"TablesController_importCsv","summary":"Bulk import rows from a CSV payload","description":"First line is the header. external_key or id columns trigger upserts.","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"tags":["tables"],"security":[{"jwt":[]}]}},"/connect/v1/tables/{slug}/export":{"get":{"operationId":"TablesController_exportCsv","summary":"Export all rows as CSV text","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["tables"],"security":[{"jwt":[]}]}},"/compliance/privacy-policy":{"get":{"operationId":"ComplianceController_getPrivacyPolicy","parameters":[],"responses":{"200":{"description":""}}}},"/compliance/data-deletion":{"get":{"operationId":"ComplianceController_getDataDeletionInfo","parameters":[],"responses":{"200":{"description":""}}},"post":{"operationId":"ComplianceController_handleDataDeletion","parameters":[],"responses":{"201":{"description":""}}}},"/compliance/data-deletion/status":{"get":{"operationId":"ComplianceController_getDeletionStatus","parameters":[{"name":"code","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}},"/health":{"get":{"operationId":"HealthController_check","parameters":[],"responses":{"200":{"description":""}}}},"/api/cron/token-refresh":{"get":{"operationId":"SchedulerController_tokenRefreshCron","parameters":[],"responses":{"200":{"description":""}}}},"/api/cron/retry-failed-syncs":{"get":{"operationId":"SchedulerController_retryFailedSyncsCron","parameters":[],"responses":{"200":{"description":""}}}},"/api/cron/resume-imports":{"get":{"operationId":"SchedulerController_resumeImportsCron","parameters":[],"responses":{"200":{"description":""}}}},"/api/cron/renew-webhook-subscriptions":{"get":{"operationId":"SchedulerController_renewWebhookSubscriptionsCron","parameters":[],"responses":{"200":{"description":""}}}},"/api/cron/poll-triggers":{"get":{"operationId":"SchedulerController_pollTriggersCron","parameters":[],"responses":{"200":{"description":""}}}},"/api/cron/run-schedules":{"get":{"operationId":"SchedulerController_runSchedulesCron","parameters":[],"responses":{"200":{"description":""}}}},"/api/cron/connection-health":{"get":{"operationId":"SchedulerController_connectionHealthCron","parameters":[],"responses":{"200":{"description":""}}}},"/api/cron/data-sync":{"get":{"operationId":"SchedulerController_dataSyncCron","parameters":[],"responses":{"200":{"description":""}}}},"/connect/v1/providers":{"get":{"operationId":"ConnectController_listProviders","parameters":[],"responses":{"200":{"description":""}}}},"/connect/v1/providers/{type}":{"get":{"operationId":"ConnectController_getProvider","parameters":[{"name":"type","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}},"/connect/v1/providers/{type}/status":{"get":{"operationId":"ConnectController_getConnectionStatus","parameters":[{"name":"type","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}},"/connect/v1/providers/{type}/connect":{"post":{"operationId":"ConnectController_connectProvider","parameters":[{"name":"type","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}}}},"/connect/v1/connections/health":{"get":{"operationId":"ConnectController_getConnectionHealth","parameters":[],"responses":{"200":{"description":""}}}},"/connect/v1/connections/{id}/check-health":{"post":{"operationId":"ConnectController_checkConnectionHealth","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}}}},"/connect/v1/connections":{"get":{"operationId":"ConnectController_listConnections","parameters":[{"name":"provider","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}},"/connect/v1/connections/{id}":{"delete":{"operationId":"ConnectController_deleteConnection","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}},"/connect/v1/providers/{type}/disconnect":{"delete":{"operationId":"ConnectController_disconnectProvider","parameters":[{"name":"type","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}},"/connect/v1/webhooks/{type}/subscribe":{"post":{"operationId":"ConnectController_subscribe","parameters":[{"name":"type","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}}}},"/connect/v1/webhooks/{type}/subscribe/{id}":{"delete":{"operationId":"ConnectController_unsubscribe","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}},"/connect/v1/webhooks/{type}/subscriptions":{"get":{"operationId":"ConnectController_listSubscriptions","parameters":[{"name":"type","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}},"/connect/v1/approvals/policy":{"get":{"operationId":"ApprovalController_getPolicy","summary":"Get approval policy for current org","parameters":[],"responses":{"200":{"description":""}},"tags":["approvals"]},"patch":{"operationId":"ApprovalController_updatePolicy","summary":"Update approval policy for current org","parameters":[],"responses":{"200":{"description":""}},"tags":["approvals"]}},"/connect/v1/approvals":{"get":{"operationId":"ApprovalController_listRequests","summary":"List all approval requests for current org","parameters":[],"responses":{"200":{"description":""}},"tags":["approvals"]}},"/connect/v1/approvals/pending":{"get":{"operationId":"ApprovalController_listPending","summary":"List pending approval requests","parameters":[],"responses":{"200":{"description":""}},"tags":["approvals"]}},"/connect/v1/approvals/{id}":{"get":{"operationId":"ApprovalController_getRequest","summary":"Get approval request details","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["approvals"]}},"/connect/v1/approvals/{id}/approve":{"post":{"operationId":"ApprovalController_approve","summary":"Approve an integration request","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"tags":["approvals"]}},"/connect/v1/approvals/{id}/deny":{"post":{"operationId":"ApprovalController_deny","summary":"Deny an integration request","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"tags":["approvals"]}},"/api/execute":{"post":{"operationId":"ExecutionController_execute","summary":"Execute an action on a connected provider (S2S)","description":"Called by Calimatic Apps workflow engine to execute actions via stored credentials.","parameters":[],"responses":{"201":{"description":""}},"tags":["execution"]}},"/api/connections/{connectionId}/token":{"get":{"operationId":"ExecutionController_getToken","summary":"Get a fresh access token for a connection (S2S)","description":"Returns a decrypted access token for direct API calls. Auto-refreshes if expired.","parameters":[{"name":"connectionId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["execution"]}},"/api/connections/import":{"post":{"operationId":"ExecutionController_importConnection","summary":"Import existing OAuth tokens into Connect (S2S)","description":"Migrate tokens from an external OAuth app. Creates a connection and stores the tokens.","parameters":[],"responses":{"201":{"description":""}},"tags":["execution"]}},"/api/registry/actions":{"get":{"operationId":"ExecutionController_listActions","summary":"List available actions for an app","parameters":[{"name":"appId","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["execution"]}},"/api/registry/actions/{actionId}/options/{fieldKey}":{"get":{"operationId":"ExecutionController_getFieldOptions","summary":"Get dynamic options for an action field","parameters":[{"name":"actionId","required":true,"in":"path","schema":{"type":"string"}},{"name":"fieldKey","required":true,"in":"path","schema":{"type":"string"}},{"name":"connectionId","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["execution"]}},"/api/unified/crm/providers":{"get":{"operationId":"UnifiedController_getProviders","summary":"List CRM providers with unified API support","parameters":[],"responses":{"200":{"description":""}},"tags":["unified"]}},"/api/unified/crm/contacts":{"get":{"operationId":"UnifiedController_listContactsS2S","summary":"List contacts via unified CRM schema (S2S)","parameters":[{"name":"connectionId","required":true,"in":"query","schema":{"type":"string"}},{"name":"organizationId","required":true,"in":"query","schema":{"type":"string"}},{"name":"limit","required":true,"in":"query","schema":{"type":"string"}},{"name":"cursor","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["unified"]}},"/api/unified/crm/contacts/{contactId}":{"get":{"operationId":"UnifiedController_getContactS2S","summary":"Get a single contact via unified CRM schema (S2S)","parameters":[{"name":"contactId","required":true,"in":"path","schema":{"type":"string"}},{"name":"connectionId","required":true,"in":"query","schema":{"type":"string"}},{"name":"organizationId","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["unified"]}},"/api/unified/crm/companies":{"get":{"operationId":"UnifiedController_listCompaniesS2S","summary":"List companies via unified CRM schema (S2S)","parameters":[{"name":"connectionId","required":true,"in":"query","schema":{"type":"string"}},{"name":"organizationId","required":true,"in":"query","schema":{"type":"string"}},{"name":"limit","required":true,"in":"query","schema":{"type":"string"}},{"name":"cursor","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["unified"]}},"/api/unified/crm/deals":{"get":{"operationId":"UnifiedController_listDealsS2S","summary":"List deals via unified CRM schema (S2S)","parameters":[{"name":"connectionId","required":true,"in":"query","schema":{"type":"string"}},{"name":"organizationId","required":true,"in":"query","schema":{"type":"string"}},{"name":"limit","required":true,"in":"query","schema":{"type":"string"}},{"name":"cursor","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["unified"]}},"/api/unified/user/crm/contacts":{"get":{"operationId":"UnifiedController_listContactsUser","summary":"List contacts via unified CRM schema (user auth)","parameters":[{"name":"connectionId","required":true,"in":"query","schema":{"type":"string"}},{"name":"limit","required":true,"in":"query","schema":{"type":"string"}},{"name":"cursor","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["unified"]}},"/api/unified/user/crm/companies":{"get":{"operationId":"UnifiedController_listCompaniesUser","summary":"List companies via unified CRM schema (user auth)","parameters":[{"name":"connectionId","required":true,"in":"query","schema":{"type":"string"}},{"name":"limit","required":true,"in":"query","schema":{"type":"string"}},{"name":"cursor","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["unified"]}},"/api/unified/user/crm/deals":{"get":{"operationId":"UnifiedController_listDealsUser","summary":"List deals via unified CRM schema (user auth)","parameters":[{"name":"connectionId","required":true,"in":"query","schema":{"type":"string"}},{"name":"limit","required":true,"in":"query","schema":{"type":"string"}},{"name":"cursor","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["unified"]}},"/connect/v1/proxy/{providerType}":{"post":{"operationId":"ProxyController_proxy","parameters":[{"name":"providerType","required":true,"in":"path","schema":{"type":"string"}},{"name":"x-connection-id","required":true,"in":"header","schema":{"type":"string"}}],"responses":{"201":{"description":""}}}},"/connect/v1/records":{"get":{"operationId":"RecordsController_list","summary":"List provider records across every resource type","description":"Requires records.view. Filters: resourceType, providerType, search (free-text in JSONB data).","parameters":[{"name":"page","required":true,"in":"query","schema":{"type":"string"}},{"name":"limit","required":true,"in":"query","schema":{"type":"string"}},{"name":"resourceType","required":true,"in":"query","schema":{"type":"string"}},{"name":"providerType","required":true,"in":"query","schema":{"type":"string"}},{"name":"search","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["records"],"security":[{"jwt":[]}]}},"/connect/v1/records/summary":{"get":{"operationId":"RecordsController_summary","summary":"Count of records grouped by resource_type and provider","description":"Drives the admin browser resource-type picker. Requires records.view.","parameters":[],"responses":{"200":{"description":""}},"tags":["records"],"security":[{"jwt":[]}]}},"/connect/v1/records/{id}":{"get":{"operationId":"RecordsController_findOne","summary":"Get one record by id (tenant-scoped)","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["records"],"security":[{"jwt":[]}]},"delete":{"operationId":"RecordsController_remove","summary":"Delete a record","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["records"],"security":[{"jwt":[]}]}},"/connect/v1/records/import":{"post":{"operationId":"RecordsController_importCsv","summary":"Bulk import records from a CSV payload","description":"Requires records.write. Headers become JSONB fields. An external_id/id column enables idempotent re-imports.","parameters":[],"responses":{"201":{"description":""}},"tags":["records"],"security":[{"jwt":[]}]}},"/connect/v1/records/{id}/replay":{"post":{"operationId":"RecordsController_replay","summary":"Re-dispatch a record through matching flow triggers","description":"Finds active flow_trigger_subscriptions matching (providerType, resourceType) and re-fires them with this record as the trigger payload. Useful after fixing a failed flow or when you need to backfill.","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"tags":["records"],"security":[{"jwt":[]}]}},"/byoa/{providerType}/credentials":{"post":{"operationId":"ByoaController_save","parameters":[{"name":"providerType","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SaveByoaCredentialDto"}}}},"responses":{"201":{"description":""}}},"get":{"operationId":"ByoaController_status","parameters":[{"name":"providerType","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}}},"delete":{"operationId":"ByoaController_remove","parameters":[{"name":"providerType","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}},"/connect/v1/workspaces":{"get":{"operationId":"WorkspacesController_listWorkspaces","parameters":[],"responses":{"200":{"description":""}}},"post":{"operationId":"WorkspaceProvisioningController_createWorkspace","summary":"Create a workspace (S2S, idempotent by externalId)","parameters":[],"responses":{"201":{"description":""}},"tags":["workspace-provisioning"]}},"/connect/v1/workspaces/invite/validate/{token}":{"get":{"operationId":"WorkspacesController_validateInvite","parameters":[{"name":"token","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}},"/connect/v1/workspaces/invite/accept/{token}":{"post":{"operationId":"WorkspacesController_acceptInvite","parameters":[{"name":"token","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}}}},"/connect/v1/workspaces/public/{slug}":{"get":{"operationId":"WorkspacesController_getWorkspacePublicInfo","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}},"/connect/v1/workspaces/join/request":{"post":{"operationId":"WorkspacesController_requestToJoin","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestJoinDto"}}}},"responses":{"201":{"description":""}}}},"/connect/v1/workspaces/join/link/{workspaceId}":{"post":{"operationId":"WorkspacesController_joinViaShareableLink","parameters":[{"name":"workspaceId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}}}},"/connect/v1/workspaces/{id}/invite":{"post":{"operationId":"WorkspacesController_createInvite","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateInviteDto"}}}},"responses":{"201":{"description":""}}}},"/connect/v1/workspaces/{id}/join-requests":{"get":{"operationId":"WorkspacesController_listPendingRequests","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}},"/connect/v1/workspaces/{id}/join-requests/{requestId}/approve":{"post":{"operationId":"WorkspacesController_approveJoinRequest","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"requestId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}}}},"/connect/v1/workspaces/{id}/join-requests/{requestId}/deny":{"post":{"operationId":"WorkspacesController_denyJoinRequest","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"requestId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}}}},"/connect/v1/workspaces/{id}/shareable-link":{"post":{"operationId":"WorkspacesController_generateShareableLink","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}}},"delete":{"operationId":"WorkspacesController_revokeShareableLink","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}},"/connect/v1/workspaces/{id}/approved-domain":{"put":{"operationId":"WorkspacesController_setApprovedDomain","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}},"/connect/v1/workspaces/by-external-id":{"get":{"operationId":"WorkspaceProvisioningController_getByExternalId","summary":"Lookup workspace by external ID (S2S)","parameters":[{"name":"externalId","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["workspace-provisioning"]}},"/connect/v1/workspaces/{id}":{"delete":{"operationId":"WorkspaceProvisioningController_deleteWorkspace","summary":"Delete workspace and cascade all connections (S2S)","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["workspace-provisioning"]}},"/connect/v1/marketplace":{"get":{"operationId":"MarketplaceController_search","summary":"Search marketplace apps","description":"Public endpoint. Supports search and category filter.","parameters":[{"name":"q","required":true,"in":"query","schema":{"type":"string"}},{"name":"category","required":true,"in":"query","schema":{"type":"string"}},{"name":"limit","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["marketplace"]}},"/connect/v1/marketplace/featured":{"get":{"operationId":"MarketplaceController_featured","summary":"Get featured/popular apps","parameters":[],"responses":{"200":{"description":""}},"tags":["marketplace"]}},"/connect/v1/marketplace/categories":{"get":{"operationId":"MarketplaceController_categories","summary":"Get all available categories","parameters":[],"responses":{"200":{"description":""}},"tags":["marketplace"]}},"/connect/v1/marketplace/{providerType}":{"get":{"operationId":"MarketplaceController_getByProviderType","summary":"Get app details by provider type","parameters":[{"name":"providerType","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["marketplace"]}},"/connect/v1/developers/apps":{"get":{"operationId":"DeveloperController_listApps","summary":"List developer apps for current org","parameters":[],"responses":{"200":{"description":""}},"tags":["developers"]},"post":{"operationId":"DeveloperController_createApp","summary":"Create a new developer app (API key pair)","parameters":[],"responses":{"201":{"description":""}},"tags":["developers"]}},"/connect/v1/developers/apps/{id}":{"get":{"operationId":"DeveloperController_getApp","summary":"Get developer app details","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["developers"]},"delete":{"operationId":"DeveloperController_revokeApp","summary":"Revoke a developer app","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["developers"]}},"/connect/v1/developers/apps/{id}/rotate-secret":{"post":{"operationId":"DeveloperController_rotateSecret","summary":"Rotate API secret for a developer app","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"tags":["developers"]}},"/connect/v1/developers/submissions":{"get":{"operationId":"DeveloperController_listSubmissions","summary":"List app submissions for current org","parameters":[],"responses":{"200":{"description":""}},"tags":["developers"]},"post":{"operationId":"DeveloperController_submitApp","summary":"Submit a new app/connector to the marketplace","parameters":[],"responses":{"201":{"description":""}},"tags":["developers"]}},"/connect/v1/developers/submissions/{id}":{"get":{"operationId":"DeveloperController_getSubmission","summary":"Get submission details","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["developers"]}},"/connect/v1/developers/submissions/{id}/review":{"post":{"operationId":"DeveloperController_reviewSubmission","summary":"Review an app submission (approve/reject)","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"tags":["developers"]}}},"info":{"title":"Calimatic Connect API","description":"Integration infrastructure API — providers, connections, execution, unified CRM, webhooks, actions, and more.","version":"3.0.0","contact":{}},"tags":[{"name":"connect","description":"Provider management"},{"name":"execution","description":"Connector execution API"},{"name":"unified","description":"Unified data models (CRM, HR, etc.)"},{"name":"marketplace","description":"App marketplace"},{"name":"approvals","description":"Admin approval flows"},{"name":"developers","description":"Developer portal & API keys"},{"name":"providers","description":"Provider connections"},{"name":"webhooks","description":"Webhook receive and forwarding"},{"name":"billing","description":"Billing, plans, usage"},{"name":"health","description":"Service health"}],"servers":[],"components":{"securitySchemes":{"bearer":{"scheme":"bearer","bearerFormat":"JWT","type":"http"},"api-key":{"type":"apiKey","in":"header","name":"x-api-key"}},"schemas":{"CreateFlowDto":{"type":"object","properties":{}},"UpdateFlowDto":{"type":"object","properties":{}},"SaveByoaCredentialDto":{"type":"object","properties":{}},"RequestJoinDto":{"type":"object","properties":{}},"CreateInviteDto":{"type":"object","properties":{}}}}}