{"openapi":"3.1.0","info":{"title":"Italic API","version":"2.0.0","description":"Recordings, devices, chat, tasks, workflows, connectors and notifications. Text syncs to Italic; audio stays on the client."},"servers":[{"url":"https://app.italic.com/api/v2"}],"tags":[{"name":"Recordings"},{"name":"Devices"},{"name":"Chat"},{"name":"Tasks"},{"name":"Workflows"},{"name":"Connectors"},{"name":"API keys"},{"name":"Webhooks"},{"name":"Events"}],"paths":{"/recordings":{"get":{"operationId":"listRecordings","summary":"List recordings","tags":["Recordings"],"parameters":[{"name":"type","in":"query","schema":{"type":"string","enum":["clip","memo"]}},{"name":"q","in":"query","schema":{"type":"string","minLength":0,"maxLength":200}},{"name":"deviceId","in":"query","schema":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"}},{"name":"status","in":"query","schema":{"type":"string","enum":["pending","transcribing","ready","no_speech","failed"]}},{"name":"from","in":"query","schema":{"type":"integer","minimum":0,"maximum":9007199254740991}},{"name":"to","in":"query","schema":{"type":"integer","minimum":0,"maximum":9007199254740991}},{"name":"cursor","in":"query","schema":{"type":"string","minLength":0,"maxLength":1024}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}}],"description":"Required permission: recordings:read.","security":[{"apiKey":[]}],"responses":{"200":{"description":"Success. Writes without read permission return an ID and revision only.","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Request identifier for troubleshooting."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecordingList"}}}},"default":{"description":"Request failed. Errors include a stable code and a readable message.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"createRecording","summary":"Create a recording","tags":["Recordings"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":128},"description":"Reuse the same key and body when retrying a create request."}],"description":"Required permission: recordings:create.","security":[{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRecording"}}}},"responses":{"200":{"description":"Success. Writes without read permission return an ID and revision only.","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Request identifier for troubleshooting."},"ETag":{"schema":{"type":"string"},"description":"Use as If-Match for the next edit."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecordingResult"}}}},"default":{"description":"Request failed. Errors include a stable code and a readable message.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/recordings/{id}":{"get":{"operationId":"getRecording","summary":"Get a recording","tags":["Recordings"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"}}],"description":"Required permission: recordings:read.","security":[{"apiKey":[]}],"responses":{"200":{"description":"Success. Writes without read permission return an ID and revision only.","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Request identifier for troubleshooting."},"ETag":{"schema":{"type":"string"},"description":"Use as If-Match for the next edit."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecordingResult"}}}},"default":{"description":"Request failed. Errors include a stable code and a readable message.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"operationId":"editRecording","summary":"Edit a recording","tags":["Recordings"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"}},{"name":"If-Match","in":"header","required":true,"schema":{"type":"string","minLength":0,"maxLength":100},"description":"ETag from the last GET response. Prevents overwriting a newer edit."}],"description":"Required permission: recordings:write.","security":[{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EditRecording"}}}},"responses":{"200":{"description":"Success. Writes without read permission return an ID and revision only.","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Request identifier for troubleshooting."},"ETag":{"schema":{"type":"string"},"description":"Use as If-Match for the next edit."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecordingResult"}}}},"default":{"description":"Request failed. Errors include a stable code and a readable message.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"operationId":"deleteRecording","summary":"Delete a recording","tags":["Recordings"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"}},{"name":"If-Match","in":"header","required":true,"schema":{"type":"string","minLength":0,"maxLength":100},"description":"ETag from the last GET response. Prevents overwriting a newer edit."}],"description":"Required permission: recordings:delete.","security":[{"apiKey":[]}],"responses":{"200":{"description":"Success. Writes without read permission return an ID and revision only.","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Request identifier for troubleshooting."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deleted"}}}},"default":{"description":"Request failed. Errors include a stable code and a readable message.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/devices":{"get":{"operationId":"listDevices","summary":"List devices","tags":["Devices"],"parameters":[],"description":"Required permission: settings:read.","security":[{"apiKey":[]}],"responses":{"200":{"description":"Success. Writes without read permission return an ID and revision only.","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Request identifier for troubleshooting."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceList"}}}},"default":{"description":"Request failed. Errors include a stable code and a readable message.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"createDevice","summary":"Create a custom device","tags":["Devices"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","minLength":1,"maxLength":128},"description":"Reuse the same key and body when retrying; the retry returns the first result with `replayed: true`. Keys are kept for 24 hours."}],"description":"Required permission: settings:write. Adds a device of your own, such as a recorder or a script, to the account's devices. Italic does not connect to it: send what it records to POST /recordings with its `id` as `deviceId`. The apps list it under Custom in Devices, where the person can rename or remove it. An account can have 1,000 devices, removed ones included.","security":[{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDevice"}}}},"responses":{"200":{"description":"Success. Writes without read permission return an ID and revision only.","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Request identifier for troubleshooting."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceResult"}}}},"default":{"description":"Request failed. Errors include a stable code and a readable message.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/devices/{id}/settings":{"get":{"operationId":"getDeviceSettings","summary":"Get device settings","tags":["Devices"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"}}],"description":"Required permission: settings:read.","security":[{"apiKey":[]}],"responses":{"200":{"description":"Success. Writes without read permission return an ID and revision only.","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Request identifier for troubleshooting."},"ETag":{"schema":{"type":"string"},"description":"Use as If-Match for the next edit."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SettingsResult"}}}},"default":{"description":"Request failed. Errors include a stable code and a readable message.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"operationId":"editDeviceSettings","summary":"Update device settings","tags":["Devices"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"}},{"name":"If-Match","in":"header","required":true,"schema":{"type":"string","minLength":0,"maxLength":100},"description":"ETag from the last GET response. Prevents overwriting a newer edit."}],"description":"Required permission: settings:write.","security":[{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceSettings"}}}},"responses":{"200":{"description":"Success. Writes without read permission return an ID and revision only.","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Request identifier for troubleshooting."},"ETag":{"schema":{"type":"string"},"description":"Use as If-Match for the next edit."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SettingsResult"}}}},"default":{"description":"Request failed. Errors include a stable code and a readable message.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/runs":{"post":{"operationId":"sendMessage","summary":"Send a chat message","tags":["Chat"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":128},"description":"Reuse the same key and body when retrying; the retry returns the first result with `replayed: true`. Keys are kept for 24 hours."}],"description":"Required permission: agent:chat. Asks Italic, as in the apps' chat, and answers when its reply is ready (up to a few minutes). Italic searches and reads the account's recordings and connected apps, and drafts emails, events and other writes; drafts the account's permissions say to ask about wait in Tasks. Ten messages a minute per key.","security":[{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendMessage"}}}},"responses":{"200":{"description":"Success. Writes without read permission return an ID and revision only.","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Request identifier for troubleshooting."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunResult"}}}},"default":{"description":"Request failed. Errors include a stable code and a readable message.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/runs/{id}":{"get":{"operationId":"getRun","summary":"Get a run","tags":["Chat"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"}}],"description":"Required permission: agent:chat. A chat run, or a workflow run from Tasks, as it is now.","security":[{"apiKey":[]}],"responses":{"200":{"description":"Success. Writes without read permission return an ID and revision only.","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Request identifier for troubleshooting."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunResult"}}}},"default":{"description":"Request failed. Errors include a stable code and a readable message.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/runs/{id}/cancel":{"post":{"operationId":"cancelRun","summary":"Stop a run","tags":["Chat"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"}}],"description":"Required permission: agent:chat. Discards the run's waiting drafts and ends it.","security":[{"apiKey":[]}],"responses":{"200":{"description":"Success. Writes without read permission return an ID and revision only.","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Request identifier for troubleshooting."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunResult"}}}},"default":{"description":"Request failed. Errors include a stable code and a readable message.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/tasks":{"get":{"operationId":"listTasks","summary":"List tasks","tags":["Tasks"],"parameters":[],"description":"Required permission: agent:chat or actions:review. What waits in Tasks in the apps, newest first: runs with drafts to approve or discard, and workflow questions. With agent:chat, chat runs; with actions:review, workflow runs.","security":[{"apiKey":[]}],"responses":{"200":{"description":"Success. Writes without read permission return an ID and revision only.","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Request identifier for troubleshooting."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunList"}}}},"default":{"description":"Request failed. Errors include a stable code and a readable message.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/runs/{id}/actions/{actionId}/decision":{"post":{"operationId":"decideAction","summary":"Approve or discard a draft","tags":["Tasks"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"}},{"name":"actionId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"}}],"description":"Required permission: agent:chat or actions:review. A chat run's draft needs agent:chat; a workflow run's needs actions:review. Approving runs the action (it sends the email, adds the event), checked again as the apps check it: the app must still be on and the fields valid. Approving names the draft's tool. The returned action status says whether it worked.","security":[{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Decision"}}}},"responses":{"200":{"description":"Success. Writes without read permission return an ID and revision only.","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Request identifier for troubleshooting."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunResult"}}}},"default":{"description":"Request failed. Errors include a stable code and a readable message.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/runs/{id}/questions/{questionId}/answer":{"post":{"operationId":"answerQuestion","summary":"Answer a question","tags":["Tasks"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"}},{"name":"questionId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"}}],"description":"Required permission: agent:chat. Answers a workflow run's question with one of `choice`, `text` or `dismiss`; the rest of its workflow then runs.","security":[{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Answer"}}}},"responses":{"200":{"description":"Success. Writes without read permission return an ID and revision only.","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Request identifier for troubleshooting."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunResult"}}}},"default":{"description":"Request failed. Errors include a stable code and a readable message.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/workflows":{"get":{"operationId":"listWorkflows","summary":"List workflows","tags":["Workflows"],"parameters":[],"description":"Required permission: workflows:read.","security":[{"apiKey":[]}],"responses":{"200":{"description":"Success. Writes without read permission return an ID and revision only.","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Request identifier for troubleshooting."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowList"}}}},"default":{"description":"Request failed. Errors include a stable code and a readable message.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"createWorkflow","summary":"Create a workflow","tags":["Workflows"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":128},"description":"Reuse the same key and body when retrying; the retry returns the first result with `replayed: true`. Keys are kept for 24 hours."}],"description":"Required permission: workflows:manage. A Send webhook action with a new `url` also needs webhooks:manage; its signing secret is returned once, in `secrets`. An account can have 20 workflows.","security":[{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowInput"}}}},"responses":{"200":{"description":"Success. Writes without read permission return an ID and revision only.","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Request identifier for troubleshooting."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowResult"}}}},"default":{"description":"Request failed. Errors include a stable code and a readable message.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/workflows/{id}":{"get":{"operationId":"getWorkflow","summary":"Get a workflow","tags":["Workflows"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"}}],"description":"Required permission: workflows:read.","security":[{"apiKey":[]}],"responses":{"200":{"description":"Success. Writes without read permission return an ID and revision only.","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Request identifier for troubleshooting."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowResult"}}}},"default":{"description":"Request failed. Errors include a stable code and a readable message.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"put":{"operationId":"replaceWorkflow","summary":"Replace a workflow","tags":["Workflows"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"}}],"description":"Required permission: workflows:manage. Saves the whole workflow, as the builders do. An action sent without `condition`, or a Send email action without `from`, keeps its saved one. A new webhook `url` needs webhooks:manage.","security":[{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowInput"}}}},"responses":{"200":{"description":"Success. Writes without read permission return an ID and revision only.","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Request identifier for troubleshooting."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowResult"}}}},"default":{"description":"Request failed. Errors include a stable code and a readable message.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"operationId":"setWorkflowEnabled","summary":"Turn a workflow on or off","tags":["Workflows"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"}}],"description":"Required permission: workflows:write.","security":[{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowEnabled"}}}},"responses":{"200":{"description":"Success. Writes without read permission return an ID and revision only.","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Request identifier for troubleshooting."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowResult"}}}},"default":{"description":"Request failed. Errors include a stable code and a readable message.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"operationId":"deleteWorkflow","summary":"Delete a workflow","tags":["Workflows"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"}}],"description":"Required permission: workflows:manage. Webhooks no other workflow sends to stop.","security":[{"apiKey":[]}],"responses":{"200":{"description":"Success. Writes without read permission return an ID and revision only.","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Request identifier for troubleshooting."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deleted"}}}},"default":{"description":"Request failed. Errors include a stable code and a readable message.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/connectors":{"get":{"operationId":"listConnectors","summary":"List connectors","tags":["Connectors"],"parameters":[],"description":"Required permission: workflows:read or connectors:manage. Connected apps and accounts, and each app's permission. Connecting an account is a sign-in with the provider, in the Italic apps.","security":[{"apiKey":[]}],"responses":{"200":{"description":"Success. Writes without read permission return an ID and revision only.","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Request identifier for troubleshooting."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectorList"}}}},"default":{"description":"Request failed. Errors include a stable code and a readable message.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/connectors/permissions/{tool}":{"put":{"operationId":"setPermission","summary":"Set a permission","tags":["Connectors"],"parameters":[{"name":"tool","in":"path","required":true,"schema":{"type":"string","enum":["send_email","create_event","create_reminder","create_notion_page","send_slack_message","save_to_drive"]}}],"description":"Required permission: connectors:manage. Whether Italic asks first before it acts in an app, in chat. Workflows set Ask or Run automatically on each action; `off` turns the app off for both.","security":[{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetPermission"}}}},"responses":{"200":{"description":"Success. Writes without read permission return an ID and revision only.","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Request identifier for troubleshooting."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PermissionResult"}}}},"default":{"description":"Request failed. Errors include a stable code and a readable message.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/connectors/permissions/{tool}/accounts/{accountId}":{"put":{"operationId":"setAccountPermission","summary":"Set an account permission","tags":["Connectors"],"parameters":[{"name":"tool","in":"path","required":true,"schema":{"type":"string","enum":["send_email","create_event","create_reminder","create_notion_page","send_slack_message","save_to_drive"]}},{"name":"accountId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"}}],"description":"Required permission: connectors:manage. One account's own permission for send_email, create_event or save_to_drive.","security":[{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetAccountPermission"}}}},"responses":{"200":{"description":"Success. Writes without read permission return an ID and revision only.","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Request identifier for troubleshooting."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PermissionResult"}}}},"default":{"description":"Request failed. Errors include a stable code and a readable message.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/connectors/accounts/{id}":{"delete":{"operationId":"disconnectAccount","summary":"Disconnect an account","tags":["Connectors"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"}}],"description":"Required permission: connectors:manage. Removes a Google, Outlook, Notion or Slack account and revokes Italic's access where the provider allows it. Linear, Granola and Ramp sign-ins and custom connectors are disconnected in the apps.","security":[{"apiKey":[]}],"responses":{"200":{"description":"Success. Writes without read permission return an ID and revision only.","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Request identifier for troubleshooting."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deleted"}}}},"default":{"description":"Request failed. Errors include a stable code and a readable message.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api-keys":{"get":{"operationId":"listKeys","summary":"List API keys","tags":["API keys"],"parameters":[],"description":"Needs a signed-in Italic account session, such as the web app. API keys cannot create or revoke keys.","security":[{"accountSession":[]}],"responses":{"200":{"description":"Success. Writes without read permission return an ID and revision only.","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Request identifier for troubleshooting."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeyList"}}}},"default":{"description":"Request failed. Errors include a stable code and a readable message.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"createKey","summary":"Create an API key","tags":["API keys"],"parameters":[],"description":"Needs a signed-in Italic account session, such as the web app. API keys cannot create or revoke keys.","security":[{"accountSession":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateKey"}}}},"responses":{"200":{"description":"Success. Writes without read permission return an ID and revision only.","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Request identifier for troubleshooting."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeyResult"}}}},"default":{"description":"Request failed. Errors include a stable code and a readable message.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api-keys/{id}":{"delete":{"operationId":"deleteKey","summary":"Revoke an API key","tags":["API keys"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"}}],"description":"Needs a signed-in Italic account session, such as the web app. API keys cannot create or revoke keys.","security":[{"accountSession":[]}],"responses":{"200":{"description":"Success. Writes without read permission return an ID and revision only.","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Request identifier for troubleshooting."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deleted"}}}},"default":{"description":"Request failed. Errors include a stable code and a readable message.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/webhooks":{"get":{"operationId":"listWebhooks","summary":"List webhooks","tags":["Webhooks"],"parameters":[],"description":"Required permission: webhooks:manage.","security":[{"apiKey":[]}],"responses":{"200":{"description":"Success. Writes without read permission return an ID and revision only.","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Request identifier for troubleshooting."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookList"}}}},"default":{"description":"Request failed. Errors include a stable code and a readable message.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"createWebhook","summary":"Create a webhook","tags":["Webhooks"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","minLength":1,"maxLength":128},"description":"Reuse the same key and body when retrying; the retry returns the first result with `replayed: true`. Keys are kept for 24 hours."}],"description":"Required permission: webhooks:manage. Also needs events:read: the webhook delivers what the event feed does. Only public HTTPS URLs. The signing secret is returned once. An account can have ten active webhooks, counting the ones its workflows send to.","security":[{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWebhook"}}}},"responses":{"200":{"description":"Success. Writes without read permission return an ID and revision only.","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Request identifier for troubleshooting."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookResult"}}}},"default":{"description":"Request failed. Errors include a stable code and a readable message.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/webhooks/{id}":{"delete":{"operationId":"deleteWebhook","summary":"Delete a webhook","tags":["Webhooks"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"}}],"description":"Required permission: webhooks:manage.","security":[{"apiKey":[]}],"responses":{"200":{"description":"Success. Writes without read permission return an ID and revision only.","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Request identifier for troubleshooting."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deleted"}}}},"default":{"description":"Request failed. Errors include a stable code and a readable message.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/events":{"get":{"operationId":"listEvents","summary":"List events","tags":["Events"],"parameters":[{"name":"cursor","in":"query","schema":{"type":"string","minLength":0,"maxLength":32},"description":"Continue from nextCursor returned by the previous request. Omit to start at the beginning."},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}}],"description":"Required permission: events:read.","security":[{"apiKey":[]}],"responses":{"200":{"description":"Success. Writes without read permission return an ID and revision only.","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Request identifier for troubleshooting."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventList"}}}},"default":{"description":"Request failed. Errors include a stable code and a readable message.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"securitySchemes":{"apiKey":{"type":"http","scheme":"bearer","description":"An API key from Settings → Developers → API keys."},"accountSession":{"type":"http","scheme":"bearer","description":"A signed-in Italic account session. An API key cannot create or revoke keys."}},"schemas":{"CreateRecording":{"type":"object","properties":{"type":{"type":"string","enum":["clip","memo"]},"title":{"type":"string","minLength":0,"maxLength":200},"transcript":{"type":"string","minLength":0,"maxLength":1000000},"summary":{"type":"string","minLength":0,"maxLength":1000000},"recordedAt":{"type":"integer","minimum":0,"maximum":9007199254740991},"externalId":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"},"audio":{"type":"array","items":{"type":"object","properties":{"clientId":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"},"fileId":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"}},"required":["clientId","fileId"],"additionalProperties":false},"maxItems":20},"deviceId":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$","description":"A custom device of the account (POST /devices) that made the recording. The apps then show its name on the recording, as they do for a device Italic connects to. Omit it for a recording that came from no device."}},"required":["type"],"additionalProperties":false},"CreateDevice":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":80,"description":"What the apps call the device, such as Kitchen recorder. The person can rename it in the apps."}},"required":["name"],"additionalProperties":false},"EditRecording":{"type":"object","properties":{"title":{"type":"string","minLength":0,"maxLength":200},"transcript":{"type":"string","minLength":0,"maxLength":1000000},"summary":{"type":"string","minLength":0,"maxLength":1000000},"pinned":{"type":"boolean"}},"required":[],"additionalProperties":false},"DeviceSettings":{"type":"object","properties":{"inputs":{"type":"object","properties":{"hold":{"type":"string","enum":["clip","memo"]},"doubleTap":{"type":"string","enum":["clip","memo"]},"tripleTap":{"type":"string","enum":["clip","memo"]},"recordButton":{"type":"string","enum":["clip","memo"]},"pushToTalk":{"type":"string","enum":["clip","memo"]},"appRecord":{"type":"string","enum":["clip","memo"]}},"required":[],"additionalProperties":false}},"required":["inputs"],"additionalProperties":false},"CreateKey":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":80},"scopes":{"type":"array","items":{"type":"string","enum":["recordings:create","recordings:read","recordings:write","recordings:delete","events:read","settings:read","settings:write","workflows:read","workflows:write","actions:review","agent:chat","workflows:manage","connectors:manage","webhooks:manage"]},"minItems":1,"maxItems":14},"expiresInDays":{"type":"integer","minimum":1,"maximum":365}},"required":["name","scopes"],"additionalProperties":false},"CreateWebhook":{"type":"object","properties":{"url":{"type":"string","minLength":1,"maxLength":2048},"events":{"type":"array","minItems":1,"maxItems":3,"items":{"type":"string","enum":["recording.created","recording.updated","recording.deleted"]}}},"required":["url","events"],"additionalProperties":false},"SendMessage":{"type":"object","properties":{"message":{"type":"string","minLength":1,"maxLength":4000,"description":"What you ask Italic."},"history":{"type":"array","maxItems":31,"items":{"type":"object","properties":{"role":{"type":"string","enum":["user","assistant"]},"content":{"type":"string","minLength":1,"maxLength":4000}},"required":["role","content"],"additionalProperties":false},"description":"Earlier turns of this conversation, oldest first, so Italic can follow up. Italic keeps no conversation for API calls."},"timeZone":{"type":"string","minLength":1,"maxLength":64,"description":"IANA time zone for dates in the reply and drafts, such as America/New_York. Defaults to the account's."}},"required":["message"],"additionalProperties":false},"Decision":{"type":"object","properties":{"decision":{"type":"string","enum":["approve","reject"]},"tool":{"type":"string","minLength":1,"maxLength":64,"description":"The draft's `tool`, as you showed it to the person. Required to approve."},"args":{"type":"object","description":"Edited fields of an email, event or reminder draft, replacing its `args`. Omit to approve it as drafted."}},"required":["decision"],"additionalProperties":false},"Answer":{"type":"object","properties":{"choice":{"type":"integer","minimum":0,"maximum":50,"description":"Index of one of the question's choices."},"text":{"type":"string","minLength":1,"maxLength":2000,"description":"A typed answer. A recipient question needs an email address in it."},"dismiss":{"type":"boolean","description":"true skips the question; the workflow ends there."}},"required":[],"additionalProperties":false},"WorkflowInput":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":60},"enabled":{"type":"boolean","description":"Defaults to true."},"trigger":{"type":"object","properties":{"type":{"type":"string","enum":["recording"]},"phrases":{"type":"array","items":{"type":"string","minLength":1,"maxLength":100},"maxItems":12,"description":"Words that start the workflow. Empty: any words, so input or kind must narrow it."},"match":{"type":"string","enum":["anywhere","start"],"description":"`start`: the transcript must begin with a phrase. `anywhere`: a phrase anywhere in it."},"input":{"anyOf":[{"type":"string","enum":["hold","doubleTap","tripleTap","recordButton","pushToTalk","appRecord"]},{"type":"null"}],"description":"Only recordings from this device input. Null or omitted: any input."},"kind":{"anyOf":[{"type":"string","enum":["clip","memo"]},{"type":"null"}],"description":"Only Clips or only Memos. Null or omitted: both."}},"required":["type"],"additionalProperties":false,"description":"Which new recordings start the workflow. Every condition given must match."},"actions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-z][a-z0-9]{0,15}$","description":"Unique within the workflow; later actions use it in `{{<id>.<output>}}` variables."},"type":{"type":"string","enum":["ai","agent","send_email","create_event","create_reminder","send_slack_message","send_webhook","create_notion_page","append_to_notion_page","save_to_drive","create_linear_issue","comment_on_linear_issue","update_linear_issue","run_connector_tool"]},"approval":{"type":"string","enum":["ask","auto"],"description":"`ask`: the action waits in Tasks. `auto`: it runs. Write with AI (`ai`) has none."}},"required":["id","type"],"description":"One step, with the fields of its type, exactly as the workflow builders in the apps save it: `ai` (instructions, format), `agent` (instructions, apps), `send_email` (to, cc, subject, body, from), `create_event` (title, start, end, location, notes), `create_reminder` (title, notes, due, list), `send_webhook` (url for a new webhook, or webhookId for one the account's workflows already send to; message), `send_slack_message`, `create_notion_page`, `append_to_notion_page`, `save_to_drive`, the Linear actions and `run_connector_tool`. Text fields are templates with `{{recording.transcript}}`-style variables. GET /workflows returns saved actions in this shape; the server checks every field as the builders do."},"minItems":1,"maxItems":8}},"required":["name","trigger","actions"],"additionalProperties":false},"WorkflowEnabled":{"type":"object","properties":{"enabled":{"type":"boolean"}},"required":["enabled"],"additionalProperties":false},"SetPermission":{"type":"object","properties":{"mode":{"type":"string","enum":["ask","allow","off"],"description":"`ask`: drafts wait for approval. `allow`: Italic acts without asking. `off`: the app is not used."}},"required":["mode"],"additionalProperties":false},"SetAccountPermission":{"type":"object","properties":{"mode":{"type":"string","enum":["ask","allow","off","default"],"description":"As for the app's permission; `default` uses the app's."}},"required":["mode"],"additionalProperties":false},"Recording":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"},"type":{"type":"string","enum":["clip","memo"]},"title":{"type":"string","minLength":0,"maxLength":200},"transcript":{"type":"string","minLength":0,"maxLength":1000000},"summary":{"type":"string","minLength":0,"maxLength":1000000},"recordedAt":{"type":"integer","minimum":0,"maximum":9007199254740991},"updatedAt":{"type":"integer","minimum":0,"maximum":9007199254740991},"revision":{"type":"integer","minimum":0,"maximum":9007199254740991},"status":{"type":"string","enum":["pending","transcribing","ready","no_speech","failed"]},"pinned":{"type":"boolean"},"audio":{"type":"array","items":{"type":"object","properties":{"clientId":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"},"fileId":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"}},"required":["clientId","fileId"],"additionalProperties":false}},"deviceId":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"},"externalId":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"}},"required":["id","type","title","transcript","summary","recordedAt","updatedAt","revision","status","pinned","audio"]},"RecordingResult":{"type":"object","properties":{"recording":{"anyOf":[{"$ref":"#/components/schemas/Recording"},{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"},"revision":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["id","revision"],"additionalProperties":false}]},"replayed":{"type":"boolean"}},"required":["recording"]},"RecordingList":{"type":"object","properties":{"recordings":{"type":"array","items":{"$ref":"#/components/schemas/Recording"}},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["recordings","nextCursor"]},"Device":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"},"name":{"type":"string","minLength":0,"maxLength":80},"model":{"type":"string","minLength":0,"maxLength":80,"description":"The device type: `ring`, `glyph`, `dex` or `custom`."}},"required":["id","name","model"],"additionalProperties":false},"DeviceList":{"type":"object","properties":{"devices":{"type":"array","items":{"$ref":"#/components/schemas/Device"}}},"required":["devices"]},"DeviceResult":{"type":"object","properties":{"device":{"$ref":"#/components/schemas/Device"},"replayed":{"type":"boolean"}},"required":["device"]},"SettingsResult":{"type":"object","properties":{"settings":{"$ref":"#/components/schemas/DeviceSettings"}},"required":["settings"]},"RunAction":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"},"tool":{"type":"string","description":"What the draft does: send_email, create_event, create_reminder, trash_email, send_webhook, create_notion_page, send_slack_message, save_to_drive, mcp_call and others."},"status":{"type":"string","enum":["proposed","approved","executing","succeeded","failed","rejected","uncertain"],"description":"`proposed`: waiting for approval. `approved`: an iPhone adds it (reminders). `uncertain`: it may or may not have happened."},"executor":{"type":"string","enum":["cloud","device"]},"args":{"type":"object","description":"The draft's fields, as the apps' card shows them."},"result":{"type":"object"},"link":{"type":"string","description":"Opens what a finished action made, such as the sent email."},"workflowId":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"}},"required":["id","tool","status","executor","args"]},"Question":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"},"prompt":{"type":"string"},"about":{"type":"string"},"kind":{"type":"string","enum":["recipient","account","text"]},"choices":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"detail":{"type":"string"}},"required":["label"]}}},"required":["id","prompt","kind","choices"]},"Run":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"},"source":{"type":"string","enum":["chat","recording"],"description":"`recording`: a workflow run a recording started."},"recordingId":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"},"status":{"type":"string","enum":["running","awaiting_approval","completed","failed","cancelled"]},"reply":{"type":"string","description":"Italic's answer, in Markdown."},"error":{"type":"string"},"prompt":{"type":"string","description":"Chat runs: what was asked."},"workflows":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"},"name":{"type":"string"}},"required":["id","name"]}},"actions":{"type":"array","items":{"$ref":"#/components/schemas/RunAction"}},"questions":{"type":"array","items":{"$ref":"#/components/schemas/Question"}},"createdAt":{"type":"integer","minimum":0,"maximum":9007199254740991},"updatedAt":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["id","source","status","actions","questions","createdAt","updatedAt"]},"RunResult":{"type":"object","properties":{"run":{"$ref":"#/components/schemas/Run"},"replayed":{"type":"boolean"}},"required":["run"]},"RunList":{"type":"object","properties":{"runs":{"type":"array","items":{"$ref":"#/components/schemas/Run"}}},"required":["runs"]},"Workflow":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"},"name":{"type":"string","minLength":0,"maxLength":60},"enabled":{"type":"boolean"},"trigger":{"type":"object","properties":{"type":{"type":"string","enum":["recording"]},"phrases":{"type":"array","items":{"type":"string"}},"match":{"type":"string","enum":["anywhere","start"]},"input":{"anyOf":[{"type":"string","enum":["hold","doubleTap","tripleTap","recordButton","pushToTalk","appRecord"]},{"type":"null"}]},"kind":{"anyOf":[{"type":"string","enum":["clip","memo"]},{"type":"null"}]}},"required":["type","phrases","match","input","kind"]},"actions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-z][a-z0-9]{0,15}$","description":"Unique within the workflow; later actions use it in `{{<id>.<output>}}` variables."},"type":{"type":"string","enum":["ai","agent","send_email","create_event","create_reminder","send_slack_message","send_webhook","create_notion_page","append_to_notion_page","save_to_drive","create_linear_issue","comment_on_linear_issue","update_linear_issue","run_connector_tool"]},"approval":{"type":"string","enum":["ask","auto"],"description":"`ask`: the action waits in Tasks. `auto`: it runs. Write with AI (`ai`) has none."}},"required":["id","type"],"description":"One step, with the fields of its type, exactly as the workflow builders in the apps save it: `ai` (instructions, format), `agent` (instructions, apps), `send_email` (to, cc, subject, body, from), `create_event` (title, start, end, location, notes), `create_reminder` (title, notes, due, list), `send_webhook` (url for a new webhook, or webhookId for one the account's workflows already send to; message), `send_slack_message`, `create_notion_page`, `append_to_notion_page`, `save_to_drive`, the Linear actions and `run_connector_tool`. Text fields are templates with `{{recording.transcript}}`-style variables. GET /workflows returns saved actions in this shape; the server checks every field as the builders do."}},"createdAt":{"type":"integer","minimum":0,"maximum":9007199254740991},"updatedAt":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["id","name","enabled","trigger","actions","createdAt","updatedAt"]},"WorkflowList":{"type":"object","properties":{"workflows":{"type":"array","items":{"$ref":"#/components/schemas/Workflow"}},"webhooks":{"type":"array","description":"Where the workflows' Send webhook actions send, by webhookId.","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"},"url":{"type":"string"}},"required":["id","url"]}}},"required":["workflows","webhooks"]},"WorkflowResult":{"type":"object","properties":{"workflow":{"$ref":"#/components/schemas/Workflow"},"secrets":{"type":"array","description":"Signing secrets of webhooks this request added, shown once.","items":{"type":"object","properties":{"actionIndex":{"type":"integer"},"url":{"type":"string"},"secret":{"type":"string"}},"required":["actionIndex","url","secret"]}},"replayed":{"type":"boolean"}},"required":["workflow"]},"Permission":{"type":"object","properties":{"tool":{"type":"string","enum":["send_email","create_event","create_reminder","create_notion_page","send_slack_message","save_to_drive"]},"label":{"type":"string"},"mode":{"type":"string","enum":["ask","allow","off"]},"accounts":{"type":"object","additionalProperties":{"type":"string","enum":["ask","allow","off"]},"description":"Accounts with their own permission, by account ID."}},"required":["tool","label","mode","accounts"]},"PermissionResult":{"type":"object","properties":{"permission":{"$ref":"#/components/schemas/Permission"}},"required":["permission"]},"Connector":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"accounts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"},"label":{"type":"string"},"email":{"type":"string"},"status":{"type":"string"}},"required":["id","label"]}}},"required":["id","name","accounts"]},"ConnectorList":{"type":"object","properties":{"connectors":{"type":"array","items":{"$ref":"#/components/schemas/Connector"}},"permissions":{"type":"array","items":{"$ref":"#/components/schemas/Permission"}}},"required":["connectors","permissions"]},"Key":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"},"name":{"type":"string","minLength":0,"maxLength":80},"scopes":{"type":"array","items":{"type":"string","enum":["recordings:create","recordings:read","recordings:write","recordings:delete","events:read","settings:read","settings:write","workflows:read","workflows:write","actions:review","agent:chat","workflows:manage","connectors:manage","webhooks:manage"]}},"createdAt":{"type":"integer","minimum":0,"maximum":9007199254740991},"expiresAt":{"type":"integer","minimum":0,"maximum":9007199254740991},"revokedAt":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"lastUsedAt":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]}},"required":[],"additionalProperties":false},"KeyList":{"type":"object","properties":{"keys":{"type":"array","items":{"$ref":"#/components/schemas/Key"}}},"required":["keys"]},"KeyResult":{"type":"object","properties":{"key":{"$ref":"#/components/schemas/Key"},"secret":{"type":"string"}},"required":["key","secret"]},"Webhook":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"},"url":{"type":"string","minLength":0,"maxLength":2048},"events":{"type":"array","items":{"type":"string"}},"createdAt":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":[],"additionalProperties":false},"WebhookList":{"type":"object","properties":{"webhooks":{"type":"array","items":{"$ref":"#/components/schemas/Webhook"}}},"required":["webhooks"]},"WebhookResult":{"type":"object","properties":{"webhook":{"$ref":"#/components/schemas/Webhook"},"secret":{"type":"string"},"replayed":{"type":"boolean"}},"required":["webhook","secret"]},"Event":{"type":"object","properties":{"id":{"type":"integer","minimum":0,"maximum":9007199254740991},"type":{"type":"string","enum":["recording.created","recording.updated","recording.deleted"]},"recordingId":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"},"revision":{"type":"integer","minimum":0,"maximum":9007199254740991},"createdAt":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["id","type","recordingId","revision","createdAt"],"additionalProperties":false},"EventList":{"type":"object","properties":{"events":{"type":"array","items":{"$ref":"#/components/schemas/Event"}},"nextCursor":{"type":"string"}},"required":["events","nextCursor"]},"Deleted":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"},"deleted":{"type":"boolean"}},"required":["id","deleted"],"additionalProperties":false},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","minLength":0,"maxLength":100},"message":{"type":"string","minLength":0,"maxLength":1000}},"required":["code","message"],"additionalProperties":false}},"required":["error"]}}}}